From a8a5897a986ae5de561e85521c68e8718317fc2b Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Thu, 20 Jan 2022 21:08:44 +0530 Subject: [PATCH 001/150] Cherry pick ldpc-decoder-crc-check commit: 3cfefe3c6f7b2854a14d94fb7072ece2ff4c5c0a --- openair1/PHY/CODING/TESTBENCH/ldpctest.c | 9 +- .../PHY/CODING/nrLDPC_decoder/nrLDPC_bnProc.h | 13 +- .../PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h | 20 +- .../CODING/nrLDPC_decoder/nrLDPC_decoder.c | 201 ++++-------------- .../PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h | 32 +-- .../nrLDPC_tools/nrLDPC_debug.h | 14 +- openair1/PHY/CODING/nrLDPC_defs.h | 2 +- openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c | 73 +++++-- .../PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c | 9 - .../PHY/NR_UE_TRANSPORT/nr_transport_ue.h | 2 - openair1/PHY/defs_gNB.h | 2 - 11 files changed, 121 insertions(+), 256 deletions(-) diff --git a/openair1/PHY/CODING/TESTBENCH/ldpctest.c b/openair1/PHY/CODING/TESTBENCH/ldpctest.c index 371deba3f2..3ae15293cb 100644 --- a/openair1/PHY/CODING/TESTBENCH/ldpctest.c +++ b/openair1/PHY/CODING/TESTBENCH/ldpctest.c @@ -139,8 +139,6 @@ int test_ldpc(short No_iteration, //double code_rate_actual_vec[8] = {0.2, 0.33333, 0.4, 0.5, 0.66667, 0.73333, 0.81481, 0.88}; t_nrLDPC_dec_params decParams; - t_nrLDPC_procBuf nrLDPC_procBuf; - t_nrLDPC_procBuf* p_nrLDPC_procBuf = &nrLDPC_procBuf; t_nrLDPC_time_stats decoder_profiler = {0}; t_nrLDPC_time_stats* p_decoder_profiler =&decoder_profiler ; @@ -194,9 +192,6 @@ int test_ldpc(short No_iteration, reset_meas(&decoder_profiler.llr2bit); //reset_meas(&decoder_profiler.total); - // Allocate LDPC decoder buffers - p_nrLDPC_procBuf = nrLDPC_init_mem(); - for (j=0;jnumBnInBnGroups; const uint32_t* lut_startAddrBnGroups = p_lut->startAddrBnGroups; const uint16_t* lut_startAddrBnGroupsLlr = p_lut->startAddrBnGroupsLlr; - int8_t* bnProcBuf = p_procBuf->bnProcBuf; - int8_t* bnProcBufRes = p_procBuf->bnProcBufRes; - int8_t* llrRes = p_procBuf->llrRes; - int8_t* llrProcBuf = p_procBuf->llrProcBuf; - __m128i* p_bnProcBuf; __m256i* p_bnProcBufRes; __m128i* p_llrProcBuf; @@ -1681,7 +1676,7 @@ static inline void nrLDPC_bnProcPc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_proc \param p_lut Pointer to decoder LUTs \param Z Lifting size */ -static inline void nrLDPC_bnProc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) +static inline void nrLDPC_bnProc(t_nrLDPC_lut* p_lut, int8_t* bnProcBuf, int8_t* bnProcBufRes, int8_t* llrRes, uint16_t Z) { // BN Processing calculating the values to send back to the CNs for next iteration // bnProcBufRes contains the sum of all edges to each BN at the start of each group @@ -1690,10 +1685,6 @@ static inline void nrLDPC_bnProc(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBu const uint32_t* lut_startAddrBnGroups = p_lut->startAddrBnGroups; const uint16_t* lut_startAddrBnGroupsLlr = p_lut->startAddrBnGroupsLlr; - int8_t* bnProcBuf = p_procBuf->bnProcBuf; - int8_t* bnProcBufRes = p_procBuf->bnProcBufRes; - int8_t* llrRes = p_procBuf->llrRes; - __m256i* p_bnProcBuf; __m256i* p_bnProcBufRes; __m256i* p_llrRes; diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h index db9d6e4119..6d82fe5f11 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_cnProc.h @@ -37,14 +37,11 @@ \param p_procBuf Pointer to processing buffers \param Z Lifting size */ -static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) +static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) { const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - int8_t* cnProcBuf = p_procBuf->cnProcBuf; - int8_t* cnProcBufRes = p_procBuf->cnProcBufRes; - __m256i* p_cnProcBuf; __m256i* p_cnProcBufRes; @@ -372,14 +369,11 @@ static inline void nrLDPC_cnProc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr \param p_lut Pointer to decoder LUTs \param Z Lifting size */ -static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) +static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) { const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - int8_t* cnProcBuf = p_procBuf->cnProcBuf; - int8_t* cnProcBufRes = p_procBuf->cnProcBufRes; - __m256i* p_cnProcBuf; __m256i* p_cnProcBufRes; @@ -871,14 +865,11 @@ static inline void nrLDPC_cnProc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_pr \param Z Lifting size \return 32-bit parity check indicator */ -static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) +static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) { const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - int8_t* cnProcBuf = p_procBuf->cnProcBuf; - int8_t* cnProcBufRes = p_procBuf->cnProcBufRes; - __m256i* p_cnProcBuf; __m256i* p_cnProcBufRes; @@ -1506,14 +1497,11 @@ static inline uint32_t nrLDPC_cnProcPc_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf \param Z Lifting size \return 32-bit parity check indicator */ -static inline uint32_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) +static inline uint32_t nrLDPC_cnProcPc_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBuf, int8_t* cnProcBufRes, uint16_t Z) { const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - int8_t* cnProcBuf = p_procBuf->cnProcBuf; - int8_t* cnProcBufRes = p_procBuf->cnProcBufRes; - __m256i* p_cnProcBuf; __m256i* p_cnProcBufRes; diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c index 166cd9a5a3..bf0f401e97 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c @@ -45,22 +45,22 @@ #include "nrLDPC_tools/nrLDPC_debug.h" #endif -static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDPC_procBuf* p_procBuf, uint32_t numLLR, t_nrLDPC_lut* p_lut, t_nrLDPC_dec_params* p_decParams, t_nrLDPC_time_stats* p_profiler); +static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, uint32_t numLLR, t_nrLDPC_lut* p_lut, t_nrLDPC_dec_params* p_decParams, t_nrLDPC_time_stats* p_profiler); +int check_crc(uint8_t* decoded_bytes, uint32_t n, uint32_t F, uint8_t crc_type); void nrLDPC_initcall(t_nrLDPC_dec_params* p_decParams, int8_t* p_llr, int8_t* p_out) { } -int32_t nrLDPC_decod(t_nrLDPC_dec_params* p_decParams, int8_t* p_llr, int8_t* p_out, t_nrLDPC_procBuf* p_procBuf, t_nrLDPC_time_stats* p_profiler) +int32_t nrLDPC_decod(t_nrLDPC_dec_params* p_decParams, int8_t* p_llr, int8_t* p_out, t_nrLDPC_time_stats* p_profiler) { uint32_t numLLR; uint32_t numIter = 0; t_nrLDPC_lut lut; t_nrLDPC_lut* p_lut = &lut; - //printf("p_procBuf->cnProcBuf = %p\n", p_procBuf->cnProcBuf); // Initialize decoder core(s) with correct LUTs numLLR = nrLDPC_init(p_decParams, p_lut); // Launch LDPC decoder core for one segment - numIter = nrLDPC_decoder_core(p_llr, p_out, p_procBuf, numLLR, p_lut, p_decParams, p_profiler); + numIter = nrLDPC_decoder_core(p_llr, p_out, numLLR, p_lut, p_decParams, p_profiler); return numIter; } @@ -74,13 +74,20 @@ int32_t nrLDPC_decod(t_nrLDPC_dec_params* p_decParams, int8_t* p_llr, int8_t* p_ \param p_decParams LDPC decoder parameters \param p_profiler LDPC profiler statistics */ -static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDPC_procBuf* p_procBuf, uint32_t numLLR, t_nrLDPC_lut* p_lut, t_nrLDPC_dec_params* p_decParams, t_nrLDPC_time_stats* p_profiler) +static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, uint32_t numLLR, t_nrLDPC_lut* p_lut, t_nrLDPC_dec_params* p_decParams, t_nrLDPC_time_stats* p_profiler) { uint16_t Z = p_decParams->Z; uint8_t BG = p_decParams->BG; uint8_t numMaxIter = p_decParams->numMaxIter; e_nrLDPC_outMode outMode = p_decParams->outMode; + int8_t cnProcBuf[NR_LDPC_SIZE_CN_PROC_BUF] __attribute__ ((aligned(32))) = {0}; + int8_t cnProcBufRes[NR_LDPC_SIZE_CN_PROC_BUF] __attribute__ ((aligned(32))) = {0}; + int8_t bnProcBuf[NR_LDPC_SIZE_BN_PROC_BUF] __attribute__ ((aligned(32))) = {0}; + int8_t bnProcBufRes[NR_LDPC_SIZE_BN_PROC_BUF] __attribute__ ((aligned(32))) = {0}; + int8_t llrRes[NR_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32))) = {0}; + int8_t llrProcBuf[NR_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32))) = {0}; + int8_t llrOut[NR_LDPC_MAX_NUM_LLR] __attribute__ ((aligned(32))) = {0}; // Minimum number of iterations is 1 // 0 iterations means hard-decision on input LLRs uint32_t i = 1; @@ -95,9 +102,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP else { // Use LLR processing buffer as temporary output buffer - p_llrOut = p_procBuf->llrProcBuf; - // Clear llrProcBuf - memset(p_llrOut,0, NR_LDPC_MAX_NUM_LLR*sizeof(int8_t)); + p_llrOut = llrOut; } @@ -105,14 +110,14 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #ifdef NR_LDPC_PROFILER_DETAIL start_meas(&p_profiler->llr2llrProcBuf); #endif - nrLDPC_llr2llrProcBuf(p_lut, p_llr, p_procBuf, Z, BG); + nrLDPC_llr2llrProcBuf(p_lut, p_llr, llrProcBuf, Z, BG); #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->llr2llrProcBuf); #endif #ifdef NR_LDPC_DEBUG_MODE nrLDPC_debug_initBuffer2File(nrLDPC_buffers_LLR_PROC); - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_PROC, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_PROC, llrProcBuf); #endif #ifdef NR_LDPC_PROFILER_DETAIL @@ -120,11 +125,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #endif if (BG == 1) { - nrLDPC_llr2CnProcBuf_BG1(p_lut, p_llr, p_procBuf, Z); + nrLDPC_llr2CnProcBuf_BG1(p_lut, p_llr, cnProcBuf, Z); } else { - nrLDPC_llr2CnProcBuf_BG2(p_lut, p_llr, p_procBuf, Z); + nrLDPC_llr2CnProcBuf_BG2(p_lut, p_llr, cnProcBuf, Z); } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->llr2CnProcBuf); @@ -132,7 +137,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #ifdef NR_LDPC_DEBUG_MODE nrLDPC_debug_initBuffer2File(nrLDPC_buffers_CN_PROC); - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, cnProcBuf); #endif // First iteration @@ -143,11 +148,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #endif if (BG == 1) { - nrLDPC_cnProc_BG1(p_lut, p_procBuf, Z); + nrLDPC_cnProc_BG1(p_lut, cnProcBuf, cnProcBufRes, Z); } else { - nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z); + nrLDPC_cnProc_BG2(p_lut, cnProcBuf, cnProcBufRes, Z); } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->cnProc); @@ -155,7 +160,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #ifdef NR_LDPC_DEBUG_MODE nrLDPC_debug_initBuffer2File(nrLDPC_buffers_CN_PROC_RES); - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC_RES, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC_RES, cnProcBufRes); #endif #ifdef NR_LDPC_PROFILER_DETAIL @@ -163,11 +168,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #endif if (BG == 1) { - nrLDPC_cn2bnProcBuf_BG1(p_lut, p_procBuf, Z); + nrLDPC_cn2bnProcBuf_BG1(p_lut, cnProcBufRes, bnProcBuf, Z); } else { - nrLDPC_cn2bnProcBuf_BG2(p_lut, p_procBuf, Z); + nrLDPC_cn2bnProcBuf_BG2(p_lut, cnProcBufRes, bnProcBuf, Z); } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->cn2bnProcBuf); @@ -175,34 +180,34 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #ifdef NR_LDPC_DEBUG_MODE nrLDPC_debug_initBuffer2File(nrLDPC_buffers_BN_PROC); - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC, bnProcBuf); #endif // BN processing #ifdef NR_LDPC_PROFILER_DETAIL start_meas(&p_profiler->bnProcPc); #endif - nrLDPC_bnProcPc(p_lut, p_procBuf, Z); + nrLDPC_bnProcPc(p_lut, bnProcBuf, bnProcBufRes, llrProcBuf, llrRes, Z); #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->bnProcPc); #endif #ifdef NR_LDPC_DEBUG_MODE nrLDPC_debug_initBuffer2File(nrLDPC_buffers_LLR_RES); - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_RES, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_RES, llrRes); #endif #ifdef NR_LDPC_PROFILER_DETAIL start_meas(&p_profiler->bnProc); #endif - nrLDPC_bnProc(p_lut, p_procBuf, Z); + nrLDPC_bnProc(p_lut, bnProcBuf, bnProcBufRes, llrRes, Z); #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->bnProc); #endif #ifdef NR_LDPC_DEBUG_MODE nrLDPC_debug_initBuffer2File(nrLDPC_buffers_BN_PROC_RES); - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC_RES, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC_RES, bnProcBufRes); #endif // BN results to CN processing buffer @@ -211,18 +216,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #endif if (BG == 1) { - nrLDPC_bn2cnProcBuf_BG1(p_lut, p_procBuf, Z); + nrLDPC_bn2cnProcBuf_BG1(p_lut, bnProcBufRes, cnProcBuf, Z); } else { - nrLDPC_bn2cnProcBuf_BG2(p_lut, p_procBuf, Z); + nrLDPC_bn2cnProcBuf_BG2(p_lut, bnProcBufRes, cnProcBuf, Z); } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->bn2cnProcBuf); #endif #ifdef NR_LDPC_DEBUG_MODE - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, cnProcBuf); #endif // Parity Check not necessary here since it will fail @@ -242,18 +247,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #endif if (BG == 1) { - nrLDPC_cnProc_BG1(p_lut, p_procBuf, Z); + nrLDPC_cnProc_BG1(p_lut, cnProcBuf, cnProcBufRes, Z); } else { - nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z); + nrLDPC_cnProc_BG2(p_lut, cnProcBuf, cnProcBufRes, Z); } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->cnProc); #endif #ifdef NR_LDPC_DEBUG_MODE - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC_RES, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC_RES, cnProcBufRes); #endif // Send CN results back to BNs @@ -262,43 +267,43 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #endif if (BG == 1) { - nrLDPC_cn2bnProcBuf_BG1(p_lut, p_procBuf, Z); + nrLDPC_cn2bnProcBuf_BG1(p_lut, cnProcBufRes, bnProcBuf, Z); } else { - nrLDPC_cn2bnProcBuf_BG2(p_lut, p_procBuf, Z); + nrLDPC_cn2bnProcBuf_BG2(p_lut, cnProcBufRes, bnProcBuf, Z); } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->cn2bnProcBuf); #endif #ifdef NR_LDPC_DEBUG_MODE - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC, bnProcBuf); #endif // BN Processing #ifdef NR_LDPC_PROFILER_DETAIL start_meas(&p_profiler->bnProcPc); #endif - nrLDPC_bnProcPc(p_lut, p_procBuf, Z); + nrLDPC_bnProcPc(p_lut, bnProcBuf, bnProcBufRes, llrProcBuf, llrRes, Z); #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->bnProcPc); #endif #ifdef NR_LDPC_DEBUG_MODE - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_RES, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_RES, llrRes); #endif #ifdef NR_LDPC_PROFILER_DETAIL start_meas(&p_profiler->bnProc); #endif - nrLDPC_bnProc(p_lut, p_procBuf, Z); + nrLDPC_bnProc(p_lut, bnProcBuf, bnProcBufRes, llrRes, Z); #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->bnProc); #endif #ifdef NR_LDPC_DEBUG_MODE - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC_RES, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC_RES, bnProcBufRes); #endif // BN results to CN processing buffer @@ -307,18 +312,18 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #endif if (BG == 1) { - nrLDPC_bn2cnProcBuf_BG1(p_lut, p_procBuf, Z); + nrLDPC_bn2cnProcBuf_BG1(p_lut, bnProcBufRes, cnProcBuf, Z); } else { - nrLDPC_bn2cnProcBuf_BG2(p_lut, p_procBuf, Z); + nrLDPC_bn2cnProcBuf_BG2(p_lut, bnProcBufRes, cnProcBuf, Z); } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->bn2cnProcBuf); #endif #ifdef NR_LDPC_DEBUG_MODE - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, p_procBuf); + nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, cnProcBuf); #endif // Parity Check @@ -328,123 +333,11 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #endif if (BG == 1) { - pcRes = nrLDPC_cnProcPc_BG1(p_lut, p_procBuf, Z); + pcRes = nrLDPC_cnProcPc_BG1(p_lut, cnProcBuf, cnProcBufRes, Z); } else { - pcRes = nrLDPC_cnProcPc_BG2(p_lut, p_procBuf, Z); - } -#ifdef NR_LDPC_PROFILER_DETAIL - stop_meas(&p_profiler->cnProcPc); -#endif -#endif - } - - // Last iteration - if ( (i < numMaxIter) && (pcRes != 0) ) - { - // Increase iteration counter - i++; - - // CN processing -#ifdef NR_LDPC_PROFILER_DETAIL - start_meas(&p_profiler->cnProc); -#endif - if (BG == 1) - { - nrLDPC_cnProc_BG1(p_lut, p_procBuf, Z); - } - else - { - nrLDPC_cnProc_BG2(p_lut, p_procBuf, Z); - } -#ifdef NR_LDPC_PROFILER_DETAIL - stop_meas(&p_profiler->cnProc); -#endif - -#ifdef NR_LDPC_DEBUG_MODE - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC_RES, p_procBuf); -#endif - - // Send CN results back to BNs -#ifdef NR_LDPC_PROFILER_DETAIL - start_meas(&p_profiler->cn2bnProcBuf); -#endif - if (BG == 1) - { - nrLDPC_cn2bnProcBuf_BG1(p_lut, p_procBuf, Z); - } - else - { - nrLDPC_cn2bnProcBuf_BG2(p_lut, p_procBuf, Z); - } -#ifdef NR_LDPC_PROFILER_DETAIL - stop_meas(&p_profiler->cn2bnProcBuf); -#endif - -#ifdef NR_LDPC_DEBUG_MODE - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC, p_procBuf); -#endif - - // BN Processing -#ifdef NR_LDPC_PROFILER_DETAIL - start_meas(&p_profiler->bnProcPc); -#endif - nrLDPC_bnProcPc(p_lut, p_procBuf, Z); -#ifdef NR_LDPC_PROFILER_DETAIL - stop_meas(&p_profiler->bnProcPc); -#endif - -#ifdef NR_LDPC_DEBUG_MODE - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_LLR_RES, p_procBuf); -#endif - - // If parity check not enabled, no need to send the BN proc results - // back to CNs -#ifdef NR_LDPC_ENABLE_PARITY_CHECK -#ifdef NR_LDPC_PROFILER_DETAIL - start_meas(&p_profiler->bnProc); -#endif - nrLDPC_bnProc(p_lut, p_procBuf, Z); -#ifdef NR_LDPC_PROFILER_DETAIL - stop_meas(&p_profiler->bnProc); -#endif - -#ifdef NR_LDPC_DEBUG_MODE - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_BN_PROC_RES, p_procBuf); -#endif - - // BN results to CN processing buffer -#ifdef NR_LDPC_PROFILER_DETAIL - start_meas(&p_profiler->bn2cnProcBuf); -#endif - if (BG == 1) - { - nrLDPC_bn2cnProcBuf_BG1(p_lut, p_procBuf, Z); - } - else - { - nrLDPC_bn2cnProcBuf_BG2(p_lut, p_procBuf, Z); - } -#ifdef NR_LDPC_PROFILER_DETAIL - stop_meas(&p_profiler->bn2cnProcBuf); -#endif - -#ifdef NR_LDPC_DEBUG_MODE - nrLDPC_debug_writeBuffer2File(nrLDPC_buffers_CN_PROC, p_procBuf); -#endif - - // Parity Check -#ifdef NR_LDPC_PROFILER_DETAIL - start_meas(&p_profiler->cnProcPc); -#endif - if (BG == 1) - { - pcRes = nrLDPC_cnProcPc_BG1(p_lut, p_procBuf, Z); - } - else - { - pcRes = nrLDPC_cnProcPc_BG2(p_lut, p_procBuf, Z); + pcRes = nrLDPC_cnProcPc_BG2(p_lut, cnProcBuf, cnProcBufRes, Z); } #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->cnProcPc); @@ -466,7 +359,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP #ifdef NR_LDPC_PROFILER_DETAIL start_meas(&p_profiler->llrRes2llrOut); #endif - nrLDPC_llrRes2llrOut(p_lut, p_llrOut, p_procBuf, Z, BG); + nrLDPC_llrRes2llrOut(p_lut, p_llrOut, llrRes, Z, BG); #ifdef NR_LDPC_PROFILER_DETAIL stop_meas(&p_profiler->llrRes2llrOut); #endif diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h index b76750459d..7f514d5cfa 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_mPass.h @@ -97,7 +97,7 @@ static inline void *nrLDPC_circ_memcpy(int8_t *str1, const int8_t *str2, uint16_ \param Z Lifting size \param BG Base graph */ -static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrLDPC_procBuf* p_procBuf, uint16_t Z, uint8_t BG) +static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, int8_t* llrProcBuf, uint16_t Z, uint8_t BG) { uint32_t i; const uint8_t numBn2CnG1 = p_lut->numBnInBnGroups[0]; @@ -109,7 +109,6 @@ static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrL const uint8_t* lut_llr2llrProcBufBnPos = p_lut->llr2llrProcBufBnPos; uint32_t idxBn; - int8_t* llrProcBuf = p_procBuf->llrProcBuf; // Copy LLRs connected to 1 CN if (numBn2CnG1 > 0) @@ -133,7 +132,7 @@ static inline void nrLDPC_llr2llrProcBuf(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrL \param p_procBuf Pointer to the processing buffers \param Z Lifting size */ -static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) +static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, int8_t* cnProcBuf, uint16_t Z) { const uint16_t (*lut_circShift_CNG3) [lut_numCnInCnGroups_BG1_R13[0]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[0]]) p_lut->circShift[0]; const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG1_R13[1]] = (const uint16_t(*)[lut_numCnInCnGroups_BG1_R13[1]]) p_lut->circShift[1]; @@ -158,7 +157,6 @@ static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_ const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - int8_t* cnProcBuf = p_procBuf->cnProcBuf; uint32_t i; uint32_t j; @@ -342,7 +340,7 @@ static inline void nrLDPC_llr2CnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* llr, t_ \param p_procBuf Pointer to the processing buffers \param Z Lifting size */ -static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) +static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, int8_t* cnProcBuf, uint16_t Z) { const uint16_t (*lut_circShift_CNG3) [lut_numCnInCnGroups_BG2_R15[0]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[0]]) p_lut->circShift[0]; const uint16_t (*lut_circShift_CNG4) [lut_numCnInCnGroups_BG2_R15[1]] = (const uint16_t(*)[lut_numCnInCnGroups_BG2_R15[1]]) p_lut->circShift[1]; @@ -361,7 +359,6 @@ static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, t_ const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; - int8_t* cnProcBuf = p_procBuf->cnProcBuf; uint32_t i; uint32_t j; @@ -478,7 +475,7 @@ static inline void nrLDPC_llr2CnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* llr, t_ \param p_procBuf Pointer to the processing buffers \param Z Lifting size */ -static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) +static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* cnProcBufRes, int8_t* bnProcBuf, uint16_t Z) { const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; @@ -504,9 +501,6 @@ static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf const uint8_t (*lut_bnPosBnProcBuf_CNG8) [lut_numCnInCnGroups[4]] = (const uint8_t(*)[lut_numCnInCnGroups[4]]) p_lut->bnPosBnProcBuf[4]; const uint8_t (*lut_bnPosBnProcBuf_CNG10) [lut_numCnInCnGroups[5]] = (const uint8_t(*)[lut_numCnInCnGroups[5]]) p_lut->bnPosBnProcBuf[5]; - int8_t* cnProcBufRes = p_procBuf->cnProcBufRes; - int8_t* bnProcBuf = p_procBuf->bnProcBuf; - int8_t* p_cnProcBufRes; uint32_t bitOffsetInGroup; uint32_t i; @@ -621,7 +615,7 @@ static inline void nrLDPC_cn2bnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf \param p_procBuf Pointer to the processing buffers \param Z Lifting size */ -static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) +static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* cnProcBufRes, int8_t* bnProcBuf, uint16_t Z) { const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; @@ -655,9 +649,6 @@ static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf const uint8_t (*lut_bnPosBnProcBuf_CNG10)[lut_numCnInCnGroups[7]] = (const uint8_t(*)[lut_numCnInCnGroups[7]]) p_lut->bnPosBnProcBuf[7]; const uint8_t (*lut_bnPosBnProcBuf_CNG19)[lut_numCnInCnGroups[8]] = (const uint8_t(*)[lut_numCnInCnGroups[8]]) p_lut->bnPosBnProcBuf[8]; - int8_t* cnProcBufRes = p_procBuf->cnProcBufRes; - int8_t* bnProcBuf = p_procBuf->bnProcBuf; - int8_t* p_cnProcBufRes; uint32_t bitOffsetInGroup; uint32_t i; @@ -819,7 +810,7 @@ static inline void nrLDPC_cn2bnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf \param p_procBuf Pointer to the processing buffers \param Z Lifting size */ -static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) +static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, int8_t* bnProcBufRes, int8_t* cnProcBuf, uint16_t Z) { const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; @@ -845,9 +836,6 @@ static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf const uint8_t (*lut_bnPosBnProcBuf_CNG8) [lut_numCnInCnGroups[4]] = (const uint8_t(*)[lut_numCnInCnGroups[4]]) p_lut->bnPosBnProcBuf[4]; const uint8_t (*lut_bnPosBnProcBuf_CNG10) [lut_numCnInCnGroups[5]] = (const uint8_t(*)[lut_numCnInCnGroups[5]]) p_lut->bnPosBnProcBuf[5]; - int8_t* cnProcBuf = p_procBuf->cnProcBuf; - int8_t* bnProcBufRes = p_procBuf->bnProcBufRes; - int8_t* p_cnProcBuf; uint32_t bitOffsetInGroup; uint32_t i; @@ -961,7 +949,7 @@ static inline void nrLDPC_bn2cnProcBuf_BG2(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf \param p_procBuf Pointer to the processing buffers \param Z Lifting size */ -static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z) +static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, int8_t* bnProcBufRes, int8_t* cnProcBuf, uint16_t Z) { const uint8_t* lut_numCnInCnGroups = p_lut->numCnInCnGroups; const uint32_t* lut_startAddrCnGroups = p_lut->startAddrCnGroups; @@ -995,9 +983,6 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf const uint8_t (*lut_bnPosBnProcBuf_CNG10)[lut_numCnInCnGroups[7]] = (const uint8_t(*)[lut_numCnInCnGroups[7]]) p_lut->bnPosBnProcBuf[7]; const uint8_t (*lut_bnPosBnProcBuf_CNG19)[lut_numCnInCnGroups[8]] = (const uint8_t(*)[lut_numCnInCnGroups[8]]) p_lut->bnPosBnProcBuf[8]; - int8_t* cnProcBuf = p_procBuf->cnProcBuf; - int8_t* bnProcBufRes = p_procBuf->bnProcBufRes; - int8_t* p_cnProcBuf; uint32_t bitOffsetInGroup; uint32_t i; @@ -1157,7 +1142,7 @@ static inline void nrLDPC_bn2cnProcBuf_BG1(t_nrLDPC_lut* p_lut, t_nrLDPC_procBuf \param Z Lifting size \param BG Base graph */ -static inline void nrLDPC_llrRes2llrOut(t_nrLDPC_lut* p_lut, int8_t* llrOut, t_nrLDPC_procBuf* p_procBuf, uint16_t Z, uint8_t BG) +static inline void nrLDPC_llrRes2llrOut(t_nrLDPC_lut* p_lut, int8_t* llrOut, int8_t* llrRes, uint16_t Z, uint8_t BG) { uint32_t i; const uint8_t numBn2CnG1 = p_lut->numBnInBnGroups[0]; @@ -1168,7 +1153,6 @@ static inline void nrLDPC_llrRes2llrOut(t_nrLDPC_lut* p_lut, int8_t* llrOut, t_n const uint16_t* lut_llr2llrProcBufAddr = p_lut->llr2llrProcBufAddr; const uint8_t* lut_llr2llrProcBufBnPos = p_lut->llr2llrProcBufBnPos; - int8_t* llrRes = p_procBuf->llrRes; int8_t* p_llrOut = &llrOut[0]; uint32_t idxBn; diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/nrLDPC_debug.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/nrLDPC_debug.h index e4dcb56edd..41c0a474a4 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/nrLDPC_debug.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/nrLDPC_debug.h @@ -87,38 +87,38 @@ static inline void nrLDPC_initFile(const char* fileName) \brief Writes data of predefined buffers to file \param buffer Enum of buffer name to write */ -static inline void nrLDPC_debug_writeBuffer2File(e_nrLDPC_buffers buffer, t_nrLDPC_procBuf* p_procBuf) +static inline void nrLDPC_debug_writeBuffer2File(e_nrLDPC_buffers buffer, int8_t* p_buffer) { switch (buffer) { case nrLDPC_buffers_LLR_PROC: { - nrLDPC_writeFile("llrProcBuf.txt", p_procBuf->llrProcBuf, NR_LDPC_MAX_NUM_LLR); + nrLDPC_writeFile("llrProcBuf.txt", p_buffer, NR_LDPC_MAX_NUM_LLR); break; } case nrLDPC_buffers_CN_PROC: { - nrLDPC_writeFile("cnProcBuf.txt", p_procBuf->cnProcBuf, NR_LDPC_SIZE_CN_PROC_BUF); + nrLDPC_writeFile("cnProcBuf.txt", p_buffer, NR_LDPC_SIZE_CN_PROC_BUF); break; } case nrLDPC_buffers_CN_PROC_RES: { - nrLDPC_writeFile("cnProcBufRes.txt", p_procBuf->cnProcBufRes, NR_LDPC_SIZE_CN_PROC_BUF); + nrLDPC_writeFile("cnProcBufRes.txt", p_buffer, NR_LDPC_SIZE_CN_PROC_BUF); break; } case nrLDPC_buffers_BN_PROC: { - nrLDPC_writeFile("bnProcBuf.txt", p_procBuf->bnProcBuf, NR_LDPC_SIZE_BN_PROC_BUF); + nrLDPC_writeFile("bnProcBuf.txt", p_buffer, NR_LDPC_SIZE_BN_PROC_BUF); break; } case nrLDPC_buffers_BN_PROC_RES: { - nrLDPC_writeFile("bnProcBufRes.txt", p_procBuf->bnProcBufRes, NR_LDPC_SIZE_BN_PROC_BUF); + nrLDPC_writeFile("bnProcBufRes.txt", p_buffer, NR_LDPC_SIZE_BN_PROC_BUF); break; } case nrLDPC_buffers_LLR_RES: { - nrLDPC_writeFile("llrRes.txt", p_procBuf->llrRes, NR_LDPC_MAX_NUM_LLR); + nrLDPC_writeFile("llrRes.txt", p_buffer, NR_LDPC_MAX_NUM_LLR); break; } } diff --git a/openair1/PHY/CODING/nrLDPC_defs.h b/openair1/PHY/CODING/nrLDPC_defs.h index 0d7ff9ef9f..7628fe98ee 100644 --- a/openair1/PHY/CODING/nrLDPC_defs.h +++ b/openair1/PHY/CODING/nrLDPC_defs.h @@ -71,5 +71,5 @@ typedef int(*nrLDPC_encoderfunc_t)(unsigned char **,unsigned char **,int,int,sho \param p_llrOut Output vector \param p_profiler LDPC profiler statistics */ -typedef int32_t(*nrLDPC_decoderfunc_t)(t_nrLDPC_dec_params *, int8_t *, int8_t *, t_nrLDPC_procBuf *, t_nrLDPC_time_stats * ); +typedef int32_t(*nrLDPC_decoderfunc_t)(t_nrLDPC_dec_params* , int8_t*, int8_t* , t_nrLDPC_time_stats* ); #endif diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c index 5286fe8780..51d051e0ca 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c @@ -91,12 +91,6 @@ void free_gNB_ulsch(NR_gNB_ULSCH_t **ulschptr,uint8_t N_RB_UL) ulsch->harq_processes[i]->w[r] = NULL; } } - for (r=0; rharq_processes[i]->p_nrLDPC_procBuf[r]){ - nrLDPC_free_mem(ulsch->harq_processes[i]->p_nrLDPC_procBuf[r]); - ulsch->harq_processes[i]->p_nrLDPC_procBuf[r] = NULL; - } - } free16(ulsch->harq_processes[i],sizeof(NR_UL_gNB_HARQ_t)); ulsch->harq_processes[i] = NULL; } @@ -120,21 +114,57 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint } uint16_t ulsch_bytes = a_segments*1056; // allocated bytes per segment - ulsch = (NR_gNB_ULSCH_t *)malloc16_clear(sizeof(NR_gNB_ULSCH_t)); - - ulsch->max_ldpc_iterations = max_ldpc_iterations; - ulsch->Mlimit = 4; - - for (i=0; iharq_processes[i] = (NR_UL_gNB_HARQ_t *)malloc16_clear(sizeof(NR_UL_gNB_HARQ_t)); - ulsch->harq_processes[i]->b = (uint8_t*)malloc16_clear(ulsch_bytes); - if (abstraction_flag == 0) { - for (r=0; rharq_processes[i]->p_nrLDPC_procBuf[r] = nrLDPC_init_mem(); - ulsch->harq_processes[i]->c[r] = (uint8_t*)malloc16_clear(8448*sizeof(uint8_t)); - ulsch->harq_processes[i]->d[r] = (int16_t*)malloc16_clear((68*384)*sizeof(int16_t)); - ulsch->harq_processes[i]->w[r] = (int16_t*)malloc16_clear((3*(6144+64))*sizeof(int16_t)); + ulsch = (NR_gNB_ULSCH_t *)malloc16(sizeof(NR_gNB_ULSCH_t)); + + if (ulsch) { + + memset(ulsch,0,sizeof(NR_gNB_ULSCH_t)); + + ulsch->max_ldpc_iterations = max_ldpc_iterations; + ulsch->Mlimit = 4; + + for (i=0; iharq_processes[i] = (NR_UL_gNB_HARQ_t *)malloc16(sizeof(NR_UL_gNB_HARQ_t)); + + if (ulsch->harq_processes[i]) { + + memset(ulsch->harq_processes[i],0,sizeof(NR_UL_gNB_HARQ_t)); + + ulsch->harq_processes[i]->b = (uint8_t*)malloc16(ulsch_bytes); + + if (ulsch->harq_processes[i]->b) + memset(ulsch->harq_processes[i]->b,0,ulsch_bytes); + else + exit_flag=3; + + if (abstraction_flag == 0) { + for (r=0; rharq_processes[i]->c[r] = (uint8_t*)malloc16(8448*sizeof(uint8_t)); + + if (ulsch->harq_processes[i]->c[r]) + memset(ulsch->harq_processes[i]->c[r],0,8448*sizeof(uint8_t)); + else + exit_flag=2; + + ulsch->harq_processes[i]->d[r] = (int16_t*)malloc16((68*384)*sizeof(int16_t)); + + if (ulsch->harq_processes[i]->d[r]) + memset(ulsch->harq_processes[i]->d[r],0,(68*384)*sizeof(int16_t)); + else + exit_flag=2; + + ulsch->harq_processes[i]->w[r] = (int16_t*)malloc16((3*(6144+64))*sizeof(int16_t)); + + if (ulsch->harq_processes[i]->w[r]) + memset(ulsch->harq_processes[i]->w[r],0,(3*(6144+64))*sizeof(int16_t)); + else + exit_flag=2; + } + } + } else { + exit_flag=1; } } } @@ -382,7 +412,6 @@ void nr_processULSegment(void* arg) { no_iteration_ldpc = nrLDPC_decoder(p_decoderParms, (int8_t*)&pl[0], llrProcBuf, - ulsch_harq->p_nrLDPC_procBuf[r], p_procTime); if (check_crc((uint8_t*)llrProcBuf,length_dec,ulsch_harq->F,crc_type)) { diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c index 95c451fa1a..c07492cce9 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c @@ -114,13 +114,6 @@ void free_nr_ue_dlsch(NR_UE_DLSCH_t **dlschptr,uint8_t N_RB_DL) { dlsch->harq_processes[i]->w[r] = NULL; } - for (r=0; rharq_processes[i]->p_nrLDPC_procBuf[r]) { - nrLDPC_free_mem(dlsch->harq_processes[i]->p_nrLDPC_procBuf[r]); - dlsch->harq_processes[i]->p_nrLDPC_procBuf[r] = NULL; - } - } - free16(dlsch->harq_processes[i],sizeof(NR_DL_UE_HARQ_t)); dlsch->harq_processes[i] = NULL; } @@ -169,7 +162,6 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint if (abstraction_flag == 0) { for (r=0; rharq_processes[i]->p_nrLDPC_procBuf[r] = nrLDPC_init_mem(); dlsch->harq_processes[i]->c[r] = (uint8_t *)malloc16(1056); if (dlsch->harq_processes[i]->c[r]) @@ -441,7 +433,6 @@ void nr_processDLSegment(void* arg) { no_iteration_ldpc = nrLDPC_decoder(p_decoderParms, (int8_t *)&pl[0], llrProcBuf, - p_nrLDPC_procBuf[r], p_procTime); //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_OUT); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h index b4ee4f5b41..ecb22d8c7c 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h @@ -240,8 +240,6 @@ typedef struct { //double w_abs[MAX_NUM_NR_DLSCH_SEGMENTS][3*8448]; /// soft bits for each received segment ("d"-sequence)(for definition see 36-212 V8.6 2009-03, p.15) int16_t *d[MAX_NUM_NR_DLSCH_SEGMENTS]; - /// LDPC processing buffers - t_nrLDPC_procBuf* p_nrLDPC_procBuf[MAX_NUM_NR_DLSCH_SEGMENTS]; /// Number of code segments uint32_t C; /// Number of bits in code segments diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index fb4f9a0092..047ff802a6 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -282,8 +282,6 @@ typedef struct { uint32_t C; /// Pointers to code blocks after LDPC coding (38.212 V15.4.0 section 5.3.2) int16_t *d[MAX_NUM_NR_ULSCH_SEGMENTS]; - /// LDPC processing buffer - t_nrLDPC_procBuf* p_nrLDPC_procBuf[MAX_NUM_NR_ULSCH_SEGMENTS]; /// LDPC lifting size (38.212 V15.4.0 table 5.3.2-1) uint32_t Z; /// code blocks after bit selection in rate matching for LDPC code (38.212 V15.4.0 section 5.4.2.1) From aa4db6057b18fe2273c5ea04cc44a8ec860e29cb Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Tue, 4 Jan 2022 18:39:45 +0530 Subject: [PATCH 002/150] updated ldpctest --- openair1/PHY/CODING/TESTBENCH/ldpctest.c | 65 ++++++++++++------- openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c | 10 ++- 2 files changed, 50 insertions(+), 25 deletions(-) diff --git a/openair1/PHY/CODING/TESTBENCH/ldpctest.c b/openair1/PHY/CODING/TESTBENCH/ldpctest.c index 3ae15293cb..875cdf6cdc 100644 --- a/openair1/PHY/CODING/TESTBENCH/ldpctest.c +++ b/openair1/PHY/CODING/TESTBENCH/ldpctest.c @@ -30,6 +30,7 @@ #include "openair1/PHY/CODING/nrLDPC_decoder_LYC/nrLDPC_decoder_LYC.h" #include "openair1/PHY/defs_nr_common.h" #include "coding_unitary_defs.h" +#include "common/utils/LOG/log.h" #define MAX_BLOCK_LENGTH 8448 @@ -78,9 +79,12 @@ char quantize8bit(double D,double x) } typedef struct { - double n_iter_mean; - double n_iter_std; - int n_iter_max; + double n_iter_mean[100]; + double n_iter_std[100]; + int n_iter_max[100]; + double snr[100]; + double ber[100]; + double bler[100]; } n_iter_stats_t; nrLDPC_encoderfunc_t encoder_orig; @@ -101,8 +105,8 @@ int test_ldpc(short No_iteration, unsigned int *crc_misses, time_stats_t *time_optim, time_stats_t *time_decoder, - n_iter_stats_t *dec_iter - ) + n_iter_stats_t *dec_iter, + int nsnr) { //clock initiate //time_stats_t time,time_optim,tinput,tprep,tparity,toutput, time_decoder; @@ -280,6 +284,15 @@ int test_ldpc(short No_iteration, // printf("puncture:%d\n",no_punctured_columns); removed_bit=(nrows-no_punctured_columns-2) * Zc+block_length-(int)(block_length/((float)nom_rate/(float)denom_rate)); encoder_implemparams_t impp=INIT0_LDPCIMPLEMPARAMS; + + // CRC attachement + for (j=0; j>8; + test_input[j][(block_length-24)>>3] = ((uint8_t*)&crc)[2]; + test_input[j][1+((block_length-24)>>3)] = ((uint8_t*)&crc)[1]; + test_input[j][2+((block_length-24)>>3)] = ((uint8_t*)&crc)[0]; + } impp.gen_code=1; if (ntrials==0) @@ -402,7 +415,7 @@ int test_ldpc(short No_iteration, //count errors for(j=0;j>3; i++) + for (i=0; i<(block_length-24)>>3; i++) { //printf("block_length>>3: %d \n",block_length>>3); /// printf("i: %d \n",i); @@ -416,7 +429,7 @@ int test_ldpc(short No_iteration, } } - for (i=0; i>(i&7); test_input_bit[i] = (test_input[j][i/8]&(1<<(i&7)))>>(i&7); // Further correct for multiple segments @@ -446,9 +459,9 @@ int test_ldpc(short No_iteration, } - dec_iter->n_iter_mean = n_iter_mean/(double)ntrials/(double)n_segments - 1; - dec_iter->n_iter_std = sqrt(n_iter_std/(double)ntrials/(double)n_segments - pow(n_iter_mean/(double)ntrials/(double)n_segments - 1,2)); - dec_iter->n_iter_max = n_iter_max -1; + dec_iter->n_iter_mean[nsnr] = n_iter_mean/(double)ntrials/(double)n_segments - 1; + dec_iter->n_iter_std[nsnr] = sqrt(n_iter_std/(double)ntrials/(double)n_segments - pow(n_iter_mean/(double)ntrials/(double)n_segments - 1,2)); + dec_iter->n_iter_max[nsnr] = n_iter_max -1; *errors_bit_uncoded = *errors_bit_uncoded / (double)((Kb+nrows-no_punctured_columns-2) * Zc-removed_bit); @@ -515,7 +528,7 @@ int main(int argc, char *argv[]) int test_uncoded= 0; time_stats_t time_optim[10], time_decoder[10]; - n_iter_stats_t dec_iter[3]; + n_iter_stats_t dec_iter; short BG=0,Zc,Kb=0; if ( load_configmodule(argc,argv,CONFIG_ENABLECMDLINEONLY) == 0) { @@ -682,14 +695,18 @@ int main(int argc, char *argv[]) &crc_misses, time_optim, time_decoder, - dec_iter); + &dec_iter, + i); - printf("SNR %f, BLER %f (%u/%d)\n", SNR, (float)decoded_errors[i]/(float)n_trials, decoded_errors[i], n_trials); - printf("SNR %f, BER %f (%u/%d)\n", SNR, (float)errors_bit/(float)n_trials/(float)block_length/(double)n_segments, decoded_errors[i], n_trials); + dec_iter.snr[i] = SNR; + dec_iter.ber[i] = (float)errors_bit/(float)n_trials/(float)block_length/(double)n_segments; + dec_iter.bler[i] = (float)decoded_errors[i]/(float)n_trials; + printf("SNR %f, BLER %f (%u/%d)\n", SNR, dec_iter.bler[i], decoded_errors[i], n_trials); + printf("SNR %f, BER %f (%u/%d)\n", SNR, dec_iter.ber[i], decoded_errors[i], n_trials); printf("SNR %f, Uncoded BER %f (%u/%d)\n",SNR, errors_bit_uncoded/(float)n_trials/(double)n_segments, decoded_errors[i], n_trials); - printf("SNR %f, Mean iterations: %f\n",SNR, dec_iter->n_iter_mean); - printf("SNR %f, Std iterations: %f\n",SNR, dec_iter->n_iter_std); - printf("SNR %f, Max iterations: %d\n",SNR, dec_iter->n_iter_max); + printf("SNR %f, Mean iterations: %f\n",SNR, dec_iter.n_iter_mean[i]); + printf("SNR %f, Std iterations: %f\n",SNR, dec_iter.n_iter_std[i]); + printf("SNR %f, Max iterations: %d\n",SNR, dec_iter.n_iter_max[i]); printf("\n"); printf("Encoding time mean: %15.3f us\n",(double)time_optim->diff/time_optim->trials/1000.0/get_cpu_freq_GHz()); printf("Encoding time std: %15.3f us\n",sqrt((double)time_optim->diff_square/time_optim->trials/pow(1000,2)/pow(get_cpu_freq_GHz(),2)-pow((double)time_optim->diff/time_optim->trials/1000.0/get_cpu_freq_GHz(),2))); @@ -710,16 +727,20 @@ int main(int argc, char *argv[]) (double)time_decoder->diff/time_decoder->trials/1000.0/get_cpu_freq_GHz(), sqrt((double)time_decoder->diff_square/time_decoder->trials/pow(1000,2)/pow(get_cpu_freq_GHz(),2)-pow((double)time_decoder->diff/time_decoder->trials/1000.0/get_cpu_freq_GHz(),2)), (double)time_decoder->max/1000.0/get_cpu_freq_GHz(), - dec_iter->n_iter_mean, - dec_iter->n_iter_std, - dec_iter->n_iter_max + dec_iter.n_iter_mean[i], + dec_iter.n_iter_std[i], + dec_iter.n_iter_max[i] ); - if (decoded_errors[i] == 0) break; - i=i+1; + if (decoded_errors[i-1] == 0) break; + } fclose(fd); + LOG_M("ldpctestStats.m","SNR",&dec_iter.snr[0],i,1,7); + LOG_MM("ldpctestStats.m","BLER",&dec_iter.bler[0],i,1,7); + LOG_MM("ldpctestStats.m","BER",&dec_iter.ber[0],i,1,7); + LOG_MM("ldpctestStats.m","meanIter",&dec_iter.n_iter_mean[0],i,1,7); return(0); } diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c index 51d051e0ca..d9b075e2ed 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c @@ -105,7 +105,7 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint { NR_gNB_ULSCH_t *ulsch; - uint8_t i,r; + uint8_t exit_flag = 0,i,r; uint16_t a_segments = MAX_NUM_NR_ULSCH_SEGMENTS; //number of segments to be allocated if (N_RB_UL != 273) { @@ -167,9 +167,13 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint exit_flag=1; } } + + if (exit_flag==0) + return(ulsch); } - - return(ulsch); + printf("new_gNB_ulsch with size %zu: exit_flag = %hhu\n",sizeof(NR_UL_gNB_HARQ_t), exit_flag); + free_gNB_ulsch(&ulsch,N_RB_UL); + return(NULL); } void clean_gNB_ulsch(NR_gNB_ULSCH_t *ulsch) From 62b525c579a756451ff9ae8258fe942f27e70933 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 8 Feb 2022 11:59:54 -0800 Subject: [PATCH 003/150] TODO: Revert this change after discussion with OAI --- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c index 4261020f76..5a71d2b187 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c @@ -1640,9 +1640,9 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra } } - if (rbStart > (BWPSize - rbSize)) { - LOG_E(NR_MAC, "%s(): cannot find free vrb_map for RNTI %04x!\n", __func__, ra->rnti); - return; + while (rbStart > (BWPSize - rbSize)) { + LOG_E(NR_MAC, "%s(): cannot find free vrb_map for RNTI %04x so decrament rbStart %d!\n", __func__, ra->rnti, rbStart); + rbStart--; } // Checking if the DCI allocation is feasible in current subframe From 9da3cbc9ec4b8e0e9056ad1ae41cfdaec49a23f8 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 14 Dec 2021 16:17:30 -0800 Subject: [PATCH 004/150] Cherry picking UCI multiplexing for CSI reports --- executables/nr-ue.c | 76 ----- nfapi/oai_integration/nfapi_vnf.c | 37 +-- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 22 +- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 87 +++++- openair2/LAYER2/NR_MAC_COMMON/nr_mac.h | 1 + openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 3 +- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 299 ++++++++++++++------ openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h | 2 + 8 files changed, 333 insertions(+), 194 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 2e7b2ea0e1..2cbeaf502c 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -194,69 +194,6 @@ static void L1_nsa_prach_procedures(frame_t frame, int slot, fapi_nr_ul_config_p LOG_D(NR_MAC, "We have successfully filled the rach_ind queue with the recently filled rach ind\n"); } -static bool sfn_slot_matcher(void *wanted, void *candidate) -{ - nfapi_p7_message_header_t *msg = candidate; - int sfn_sf = *(int*)wanted; - - switch (msg->message_id) - { - case NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION: - { - nfapi_nr_rach_indication_t *ind = candidate; - return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot; - } - - case NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION: - { - nfapi_nr_rx_data_indication_t *ind = candidate; - return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot; - } - - case NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION: - { - nfapi_nr_crc_indication_t *ind = candidate; - return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot; - } - - case NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION: - { - nfapi_nr_uci_indication_t *ind = candidate; - return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot; - } - - case NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST: - { - nfapi_nr_dl_tti_request_t *ind = candidate; - return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot; - } - - case NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST: - { - nfapi_nr_tx_data_request_t *ind = candidate; - return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot; - } - - case NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST: - { - nfapi_nr_ul_dci_request_t *ind = candidate; - return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot; - } - - case NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST: - { - nfapi_nr_ul_tti_request_t *ind = candidate; - return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot; - } - - default: - LOG_E(NR_MAC, "sfn_slot_match bad ID: %d\n", msg->message_id); - - } - - return false; -} - static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot) { nfapi_nr_rach_indication_t *rach_ind = unqueue_matching(&nr_rach_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot); @@ -265,15 +202,6 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot) nfapi_nr_dl_tti_request_t *dl_tti_request = get_queue(&nr_dl_tti_req_queue); nfapi_nr_ul_dci_request_t *ul_dci_request = get_queue(&nr_ul_dci_req_queue); - LOG_D(NR_MAC, "Try to get a ul_tti_req for sfn/slot %d %d from queue with %lu items\n", - NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_harq_sfn_slot),NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot), nr_ul_tti_req_queue.num_items); - nfapi_nr_ul_tti_request_t *ul_tti_request = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.active_harq_sfn_slot); - if (!ul_tti_request) - { - LOG_D(NR_MAC, "Try to get a ul_tti_req from seprate queue because dl_tti_req was late\n"); - ul_tti_request = unqueue_matching(&nr_wait_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.active_harq_sfn_slot); - } - if (rach_ind && rach_ind->number_of_pdus > 0) { NR_UL_IND_t UL_INFO = { @@ -335,10 +263,6 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot) { check_and_process_dci(NULL, NULL, ul_dci_request, NULL); } - if (ul_tti_request && ul_tti_request->n_pdus > 0) - { - check_and_process_dci(NULL, NULL, NULL, ul_tti_request); - } } static void check_nr_prach(NR_UE_MAC_INST_t *mac, nr_uplink_indication_t *ul_info, NR_PRACH_RESOURCES_t *prach_resources) diff --git a/nfapi/oai_integration/nfapi_vnf.c b/nfapi/oai_integration/nfapi_vnf.c index 44ee05940f..0fed6b33d0 100644 --- a/nfapi/oai_integration/nfapi_vnf.c +++ b/nfapi/oai_integration/nfapi_vnf.c @@ -792,7 +792,7 @@ int phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) uci_ind_pdu->harq->harq_list = CALLOC(uci_ind_pdu->harq->num_harq, sizeof(*uci_ind_pdu->harq->harq_list)); AssertFatal(uci_ind_pdu->harq->harq_list != NULL, "Memory not allocated for uci_ind_pdu->harq->harq_list in phy_nr_uci_indication."); for (int j = 0; j < uci_ind_pdu->harq->num_harq; j++) - uci_ind_pdu->harq->harq_list[j].harq_value = ind_pdu->harq->harq_list[j].harq_value; + uci_ind_pdu->harq->harq_list[j].harq_value = ind_pdu->harq->harq_list[j].harq_value; } break; } @@ -800,21 +800,26 @@ int phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) case NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE: { nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_ind_pdu = &uci_ind->uci_list[i].pucch_pdu_format_2_3_4; nfapi_nr_uci_pucch_pdu_format_2_3_4_t *ind_pdu = &ind->uci_list[i].pucch_pdu_format_2_3_4; - - uci_ind_pdu->harq.harq_payload = CALLOC(1, sizeof(*uci_ind_pdu->harq.harq_payload)); - AssertFatal(uci_ind_pdu->harq.harq_payload != NULL, "Memory not allocated for uci_ind_pdu->harq.harq_payload in phy_nr_uci_indication."); - *uci_ind_pdu->harq.harq_payload = *ind_pdu->harq.harq_payload; - - - uci_ind_pdu->csi_part1.csi_part1_payload = CALLOC(1, sizeof(*uci_ind_pdu->csi_part1.csi_part1_payload)); - AssertFatal(uci_ind_pdu->csi_part1.csi_part1_payload != NULL, "Memory not allocated for uci_ind_pdu->csi_part1.csi_part1_payload in phy_nr_uci_indication."); - *uci_ind_pdu->csi_part1.csi_part1_payload = *ind_pdu->csi_part1.csi_part1_payload; - - - uci_ind_pdu->csi_part2.csi_part2_payload = CALLOC(1, sizeof(*uci_ind_pdu->csi_part2.csi_part2_payload)); - AssertFatal(uci_ind_pdu->csi_part2.csi_part2_payload != NULL, "Memory not allocated for uci_ind_pdu->csi_part2.csi_part2_payload in phy_nr_uci_indication."); - *uci_ind_pdu->csi_part2.csi_part2_payload = *ind_pdu->csi_part2.csi_part2_payload; - + if (ind_pdu->harq.harq_payload) { + uci_ind_pdu->harq.harq_payload = CALLOC(1, sizeof(*uci_ind_pdu->harq.harq_payload)); + AssertFatal(uci_ind_pdu->harq.harq_payload != NULL, "Memory not allocated for uci_ind_pdu->harq.harq_payload in phy_nr_uci_indication."); + *uci_ind_pdu->harq.harq_payload = *ind_pdu->harq.harq_payload; + } + if (ind_pdu->sr.sr_payload) { + uci_ind_pdu->sr.sr_payload = CALLOC(1, sizeof(*uci_ind_pdu->sr.sr_payload)); + AssertFatal(uci_ind_pdu->sr.sr_payload != NULL, "Memory not allocated for uci_ind_pdu->sr.sr_payload in phy_nr_uci_indication."); + *uci_ind_pdu->sr.sr_payload = *ind_pdu->sr.sr_payload; + } + if (ind_pdu->csi_part1.csi_part1_payload) { + uci_ind_pdu->csi_part1.csi_part1_payload = CALLOC(1, sizeof(*uci_ind_pdu->csi_part1.csi_part1_payload)); + AssertFatal(uci_ind_pdu->csi_part1.csi_part1_payload != NULL, "Memory not allocated for uci_ind_pdu->csi_part1.csi_part1_payload in phy_nr_uci_indication."); + *uci_ind_pdu->csi_part1.csi_part1_payload = *ind_pdu->csi_part1.csi_part1_payload; + } + if (ind_pdu->csi_part2.csi_part2_payload) { + uci_ind_pdu->csi_part2.csi_part2_payload = CALLOC(1, sizeof(*uci_ind_pdu->csi_part2.csi_part2_payload)); + AssertFatal(uci_ind_pdu->csi_part2.csi_part2_payload != NULL, "Memory not allocated for uci_ind_pdu->csi_part2.csi_part2_payload in phy_nr_uci_indication."); + *uci_ind_pdu->csi_part2.csi_part2_payload = *ind_pdu->csi_part2.csi_part2_payload; + } break; } } diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index adc6d6e384..d103200787 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -5906,9 +5906,25 @@ static uint8_t unpack_nr_uci_pucch_0_1(nfapi_nr_uci_pucch_pdu_format_0_1_t *valu return 1; } +static uint8_t unpack_nr_uci_pucch_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value, + uint8_t **ppReadPackedMsg, + uint8_t *end, + nfapi_p7_codec_config_t *config) { -static uint8_t unpack_nr_uci_pucch_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t* tlv, uint8_t **ppReadPackedMsg, uint8_t *end) { - nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value = (nfapi_nr_uci_pucch_pdu_format_2_3_4_t*) tlv; + if (!pull8(ppReadPackedMsg, &value->pduBitmap, end)) + return 0; + if (!pull32(ppReadPackedMsg, &value->handle, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->rnti, end)) + return 0; + if (!pull8(ppReadPackedMsg, &value->pucch_format, end)) + return 0; + if (!pull8(ppReadPackedMsg, &value->ul_cqi, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->timing_advance, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->rssi, end)) + return 0; if(!(pull8(ppReadPackedMsg, &value->pduBitmap, end) && pull32(ppReadPackedMsg, &value->handle, end) && @@ -5988,7 +6004,7 @@ static uint8_t unpack_nr_uci_indication_body(nfapi_nr_uci_t *value, } case NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE: { nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_pdu = &value->pucch_pdu_format_2_3_4; - if (!unpack_nr_uci_pucch_2_3_4(uci_pdu, ppReadPackedMsg, end)) + if (!unpack_nr_uci_pucch_2_3_4(uci_pdu, ppReadPackedMsg, end, config)) return 0; break; } diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 4fd337eb09..7798e789a3 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -36,6 +36,7 @@ #include "fapi_nr_ue_l1.h" #include "harq_nr.h" //#include "PHY/phy_vars_nr_ue.h" +#include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h" #include "PHY/defs_nr_UE.h" #include "PHY/impl_defs_nr.h" @@ -50,7 +51,7 @@ queue_t nr_crc_ind_queue; queue_t nr_uci_ind_queue; int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response) { - + NR_UE_MAC_INST_t *mac = get_mac_inst(0); if(scheduled_response != NULL) { if (scheduled_response->ul_config != NULL) @@ -92,10 +93,6 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response rx_ind->pdu_list[j].rnti = pusch_config_pdu->rnti; rx_ind->pdu_list[j].timing_advance = scheduled_response->tx_request->tx_config.timing_advance; rx_ind->pdu_list[j].ul_cqi = scheduled_response->tx_request->tx_config.ul_cqi; - char buffer[1024]; - hexdump(rx_ind->pdu_list[j].pdu, rx_ind->pdu_list[j].pdu_length, buffer, sizeof(buffer)); - LOG_D(NR_MAC, "Hexdump of pdu %s before queuing rx_ind\n", - buffer); } crc_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION; @@ -147,6 +144,84 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response break; } + case FAPI_NR_UL_CONFIG_TYPE_PUCCH: + { + nfapi_nr_uci_indication_t *uci_ind = CALLOC(1, sizeof(*uci_ind)); + uci_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION; + uci_ind->sfn = scheduled_response->frame; + uci_ind->slot = scheduled_response->slot; + uci_ind->num_ucis = 1; + uci_ind->uci_list = CALLOC(uci_ind->num_ucis, sizeof(*uci_ind->uci_list)); + for (int j = 0; j < uci_ind->num_ucis; j++) + { + if (ul_config->ul_config_list[i].pucch_config_pdu.format_type == 2) + { + nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[j].pucch_pdu_format_2_3_4; + uci_ind->uci_list[j].pdu_type = NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE; + uci_ind->uci_list[j].pdu_size = sizeof(nfapi_nr_uci_pucch_pdu_format_2_3_4_t); + memset(pdu_2_3_4, 0, sizeof(*pdu_2_3_4)); + pdu_2_3_4->handle = 0; + pdu_2_3_4->rnti = ul_config->ul_config_list[i].pucch_config_pdu.rnti; + pdu_2_3_4->pucch_format = ul_config->ul_config_list[i].pucch_config_pdu.format_type; + pdu_2_3_4->ul_cqi = 255; + pdu_2_3_4->timing_advance = 0; + pdu_2_3_4->rssi = 0; + // TODO: Eventually check 38.212:Sect.631 to know when to use csi_part2, for now only using csi_part1 + pdu_2_3_4->pduBitmap = 4; + pdu_2_3_4->csi_part1.csi_part1_bit_len = ul_config->ul_config_list[i].pucch_config_pdu.nr_of_symbols; + int csi_part1_byte_len = (int)((pdu_2_3_4->csi_part1.csi_part1_bit_len / 8) + 1); + AssertFatal(!pdu_2_3_4->csi_part1.csi_part1_payload, "pdu_2_3_4->csi_part1.csi_part1_payload != NULL\n"); + pdu_2_3_4->csi_part1.csi_part1_payload = CALLOC(csi_part1_byte_len, + sizeof(pdu_2_3_4->csi_part1.csi_part1_payload)); + for (int k = 0; k < csi_part1_byte_len; k++) + { + pdu_2_3_4->csi_part1.csi_part1_payload[k] = (ul_config->ul_config_list[i]. + pucch_config_pdu.payload >> (k * 8)) & 0xff; + } + pdu_2_3_4->csi_part1.csi_part1_crc = 0; + int sfn_slot = NFAPI_SFNSLOT2HEX(uci_ind->sfn, uci_ind->slot); + nfapi_nr_uci_indication_t *queued_uci_ind = unqueue_matching(&nr_uci_ind_queue, + MAX_QUEUE_SIZE, + sfn_slot_matcher, + &sfn_slot); + if (queued_uci_ind) + { + LOG_I(NR_MAC, "There was a matching UCI with sfn %d, slot %d in queue\n", + NFAPI_SFNSLOT2SFN(sfn_slot), NFAPI_SFNSLOT2SLOT(sfn_slot)); + if (queued_uci_ind->uci_list[0].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE) + pdu_2_3_4->pduBitmap = 6; // harq: pduBitmap >> 1, csi: pduBitmap >> 2 + free(queued_uci_ind); + break; + } + } + else + { + nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[j].pucch_pdu_format_0_1; + uci_ind->uci_list[j].pdu_type = NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE; + uci_ind->uci_list[j].pdu_size = sizeof(nfapi_nr_uci_pucch_pdu_format_0_1_t); + memset(pdu_0_1, 0, sizeof(*pdu_0_1)); + pdu_0_1->handle = 0; + pdu_0_1->rnti = ul_config->ul_config_list[i].pucch_config_pdu.rnti; + pdu_0_1->pucch_format = 1; + pdu_0_1->ul_cqi = 255; + pdu_0_1->timing_advance = 0; + pdu_0_1->rssi = 0; + } + } + + LOG_I(NR_PHY, "In %s: Filled queue uci_ind_234 which was filled by ulconfig.\n" + "uci_num %d, SFN/SLOT: [%d, %d]\n", + __FUNCTION__, uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); + + if (!put_queue(&nr_uci_ind_queue, uci_ind)) + { + LOG_E(NR_MAC, "Put_queue failed for uci_ind\n"); + free(uci_ind->uci_list); + free(uci_ind); + } + break; + } + default: LOG_I(NR_MAC, "Unknown ul_config->pdu_type %d\n", pdu_type); break; @@ -173,7 +248,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response nfapi_nr_uci_indication_t *uci_ind = CALLOC(1, sizeof(*uci_ind)); uci_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION; uci_ind->sfn = scheduled_response->frame; - uci_ind->slot = scheduled_response->slot; + uci_ind->slot = NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot); uci_ind->num_ucis = 1; uci_ind->uci_list = CALLOC(uci_ind->num_ucis, sizeof(*uci_ind->uci_list)); for (int j = 0; j < uci_ind->num_ucis; j++) diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h index ba3128923f..2b2181177d 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h @@ -272,6 +272,7 @@ typedef struct { bool expected_dci; bool index_has_dci[16]; int active_harq_sfn_slot; + int active_uci_sfn_slot; } nr_emulated_l1_t; typedef struct { diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 22a13d223b..4bc074df56 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -2183,6 +2183,7 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in fapi_nr_ul_config_pucch_pdu *pucch_pdu = &ul_config->ul_config_list[ul_config->number_pdus].pucch_config_pdu; fill_ul_config(ul_config, frameP, slotP, FAPI_NR_UL_CONFIG_TYPE_PUCCH); + mac->nr_ue_emul_l1.active_uci_sfn_slot = NFAPI_SFNSLOT2HEX(frameP, slotP); pthread_mutex_unlock(&ul_config->mutex_ul_config); nr_ue_configure_pucch(mac, @@ -2191,7 +2192,7 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in pucch, pucch_pdu, O_SR, O_ACK, O_CSI); - LOG_D(NR_MAC,"Configuring pucch, is_common = %d\n",pucch->is_common); + LOG_I(NR_MAC,"Configuring pucch, is_common = %d and format %d\n",pucch->is_common, pucch_pdu->format_type); nr_scheduled_response_t scheduled_response; fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, thread_id); if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index b98a9c8789..805c2dd2a8 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -217,6 +217,69 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) } } +bool sfn_slot_matcher(void *wanted, void *candidate) +{ + nfapi_p7_message_header_t *msg = candidate; + int sfn_sf = *(int*)wanted; + + switch (msg->message_id) + { + case NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION: + { + nfapi_nr_rach_indication_t *ind = candidate; + return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot; + } + + case NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION: + { + nfapi_nr_rx_data_indication_t *ind = candidate; + return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot; + } + + case NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION: + { + nfapi_nr_crc_indication_t *ind = candidate; + return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot; + } + + case NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION: + { + nfapi_nr_uci_indication_t *ind = candidate; + return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->sfn && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->slot; + } + + case NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST: + { + nfapi_nr_dl_tti_request_t *ind = candidate; + return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot; + } + + case NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST: + { + nfapi_nr_tx_data_request_t *ind = candidate; + return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot; + } + + case NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST: + { + nfapi_nr_ul_dci_request_t *ind = candidate; + return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot; + } + + case NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST: + { + nfapi_nr_ul_tti_request_t *ind = candidate; + return NFAPI_SFNSLOT2SFN(sfn_sf) == ind->SFN && NFAPI_SFNSLOT2SLOT(sfn_sf) == ind->Slot; + } + + default: + LOG_E(NR_MAC, "sfn_slot_match bad ID: %d\n", msg->message_id); + + } + + return false; +} + static void fill_dl_info_with_pdcch(fapi_nr_dci_indication_t *dci, nfapi_nr_dl_dci_pdu_t *rx_dci, int idx) { int num_bytes = (rx_dci->PayloadSizeBits + 7) / 8; @@ -460,6 +523,38 @@ static void copy_tx_data_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi dl_info->rx_ind->number_pdus = pdu_idx; } +static void free_uci_inds(nfapi_nr_uci_indication_t *uci_ind) +{ + for (int k = 0; k < uci_ind->num_ucis; k++) + { + if (uci_ind->uci_list[k].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE) + { + nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[k].pucch_pdu_format_0_1; + free(pdu_0_1->sr); + pdu_0_1->sr = NULL; + if (pdu_0_1->harq) + { + free(pdu_0_1->harq->harq_list); + pdu_0_1->harq->harq_list = NULL; + } + free(pdu_0_1->harq); + pdu_0_1->harq = NULL; + } + if (uci_ind->uci_list[k].pdu_type == NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE) + { + nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[k].pucch_pdu_format_2_3_4; + free(pdu_2_3_4->sr.sr_payload); + pdu_2_3_4->sr.sr_payload = NULL; + free(pdu_2_3_4->harq.harq_payload); + pdu_2_3_4->harq.harq_payload = NULL; + } + } + free(uci_ind->uci_list); + uci_ind->uci_list = NULL; + free(uci_ind); + uci_ind = NULL; +} + static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_nr_ul_dci_request_t *ul_dci_req) { NR_UE_MAC_INST_t *mac = get_mac_inst(dl_info->module_id); @@ -503,31 +598,28 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n dl_info->slot = ul_dci_req->Slot; } -static nfapi_nr_uci_indication_t *multiplex_uci_ind(NR_UE_MAC_INST_t *mac, int num_active_harqs) +static nfapi_nr_uci_indication_t *multiplex_uci_ind(NR_UE_MAC_INST_t *mac, int sfn_slot) { - AssertFatal(num_active_harqs >= 0, "Invalid value for num_active_harqs %d\n", num_active_harqs); - if (num_active_harqs == 0) - { - return NULL; - } - if (num_active_harqs != nr_uci_ind_queue.num_items) - { - LOG_I(NR_MAC, "The number of active harqs %d doesn't match the number of UCIs in the queue %lu\n", - num_active_harqs, nr_uci_ind_queue.num_items); - return NULL; - } + int num_0_1 = 0; + int num_2_3_4 = 0; + int num_items_in_queue = nr_uci_ind_queue.num_items; nfapi_nr_uci_indication_t *uci_ind = MALLOC(sizeof(*uci_ind)); uci_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION; - uci_ind->sfn = NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_harq_sfn_slot); - uci_ind->slot = NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot); - uci_ind->num_ucis = num_active_harqs; - uci_ind->uci_list = CALLOC(uci_ind->num_ucis, sizeof(*uci_ind->uci_list)); - for (int i = 0; i < num_active_harqs; i++) + uci_ind->num_ucis = 0; + uci_ind->uci_list = CALLOC(num_items_in_queue, sizeof(*uci_ind->uci_list)); + for (int i = 0; i < num_items_in_queue; i++) { - nfapi_nr_uci_indication_t *queued_uci_ind = get_queue(&nr_uci_ind_queue); - AssertFatal(queued_uci_ind, "There was not a UCI in the queue!\n"); - nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[i].pucch_pdu_format_0_1; + nfapi_nr_uci_indication_t *queued_uci_ind = unqueue_matching(&nr_uci_ind_queue, + MAX_QUEUE_SIZE, + sfn_slot_matcher, + &sfn_slot); + if (!queued_uci_ind) + { + LOG_I(NR_MAC, "There was not a matching UCI with sfn %d, slot %d in queue\n", + NFAPI_SFNSLOT2SFN(sfn_slot), NFAPI_SFNSLOT2SLOT(sfn_slot)); + break; + } /* In openair1/SCHED_NR_UE/fapi_nr_ue_l1.c nr_ue_schedule_response_stub(), the number of UCIs is hard coded to 1. This is why we always use index 0 of the @@ -536,19 +628,51 @@ static nfapi_nr_uci_indication_t *multiplex_uci_ind(NR_UE_MAC_INST_t *mac, int n queued_uci_ind->num_ucis); uci_ind->uci_list[i].pdu_type = queued_uci_ind->uci_list[0].pdu_type; uci_ind->uci_list[i].pdu_size = queued_uci_ind->uci_list[0].pdu_size; + if (uci_ind->uci_list[i].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE) + { + num_0_1++; + nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[i].pucch_pdu_format_0_1; + nfapi_nr_uci_pucch_pdu_format_0_1_t *queued_pdu_0_1 = &queued_uci_ind->uci_list[0].pucch_pdu_format_0_1; + pdu_0_1->handle = queued_pdu_0_1->handle; + pdu_0_1->rnti = queued_pdu_0_1->rnti; + pdu_0_1->pucch_format = queued_pdu_0_1->pucch_format; + pdu_0_1->ul_cqi = queued_pdu_0_1->ul_cqi; + pdu_0_1->timing_advance = queued_pdu_0_1->timing_advance; + pdu_0_1->rssi = queued_pdu_0_1->rssi; + } + if (uci_ind->uci_list[i].pdu_type == NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE) + { + num_2_3_4++; + nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[i].pucch_pdu_format_2_3_4; + nfapi_nr_uci_pucch_pdu_format_2_3_4_t *queued_pdu_2_3_4 = &queued_uci_ind->uci_list[0].pucch_pdu_format_2_3_4; + pdu_2_3_4->handle = queued_pdu_2_3_4->handle; + pdu_2_3_4->rnti = queued_pdu_2_3_4->rnti; + pdu_2_3_4->pucch_format = queued_pdu_2_3_4->pucch_format; + pdu_2_3_4->ul_cqi = queued_pdu_2_3_4->ul_cqi; + pdu_2_3_4->timing_advance = queued_pdu_2_3_4->timing_advance; + pdu_2_3_4->rssi = queued_pdu_2_3_4->rssi; + pdu_2_3_4->pduBitmap = queued_pdu_2_3_4->pduBitmap; + pdu_2_3_4->csi_part1.csi_part1_bit_len = queued_pdu_2_3_4->csi_part1.csi_part1_bit_len; + AssertFatal(!pdu_2_3_4->csi_part1.csi_part1_payload, "pdu_2_3_4->csi_part1.csi_part1_payload != NULL\n"); + pdu_2_3_4->csi_part1.csi_part1_payload = CALLOC((int)((pdu_2_3_4->csi_part1.csi_part1_bit_len / 8) + 1), + sizeof(pdu_2_3_4->csi_part1.csi_part1_payload)); + memcpy(pdu_2_3_4->csi_part1.csi_part1_payload, queued_pdu_2_3_4->csi_part1.csi_part1_payload, + sizeof(*queued_pdu_2_3_4->csi_part1.csi_part1_payload)); + } + uci_ind->num_ucis = num_2_3_4 + num_0_1; - nfapi_nr_uci_pucch_pdu_format_0_1_t *queued_pdu_0_1 = &queued_uci_ind->uci_list[0].pucch_pdu_format_0_1; - pdu_0_1->handle = queued_pdu_0_1->handle; - pdu_0_1->rnti = queued_pdu_0_1->rnti; - pdu_0_1->pucch_format = queued_pdu_0_1->pucch_format; - pdu_0_1->ul_cqi = queued_pdu_0_1->ul_cqi; - pdu_0_1->timing_advance = queued_pdu_0_1->timing_advance; - pdu_0_1->rssi = queued_pdu_0_1->rssi; free(queued_uci_ind->uci_list); queued_uci_ind->uci_list = NULL; free(queued_uci_ind); queued_uci_ind = NULL; } + + if (num_2_3_4 > 0 && num_0_1 > 0) + { + LOG_E(NR_MAC, "We have a harq ACK/NACK while CSI reporting as seprate UCIs but we shouldn't. " + "We multiplex before queueing the UCI!!!\n"); + abort(); + } return uci_ind; } @@ -556,6 +680,7 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n { NR_UE_MAC_INST_t *mac = get_mac_inst(dl_info->module_id); int num_pdus = ul_tti_req->n_pdus; + int sfn_slot = NFAPI_SFNSLOT2HEX(ul_tti_req->SFN, ul_tti_req->Slot); AssertFatal(num_pdus >= 0, "Invalid ul_tti_request number of PDUS\n"); AssertFatal(num_pdus <= sizeof(ul_tti_req->pdus_list) / sizeof(ul_tti_req->pdus_list[0]), "Too many pdus %d in ul_tti_req\n", num_pdus); @@ -570,38 +695,67 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n { AssertFatal(nr_uci_ind_queue.num_items >= 0, "Invalid num_items in UCI_ind queue %lu\n", nr_uci_ind_queue.num_items); - int num_active_harqs = pdu_list->pucch_pdu.bit_len_harq; - LOG_I(NR_MAC, "The number of active harqs %d from ul_tti_req\n", num_active_harqs); - nfapi_nr_uci_indication_t *uci_ind = multiplex_uci_ind(mac, num_active_harqs); + + nfapi_nr_uci_indication_t *uci_ind = multiplex_uci_ind(mac, sfn_slot); if (uci_ind && uci_ind->num_ucis > 0) { - LOG_D(NR_MAC, "This is the SFN/SF [%d, %d] and RNTI %x of the UCI ind. ul_tti_req.pdu[%d]->rnti = %x \n", - uci_ind->sfn, uci_ind->slot, uci_ind->uci_list[0].pucch_pdu_format_0_1.rnti, i, ul_tti_req->pdus_list[i].pucch_pdu.rnti); uci_ind->sfn = ul_tti_req->SFN; uci_ind->slot = ul_tti_req->Slot; + LOG_D(NR_MAC, "This is the SFN/SF [%d, %d] and RNTI %x of the UCI ind. ul_tti_req.pdu[%d]->rnti = %x \n", + uci_ind->sfn, uci_ind->slot, uci_ind->uci_list[0].pucch_pdu_format_0_1.rnti, i, ul_tti_req->pdus_list[i].pucch_pdu.rnti); for (int j = 0; j < uci_ind->num_ucis; j++) { - nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[j].pucch_pdu_format_0_1; - if (pdu_list->pucch_pdu.sr_flag) + if (uci_ind->uci_list[j].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE) { - LOG_D(NR_MAC, "We have the SR flag in pdu i %d\n", i); - pdu_0_1->pduBitmap = 1; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR - pdu_0_1->sr = CALLOC(1, sizeof(*pdu_0_1->sr)); - pdu_0_1->sr->sr_confidence_level = 0; - pdu_0_1->sr->sr_indication = 1; - } - if (pdu_list->pucch_pdu.bit_len_harq > 0) - { - LOG_D(NR_MAC, "We have the Harq len bits %d\n", pdu_list->pucch_pdu.bit_len_harq); - pdu_0_1->pduBitmap = 2; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR - pdu_0_1->harq = CALLOC(1, sizeof(*pdu_0_1->harq)); - pdu_0_1->harq->num_harq = 1; - pdu_0_1->harq->harq_confidence_level = 0; - pdu_0_1->harq->harq_list = CALLOC(pdu_0_1->harq->num_harq, sizeof(*pdu_0_1->harq->harq_list)); - for (int k = 0; k < pdu_0_1->harq->num_harq; k++) + nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[j].pucch_pdu_format_0_1; + if (pdu_list->pucch_pdu.sr_flag) { - pdu_0_1->harq->harq_list[k].harq_value = 0; + pdu_0_1->pduBitmap = 1; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR + pdu_0_1->sr = CALLOC(1, sizeof(*pdu_0_1->sr)); + pdu_0_1->sr->sr_confidence_level = 0; + pdu_0_1->sr->sr_indication = 1; + } + if (pdu_list->pucch_pdu.bit_len_harq > 0) + { + pdu_0_1->pduBitmap = 2; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR + pdu_0_1->harq = CALLOC(1, sizeof(*pdu_0_1->harq)); + pdu_0_1->harq->num_harq = 1; + pdu_0_1->harq->harq_confidence_level = 0; + pdu_0_1->harq->harq_list = CALLOC(pdu_0_1->harq->num_harq, sizeof(*pdu_0_1->harq->harq_list)); + for (int k = 0; k < pdu_0_1->harq->num_harq; k++) + { + pdu_0_1->harq->harq_list[k].harq_value = 0; + } + } + } + if (uci_ind->uci_list[j].pdu_type == NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE) + { + nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[j].pucch_pdu_format_2_3_4; + if (pdu_list->pucch_pdu.sr_flag) + { + pdu_2_3_4->pduBitmap = 5; + pdu_2_3_4->sr.sr_bit_len = 0; + AssertFatal(!pdu_2_3_4->sr.sr_payload, "pdu_2_3_4->sr.sr_payload != NULL\n"); + pdu_2_3_4->sr.sr_payload = CALLOC((int)((pdu_2_3_4->sr.sr_bit_len / 8) + 1), + sizeof(*pdu_2_3_4->sr.sr_payload)); + } + if (pdu_list->pucch_pdu.bit_len_harq > 0) + { + if (pdu_list->pucch_pdu.sr_flag) + { + pdu_2_3_4->pduBitmap = 7; + } + pdu_2_3_4->harq.harq_bit_len = pdu_list->pucch_pdu.bit_len_harq; + LOG_D(NR_MAC, "This is bit_len_harq %d and pdu_2_3_4->pduBitmap %d\n", + pdu_list->pucch_pdu.bit_len_harq, pdu_2_3_4->pduBitmap); + pdu_2_3_4->harq.harq_crc = 0; + AssertFatal(!pdu_2_3_4->harq.harq_payload, "pdu_2_3_4->harq.harq_payload != NULL\n"); + pdu_2_3_4->harq.harq_payload = CALLOC((int)((pdu_2_3_4->harq.harq_bit_len / 8) + 1), + sizeof(*pdu_2_3_4->harq.harq_payload)); + /* TODO: Later, when abstracting, we can set particular bits in the + payload to 0 to indicate a NACK. For now, we memset all bits to 1. */ + memset(pdu_2_3_4->harq.harq_payload, 0xff, sizeof(*pdu_2_3_4->harq.harq_payload)); } } } @@ -612,27 +766,7 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n }; send_nsa_standalone_msg(&UL_INFO, uci_ind->header.message_id); sent_uci = true; - - for (int k = 0; k < uci_ind->num_ucis; k++) - { - nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[k].pucch_pdu_format_0_1; - if (pdu_list->pucch_pdu.sr_flag) - { - free(pdu_0_1->sr); - pdu_0_1->sr = NULL; - } - if (pdu_list->pucch_pdu.bit_len_harq > 1) - { - free(pdu_0_1->harq->harq_list); - pdu_0_1->harq->harq_list = NULL; - free(pdu_0_1->harq); - pdu_0_1->harq = NULL; - } - } - free(uci_ind->uci_list); - uci_ind->uci_list = NULL; - free(uci_ind); - uci_ind = NULL; + free_uci_inds(uci_ind); } } } @@ -890,28 +1024,9 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea } LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST message in SFN/slot %d %d.\n", ul_tti_request->SFN, ul_tti_request->Slot); - if (nr_uci_ind_queue.num_items > 0) //TODO: In the future UL_TTIs can be for ULSCH and SRS. + if (ul_tti_request && ul_tti_request->n_pdus > 0) { - LOG_D(NR_MAC, "We added UL_TTI_REQ to queue for sfn slot %d %d\n", - ul_tti_request->SFN, ul_tti_request->Slot); - if (!put_queue(&nr_ul_tti_req_queue, ul_tti_request)) - { - LOG_E(NR_PHY, "put_queue failed for ul_tti_request.\n"); - free(ul_tti_request); - ul_tti_request = NULL; - } - } - /* TODO: This indicates that dl_tti_req was late or never arrived. If there are - not any prepared uci indications, the NRUE likely never had time to - populate the message is the dl_tti_req came in late and we received a - ul_tti_req immediately after the dl_tti_request. This is an attempt to - mitigate proxy timing issues. */ - else if (nr_uci_ind_queue.num_items == 0) - { - LOG_D(NR_MAC, "We added UL_TTI_REQ to queue for sfn slot %d %d\n", - ul_tti_request->SFN, ul_tti_request->Slot); - nfapi_nr_ul_tti_request_t *evicted_ul_tti_req = put_queue_replace(&nr_wait_ul_tti_req_queue, ul_tti_request); - free(evicted_ul_tti_req); + check_and_process_dci(NULL, NULL, NULL, ul_tti_request); } break; } diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index 2a8a514769..039b919b12 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -240,6 +240,8 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, nfapi_nr_ul_dci_request_t *ul_dci_request, nfapi_nr_ul_tti_request_t *ul_tti_request); +bool sfn_slot_matcher(void *wanted, void *candidate); + /**\brief done free of memory allocation by module_id and release to pointer pool. \param module_id module id*/ int nr_ue_if_module_kill(uint32_t module_id); From 8c2a067a2268d2b96f7761effb1d4c199904025a Mon Sep 17 00:00:00 2001 From: Melissa Date: Fri, 21 Jan 2022 23:44:28 +0000 Subject: [PATCH 005/150] Merge branch 'episys/david/checking_downlink_siso_model' into 'episys/master-nsa' Downlink SISO modeling See merge request aburger/openairinterface5g!104 --- executables/nr-ue.c | 47 +- executables/nr-uesoftmodem.c | 68 ++- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 157 +++++-- .../AWGN/AWGN_results/mcs0_awgn_5G.csv | 62 +++ .../AWGN/AWGN_results/mcs10_awgn_5G.csv | 92 ++++ .../AWGN/AWGN_results/mcs11_awgn_5G.csv | 92 ++++ .../AWGN/AWGN_results/mcs12_awgn_5G.csv | 92 ++++ .../AWGN/AWGN_results/mcs13_awgn_5G.csv | 72 +++ .../AWGN/AWGN_results/mcs14_awgn_5G.csv | 72 +++ .../AWGN/AWGN_results/mcs15_awgn_5G.csv | 72 +++ .../AWGN/AWGN_results/mcs16_awgn_5G.csv | 72 +++ .../AWGN/AWGN_results/mcs17_awgn_5G.csv | 72 +++ .../AWGN/AWGN_results/mcs18_awgn_5G.csv | 72 +++ .../AWGN/AWGN_results/mcs19_awgn_5G.csv | 72 +++ .../AWGN/AWGN_results/mcs1_awgn_5G.csv | 27 ++ .../AWGN/AWGN_results/mcs20_awgn_5G.csv | 72 +++ .../AWGN/AWGN_results/mcs21_awgn_5G.csv | 72 +++ .../AWGN/AWGN_results/mcs22_awgn_5G.csv | 52 +++ .../AWGN/AWGN_results/mcs23_awgn_5G.csv | 92 ++++ .../AWGN/AWGN_results/mcs24_awgn_5G.csv | 92 ++++ .../AWGN/AWGN_results/mcs25_awgn_5G.csv | 92 ++++ .../AWGN/AWGN_results/mcs26_awgn_5G.csv | 92 ++++ .../AWGN/AWGN_results/mcs27_awgn_5G.csv | 92 ++++ .../AWGN/AWGN_results/mcs28_awgn_5G.csv | 92 ++++ .../AWGN/AWGN_results/mcs2_awgn_5G.csv | 62 +++ .../AWGN/AWGN_results/mcs3_awgn_5G.csv | 62 +++ .../AWGN/AWGN_results/mcs4_awgn_5G.csv | 62 +++ .../AWGN/AWGN_results/mcs5_awgn_5G.csv | 62 +++ .../AWGN/AWGN_results/mcs6_awgn_5G.csv | 62 +++ .../AWGN/AWGN_results/mcs7_awgn_5G.csv | 62 +++ .../AWGN/AWGN_results/mcs8_awgn_5G.csv | 62 +++ .../AWGN/AWGN_results/mcs9_awgn_5G.csv | 64 +++ openair2/LAYER2/NR_MAC_COMMON/nr_mac.h | 4 + openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 5 +- .../LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c | 2 +- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 434 ++++++++++++++---- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h | 26 ++ openair2/RRC/NR_UE/rrc_UE.c | 1 - openair2/RRC/NR_UE/rrc_proto.h | 1 - 39 files changed, 2697 insertions(+), 163 deletions(-) create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs0_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs10_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs11_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs12_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs13_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs14_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs15_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs16_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs17_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs18_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs19_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs1_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs20_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs21_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs22_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs23_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs24_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs25_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs26_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs27_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs28_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs2_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs3_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs4_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs5_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs6_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs7_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs8_awgn_5G.csv create mode 100644 openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs9_awgn_5G.csv diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 2cbeaf502c..86dc32674b 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -197,10 +197,34 @@ static void L1_nsa_prach_procedures(frame_t frame, int slot, fapi_nr_ul_config_p static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot) { nfapi_nr_rach_indication_t *rach_ind = unqueue_matching(&nr_rach_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot); - nfapi_nr_rx_data_indication_t *rx_ind = unqueue_matching(&nr_rx_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot); - nfapi_nr_crc_indication_t *crc_ind = unqueue_matching(&nr_crc_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot); nfapi_nr_dl_tti_request_t *dl_tti_request = get_queue(&nr_dl_tti_req_queue); nfapi_nr_ul_dci_request_t *ul_dci_request = get_queue(&nr_ul_dci_req_queue); + LOG_D(NR_MAC, "Try to get a ul_tti_req for HARQ sfn/slot %d %d from queue with %lu items\n", + NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_harq_sfn_slot), + NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot), nr_ul_tti_req_queue.num_items); + nfapi_nr_ul_tti_request_t *ul_tti_request_harq = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.active_harq_sfn_slot); + if (ul_tti_request_harq && ul_tti_request_harq->n_pdus > 0) + { + check_and_process_dci(NULL, NULL, NULL, ul_tti_request_harq); + } + + LOG_D(NR_MAC, "Try to get a ul_tti_req by matching CSI active SFN %d/SLOT %d from queue with %lu items\n", + NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_uci_sfn_slot), + NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_uci_sfn_slot), nr_ul_tti_req_queue.num_items); + nfapi_nr_ul_tti_request_t *ul_tti_request_uci = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.active_uci_sfn_slot); + if (ul_tti_request_uci && ul_tti_request_uci->n_pdus > 0) + { + check_and_process_dci(NULL, NULL, NULL, ul_tti_request_uci); + } + + LOG_D(NR_MAC, "Try to get a ul_tti_req by matching CRC active SFN %d/SLOT %d from queue with %lu items\n", + NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.crc_rx_ind_sfn_slot), + NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.crc_rx_ind_sfn_slot), nr_ul_tti_req_queue.num_items); + nfapi_nr_ul_tti_request_t *ul_tti_request_crc = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.crc_rx_ind_sfn_slot); + if (ul_tti_request_crc && ul_tti_request_crc->n_pdus > 0) + { + check_and_process_dci(NULL, NULL, NULL, ul_tti_request_crc); + } if (rach_ind && rach_ind->number_of_pdus > 0) { @@ -216,24 +240,6 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot) free(rach_ind); nr_Msg1_transmitted(0, 0, NFAPI_SFNSLOT2SFN(sfn_slot), 0); } - if (crc_ind && crc_ind->number_crcs > 0) - { - NR_UL_IND_t UL_INFO = { - .crc_ind = *crc_ind, - }; - send_nsa_standalone_msg(&UL_INFO, crc_ind->header.message_id); - free(crc_ind->crc_list); - free(crc_ind); - } - if (rx_ind && rx_ind->number_of_pdus > 0) - { - NR_UL_IND_t UL_INFO = { - .rx_ind = *rx_ind, - }; - send_nsa_standalone_msg(&UL_INFO, rx_ind->header.message_id); - free(rx_ind->pdu_list); - free(rx_ind); - } if (dl_tti_request) { int dl_tti_sfn_slot = NFAPI_SFNSLOT2HEX(dl_tti_request->SFN, dl_tti_request->Slot); @@ -313,7 +319,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) reset_queue(&nr_tx_req_queue); reset_queue(&nr_ul_dci_req_queue); reset_queue(&nr_ul_tti_req_queue); - reset_queue(&nr_wait_ul_tti_req_queue); NR_PRACH_RESOURCES_t prach_resources; memset(&prach_resources, 0, sizeof(prach_resources)); diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index ddbbbdf52c..8fec3b3ad1 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -50,6 +50,7 @@ #include "LAYER2/MAC/mac_vars.h" #include "RRC/LTE/rrc_vars.h" #include "PHY_INTERFACE/phy_interface_vars.h" +#include "NR_IF_Module.h" #include "openair1/SIMULATION/TOOLS/sim.h" #ifdef SMBV @@ -155,8 +156,11 @@ uint32_t N_RB_DL = 106; /* see file openair2/LAYER2/MAC/main.c for why abstraction_flag is needed * this is very hackish - find a proper solution */ -uint8_t abstraction_flag=0; +uint8_t abstraction_flag = 0; +nr_bler_struct nr_bler_data[NUM_MCS]; + +static void init_bler_table(void); /*---------------------BMC: timespec helpers -----------------------------*/ @@ -251,7 +255,6 @@ void init_tpools(uint8_t nun_dlsch_threads) { free(params); init_dlsch_tpool( nun_dlsch_threads); } - static void get_options(void) { nrUE_params.ofdm_offset_divisor = 8; @@ -466,6 +469,7 @@ int main( int argc, char **argv ) { PHY_vars_UE_g[0] = malloc(sizeof(PHY_VARS_NR_UE *)*MAX_NUM_CCs); if (get_softmodem_params()->emulate_l1) { RCconfig_nr_ue_L1(); + init_bler_table(); } if (get_softmodem_params()->do_ra) @@ -546,3 +550,63 @@ int main( int argc, char **argv ) { return 0; } + +// Read in each MCS file and build BLER-SINR-TB table +static void init_bler_table(void) +{ + const char *openair_dir = getenv("OPENAIR_DIR"); + if (!openair_dir) + { + LOG_E(MAC, "No $OPENAIR_DIR\n"); + abort(); + } + + for (unsigned int i = 0; i < NUM_MCS; i++) + { + char fName[1024]; + snprintf(fName, sizeof(fName), "%s/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs%d_awgn_5G.csv", openair_dir, i); + FILE *pFile = fopen(fName, "r"); + if (!pFile) + { + LOG_E(MAC, "Bler File ERROR! - fopen(), file: %s\n", fName); + abort(); + } + size_t bufSize = 1024; + char * line = NULL; + char * token; + char * temp = NULL; + int nlines = 0; + while (getline(&line, &bufSize, pFile) > 0) + { + if (!strncmp(line, "SNR", 3)) + { + continue; + } + + if (nlines > NUM_SINR) + { + LOG_E(MAC, "BLER FILE ERROR - num lines greater than expected - file: %s\n", fName); + abort(); + } + + token = strtok_r(line, ";", &temp); + int ncols = 0; + while (token != NULL) + { + if (ncols > NUM_BLER_COL) + { + LOG_E(MAC, "BLER FILE ERROR - num of cols greater than expected\n"); + abort(); + } + + nr_bler_data[i].bler_table[nlines][ncols] = strtof(token, NULL); + ncols++; + + token = strtok_r(NULL, ";", &temp); + } + nlines++; + } + nr_bler_data[i].length = nlines; + fclose(pFile); + } +} diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 7798e789a3..799b759292 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -37,7 +37,6 @@ #include "harq_nr.h" //#include "PHY/phy_vars_nr_ue.h" #include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h" - #include "PHY/defs_nr_UE.h" #include "PHY/impl_defs_nr.h" #include "utils.h" @@ -50,6 +49,30 @@ queue_t nr_rx_ind_queue; queue_t nr_crc_ind_queue; queue_t nr_uci_ind_queue; +static void fill_uci_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4, + fapi_nr_ul_config_pucch_pdu *pucch_pdu) +{ + memset(pdu_2_3_4, 0, sizeof(*pdu_2_3_4)); + pdu_2_3_4->handle = 0; + pdu_2_3_4->rnti = pucch_pdu->rnti; + pdu_2_3_4->pucch_format = 2; + pdu_2_3_4->ul_cqi = 255; + pdu_2_3_4->timing_advance = 0; + pdu_2_3_4->rssi = 0; + // TODO: Eventually check 38.212:Sect.631 to know when to use csi_part2, for now only using csi_part1 + pdu_2_3_4->pduBitmap = 4; + pdu_2_3_4->csi_part1.csi_part1_bit_len = pucch_pdu->nr_of_symbols; + int csi_part1_byte_len = (int)((pdu_2_3_4->csi_part1.csi_part1_bit_len / 8) + 1); + AssertFatal(!pdu_2_3_4->csi_part1.csi_part1_payload, "pdu_2_3_4->csi_part1.csi_part1_payload != NULL\n"); + pdu_2_3_4->csi_part1.csi_part1_payload = CALLOC(csi_part1_byte_len, + sizeof(pdu_2_3_4->csi_part1.csi_part1_payload)); + for (int k = 0; k < csi_part1_byte_len; k++) + { + pdu_2_3_4->csi_part1.csi_part1_payload[k] = (pucch_pdu->payload >> (k * 8)) & 0xff; + } + pdu_2_3_4->csi_part1.csi_part1_crc = 0; +} + int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response) { NR_UE_MAC_INST_t *mac = get_mac_inst(0); if(scheduled_response != NULL) @@ -61,7 +84,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response "Too many ul_config pdus %d", ul_config->number_pdus); for (int i = 0; i < ul_config->number_pdus; ++i) { - LOG_I(PHY, "In %s: processing type %d PDU of %d total UL PDUs (ul_config %p) \n", + LOG_I(NR_PHY, "In %s: processing type %d PDU of %d total UL PDUs (ul_config %p) \n", __FUNCTION__, ul_config->ul_config_list[i].pdu_type, ul_config->number_pdus, ul_config); uint8_t pdu_type = ul_config->ul_config_list[i].pdu_type; @@ -99,6 +122,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response crc_ind->number_crcs = scheduled_response->ul_config->number_pdus; crc_ind->sfn = scheduled_response->ul_config->sfn; crc_ind->slot = scheduled_response->ul_config->slot; + mac->nr_ue_emul_l1.crc_rx_ind_sfn_slot = NFAPI_SFNSLOT2HEX(crc_ind->sfn, crc_ind->slot); crc_ind->crc_list = CALLOC(crc_ind->number_crcs, sizeof(*crc_ind->crc_list)); for (int j = 0; j < crc_ind->number_crcs; j++) { @@ -112,6 +136,8 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response crc_ind->crc_list[j].tb_crc_status = 0; crc_ind->crc_list[j].timing_advance = scheduled_response->tx_request->tx_config.timing_advance; crc_ind->crc_list[j].ul_cqi = 255; + LOG_D(NR_MAC, "This is sched sfn/sl [%d %d] and crc sfn/sl [%d %d] with mcs_index in ul_cqi -> %d\n", + scheduled_response->frame, scheduled_response->slot, crc_ind->sfn, crc_ind->slot,pusch_config_pdu->mcs_index); } if (!put_queue(&nr_rx_ind_queue, rx_ind)) @@ -154,45 +180,13 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response uci_ind->uci_list = CALLOC(uci_ind->num_ucis, sizeof(*uci_ind->uci_list)); for (int j = 0; j < uci_ind->num_ucis; j++) { - if (ul_config->ul_config_list[i].pucch_config_pdu.format_type == 2) + LOG_I(NR_MAC, "ul_config->ul_config_list[%d].pucch_config_pdu.n_bit = %d", i, ul_config->ul_config_list[i].pucch_config_pdu.n_bit); + if (ul_config->ul_config_list[i].pucch_config_pdu.n_bit > 3 && mac->nr_ue_emul_l1.num_csi_reports > 0) { - nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[j].pucch_pdu_format_2_3_4; uci_ind->uci_list[j].pdu_type = NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE; uci_ind->uci_list[j].pdu_size = sizeof(nfapi_nr_uci_pucch_pdu_format_2_3_4_t); - memset(pdu_2_3_4, 0, sizeof(*pdu_2_3_4)); - pdu_2_3_4->handle = 0; - pdu_2_3_4->rnti = ul_config->ul_config_list[i].pucch_config_pdu.rnti; - pdu_2_3_4->pucch_format = ul_config->ul_config_list[i].pucch_config_pdu.format_type; - pdu_2_3_4->ul_cqi = 255; - pdu_2_3_4->timing_advance = 0; - pdu_2_3_4->rssi = 0; - // TODO: Eventually check 38.212:Sect.631 to know when to use csi_part2, for now only using csi_part1 - pdu_2_3_4->pduBitmap = 4; - pdu_2_3_4->csi_part1.csi_part1_bit_len = ul_config->ul_config_list[i].pucch_config_pdu.nr_of_symbols; - int csi_part1_byte_len = (int)((pdu_2_3_4->csi_part1.csi_part1_bit_len / 8) + 1); - AssertFatal(!pdu_2_3_4->csi_part1.csi_part1_payload, "pdu_2_3_4->csi_part1.csi_part1_payload != NULL\n"); - pdu_2_3_4->csi_part1.csi_part1_payload = CALLOC(csi_part1_byte_len, - sizeof(pdu_2_3_4->csi_part1.csi_part1_payload)); - for (int k = 0; k < csi_part1_byte_len; k++) - { - pdu_2_3_4->csi_part1.csi_part1_payload[k] = (ul_config->ul_config_list[i]. - pucch_config_pdu.payload >> (k * 8)) & 0xff; - } - pdu_2_3_4->csi_part1.csi_part1_crc = 0; - int sfn_slot = NFAPI_SFNSLOT2HEX(uci_ind->sfn, uci_ind->slot); - nfapi_nr_uci_indication_t *queued_uci_ind = unqueue_matching(&nr_uci_ind_queue, - MAX_QUEUE_SIZE, - sfn_slot_matcher, - &sfn_slot); - if (queued_uci_ind) - { - LOG_I(NR_MAC, "There was a matching UCI with sfn %d, slot %d in queue\n", - NFAPI_SFNSLOT2SFN(sfn_slot), NFAPI_SFNSLOT2SLOT(sfn_slot)); - if (queued_uci_ind->uci_list[0].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE) - pdu_2_3_4->pduBitmap = 6; // harq: pduBitmap >> 1, csi: pduBitmap >> 2 - free(queued_uci_ind); - break; - } + nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[j].pucch_pdu_format_2_3_4; + fill_uci_2_3_4(pdu_2_3_4, &ul_config->ul_config_list[i].pucch_config_pdu); } else { @@ -206,12 +200,58 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response pdu_0_1->ul_cqi = 255; pdu_0_1->timing_advance = 0; pdu_0_1->rssi = 0; + + if (mac->nr_ue_emul_l1.num_harqs > 0) { + pdu_0_1->pduBitmap = 2; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR + pdu_0_1->harq = CALLOC(1, sizeof(*pdu_0_1->harq)); + pdu_0_1->harq->num_harq = 1; + pdu_0_1->harq->harq_confidence_level = 0; + int harq_pid = -1; + for (int k = 0; k < 16; k++) + { + LOG_D(NR_MAC, "dl_frame = %d sl_slot = %d feedback_to_ul = %d active_harq_sfn_slot = %d.%d\n", + mac->dl_harq_info[k].dl_frame, + mac->dl_harq_info[k].dl_slot, + mac->dl_harq_info[k].feedback_to_ul, + NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_harq_sfn_slot), + NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot)); + int sfn_slot = NFAPI_SFNSLOT2HEX(mac->dl_harq_info[k].dl_frame, + (mac->dl_harq_info[k].dl_slot + + mac->dl_harq_info[k].feedback_to_ul)); + if (!mac->dl_harq_info[k].active && + (sfn_slot == mac->nr_ue_emul_l1.active_harq_sfn_slot || + sfn_slot == mac->nr_ue_emul_l1.active_uci_sfn_slot)) + { + harq_pid = k; + LOG_D(NR_MAC, "Setting harq_pid = %d\n", k); + } + } + pdu_0_1->harq->harq_list = CALLOC(pdu_0_1->harq->num_harq, sizeof(*pdu_0_1->harq->harq_list)); + for (int k = 0; k < pdu_0_1->harq->num_harq; k++) + { + AssertFatal(harq_pid != -1, "No active harq_pid, sfn_slot = %u.%u", uci_ind->sfn, uci_ind->slot); + pdu_0_1->harq->harq_list[k].harq_value = !mac->dl_harq_info[harq_pid].ack; + } + } + } + int sfn_slot = NFAPI_SFNSLOT2HEX(uci_ind->sfn, uci_ind->slot); + nfapi_nr_uci_indication_t *queued_uci_ind = unqueue_matching(&nr_uci_ind_queue, + MAX_QUEUE_SIZE, + sfn_slot_matcher, + &sfn_slot); + if (queued_uci_ind) + { + LOG_I(NR_MAC, "There was a matching UCI with sfn %d, slot %d in queue\n", + NFAPI_SFNSLOT2SFN(sfn_slot), NFAPI_SFNSLOT2SLOT(sfn_slot)); + free(queued_uci_ind); + break; } } - LOG_I(NR_PHY, "In %s: Filled queue uci_ind_234 which was filled by ulconfig.\n" + LOG_I(NR_PHY, "In %s: Filled queue uci_ind_%d which was filled by ulconfig.\n" "uci_num %d, SFN/SLOT: [%d, %d]\n", - __FUNCTION__, uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); + __FUNCTION__, uci_ind->uci_list[0].pdu_type, + uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); if (!put_queue(&nr_uci_ind_queue, uci_ind)) { @@ -248,7 +288,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response nfapi_nr_uci_indication_t *uci_ind = CALLOC(1, sizeof(*uci_ind)); uci_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION; uci_ind->sfn = scheduled_response->frame; - uci_ind->slot = NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot); + uci_ind->slot = scheduled_response->slot; uci_ind->num_ucis = 1; uci_ind->uci_list = CALLOC(uci_ind->num_ucis, sizeof(*uci_ind->uci_list)); for (int j = 0; j < uci_ind->num_ucis; j++) @@ -263,6 +303,41 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response pdu_0_1->ul_cqi = 255; pdu_0_1->timing_advance = 0; pdu_0_1->rssi = 0; + pdu_0_1->pduBitmap = 2; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR + pdu_0_1->harq = CALLOC(1, sizeof(*pdu_0_1->harq)); + pdu_0_1->harq->num_harq = 1; + pdu_0_1->harq->harq_confidence_level = 0; + int harq_pid = -1; + for (int k = 0; k < 16; k++) + { + LOG_D(NR_MAC, "dl_frame = %d dl_slot = %d feedback_to_ul = %d active = %d k = %d " + "active_harq_sfn_slot = %d.%d " + "active_uci_sfn_slot = %d.%d\n", + mac->dl_harq_info[k].dl_frame, + mac->dl_harq_info[k].dl_slot, + mac->dl_harq_info[k].feedback_to_ul, + mac->dl_harq_info[k].active, + k, + NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_harq_sfn_slot), + NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot), + NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_uci_sfn_slot), + NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_uci_sfn_slot)); + int sfn_slot = NFAPI_SFNSLOT2HEX(mac->dl_harq_info[k].dl_frame, + (mac->dl_harq_info[k].dl_slot + + mac->dl_harq_info[k].feedback_to_ul)); + if (mac->dl_harq_info[k].active && + sfn_slot == mac->nr_ue_emul_l1.active_harq_sfn_slot) + { + harq_pid = k; + LOG_D(NR_MAC, "Setting harq_pid = %d\n", k); + } + } + pdu_0_1->harq->harq_list = CALLOC(pdu_0_1->harq->num_harq, sizeof(*pdu_0_1->harq->harq_list)); + for (int k = 0; k < pdu_0_1->harq->num_harq; k++) + { + AssertFatal(harq_pid != -1, "No active harq_pid, sfn_slot = %u.%u", uci_ind->sfn, uci_ind->slot); + pdu_0_1->harq->harq_list[k].harq_value = !mac->dl_harq_info[harq_pid].ack; + } } LOG_I(NR_PHY, "In %s: Filled queue uci_ind which was filled by dlconfig.\n" diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs0_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs0_awgn_5G.csv new file mode 100644 index 0000000000..ac9dd0b8ae --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs0_awgn_5G.csv @@ -0,0 +1,62 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.9;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.8;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.7;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.6;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.5;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.1;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.9;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.8;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.7;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.6;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.5;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.1;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-1.9;0;1864;0.2344;1499;1500;0;0;0;0;0;0;0 +-1.8;0;1864;0.2344;1499;1500;0;0;0;0;0;0;0 +-1.7;0;1864;0.2344;1498;1500;0;0;0;0;0;0;0 +-1.6;0;1864;0.2344;1498;1500;0;0;0;0;0;0;0 +-1.5;0;1864;0.2344;1497;1500;0;0;0;0;0;0;0 +-1.4;0;1864;0.2344;1445;1500;0;0;0;0;0;0;0 +-1.3;0;1864;0.2344;1394;1500;0;0;0;0;0;0;0 +-1.2;0;1864;0.2344;1346;1500;0;0;0;0;0;0;0 +-1.1;0;1864;0.2344;1299;1500;0;0;0;0;0;0;0 +-1;0;1864;0.2344;1253;1500;0;0;0;0;0;0;0 +-0.9;0;1864;0.2344;980;1500;0;0;0;0;0;0;0 +-0.8;0;1864;0.2344;767;1500;0;0;0;0;0;0;0 +-0.7;0;1864;0.2344;600;1500;0;0;0;0;0;0;0 +-0.6;0;1864;0.2344;469;1500;0;0;0;0;0;0;0 +-0.5;0;1864;0.2344;367;1500;0;0;0;0;0;0;0 +-0.4;0;1864;0.2344;215;1500;0;0;0;0;0;0;0 +-0.3;0;1864;0.2344;126;1500;0;0;0;0;0;0;0 +-0.2;0;1864;0.2344;74;1500;0;0;0;0;0;0;0 +-0.1;0;1864;0.2344;43;1500;0;0;0;0;0;0;0 +0;0;1864;0.2344;26;1500;0;0;0;0;0;0;0 +0.1;0;1864;0.2344;12;1500;0;0;0;0;0;0;0 +0.2;0;1864;0.2344;5;1500;0;0;0;0;0;0;0 +0.3;0;1864;0.2344;2;1500;0;0;0;0;0;0;0 +0.4;0;1864;0.2344;1;1500;0;0;0;0;0;0;0 +0.5;0;1864;0.2344;1;1500;0;0;0;0;0;0;0 +0.6;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +0.7;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +0.8;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +0.9;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.1;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.2;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.3;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.4;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.5;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.6;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.7;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.8;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.9;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +2;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs10_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs10_awgn_5G.csv new file mode 100644 index 0000000000..65de0084ce --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs10_awgn_5G.csv @@ -0,0 +1,92 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.1;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.2;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.6;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.7;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.8;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.9;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.1;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.2;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.6;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.7;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.8;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.9;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +5.1;10;10504;1.3281;1454;1500;0;0;0;0;0;0;0 +5.2;10;10504;1.3281;1410;1500;0;0;0;0;0;0;0 +5.3;10;10504;1.3281;1367;1500;0;0;0;0;0;0;0 +5.4;10;10504;1.3281;1325;1500;0;0;0;0;0;0;0 +5.5;10;10504;1.3281;1285;1500;0;0;0;0;0;0;0 +5.6;10;10504;1.3281;1026;1500;0;0;0;0;0;0;0 +5.7;10;10504;1.3281;819;1500;0;0;0;0;0;0;0 +5.8;10;10504;1.3281;654;1500;0;0;0;0;0;0;0 +5.9;10;10504;1.3281;522;1500;0;0;0;0;0;0;0 +6;10;10504;1.3281;417;1500;0;0;0;0;0;0;0 +6.1;10;10504;1.3281;309;1500;0;0;0;0;0;0;0 +6.2;10;10504;1.3281;229;1500;0;0;0;0;0;0;0 +6.3;10;10504;1.3281;169;1500;0;0;0;0;0;0;0 +6.4;10;10504;1.3281;125;1500;0;0;0;0;0;0;0 +6.5;10;10504;1.3281;93;1500;0;0;0;0;0;0;0 +6.6;10;10504;1.3281;64;1500;0;0;0;0;0;0;0 +6.7;10;10504;1.3281;44;1500;0;0;0;0;0;0;0 +6.8;10;10504;1.3281;31;1500;0;0;0;0;0;0;0 +6.9;10;10504;1.3281;21;1500;0;0;0;0;0;0;0 +7;10;10504;1.3281;15;1500;0;0;0;0;0;0;0 +7.1;10;10504;1.3281;7;1500;0;0;0;0;0;0;0 +7.2;10;10504;1.3281;3;1500;0;0;0;0;0;0;0 +7.3;10;10504;1.3281;1;1500;0;0;0;0;0;0;0 +7.4;10;10504;1.3281;1;1500;0;0;0;0;0;0;0 +7.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +7.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +7.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +7.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +7.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +12;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs11_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs11_awgn_5G.csv new file mode 100644 index 0000000000..3d1dbcad12 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs11_awgn_5G.csv @@ -0,0 +1,92 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.6;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.7;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.8;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.9;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.6;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.7;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.8;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.9;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.6;11;11784;1.4766;1494;1500;0;0;0;0;0;0;0 +5.7;11;11784;1.4766;1489;1500;0;0;0;0;0;0;0 +5.8;11;11784;1.4766;1483;1500;0;0;0;0;0;0;0 +5.9;11;11784;1.4766;1477;1500;0;0;0;0;0;0;0 +6;11;11784;1.4766;1472;1500;0;0;0;0;0;0;0 +6.1;11;11784;1.4766;1367;1500;0;0;0;0;0;0;0 +6.2;11;11784;1.4766;1269;1500;0;0;0;0;0;0;0 +6.3;11;11784;1.4766;1179;1500;0;0;0;0;0;0;0 +6.4;11;11784;1.4766;1095;1500;0;0;0;0;0;0;0 +6.5;11;11784;1.4766;1016;1500;0;0;0;0;0;0;0 +6.6;11;11784;1.4766;762;1500;0;0;0;0;0;0;0 +6.7;11;11784;1.4766;571;1500;0;0;0;0;0;0;0 +6.8;11;11784;1.4766;428;1500;0;0;0;0;0;0;0 +6.9;11;11784;1.4766;320;1500;0;0;0;0;0;0;0 +7;11;11784;1.4766;240;1500;0;0;0;0;0;0;0 +7.1;11;11784;1.4766;169;1500;0;0;0;0;0;0;0 +7.2;11;11784;1.4766;119;1500;0;0;0;0;0;0;0 +7.3;11;11784;1.4766;83;1500;0;0;0;0;0;0;0 +7.4;11;11784;1.4766;59;1500;0;0;0;0;0;0;0 +7.5;11;11784;1.4766;41;1500;0;0;0;0;0;0;0 +7.6;11;11784;1.4766;24;1500;0;0;0;0;0;0;0 +7.7;11;11784;1.4766;14;1500;0;0;0;0;0;0;0 +7.8;11;11784;1.4766;8;1500;0;0;0;0;0;0;0 +7.9;11;11784;1.4766;5;1500;0;0;0;0;0;0;0 +8;11;11784;1.4766;3;1500;0;0;0;0;0;0;0 +8.1;11;11784;1.4766;1;1500;0;0;0;0;0;0;0 +8.2;11;11784;1.4766;1;1500;0;0;0;0;0;0;0 +8.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +12;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs12_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs12_awgn_5G.csv new file mode 100644 index 0000000000..5ce8b9bb19 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs12_awgn_5G.csv @@ -0,0 +1,92 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.6;12;13576;1.6953;1498;1500;0;0;0;0;0;0;0 +6.7;12;13576;1.6953;1495;1500;0;0;0;0;0;0;0 +6.8;12;13576;1.6953;1493;1500;0;0;0;0;0;0;0 +6.9;12;13576;1.6953;1491;1500;0;0;0;0;0;0;0 +7;12;13576;1.6953;1488;1500;0;0;0;0;0;0;0 +7.1;12;13576;1.6953;1357;1500;0;0;0;0;0;0;0 +7.2;12;13576;1.6953;1238;1500;0;0;0;0;0;0;0 +7.3;12;13576;1.6953;1129;1500;0;0;0;0;0;0;0 +7.4;12;13576;1.6953;1029;1500;0;0;0;0;0;0;0 +7.5;12;13576;1.6953;939;1500;0;0;0;0;0;0;0 +7.6;12;13576;1.6953;632;1500;0;0;0;0;0;0;0 +7.7;12;13576;1.6953;425;1500;0;0;0;0;0;0;0 +7.8;12;13576;1.6953;286;1500;0;0;0;0;0;0;0 +7.9;12;13576;1.6953;193;1500;0;0;0;0;0;0;0 +8;12;13576;1.6953;130;1500;0;0;0;0;0;0;0 +8.1;12;13576;1.6953;91;1500;0;0;0;0;0;0;0 +8.2;12;13576;1.6953;64;1500;0;0;0;0;0;0;0 +8.3;12;13576;1.6953;45;1500;0;0;0;0;0;0;0 +8.4;12;13576;1.6953;32;1500;0;0;0;0;0;0;0 +8.5;12;13576;1.6953;23;1500;0;0;0;0;0;0;0 +8.6;12;13576;1.6953;12;1500;0;0;0;0;0;0;0 +8.7;12;13576;1.6953;6;1500;0;0;0;0;0;0;0 +8.8;12;13576;1.6953;3;1500;0;0;0;0;0;0;0 +8.9;12;13576;1.6953;2;1500;0;0;0;0;0;0;0 +9;12;13576;1.6953;1;1500;0;0;0;0;0;0;0 +9.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +12;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs13_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs13_awgn_5G.csv new file mode 100644 index 0000000000..a91d924705 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs13_awgn_5G.csv @@ -0,0 +1,72 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +7;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.1;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.2;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.3;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.4;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.5;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.6;13;15112;1.9141;1444;1500;0;0;0;0;0;0;0 +7.7;13;15112;1.9141;1391;1500;0;0;0;0;0;0;0 +7.8;13;15112;1.9141;1340;1500;0;0;0;0;0;0;0 +7.9;13;15112;1.9141;1290;1500;0;0;0;0;0;0;0 +8;13;15112;1.9141;1243;1500;0;0;0;0;0;0;0 +8.1;13;15112;1.9141;878;1500;0;0;0;0;0;0;0 +8.2;13;15112;1.9141;620;1500;0;0;0;0;0;0;0 +8.3;13;15112;1.9141;438;1500;0;0;0;0;0;0;0 +8.4;13;15112;1.9141;309;1500;0;0;0;0;0;0;0 +8.5;13;15112;1.9141;219;1500;0;0;0;0;0;0;0 +8.6;13;15112;1.9141;173;1500;0;0;0;0;0;0;0 +8.7;13;15112;1.9141;137;1500;0;0;0;0;0;0;0 +8.8;13;15112;1.9141;109;1500;0;0;0;0;0;0;0 +8.9;13;15112;1.9141;86;1500;0;0;0;0;0;0;0 +9;13;15112;1.9141;68;1500;0;0;0;0;0;0;0 +9.1;13;15112;1.9141;47;1500;0;0;0;0;0;0;0 +9.2;13;15112;1.9141;33;1500;0;0;0;0;0;0;0 +9.3;13;15112;1.9141;23;1500;0;0;0;0;0;0;0 +9.4;13;15112;1.9141;16;1500;0;0;0;0;0;0;0 +9.5;13;15112;1.9141;11;1500;0;0;0;0;0;0;0 +9.6;13;15112;1.9141;5;1500;0;0;0;0;0;0;0 +9.7;13;15112;1.9141;2;1500;0;0;0;0;0;0;0 +9.8;13;15112;1.9141;1;1500;0;0;0;0;0;0;0 +9.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +14;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs14_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs14_awgn_5G.csv new file mode 100644 index 0000000000..b28d592a5e --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs14_awgn_5G.csv @@ -0,0 +1,72 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +7;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.1;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.2;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.3;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.4;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.5;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.6;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.7;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.8;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.9;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.1;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.2;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.3;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.4;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.5;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.6;14;17424;2.1602;1497;1500;0;0;0;0;0;0;0 +8.7;14;17424;2.1602;1493;1500;0;0;0;0;0;0;0 +8.8;14;17424;2.1602;1490;1500;0;0;0;0;0;0;0 +8.9;14;17424;2.1602;1487;1500;0;0;0;0;0;0;0 +9;14;17424;2.1602;1484;1500;0;0;0;0;0;0;0 +9.1;14;17424;2.1602;1291;1500;0;0;0;0;0;0;0 +9.2;14;17424;2.1602;1123;1500;0;0;0;0;0;0;0 +9.3;14;17424;2.1602;977;1500;0;0;0;0;0;0;0 +9.4;14;17424;2.1602;850;1500;0;0;0;0;0;0;0 +9.5;14;17424;2.1602;739;1500;0;0;0;0;0;0;0 +9.6;14;17424;2.1602;508;1500;0;0;0;0;0;0;0 +9.7;14;17424;2.1602;349;1500;0;0;0;0;0;0;0 +9.8;14;17424;2.1602;239;1500;0;0;0;0;0;0;0 +9.9;14;17424;2.1602;164;1500;0;0;0;0;0;0;0 +10;14;17424;2.1602;113;1500;0;0;0;0;0;0;0 +10.1;14;17424;2.1602;85;1500;0;0;0;0;0;0;0 +10.2;14;17424;2.1602;63;1500;0;0;0;0;0;0;0 +10.3;14;17424;2.1602;47;1500;0;0;0;0;0;0;0 +10.4;14;17424;2.1602;35;1500;0;0;0;0;0;0;0 +10.5;14;17424;2.1602;27;1500;0;0;0;0;0;0;0 +10.6;14;17424;2.1602;12;1500;0;0;0;0;0;0;0 +10.7;14;17424;2.1602;6;1500;0;0;0;0;0;0;0 +10.8;14;17424;2.1602;3;1500;0;0;0;0;0;0;0 +10.9;14;17424;2.1602;1;1500;0;0;0;0;0;0;0 +11;14;17424;2.1602;1;1500;0;0;0;0;0;0;0 +11.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +14;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs15_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs15_awgn_5G.csv new file mode 100644 index 0000000000..a48c75a071 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs15_awgn_5G.csv @@ -0,0 +1,72 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.2;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.3;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.4;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.5;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.6;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.2;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.3;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.4;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.5;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.6;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +9.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +9.2;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0 +9.3;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0 +9.4;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0 +9.5;15;18960;2.4063;1498;1500;0;0;0;0;0;0;0 +9.6;15;18960;2.4063;1377;1500;0;0;0;0;0;0;0 +9.7;15;18960;2.4063;1265;1500;0;0;0;0;0;0;0 +9.8;15;18960;2.4063;1163;1500;0;0;0;0;0;0;0 +9.9;15;18960;2.4063;1069;1500;0;0;0;0;0;0;0 +10;15;18960;2.4063;982;1500;0;0;0;0;0;0;0 +10.1;15;18960;2.4063;664;1500;0;0;0;0;0;0;0 +10.2;15;18960;2.4063;450;1500;0;0;0;0;0;0;0 +10.3;15;18960;2.4063;304;1500;0;0;0;0;0;0;0 +10.4;15;18960;2.4063;206;1500;0;0;0;0;0;0;0 +10.5;15;18960;2.4063;139;1500;0;0;0;0;0;0;0 +10.6;15;18960;2.4063;113;1500;0;0;0;0;0;0;0 +10.7;15;18960;2.4063;92;1500;0;0;0;0;0;0;0 +10.8;15;18960;2.4063;75;1500;0;0;0;0;0;0;0 +10.9;15;18960;2.4063;61;1500;0;0;0;0;0;0;0 +11;15;18960;2.4063;50;1500;0;0;0;0;0;0;0 +11.1;15;18960;2.4063;29;1500;0;0;0;0;0;0;0 +11.2;15;18960;2.4063;17;1500;0;0;0;0;0;0;0 +11.3;15;18960;2.4063;10;1500;0;0;0;0;0;0;0 +11.4;15;18960;2.4063;6;1500;0;0;0;0;0;0;0 +11.5;15;18960;2.4063;3;1500;0;0;0;0;0;0;0 +11.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +11.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +11.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +11.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.1;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.2;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.3;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.4;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.5;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.1;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.2;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.3;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.4;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.5;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +14;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs16_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs16_awgn_5G.csv new file mode 100644 index 0000000000..cabe546aef --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs16_awgn_5G.csv @@ -0,0 +1,72 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +10;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +10.1;16;20496;2.5703;1424;1500;0;0;0;0;0;0;0 +10.2;16;20496;2.5703;1352;1500;0;0;0;0;0;0;0 +10.3;16;20496;2.5703;1283;1500;0;0;0;0;0;0;0 +10.4;16;20496;2.5703;1218;1500;0;0;0;0;0;0;0 +10.5;16;20496;2.5703;1157;1500;0;0;0;0;0;0;0 +10.6;16;20496;2.5703;775;1500;0;0;0;0;0;0;0 +10.7;16;20496;2.5703;519;1500;0;0;0;0;0;0;0 +10.8;16;20496;2.5703;348;1500;0;0;0;0;0;0;0 +10.9;16;20496;2.5703;233;1500;0;0;0;0;0;0;0 +11;16;20496;2.5703;156;1500;0;0;0;0;0;0;0 +11.1;16;20496;2.5703;132;1500;0;0;0;0;0;0;0 +11.2;16;20496;2.5703;111;1500;0;0;0;0;0;0;0 +11.3;16;20496;2.5703;94;1500;0;0;0;0;0;0;0 +11.4;16;20496;2.5703;79;1500;0;0;0;0;0;0;0 +11.5;16;20496;2.5703;67;1500;0;0;0;0;0;0;0 +11.6;16;20496;2.5703;44;1500;0;0;0;0;0;0;0 +11.7;16;20496;2.5703;29;1500;0;0;0;0;0;0;0 +11.8;16;20496;2.5703;19;1500;0;0;0;0;0;0;0 +11.9;16;20496;2.5703;12;1500;0;0;0;0;0;0;0 +12;16;20496;2.5703;8;1500;0;0;0;0;0;0;0 +12.1;16;20496;2.5703;4;1500;0;0;0;0;0;0;0 +12.2;16;20496;2.5703;2;1500;0;0;0;0;0;0;0 +12.3;16;20496;2.5703;1;1500;0;0;0;0;0;0;0 +12.4;16;20496;2.5703;1;1500;0;0;0;0;0;0;0 +12.5;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +12.6;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +12.7;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +12.8;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +12.9;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.1;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.2;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.3;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.4;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.5;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.6;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.7;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.8;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.9;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +14;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs17_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs17_awgn_5G.csv new file mode 100644 index 0000000000..5b26a5a722 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs17_awgn_5G.csv @@ -0,0 +1,72 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +10;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.1;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.2;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.3;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.4;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.5;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.6;17;20496;2.5664;1498;1500;0;0;0;0;0;0;0 +10.7;17;20496;2.5664;1496;1500;0;0;0;0;0;0;0 +10.8;17;20496;2.5664;1494;1500;0;0;0;0;0;0;0 +10.9;17;20496;2.5664;1493;1500;0;0;0;0;0;0;0 +11;17;20496;2.5664;1491;1500;0;0;0;0;0;0;0 +11.1;17;20496;2.5664;1336;1500;0;0;0;0;0;0;0 +11.2;17;20496;2.5664;1197;1500;0;0;0;0;0;0;0 +11.3;17;20496;2.5664;1072;1500;0;0;0;0;0;0;0 +11.4;17;20496;2.5664;961;1500;0;0;0;0;0;0;0 +11.5;17;20496;2.5664;861;1500;0;0;0;0;0;0;0 +11.6;17;20496;2.5664;603;1500;0;0;0;0;0;0;0 +11.7;17;20496;2.5664;423;1500;0;0;0;0;0;0;0 +11.8;17;20496;2.5664;296;1500;0;0;0;0;0;0;0 +11.9;17;20496;2.5664;208;1500;0;0;0;0;0;0;0 +12;17;20496;2.5664;146;1500;0;0;0;0;0;0;0 +12.1;17;20496;2.5664;125;1500;0;0;0;0;0;0;0 +12.2;17;20496;2.5664;107;1500;0;0;0;0;0;0;0 +12.3;17;20496;2.5664;92;1500;0;0;0;0;0;0;0 +12.4;17;20496;2.5664;79;1500;0;0;0;0;0;0;0 +12.5;17;20496;2.5664;68;1500;0;0;0;0;0;0;0 +12.6;17;20496;2.5664;50;1500;0;0;0;0;0;0;0 +12.7;17;20496;2.5664;37;1500;0;0;0;0;0;0;0 +12.8;17;20496;2.5664;28;1500;0;0;0;0;0;0;0 +12.9;17;20496;2.5664;20;1500;0;0;0;0;0;0;0 +13;17;20496;2.5664;15;1500;0;0;0;0;0;0;0 +13.1;17;20496;2.5664;9;1500;0;0;0;0;0;0;0 +13.2;17;20496;2.5664;5;1500;0;0;0;0;0;0;0 +13.3;17;20496;2.5664;3;1500;0;0;0;0;0;0;0 +13.4;17;20496;2.5664;2;1500;0;0;0;0;0;0;0 +13.5;17;20496;2.5664;1;1500;0;0;0;0;0;0;0 +13.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +13.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +13.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +13.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +17;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs18_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs18_awgn_5G.csv new file mode 100644 index 0000000000..bf4864701f --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs18_awgn_5G.csv @@ -0,0 +1,72 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +10;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.1;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.2;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.3;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.4;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.5;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.6;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.7;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.8;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.9;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +11;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +11.1;18;21504;2.7305;1499;1500;0;0;0;0;0;0;0 +11.2;18;21504;2.7305;1499;1500;0;0;0;0;0;0;0 +11.3;18;21504;2.7305;1498;1500;0;0;0;0;0;0;0 +11.4;18;21504;2.7305;1498;1500;0;0;0;0;0;0;0 +11.5;18;21504;2.7305;1497;1500;0;0;0;0;0;0;0 +11.6;18;21504;2.7305;1399;1500;0;0;0;0;0;0;0 +11.7;18;21504;2.7305;1307;1500;0;0;0;0;0;0;0 +11.8;18;21504;2.7305;1221;1500;0;0;0;0;0;0;0 +11.9;18;21504;2.7305;1141;1500;0;0;0;0;0;0;0 +12;18;21504;2.7305;1066;1500;0;0;0;0;0;0;0 +12.1;18;21504;2.7305;788;1500;0;0;0;0;0;0;0 +12.2;18;21504;2.7305;582;1500;0;0;0;0;0;0;0 +12.3;18;21504;2.7305;431;1500;0;0;0;0;0;0;0 +12.4;18;21504;2.7305;318;1500;0;0;0;0;0;0;0 +12.5;18;21504;2.7305;235;1500;0;0;0;0;0;0;0 +12.6;18;21504;2.7305;185;1500;0;0;0;0;0;0;0 +12.7;18;21504;2.7305;146;1500;0;0;0;0;0;0;0 +12.8;18;21504;2.7305;115;1500;0;0;0;0;0;0;0 +12.9;18;21504;2.7305;90;1500;0;0;0;0;0;0;0 +13;18;21504;2.7305;71;1500;0;0;0;0;0;0;0 +13.1;18;21504;2.7305;50;1500;0;0;0;0;0;0;0 +13.2;18;21504;2.7305;35;1500;0;0;0;0;0;0;0 +13.3;18;21504;2.7305;25;1500;0;0;0;0;0;0;0 +13.4;18;21504;2.7305;18;1500;0;0;0;0;0;0;0 +13.5;18;21504;2.7305;12;1500;0;0;0;0;0;0;0 +13.6;18;21504;2.7305;7;1500;0;0;0;0;0;0;0 +13.7;18;21504;2.7305;3;1500;0;0;0;0;0;0;0 +13.8;18;21504;2.7305;2;1500;0;0;0;0;0;0;0 +13.9;18;21504;2.7305;1;1500;0;0;0;0;0;0;0 +14;18;21504;2.7305;1;1500;0;0;0;0;0;0;0 +14.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +17;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs19_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs19_awgn_5G.csv new file mode 100644 index 0000000000..85e7f6a712 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs19_awgn_5G.csv @@ -0,0 +1,72 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +10;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.1;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.2;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.3;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.4;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.5;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.6;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.7;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.8;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.9;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.1;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.2;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.3;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.4;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.5;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.6;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.7;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.8;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.9;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +12;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +12.1;19;24072;3.0293;1499;1500;0;0;0;0;0;0;0 +12.2;19;24072;3.0293;1499;1500;0;0;0;0;0;0;0 +12.3;19;24072;3.0293;1498;1500;0;0;0;0;0;0;0 +12.4;19;24072;3.0293;1497;1500;0;0;0;0;0;0;0 +12.5;19;24072;3.0293;1497;1500;0;0;0;0;0;0;0 +12.6;19;24072;3.0293;1389;1500;0;0;0;0;0;0;0 +12.7;19;24072;3.0293;1290;1500;0;0;0;0;0;0;0 +12.8;19;24072;3.0293;1197;1500;0;0;0;0;0;0;0 +12.9;19;24072;3.0293;1111;1500;0;0;0;0;0;0;0 +13;19;24072;3.0293;1032;1500;0;0;0;0;0;0;0 +13.1;19;24072;3.0293;746;1500;0;0;0;0;0;0;0 +13.2;19;24072;3.0293;539;1500;0;0;0;0;0;0;0 +13.3;19;24072;3.0293;390;1500;0;0;0;0;0;0;0 +13.4;19;24072;3.0293;282;1500;0;0;0;0;0;0;0 +13.5;19;24072;3.0293;204;1500;0;0;0;0;0;0;0 +13.6;19;24072;3.0293;166;1500;0;0;0;0;0;0;0 +13.7;19;24072;3.0293;135;1500;0;0;0;0;0;0;0 +13.8;19;24072;3.0293;110;1500;0;0;0;0;0;0;0 +13.9;19;24072;3.0293;89;1500;0;0;0;0;0;0;0 +14;19;24072;3.0293;73;1500;0;0;0;0;0;0;0 +14.1;19;24072;3.0293;54;1500;0;0;0;0;0;0;0 +14.2;19;24072;3.0293;41;1500;0;0;0;0;0;0;0 +14.3;19;24072;3.0293;30;1500;0;0;0;0;0;0;0 +14.4;19;24072;3.0293;23;1500;0;0;0;0;0;0;0 +14.5;19;24072;3.0293;17;1500;0;0;0;0;0;0;0 +14.6;19;24072;3.0293;9;1500;0;0;0;0;0;0;0 +14.7;19;24072;3.0293;5;1500;0;0;0;0;0;0;0 +14.8;19;24072;3.0293;3;1500;0;0;0;0;0;0;0 +14.9;19;24072;3.0293;2;1500;0;0;0;0;0;0;0 +15;19;24072;3.0293;1;1500;0;0;0;0;0;0;0 +15.1;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.2;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.3;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.4;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.5;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.6;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.7;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.8;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.9;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.1;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.2;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.3;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.4;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.5;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.6;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.7;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.8;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.9;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +17;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs1_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs1_awgn_5G.csv new file mode 100644 index 0000000000..4a22a46882 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs1_awgn_5G.csv @@ -0,0 +1,27 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-4;1;2472;0.3066;1500;1500;0;0;0;0;0;0;0 +-3.9;1;2472;0.3066;1497;1500;0;0;0;0;0;0;0 +-3.8;1;2472;0.3066;1494;1500;0;0;0;0;0;0;0 +-3.7;1;2472;0.3066;1490;1500;0;0;0;0;0;0;0 +-3.6;1;2472;0.3066;1487;1500;0;0;0;0;0;0;0 +-3.5;1;2472;0.3066;1484;1500;0;0;0;0;0;0;0 +-3.4;1;2472;0.3066;1386;1500;0;0;0;0;0;0;0 +-3.3;1;2472;0.3066;1295;1500;0;0;0;0;0;0;0 +-3.2;1;2472;0.3066;1209;1500;0;0;0;0;0;0;0 +-3.1;1;2472;0.3066;1130;1500;0;0;0;0;0;0;0 +-3;1;2472;0.3066;1055;1500;0;0;0;0;0;0;0 +-2.9;1;2472;0.3066;863;1500;0;0;0;0;0;0;0 +-2.8;1;2472;0.3066;706;1500;0;0;0;0;0;0;0 +-2.7;1;2472;0.3066;577;1500;0;0;0;0;0;0;0 +-2.6;1;2472;0.3066;472;1500;0;0;0;0;0;0;0 +-2.5;1;2472;0.3066;386;1500;0;0;0;0;0;0;0 +-2.4;1;2472;0.3066;215;1500;0;0;0;0;0;0;0 +-2.3;1;2472;0.3066;120;1500;0;0;0;0;0;0;0 +-2.2;1;2472;0.3066;67;1500;0;0;0;0;0;0;0 +-2.1;1;2472;0.3066;37;1500;0;0;0;0;0;0;0 +-2;1;2472;0.3066;21;1500;0;0;0;0;0;0;0 +-1.9;1;2472;0.3066;9;1500;0;0;0;0;0;0;0 +-1.8;1;2472;0.3066;4;1500;0;0;0;0;0;0;0 +-1.7;1;2472;0.3066;2;1500;0;0;0;0;0;0;0 +-1.6;1;2472;0.3066;1;1500;0;0;0;0;0;0;0 +-1.5;1;2472;0.3066;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs20_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs20_awgn_5G.csv new file mode 100644 index 0000000000..545c8fc099 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs20_awgn_5G.csv @@ -0,0 +1,72 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +10;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +13;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +13.1;20;26632;3.3223;1499;1500;0;0;0;0;0;0;0 +13.2;20;26632;3.3223;1499;1500;0;0;0;0;0;0;0 +13.3;20;26632;3.3223;1498;1500;0;0;0;0;0;0;0 +13.4;20;26632;3.3223;1498;1500;0;0;0;0;0;0;0 +13.5;20;26632;3.3223;1497;1500;0;0;0;0;0;0;0 +13.6;20;26632;3.3223;1390;1500;0;0;0;0;0;0;0 +13.7;20;26632;3.3223;1291;1500;0;0;0;0;0;0;0 +13.8;20;26632;3.3223;1199;1500;0;0;0;0;0;0;0 +13.9;20;26632;3.3223;1113;1500;0;0;0;0;0;0;0 +14;20;26632;3.3223;1034;1500;0;0;0;0;0;0;0 +14.1;20;26632;3.3223;745;1500;0;0;0;0;0;0;0 +14.2;20;26632;3.3223;537;1500;0;0;0;0;0;0;0 +14.3;20;26632;3.3223;387;1500;0;0;0;0;0;0;0 +14.4;20;26632;3.3223;279;1500;0;0;0;0;0;0;0 +14.5;20;26632;3.3223;201;1500;0;0;0;0;0;0;0 +14.6;20;26632;3.3223;161;1500;0;0;0;0;0;0;0 +14.7;20;26632;3.3223;129;1500;0;0;0;0;0;0;0 +14.8;20;26632;3.3223;104;1500;0;0;0;0;0;0;0 +14.9;20;26632;3.3223;83;1500;0;0;0;0;0;0;0 +15;20;26632;3.3223;67;1500;0;0;0;0;0;0;0 +15.1;20;26632;3.3223;45;1500;0;0;0;0;0;0;0 +15.2;20;26632;3.3223;30;1500;0;0;0;0;0;0;0 +15.3;20;26632;3.3223;20;1500;0;0;0;0;0;0;0 +15.4;20;26632;3.3223;13;1500;0;0;0;0;0;0;0 +15.5;20;26632;3.3223;9;1500;0;0;0;0;0;0;0 +15.6;20;26632;3.3223;4;1500;0;0;0;0;0;0;0 +15.7;20;26632;3.3223;1;1500;0;0;0;0;0;0;0 +15.8;20;26632;3.3223;1;1500;0;0;0;0;0;0;0 +15.9;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.1;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.2;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.3;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.4;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.5;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.6;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.7;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.8;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.9;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +17;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs21_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs21_awgn_5G.csv new file mode 100644 index 0000000000..a9fe3dd606 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs21_awgn_5G.csv @@ -0,0 +1,72 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +10;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +14;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +14.1;21;28680;3.6094;1472;1500;0;0;0;0;0;0;0 +14.2;21;28680;3.6094;1444;1500;0;0;0;0;0;0;0 +14.3;21;28680;3.6094;1417;1500;0;0;0;0;0;0;0 +14.4;21;28680;3.6094;1390;1500;0;0;0;0;0;0;0 +14.5;21;28680;3.6094;1364;1500;0;0;0;0;0;0;0 +14.6;21;28680;3.6094;1040;1500;0;0;0;0;0;0;0 +14.7;21;28680;3.6094;793;1500;0;0;0;0;0;0;0 +14.8;21;28680;3.6094;605;1500;0;0;0;0;0;0;0 +14.9;21;28680;3.6094;461;1500;0;0;0;0;0;0;0 +15;21;28680;3.6094;351;1500;0;0;0;0;0;0;0 +15.1;21;28680;3.6094;265;1500;0;0;0;0;0;0;0 +15.2;21;28680;3.6094;199;1500;0;0;0;0;0;0;0 +15.3;21;28680;3.6094;150;1500;0;0;0;0;0;0;0 +15.4;21;28680;3.6094;113;1500;0;0;0;0;0;0;0 +15.5;21;28680;3.6094;85;1500;0;0;0;0;0;0;0 +15.6;21;28680;3.6094;79;1500;0;0;0;0;0;0;0 +15.7;21;28680;3.6094;73;1500;0;0;0;0;0;0;0 +15.8;21;28680;3.6094;67;1500;0;0;0;0;0;0;0 +15.9;21;28680;3.6094;62;1500;0;0;0;0;0;0;0 +16;21;28680;3.6094;57;1500;0;0;0;0;0;0;0 +16.1;21;28680;3.6094;37;1500;0;0;0;0;0;0;0 +16.2;21;28680;3.6094;23;1500;0;0;0;0;0;0;0 +16.3;21;28680;3.6094;15;1500;0;0;0;0;0;0;0 +16.4;21;28680;3.6094;10;1500;0;0;0;0;0;0;0 +16.5;21;28680;3.6094;6;1500;0;0;0;0;0;0;0 +16.6;21;28680;3.6094;3;1500;0;0;0;0;0;0;0 +16.7;21;28680;3.6094;1;1500;0;0;0;0;0;0;0 +16.8;21;28680;3.6094;1;1500;0;0;0;0;0;0;0 +16.9;21;28680;3.6094;0;1500;0;0;0;0;0;0;0 +17;21;28680;3.6094;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs22_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs22_awgn_5G.csv new file mode 100644 index 0000000000..c4e69590a5 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs22_awgn_5G.csv @@ -0,0 +1,52 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +14;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.1;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.2;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.3;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.4;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.5;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.6;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.7;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.8;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.9;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +15;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +15.1;22;31240;3.9023;1421;1500;0;0;0;0;0;0;0 +15.2;22;31240;3.9023;1347;1500;0;0;0;0;0;0;0 +15.3;22;31240;3.9023;1276;1500;0;0;0;0;0;0;0 +15.4;22;31240;3.9023;1209;1500;0;0;0;0;0;0;0 +15.5;22;31240;3.9023;1146;1500;0;0;0;0;0;0;0 +15.6;22;31240;3.9023;807;1500;0;0;0;0;0;0;0 +15.7;22;31240;3.9023;569;1500;0;0;0;0;0;0;0 +15.8;22;31240;3.9023;400;1500;0;0;0;0;0;0;0 +15.9;22;31240;3.9023;282;1500;0;0;0;0;0;0;0 +16;22;31240;3.9023;199;1500;0;0;0;0;0;0;0 +16.1;22;31240;3.9023;165;1500;0;0;0;0;0;0;0 +16.2;22;31240;3.9023;137;1500;0;0;0;0;0;0;0 +16.3;22;31240;3.9023;114;1500;0;0;0;0;0;0;0 +16.4;22;31240;3.9023;94;1500;0;0;0;0;0;0;0 +16.5;22;31240;3.9023;78;1500;0;0;0;0;0;0;0 +16.6;22;31240;3.9023;74;1500;0;0;0;0;0;0;0 +16.7;22;31240;3.9023;69;1500;0;0;0;0;0;0;0 +16.8;22;31240;3.9023;65;1500;0;0;0;0;0;0;0 +16.9;22;31240;3.9023;61;1500;0;0;0;0;0;0;0 +17;22;31240;3.9023;58;1500;0;0;0;0;0;0;0 +17.1;22;31240;3.9023;36;1500;0;0;0;0;0;0;0 +17.2;22;31240;3.9023;23;1500;0;0;0;0;0;0;0 +17.3;22;31240;3.9023;15;1500;0;0;0;0;0;0;0 +17.4;22;31240;3.9023;9;1500;0;0;0;0;0;0;0 +17.5;22;31240;3.9023;6;1500;0;0;0;0;0;0;0 +17.6;22;31240;3.9023;3;1500;0;0;0;0;0;0;0 +17.7;22;31240;3.9023;1;1500;0;0;0;0;0;0;0 +17.8;22;31240;3.9023;1;1500;0;0;0;0;0;0;0 +17.9;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.1;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.2;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.3;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.4;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.5;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.6;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.7;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.8;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.9;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +19;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs23_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs23_awgn_5G.csv new file mode 100644 index 0000000000..4ac1243d3b --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs23_awgn_5G.csv @@ -0,0 +1,92 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +15;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.1;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.2;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.3;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.4;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.5;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.6;23;33816;4.2129;1499;1500;0;0;0;0;0;0;0 +15.7;23;33816;4.2129;1499;1500;0;0;0;0;0;0;0 +15.8;23;33816;4.2129;1498;1500;0;0;0;0;0;0;0 +15.9;23;33816;4.2129;1498;1500;0;0;0;0;0;0;0 +16;23;33816;4.2129;1497;1500;0;0;0;0;0;0;0 +16.1;23;33816;4.2129;1360;1500;0;0;0;0;0;0;0 +16.2;23;33816;4.2129;1236;1500;0;0;0;0;0;0;0 +16.3;23;33816;4.2129;1123;1500;0;0;0;0;0;0;0 +16.4;23;33816;4.2129;1020;1500;0;0;0;0;0;0;0 +16.5;23;33816;4.2129;927;1500;0;0;0;0;0;0;0 +16.6;23;33816;4.2129;630;1500;0;0;0;0;0;0;0 +16.7;23;33816;4.2129;428;1500;0;0;0;0;0;0;0 +16.8;23;33816;4.2129;291;1500;0;0;0;0;0;0;0 +16.9;23;33816;4.2129;198;1500;0;0;0;0;0;0;0 +17;23;33816;4.2129;135;1500;0;0;0;0;0;0;0 +17.1;23;33816;4.2129;120;1500;0;0;0;0;0;0;0 +17.2;23;33816;4.2129;108;1500;0;0;0;0;0;0;0 +17.3;23;33816;4.2129;96;1500;0;0;0;0;0;0;0 +17.4;23;33816;4.2129;86;1500;0;0;0;0;0;0;0 +17.5;23;33816;4.2129;77;1500;0;0;0;0;0;0;0 +17.6;23;33816;4.2129;70;1500;0;0;0;0;0;0;0 +17.7;23;33816;4.2129;63;1500;0;0;0;0;0;0;0 +17.8;23;33816;4.2129;57;1500;0;0;0;0;0;0;0 +17.9;23;33816;4.2129;52;1500;0;0;0;0;0;0;0 +18;23;33816;4.2129;47;1500;0;0;0;0;0;0;0 +18.1;23;33816;4.2129;28;1500;0;0;0;0;0;0;0 +18.2;23;33816;4.2129;16;1500;0;0;0;0;0;0;0 +18.3;23;33816;4.2129;9;1500;0;0;0;0;0;0;0 +18.4;23;33816;4.2129;6;1500;0;0;0;0;0;0;0 +18.5;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +18.6;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +18.7;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +18.8;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +18.9;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +19;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +19.1;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +19.2;23;33816;4.2129;4;1500;0;0;0;0;0;0;0 +19.3;23;33816;4.2129;5;1500;0;0;0;0;0;0;0 +19.4;23;33816;4.2129;6;1500;0;0;0;0;0;0;0 +19.5;23;33816;4.2129;8;1500;0;0;0;0;0;0;0 +19.6;23;33816;4.2129;6;1500;0;0;0;0;0;0;0 +19.7;23;33816;4.2129;4;1500;0;0;0;0;0;0;0 +19.8;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +19.9;23;33816;4.2129;2;1500;0;0;0;0;0;0;0 +20;23;33816;4.2129;2;1500;0;0;0;0;0;0;0 +20.1;23;33816;4.2129;1;1500;0;0;0;0;0;0;0 +20.2;23;33816;4.2129;1;1500;0;0;0;0;0;0;0 +20.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +24;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs24_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs24_awgn_5G.csv new file mode 100644 index 0000000000..5bed20cf58 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs24_awgn_5G.csv @@ -0,0 +1,92 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +15;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.1;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.2;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.3;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.4;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.5;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.6;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.7;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.8;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.9;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.1;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.2;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.3;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.4;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.5;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.6;24;35856;4.5234;1474;1500;0;0;0;0;0;0;0 +16.7;24;35856;4.5234;1449;1500;0;0;0;0;0;0;0 +16.8;24;35856;4.5234;1424;1500;0;0;0;0;0;0;0 +16.9;24;35856;4.5234;1400;1500;0;0;0;0;0;0;0 +17;24;35856;4.5234;1376;1500;0;0;0;0;0;0;0 +17.1;24;35856;4.5234;1016;1500;0;0;0;0;0;0;0 +17.2;24;35856;4.5234;751;1500;0;0;0;0;0;0;0 +17.3;24;35856;4.5234;554;1500;0;0;0;0;0;0;0 +17.4;24;35856;4.5234;410;1500;0;0;0;0;0;0;0 +17.5;24;35856;4.5234;303;1500;0;0;0;0;0;0;0 +17.6;24;35856;4.5234;232;1500;0;0;0;0;0;0;0 +17.7;24;35856;4.5234;177;1500;0;0;0;0;0;0;0 +17.8;24;35856;4.5234;136;1500;0;0;0;0;0;0;0 +17.9;24;35856;4.5234;104;1500;0;0;0;0;0;0;0 +18;24;35856;4.5234;80;1500;0;0;0;0;0;0;0 +18.1;24;35856;4.5234;79;1500;0;0;0;0;0;0;0 +18.2;24;35856;4.5234;78;1500;0;0;0;0;0;0;0 +18.3;24;35856;4.5234;77;1500;0;0;0;0;0;0;0 +18.4;24;35856;4.5234;76;1500;0;0;0;0;0;0;0 +18.5;24;35856;4.5234;75;1500;0;0;0;0;0;0;0 +18.6;24;35856;4.5234;59;1500;0;0;0;0;0;0;0 +18.7;24;35856;4.5234;46;1500;0;0;0;0;0;0;0 +18.8;24;35856;4.5234;36;1500;0;0;0;0;0;0;0 +18.9;24;35856;4.5234;28;1500;0;0;0;0;0;0;0 +19;24;35856;4.5234;22;1500;0;0;0;0;0;0;0 +19.1;24;35856;4.5234;21;1500;0;0;0;0;0;0;0 +19.2;24;35856;4.5234;20;1500;0;0;0;0;0;0;0 +19.3;24;35856;4.5234;20;1500;0;0;0;0;0;0;0 +19.4;24;35856;4.5234;19;1500;0;0;0;0;0;0;0 +19.5;24;35856;4.5234;18;1500;0;0;0;0;0;0;0 +19.6;24;35856;4.5234;22;1500;0;0;0;0;0;0;0 +19.7;24;35856;4.5234;26;1500;0;0;0;0;0;0;0 +19.8;24;35856;4.5234;31;1500;0;0;0;0;0;0;0 +19.9;24;35856;4.5234;36;1500;0;0;0;0;0;0;0 +20;24;35856;4.5234;43;1500;0;0;0;0;0;0;0 +20.1;24;35856;4.5234;35;1500;0;0;0;0;0;0;0 +20.2;24;35856;4.5234;29;1500;0;0;0;0;0;0;0 +20.3;24;35856;4.5234;23;1500;0;0;0;0;0;0;0 +20.4;24;35856;4.5234;19;1500;0;0;0;0;0;0;0 +20.5;24;35856;4.5234;15;1500;0;0;0;0;0;0;0 +20.6;24;35856;4.5234;8;1500;0;0;0;0;0;0;0 +20.7;24;35856;4.5234;4;1500;0;0;0;0;0;0;0 +20.8;24;35856;4.5234;2;1500;0;0;0;0;0;0;0 +20.9;24;35856;4.5234;1;1500;0;0;0;0;0;0;0 +21;24;35856;4.5234;1;1500;0;0;0;0;0;0;0 +21.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +24;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs25_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs25_awgn_5G.csv new file mode 100644 index 0000000000..fdb2abcadc --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs25_awgn_5G.csv @@ -0,0 +1,92 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +15;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.1;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.2;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.3;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.4;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.5;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.6;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.7;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.8;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.9;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.1;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.2;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.3;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.4;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.5;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.6;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.7;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.8;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.9;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +17;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +17.1;25;37896;4.8164;1493;1500;0;0;0;0;0;0;0 +17.2;25;37896;4.8164;1486;1500;0;0;0;0;0;0;0 +17.3;25;37896;4.8164;1478;1500;0;0;0;0;0;0;0 +17.4;25;37896;4.8164;1471;1500;0;0;0;0;0;0;0 +17.5;25;37896;4.8164;1464;1500;0;0;0;0;0;0;0 +17.6;25;37896;4.8164;1138;1500;0;0;0;0;0;0;0 +17.7;25;37896;4.8164;885;1500;0;0;0;0;0;0;0 +17.8;25;37896;4.8164;688;1500;0;0;0;0;0;0;0 +17.9;25;37896;4.8164;535;1500;0;0;0;0;0;0;0 +18;25;37896;4.8164;416;1500;0;0;0;0;0;0;0 +18.1;25;37896;4.8164;302;1500;0;0;0;0;0;0;0 +18.2;25;37896;4.8164;219;1500;0;0;0;0;0;0;0 +18.3;25;37896;4.8164;159;1500;0;0;0;0;0;0;0 +18.4;25;37896;4.8164;115;1500;0;0;0;0;0;0;0 +18.5;25;37896;4.8164;84;1500;0;0;0;0;0;0;0 +18.6;25;37896;4.8164;89;1500;0;0;0;0;0;0;0 +18.7;25;37896;4.8164;94;1500;0;0;0;0;0;0;0 +18.8;25;37896;4.8164;100;1500;0;0;0;0;0;0;0 +18.9;25;37896;4.8164;106;1500;0;0;0;0;0;0;0 +19;25;37896;4.8164;113;1500;0;0;0;0;0;0;0 +19.1;25;37896;4.8164;110;1500;0;0;0;0;0;0;0 +19.2;25;37896;4.8164;108;1500;0;0;0;0;0;0;0 +19.3;25;37896;4.8164;105;1500;0;0;0;0;0;0;0 +19.4;25;37896;4.8164;103;1500;0;0;0;0;0;0;0 +19.5;25;37896;4.8164;101;1500;0;0;0;0;0;0;0 +19.6;25;37896;4.8164;89;1500;0;0;0;0;0;0;0 +19.7;25;37896;4.8164;79;1500;0;0;0;0;0;0;0 +19.8;25;37896;4.8164;71;1500;0;0;0;0;0;0;0 +19.9;25;37896;4.8164;63;1500;0;0;0;0;0;0;0 +20;25;37896;4.8164;56;1500;0;0;0;0;0;0;0 +20.1;25;37896;4.8164;58;1500;0;0;0;0;0;0;0 +20.2;25;37896;4.8164;61;1500;0;0;0;0;0;0;0 +20.3;25;37896;4.8164;64;1500;0;0;0;0;0;0;0 +20.4;25;37896;4.8164;67;1500;0;0;0;0;0;0;0 +20.5;25;37896;4.8164;71;1500;0;0;0;0;0;0;0 +20.6;25;37896;4.8164;64;1500;0;0;0;0;0;0;0 +20.7;25;37896;4.8164;58;1500;0;0;0;0;0;0;0 +20.8;25;37896;4.8164;52;1500;0;0;0;0;0;0;0 +20.9;25;37896;4.8164;47;1500;0;0;0;0;0;0;0 +21;25;37896;4.8164;43;1500;0;0;0;0;0;0;0 +21.1;25;37896;4.8164;27;1500;0;0;0;0;0;0;0 +21.2;25;37896;4.8164;17;1500;0;0;0;0;0;0;0 +21.3;25;37896;4.8164;10;1500;0;0;0;0;0;0;0 +21.4;25;37896;4.8164;6;1500;0;0;0;0;0;0;0 +21.5;25;37896;4.8164;4;1500;0;0;0;0;0;0;0 +21.6;25;37896;4.8164;2;1500;0;0;0;0;0;0;0 +21.7;25;37896;4.8164;1;1500;0;0;0;0;0;0;0 +21.8;25;37896;4.8164;1;1500;0;0;0;0;0;0;0 +21.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.1;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.2;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.3;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.4;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.5;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.6;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.7;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.8;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.1;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.2;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.3;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.4;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.5;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.6;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.7;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.8;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +24;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs26_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs26_awgn_5G.csv new file mode 100644 index 0000000000..ae2ed007aa --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs26_awgn_5G.csv @@ -0,0 +1,92 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +15;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +18;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +18.1;26;40976;5.1152;1496;1500;0;0;0;0;0;0;0 +18.2;26;40976;5.1152;1492;1500;0;0;0;0;0;0;0 +18.3;26;40976;5.1152;1487;1500;0;0;0;0;0;0;0 +18.4;26;40976;5.1152;1483;1500;0;0;0;0;0;0;0 +18.5;26;40976;5.1152;1479;1500;0;0;0;0;0;0;0 +18.6;26;40976;5.1152;1188;1500;0;0;0;0;0;0;0 +18.7;26;40976;5.1152;954;1500;0;0;0;0;0;0;0 +18.8;26;40976;5.1152;766;1500;0;0;0;0;0;0;0 +18.9;26;40976;5.1152;615;1500;0;0;0;0;0;0;0 +19;26;40976;5.1152;494;1500;0;0;0;0;0;0;0 +19.1;26;40976;5.1152;478;1500;0;0;0;0;0;0;0 +19.2;26;40976;5.1152;462;1500;0;0;0;0;0;0;0 +19.3;26;40976;5.1152;447;1500;0;0;0;0;0;0;0 +19.4;26;40976;5.1152;433;1500;0;0;0;0;0;0;0 +19.5;26;40976;5.1152;419;1500;0;0;0;0;0;0;0 +19.6;26;40976;5.1152;491;1500;0;0;0;0;0;0;0 +19.7;26;40976;5.1152;577;1500;0;0;0;0;0;0;0 +19.8;26;40976;5.1152;677;1500;0;0;0;0;0;0;0 +19.9;26;40976;5.1152;795;1500;0;0;0;0;0;0;0 +20;26;40976;5.1152;934;1500;0;0;0;0;0;0;0 +20.1;26;40976;5.1152;799;1500;0;0;0;0;0;0;0 +20.2;26;40976;5.1152;684;1500;0;0;0;0;0;0;0 +20.3;26;40976;5.1152;586;1500;0;0;0;0;0;0;0 +20.4;26;40976;5.1152;502;1500;0;0;0;0;0;0;0 +20.5;26;40976;5.1152;429;1500;0;0;0;0;0;0;0 +20.6;26;40976;5.1152;315;1500;0;0;0;0;0;0;0 +20.7;26;40976;5.1152;231;1500;0;0;0;0;0;0;0 +20.8;26;40976;5.1152;169;1500;0;0;0;0;0;0;0 +20.9;26;40976;5.1152;124;1500;0;0;0;0;0;0;0 +21;26;40976;5.1152;91;1500;0;0;0;0;0;0;0 +21.1;26;40976;5.1152;87;1500;0;0;0;0;0;0;0 +21.2;26;40976;5.1152;84;1500;0;0;0;0;0;0;0 +21.3;26;40976;5.1152;81;1500;0;0;0;0;0;0;0 +21.4;26;40976;5.1152;78;1500;0;0;0;0;0;0;0 +21.5;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +21.6;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +21.7;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +21.8;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +21.9;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +22;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +22.1;26;40976;5.1152;73;1500;0;0;0;0;0;0;0 +22.2;26;40976;5.1152;72;1500;0;0;0;0;0;0;0 +22.3;26;40976;5.1152;70;1500;0;0;0;0;0;0;0 +22.4;26;40976;5.1152;68;1500;0;0;0;0;0;0;0 +22.5;26;40976;5.1152;67;1500;0;0;0;0;0;0;0 +22.6;26;40976;5.1152;53;1500;0;0;0;0;0;0;0 +22.7;26;40976;5.1152;42;1500;0;0;0;0;0;0;0 +22.8;26;40976;5.1152;33;1500;0;0;0;0;0;0;0 +22.9;26;40976;5.1152;26;1500;0;0;0;0;0;0;0 +23;26;40976;5.1152;21;1500;0;0;0;0;0;0;0 +23.1;26;40976;5.1152;11;1500;0;0;0;0;0;0;0 +23.2;26;40976;5.1152;6;1500;0;0;0;0;0;0;0 +23.3;26;40976;5.1152;3;1500;0;0;0;0;0;0;0 +23.4;26;40976;5.1152;2;1500;0;0;0;0;0;0;0 +23.5;26;40976;5.1152;1;1500;0;0;0;0;0;0;0 +23.6;26;40976;5.1152;1;1500;0;0;0;0;0;0;0 +23.7;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 +23.8;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 +23.9;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 +24;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs27_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs27_awgn_5G.csv new file mode 100644 index 0000000000..6b43b3e2aa --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs27_awgn_5G.csv @@ -0,0 +1,92 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +18;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.1;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.2;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.3;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.4;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.5;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.6;27;42016;5.332;1465;1500;0;0;0;0;0;0;0 +18.7;27;42016;5.332;1430;1500;0;0;0;0;0;0;0 +18.8;27;42016;5.332;1397;1500;0;0;0;0;0;0;0 +18.9;27;42016;5.332;1364;1500;0;0;0;0;0;0;0 +19;27;42016;5.332;1332;1500;0;0;0;0;0;0;0 +19.1;27;42016;5.332;1092;1500;0;0;0;0;0;0;0 +19.2;27;42016;5.332;896;1500;0;0;0;0;0;0;0 +19.3;27;42016;5.332;735;1500;0;0;0;0;0;0;0 +19.4;27;42016;5.332;603;1500;0;0;0;0;0;0;0 +19.5;27;42016;5.332;494;1500;0;0;0;0;0;0;0 +19.6;27;42016;5.332;572;1500;0;0;0;0;0;0;0 +19.7;27;42016;5.332;662;1500;0;0;0;0;0;0;0 +19.8;27;42016;5.332;766;1500;0;0;0;0;0;0;0 +19.9;27;42016;5.332;886;1500;0;0;0;0;0;0;0 +20;27;42016;5.332;1025;1500;0;0;0;0;0;0;0 +20.1;27;42016;5.332;1041;1500;0;0;0;0;0;0;0 +20.2;27;42016;5.332;1058;1500;0;0;0;0;0;0;0 +20.3;27;42016;5.332;1074;1500;0;0;0;0;0;0;0 +20.4;27;42016;5.332;1091;1500;0;0;0;0;0;0;0 +20.5;27;42016;5.332;1109;1500;0;0;0;0;0;0;0 +20.6;27;42016;5.332;811;1500;0;0;0;0;0;0;0 +20.7;27;42016;5.332;594;1500;0;0;0;0;0;0;0 +20.8;27;42016;5.332;434;1500;0;0;0;0;0;0;0 +20.9;27;42016;5.332;318;1500;0;0;0;0;0;0;0 +21;27;42016;5.332;233;1500;0;0;0;0;0;0;0 +21.1;27;42016;5.332;187;1500;0;0;0;0;0;0;0 +21.2;27;42016;5.332;150;1500;0;0;0;0;0;0;0 +21.3;27;42016;5.332;121;1500;0;0;0;0;0;0;0 +21.4;27;42016;5.332;97;1500;0;0;0;0;0;0;0 +21.5;27;42016;5.332;78;1500;0;0;0;0;0;0;0 +21.6;27;42016;5.332;78;1500;0;0;0;0;0;0;0 +21.7;27;42016;5.332;77;1500;0;0;0;0;0;0;0 +21.8;27;42016;5.332;76;1500;0;0;0;0;0;0;0 +21.9;27;42016;5.332;76;1500;0;0;0;0;0;0;0 +22;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.1;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.2;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.3;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.4;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.5;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.6;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.7;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.8;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.9;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +23;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +23.1;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +23.2;27;42016;5.332;74;1500;0;0;0;0;0;0;0 +23.3;27;42016;5.332;74;1500;0;0;0;0;0;0;0 +23.4;27;42016;5.332;74;1500;0;0;0;0;0;0;0 +23.5;27;42016;5.332;74;1500;0;0;0;0;0;0;0 +23.6;27;42016;5.332;68;1500;0;0;0;0;0;0;0 +23.7;27;42016;5.332;63;1500;0;0;0;0;0;0;0 +23.8;27;42016;5.332;59;1500;0;0;0;0;0;0;0 +23.9;27;42016;5.332;55;1500;0;0;0;0;0;0;0 +24;27;42016;5.332;51;1500;0;0;0;0;0;0;0 +24.1;27;42016;5.332;38;1500;0;0;0;0;0;0;0 +24.2;27;42016;5.332;29;1500;0;0;0;0;0;0;0 +24.3;27;42016;5.332;21;1500;0;0;0;0;0;0;0 +24.4;27;42016;5.332;16;1500;0;0;0;0;0;0;0 +24.5;27;42016;5.332;12;1500;0;0;0;0;0;0;0 +24.6;27;42016;5.332;7;1500;0;0;0;0;0;0;0 +24.7;27;42016;5.332;4;1500;0;0;0;0;0;0;0 +24.8;27;42016;5.332;3;1500;0;0;0;0;0;0;0 +24.9;27;42016;5.332;2;1500;0;0;0;0;0;0;0 +25;27;42016;5.332;1;1500;0;0;0;0;0;0;0 +25.1;27;42016;5.332;1;1500;0;0;0;0;0;0;0 +25.2;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.3;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.4;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.5;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.6;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.7;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.8;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.9;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.1;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.2;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.3;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.4;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.5;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.6;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.7;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.8;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.9;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +27;27;42016;5.332;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs28_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs28_awgn_5G.csv new file mode 100644 index 0000000000..a6066cbd61 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs28_awgn_5G.csv @@ -0,0 +1,92 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +18;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.1;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.2;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.3;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.4;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.5;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.6;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.7;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.8;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.9;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +19;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +19.1;28;44040;5.547;1499;1500;0;0;0;0;0;0;0 +19.2;28;44040;5.547;1498;1500;0;0;0;0;0;0;0 +19.3;28;44040;5.547;1498;1500;0;0;0;0;0;0;0 +19.4;28;44040;5.547;1497;1500;0;0;0;0;0;0;0 +19.5;28;44040;5.547;1496;1500;0;0;0;0;0;0;0 +19.6;28;44040;5.547;1429;1500;0;0;0;0;0;0;0 +19.7;28;44040;5.547;1366;1500;0;0;0;0;0;0;0 +19.8;28;44040;5.547;1305;1500;0;0;0;0;0;0;0 +19.9;28;44040;5.547;1247;1500;0;0;0;0;0;0;0 +20;28;44040;5.547;1191;1500;0;0;0;0;0;0;0 +20.1;28;44040;5.547;1234;1500;0;0;0;0;0;0;0 +20.2;28;44040;5.547;1279;1500;0;0;0;0;0;0;0 +20.3;28;44040;5.547;1325;1500;0;0;0;0;0;0;0 +20.4;28;44040;5.547;1373;1500;0;0;0;0;0;0;0 +20.5;28;44040;5.547;1423;1500;0;0;0;0;0;0;0 +20.6;28;44040;5.547;1426;1500;0;0;0;0;0;0;0 +20.7;28;44040;5.547;1429;1500;0;0;0;0;0;0;0 +20.8;28;44040;5.547;1432;1500;0;0;0;0;0;0;0 +20.9;28;44040;5.547;1435;1500;0;0;0;0;0;0;0 +21;28;44040;5.547;1438;1500;0;0;0;0;0;0;0 +21.1;28;44040;5.547;1207;1500;0;0;0;0;0;0;0 +21.2;28;44040;5.547;1014;1500;0;0;0;0;0;0;0 +21.3;28;44040;5.547;851;1500;0;0;0;0;0;0;0 +21.4;28;44040;5.547;715;1500;0;0;0;0;0;0;0 +21.5;28;44040;5.547;600;1500;0;0;0;0;0;0;0 +21.6;28;44040;5.547;418;1500;0;0;0;0;0;0;0 +21.7;28;44040;5.547;290;1500;0;0;0;0;0;0;0 +21.8;28;44040;5.547;202;1500;0;0;0;0;0;0;0 +21.9;28;44040;5.547;140;1500;0;0;0;0;0;0;0 +22;28;44040;5.547;98;1500;0;0;0;0;0;0;0 +22.1;28;44040;5.547;93;1500;0;0;0;0;0;0;0 +22.2;28;44040;5.547;88;1500;0;0;0;0;0;0;0 +22.3;28;44040;5.547;83;1500;0;0;0;0;0;0;0 +22.4;28;44040;5.547;79;1500;0;0;0;0;0;0;0 +22.5;28;44040;5.547;75;1500;0;0;0;0;0;0;0 +22.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +22.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +22.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +22.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +27;28;44040;5.547;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs2_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs2_awgn_5G.csv new file mode 100644 index 0000000000..d5a802c177 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs2_awgn_5G.csv @@ -0,0 +1,62 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.1;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.1;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.4;2;2976;0.377;1486;1500;0;0;0;0;0;0;0 +-1.3;2;2976;0.377;1473;1500;0;0;0;0;0;0;0 +-1.2;2;2976;0.377;1459;1500;0;0;0;0;0;0;0 +-1.1;2;2976;0.377;1446;1500;0;0;0;0;0;0;0 +-1;2;2976;0.377;1432;1500;0;0;0;0;0;0;0 +-0.9;2;2976;0.377;1149;1500;0;0;0;0;0;0;0 +-0.8;2;2976;0.377;921;1500;0;0;0;0;0;0;0 +-0.7;2;2976;0.377;738;1500;0;0;0;0;0;0;0 +-0.6;2;2976;0.377;592;1500;0;0;0;0;0;0;0 +-0.5;2;2976;0.377;475;1500;0;0;0;0;0;0;0 +-0.4;2;2976;0.377;292;1500;0;0;0;0;0;0;0 +-0.3;2;2976;0.377;179;1500;0;0;0;0;0;0;0 +-0.2;2;2976;0.377;110;1500;0;0;0;0;0;0;0 +-0.1;2;2976;0.377;68;1500;0;0;0;0;0;0;0 +0;2;2976;0.377;42;1500;0;0;0;0;0;0;0 +0.1;2;2976;0.377;22;1500;0;0;0;0;0;0;0 +0.2;2;2976;0.377;11;1500;0;0;0;0;0;0;0 +0.3;2;2976;0.377;6;1500;0;0;0;0;0;0;0 +0.4;2;2976;0.377;3;1500;0;0;0;0;0;0;0 +0.5;2;2976;0.377;2;1500;0;0;0;0;0;0;0 +0.6;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +0.7;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +0.8;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +0.9;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.1;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.2;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.3;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.4;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.5;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.6;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.7;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.8;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.9;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +2;2;2976;0.377;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs3_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs3_awgn_5G.csv new file mode 100644 index 0000000000..9acdfe3e2f --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs3_awgn_5G.csv @@ -0,0 +1,62 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-0.9;3;3912;0.4902;1499;1500;0;0;0;0;0;0;0 +-0.8;3;3912;0.4902;1498;1500;0;0;0;0;0;0;0 +-0.7;3;3912;0.4902;1496;1500;0;0;0;0;0;0;0 +-0.6;3;3912;0.4902;1495;1500;0;0;0;0;0;0;0 +-0.5;3;3912;0.4902;1494;1500;0;0;0;0;0;0;0 +-0.4;3;3912;0.4902;1322;1500;0;0;0;0;0;0;0 +-0.3;3;3912;0.4902;1169;1500;0;0;0;0;0;0;0 +-0.2;3;3912;0.4902;1034;1500;0;0;0;0;0;0;0 +-0.1;3;3912;0.4902;915;1500;0;0;0;0;0;0;0 +0;3;3912;0.4902;809;1500;0;0;0;0;0;0;0 +0.1;3;3912;0.4902;504;1500;0;0;0;0;0;0;0 +0.2;3;3912;0.4902;314;1500;0;0;0;0;0;0;0 +0.3;3;3912;0.4902;196;1500;0;0;0;0;0;0;0 +0.4;3;3912;0.4902;122;1500;0;0;0;0;0;0;0 +0.5;3;3912;0.4902;76;1500;0;0;0;0;0;0;0 +0.6;3;3912;0.4902;37;1500;0;0;0;0;0;0;0 +0.7;3;3912;0.4902;18;1500;0;0;0;0;0;0;0 +0.8;3;3912;0.4902;9;1500;0;0;0;0;0;0;0 +0.9;3;3912;0.4902;4;1500;0;0;0;0;0;0;0 +1;3;3912;0.4902;2;1500;0;0;0;0;0;0;0 +1.1;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.2;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.3;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.4;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.5;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.6;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.7;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.8;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.9;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +2;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs4_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs4_awgn_5G.csv new file mode 100644 index 0000000000..99a1e652e5 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs4_awgn_5G.csv @@ -0,0 +1,62 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;4;4736;0.6016;1500;1500;0;0;0;0;0;0;0 +-0.9;4;4736;0.6016;1499;1500;0;0;0;0;0;0;0 +-0.8;4;4736;0.6016;1498;1500;0;0;0;0;0;0;0 +-0.7;4;4736;0.6016;1496;1500;0;0;0;0;0;0;0 +-0.6;4;4736;0.6016;1495;1500;0;0;0;0;0;0;0 +-0.5;4;4736;0.6016;1494;1500;0;0;0;0;0;0;0 +-0.4;4;4736;0.6016;1322;1500;0;0;0;0;0;0;0 +-0.3;4;4736;0.6016;1169;1500;0;0;0;0;0;0;0 +-0.2;4;4736;0.6016;1034;1500;0;0;0;0;0;0;0 +-0.1;4;4736;0.6016;915;1500;0;0;0;0;0;0;0 +0;4;4736;0.6016;809;1500;0;0;0;0;0;0;0 +0.1;4;4736;0.6016;504;1500;0;0;0;0;0;0;0 +0.2;4;4736;0.6016;314;1500;0;0;0;0;0;0;0 +0.3;4;4736;0.6016;196;1500;0;0;0;0;0;0;0 +0.4;4;4736;0.6016;122;1500;0;0;0;0;0;0;0 +0.5;4;4736;0.6016;76;1500;0;0;0;0;0;0;0 +0.6;4;4736;0.6016;37;1500;0;0;0;0;0;0;0 +0.7;4;4736;0.6016;18;1500;0;0;0;0;0;0;0 +0.8;4;4736;0.6016;9;1500;0;0;0;0;0;0;0 +0.9;4;4736;0.6016;4;1500;0;0;0;0;0;0;0 +1;4;4736;0.6016;2;1500;0;0;0;0;0;0;0 +1.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs5_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs5_awgn_5G.csv new file mode 100644 index 0000000000..1d2c479112 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs5_awgn_5G.csv @@ -0,0 +1,62 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.9;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.8;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.7;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.6;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.5;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.4;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.3;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.2;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.1;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +0;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +0.1;5;5888;0.7402;1499;1500;0;0;0;0;0;0;0 +0.2;5;5888;0.7402;1499;1500;0;0;0;0;0;0;0 +0.3;5;5888;0.7402;1498;1500;0;0;0;0;0;0;0 +0.4;5;5888;0.7402;1498;1500;0;0;0;0;0;0;0 +0.5;5;5888;0.7402;1497;1500;0;0;0;0;0;0;0 +0.6;5;5888;0.7402;1323;1500;0;0;0;0;0;0;0 +0.7;5;5888;0.7402;1170;1500;0;0;0;0;0;0;0 +0.8;5;5888;0.7402;1034;1500;0;0;0;0;0;0;0 +0.9;5;5888;0.7402;914;1500;0;0;0;0;0;0;0 +1;5;5888;0.7402;808;1500;0;0;0;0;0;0;0 +1.1;5;5888;0.7402;513;1500;0;0;0;0;0;0;0 +1.2;5;5888;0.7402;326;1500;0;0;0;0;0;0;0 +1.3;5;5888;0.7402;207;1500;0;0;0;0;0;0;0 +1.4;5;5888;0.7402;131;1500;0;0;0;0;0;0;0 +1.5;5;5888;0.7402;83;1500;0;0;0;0;0;0;0 +1.6;5;5888;0.7402;48;1500;0;0;0;0;0;0;0 +1.7;5;5888;0.7402;28;1500;0;0;0;0;0;0;0 +1.8;5;5888;0.7402;16;1500;0;0;0;0;0;0;0 +1.9;5;5888;0.7402;9;1500;0;0;0;0;0;0;0 +2;5;5888;0.7402;5;1500;0;0;0;0;0;0;0 +2.1;5;5888;0.7402;2;1500;0;0;0;0;0;0;0 +2.2;5;5888;0.7402;1;1500;0;0;0;0;0;0;0 +2.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.1;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.2;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.1;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.2;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs6_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs6_awgn_5G.csv new file mode 100644 index 0000000000..42a0cd6fb1 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs6_awgn_5G.csv @@ -0,0 +1,62 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.9;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.8;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.7;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.6;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.5;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.4;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.3;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.2;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.2;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.3;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.4;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.5;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.6;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.7;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.8;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.9;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +1.1;6;6912;0.877;1493;1500;0;0;0;0;0;0;0 +1.2;6;6912;0.877;1487;1500;0;0;0;0;0;0;0 +1.3;6;6912;0.877;1480;1500;0;0;0;0;0;0;0 +1.4;6;6912;0.877;1473;1500;0;0;0;0;0;0;0 +1.5;6;6912;0.877;1467;1500;0;0;0;0;0;0;0 +1.6;6;6912;0.877;1117;1500;0;0;0;0;0;0;0 +1.7;6;6912;0.877;850;1500;0;0;0;0;0;0;0 +1.8;6;6912;0.877;648;1500;0;0;0;0;0;0;0 +1.9;6;6912;0.877;493;1500;0;0;0;0;0;0;0 +2;6;6912;0.877;376;1500;0;0;0;0;0;0;0 +2.1;6;6912;0.877;254;1500;0;0;0;0;0;0;0 +2.2;6;6912;0.877;172;1500;0;0;0;0;0;0;0 +2.3;6;6912;0.877;116;1500;0;0;0;0;0;0;0 +2.4;6;6912;0.877;79;1500;0;0;0;0;0;0;0 +2.5;6;6912;0.877;53;1500;0;0;0;0;0;0;0 +2.6;6;6912;0.877;32;1500;0;0;0;0;0;0;0 +2.7;6;6912;0.877;19;1500;0;0;0;0;0;0;0 +2.8;6;6912;0.877;11;1500;0;0;0;0;0;0;0 +2.9;6;6912;0.877;7;1500;0;0;0;0;0;0;0 +3;6;6912;0.877;4;1500;0;0;0;0;0;0;0 +3.1;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.2;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.3;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.4;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.5;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.6;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.7;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.8;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.9;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.1;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.2;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.3;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.4;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.5;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.6;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.7;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.8;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.9;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +5;6;6912;0.877;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs7_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs7_awgn_5G.csv new file mode 100644 index 0000000000..ac98d0ae10 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs7_awgn_5G.csv @@ -0,0 +1,62 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.9;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.8;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.7;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.6;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.5;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.4;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.3;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.3;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.4;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.5;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.6;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.7;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.8;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.9;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.3;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.4;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.5;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.6;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.7;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.8;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.9;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +2.1;7;8912;1.0273;1492;1500;0;0;0;0;0;0;0 +2.2;7;8912;1.0273;1484;1500;0;0;0;0;0;0;0 +2.3;7;8912;1.0273;1477;1500;0;0;0;0;0;0;0 +2.4;7;8912;1.0273;1469;1500;0;0;0;0;0;0;0 +2.5;7;8912;1.0273;1462;1500;0;0;0;0;0;0;0 +2.6;7;8912;1.0273;1159;1500;0;0;0;0;0;0;0 +2.7;7;8912;1.0273;919;1500;0;0;0;0;0;0;0 +2.8;7;8912;1.0273;729;1500;0;0;0;0;0;0;0 +2.9;7;8912;1.0273;578;1500;0;0;0;0;0;0;0 +3;7;8912;1.0273;458;1500;0;0;0;0;0;0;0 +3.1;7;8912;1.0273;319;1500;0;0;0;0;0;0;0 +3.2;7;8912;1.0273;222;1500;0;0;0;0;0;0;0 +3.3;7;8912;1.0273;155;1500;0;0;0;0;0;0;0 +3.4;7;8912;1.0273;108;1500;0;0;0;0;0;0;0 +3.5;7;8912;1.0273;75;1500;0;0;0;0;0;0;0 +3.6;7;8912;1.0273;48;1500;0;0;0;0;0;0;0 +3.7;7;8912;1.0273;30;1500;0;0;0;0;0;0;0 +3.8;7;8912;1.0273;19;1500;0;0;0;0;0;0;0 +3.9;7;8912;1.0273;12;1500;0;0;0;0;0;0;0 +4;7;8912;1.0273;8;1500;0;0;0;0;0;0;0 +4.1;7;8912;1.0273;4;1500;0;0;0;0;0;0;0 +4.2;7;8912;1.0273;2;1500;0;0;0;0;0;0;0 +4.3;7;8912;1.0273;1;1500;0;0;0;0;0;0;0 +4.4;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +4.5;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +4.6;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +4.7;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +4.8;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +4.9;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +5;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs8_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs8_awgn_5G.csv new file mode 100644 index 0000000000..4c202068f1 --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs8_awgn_5G.csv @@ -0,0 +1,62 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +3.1;8;9224;1.1758;1464;1500;0;0;0;0;0;0;0 +3.2;8;9224;1.1758;1429;1500;0;0;0;0;0;0;0 +3.3;8;9224;1.1758;1394;1500;0;0;0;0;0;0;0 +3.4;8;9224;1.1758;1361;1500;0;0;0;0;0;0;0 +3.5;8;9224;1.1758;1328;1500;0;0;0;0;0;0;0 +3.6;8;9224;1.1758;973;1500;0;0;0;0;0;0;0 +3.7;8;9224;1.1758;713;1500;0;0;0;0;0;0;0 +3.8;8;9224;1.1758;522;1500;0;0;0;0;0;0;0 +3.9;8;9224;1.1758;382;1500;0;0;0;0;0;0;0 +4;8;9224;1.1758;280;1500;0;0;0;0;0;0;0 +4.1;8;9224;1.1758;190;1500;0;0;0;0;0;0;0 +4.2;8;9224;1.1758;129;1500;0;0;0;0;0;0;0 +4.3;8;9224;1.1758;87;1500;0;0;0;0;0;0;0 +4.4;8;9224;1.1758;59;1500;0;0;0;0;0;0;0 +4.5;8;9224;1.1758;40;1500;0;0;0;0;0;0;0 +4.6;8;9224;1.1758;20;1500;0;0;0;0;0;0;0 +4.7;8;9224;1.1758;10;1500;0;0;0;0;0;0;0 +4.8;8;9224;1.1758;5;1500;0;0;0;0;0;0;0 +4.9;8;9224;1.1758;2;1500;0;0;0;0;0;0;0 +5;8;9224;1.1758;1;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs9_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs9_awgn_5G.csv new file mode 100644 index 0000000000..adfb19b6de --- /dev/null +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs9_awgn_5G.csv @@ -0,0 +1,64 @@ +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.7;9;10504;1.3262;1499;1500;0;0;0;0;0;0;0 +3.8;9;10504;1.3262;1499;1500;0;0;0;0;0;0;0 +3.9;9;10504;1.3262;1499;1500;0;0;0;0;0;0;0 +4;9;10504;1.3262;1498;1500;0;0;0;0;0;0;0 +4.1;9;10504;1.3262;1339;1500;0;0;0;0;0;0;0 +4.2;9;10504;1.3262;1196;1500;0;0;0;0;0;0;0 +4.3;9;10504;1.3262;1068;1500;0;0;0;0;0;0;0 +4.4;9;10504;1.3262;955;1500;0;0;0;0;0;0;0 +4.5;9;10504;1.3262;853;1500;0;0;0;0;0;0;0 +4.6;9;10504;1.3262;552;1500;0;0;0;0;0;0;0 +4.7;9;10504;1.3262;357;1500;0;0;0;0;0;0;0 +4.8;9;10504;1.3262;231;1500;0;0;0;0;0;0;0 +4.9;9;10504;1.3262;149;1500;0;0;0;0;0;0;0 +5;9;10504;1.3262;96;1500;0;0;0;0;0;0;0 +5.1;9;10504;1.3262;0;1500;0;0;0;0;0;0;0 +5.2;9;10504;1.3262;0;1500;0;0;0;0;0;0;0 diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h index 2b2181177d..35983582bc 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h @@ -273,6 +273,10 @@ typedef struct { bool index_has_dci[16]; int active_harq_sfn_slot; int active_uci_sfn_slot; + int crc_rx_ind_sfn_slot; + int num_srs; + int num_harqs; + int num_csi_reports; } nr_emulated_l1_t; typedef struct { diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 4bc074df56..6c44a028ae 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -2167,6 +2167,9 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in } N_UCI = O_SR + O_ACK + O_CSI; + mac->nr_ue_emul_l1.num_srs = O_SR; + mac->nr_ue_emul_l1.num_harqs = O_ACK; + mac->nr_ue_emul_l1.num_csi_reports = O_CSI; // do no transmit pucch if only SR scheduled and it is negative if ((O_ACK + O_CSI) == 0 && pucch->sr_payload == 0) @@ -2192,7 +2195,7 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in pucch, pucch_pdu, O_SR, O_ACK, O_CSI); - LOG_I(NR_MAC,"Configuring pucch, is_common = %d and format %d\n",pucch->is_common, pucch_pdu->format_type); + LOG_D(NR_MAC,"Configuring pucch, is_common = %d\n",pucch->is_common); nr_scheduled_response_t scheduled_response; fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, thread_id); if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c index cb76c22292..9db8644201 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c @@ -435,7 +435,7 @@ int get_mcs_from_bler(module_id_t mod_id, int CC_id, frame_t frame, sub_frame_t if (bler_stats->rd2_bler > nrmac->dl_rd2_bler_threshold && old_mcs > 6) { new_mcs -= 2; } else if (bler_stats->rd2_bler < nrmac->dl_rd2_bler_threshold) {*/ - if (bler_stats->bler < nrmac->dl_bler_target_lower && old_mcs < nrmac->dl_max_mcs && dtx > 9) + if (bler_stats->bler < nrmac->dl_bler_target_lower && old_mcs < nrmac->dl_max_mcs) // TODO: dtx > 9 needs to be updated to merge with OAI develop branch new_mcs += 1; else if (bler_stats->bler > nrmac->dl_bler_target_upper && old_mcs > 6) new_mcs -= 1; diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 805c2dd2a8..cfb24d5654 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -38,6 +38,7 @@ #include "SCHED_NR_UE/fapi_nr_ue_l1.h" #include "executables/softmodem-common.h" #include "openair2/RRC/NR_UE/rrc_proto.h" +#include "openair2/RRC/NR_UE/rrc_vars.h" #include "openair2/GNB_APP/L1_nr_paramdef.h" #include "openair2/GNB_APP/gnb_paramdef.h" #include "targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h" @@ -60,7 +61,17 @@ queue_t nr_dl_tti_req_queue; queue_t nr_tx_req_queue; queue_t nr_ul_dci_req_queue; queue_t nr_ul_tti_req_queue; -queue_t nr_wait_ul_tti_req_queue; + +static slot_rnti_mcs_s slot_rnti_mcs[NUM_NFAPI_SLOT]; + +static int get_mcs_from_sinr(float sinr); +static int get_cqi_from_mcs(void); +static void read_channel_param(const nfapi_nr_dl_tti_pdsch_pdu_rel15_t * pdu, int sf, int index); +static bool did_drop_transport_block(int slot, uint16_t rnti); +static float get_bler_val(uint8_t mcs, int sinr); +static bool should_drop_transport_block(int slot, uint16_t rnti); +static void save_pdsch_pdu_for_crnti(nfapi_nr_dl_tti_request_t *dl_tti_request); +static inline bool is_channel_modeling(void); void nrue_init_standalone_socket(int tx_port, int rx_port) { @@ -447,6 +458,7 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ static void fill_rx_ind(nfapi_nr_pdu_t *pdu_list, fapi_nr_rx_indication_t *rx_ind, int pdu_idx, int pdu_type) { + NR_UE_MAC_INST_t *mac = get_mac_inst(0); AssertFatal(pdu_list->num_TLV < sizeof(pdu_list->TLVs) / sizeof(pdu_list->TLVs[0]), "Num TLVs exceeds TLV array size"); int length = 0; for (int j = 0; j < pdu_list->num_TLV; j++) @@ -468,7 +480,12 @@ static void fill_rx_ind(nfapi_nr_pdu_t *pdu_list, fapi_nr_rx_indication_t *rx_in memcpy(pdu, ptr, pdu_list->TLVs[j].length); pdu += pdu_list->TLVs[j].length; } - rx_ind->rx_indication_body[pdu_idx].pdsch_pdu.ack_nack = 1; + bool ack_nack = true; + if (mac->ra.ra_state >= RA_SUCCEEDED && should_drop_transport_block(rx_ind->slot, mac->crnti)) + { + ack_nack = false; + } + rx_ind->rx_indication_body[pdu_idx].pdsch_pdu.ack_nack = ack_nack; rx_ind->rx_indication_body[pdu_idx].pdsch_pdu.pdu_length = length; rx_ind->rx_indication_body[pdu_idx].pdu_type = pdu_type; @@ -598,82 +615,36 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n dl_info->slot = ul_dci_req->Slot; } -static nfapi_nr_uci_indication_t *multiplex_uci_ind(NR_UE_MAC_INST_t *mac, int sfn_slot) +static bool send_crc_ind_and_rx_ind(int sfn_slot) { - int num_0_1 = 0; - int num_2_3_4 = 0; - int num_items_in_queue = nr_uci_ind_queue.num_items; + bool sent_crc_rx = true; - nfapi_nr_uci_indication_t *uci_ind = MALLOC(sizeof(*uci_ind)); - uci_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION; - uci_ind->num_ucis = 0; - uci_ind->uci_list = CALLOC(num_items_in_queue, sizeof(*uci_ind->uci_list)); - for (int i = 0; i < num_items_in_queue; i++) - { - nfapi_nr_uci_indication_t *queued_uci_ind = unqueue_matching(&nr_uci_ind_queue, - MAX_QUEUE_SIZE, - sfn_slot_matcher, - &sfn_slot); - if (!queued_uci_ind) - { - LOG_I(NR_MAC, "There was not a matching UCI with sfn %d, slot %d in queue\n", - NFAPI_SFNSLOT2SFN(sfn_slot), NFAPI_SFNSLOT2SLOT(sfn_slot)); - break; - } + nfapi_nr_rx_data_indication_t *rx_ind = unqueue_matching(&nr_rx_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot); + nfapi_nr_crc_indication_t *crc_ind = unqueue_matching(&nr_crc_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot); - /* In openair1/SCHED_NR_UE/fapi_nr_ue_l1.c nr_ue_schedule_response_stub(), the - number of UCIs is hard coded to 1. This is why we always use index 0 of the - queued UCI indication to fill the new multiplexed UCI indication */ - AssertFatal(queued_uci_ind->num_ucis == 1, "The number of UCIs from de-queueud UCI is not 1, its %d\n", - queued_uci_ind->num_ucis); - uci_ind->uci_list[i].pdu_type = queued_uci_ind->uci_list[0].pdu_type; - uci_ind->uci_list[i].pdu_size = queued_uci_ind->uci_list[0].pdu_size; - if (uci_ind->uci_list[i].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE) - { - num_0_1++; - nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[i].pucch_pdu_format_0_1; - nfapi_nr_uci_pucch_pdu_format_0_1_t *queued_pdu_0_1 = &queued_uci_ind->uci_list[0].pucch_pdu_format_0_1; - pdu_0_1->handle = queued_pdu_0_1->handle; - pdu_0_1->rnti = queued_pdu_0_1->rnti; - pdu_0_1->pucch_format = queued_pdu_0_1->pucch_format; - pdu_0_1->ul_cqi = queued_pdu_0_1->ul_cqi; - pdu_0_1->timing_advance = queued_pdu_0_1->timing_advance; - pdu_0_1->rssi = queued_pdu_0_1->rssi; - } - if (uci_ind->uci_list[i].pdu_type == NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE) - { - num_2_3_4++; - nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[i].pucch_pdu_format_2_3_4; - nfapi_nr_uci_pucch_pdu_format_2_3_4_t *queued_pdu_2_3_4 = &queued_uci_ind->uci_list[0].pucch_pdu_format_2_3_4; - pdu_2_3_4->handle = queued_pdu_2_3_4->handle; - pdu_2_3_4->rnti = queued_pdu_2_3_4->rnti; - pdu_2_3_4->pucch_format = queued_pdu_2_3_4->pucch_format; - pdu_2_3_4->ul_cqi = queued_pdu_2_3_4->ul_cqi; - pdu_2_3_4->timing_advance = queued_pdu_2_3_4->timing_advance; - pdu_2_3_4->rssi = queued_pdu_2_3_4->rssi; - pdu_2_3_4->pduBitmap = queued_pdu_2_3_4->pduBitmap; - pdu_2_3_4->csi_part1.csi_part1_bit_len = queued_pdu_2_3_4->csi_part1.csi_part1_bit_len; - AssertFatal(!pdu_2_3_4->csi_part1.csi_part1_payload, "pdu_2_3_4->csi_part1.csi_part1_payload != NULL\n"); - pdu_2_3_4->csi_part1.csi_part1_payload = CALLOC((int)((pdu_2_3_4->csi_part1.csi_part1_bit_len / 8) + 1), - sizeof(pdu_2_3_4->csi_part1.csi_part1_payload)); - memcpy(pdu_2_3_4->csi_part1.csi_part1_payload, queued_pdu_2_3_4->csi_part1.csi_part1_payload, - sizeof(*queued_pdu_2_3_4->csi_part1.csi_part1_payload)); - } - uci_ind->num_ucis = num_2_3_4 + num_0_1; - - free(queued_uci_ind->uci_list); - queued_uci_ind->uci_list = NULL; - free(queued_uci_ind); - queued_uci_ind = NULL; - } - - if (num_2_3_4 > 0 && num_0_1 > 0) - { - LOG_E(NR_MAC, "We have a harq ACK/NACK while CSI reporting as seprate UCIs but we shouldn't. " - "We multiplex before queueing the UCI!!!\n"); - abort(); - } - return uci_ind; + if (crc_ind && crc_ind->number_crcs > 0) + { + NR_UL_IND_t UL_INFO = { + .crc_ind = *crc_ind, + }; + send_nsa_standalone_msg(&UL_INFO, crc_ind->header.message_id); + free(crc_ind->crc_list); + free(crc_ind); + } + if (rx_ind && rx_ind->number_of_pdus > 0) + { + NR_UL_IND_t UL_INFO = { + .rx_ind = *rx_ind, + }; + send_nsa_standalone_msg(&UL_INFO, rx_ind->header.message_id); + free(rx_ind->pdu_list); + free(rx_ind); + } + else + { + sent_crc_rx = false; + } + return sent_crc_rx; } static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_nr_ul_tti_request_t *ul_tti_req) @@ -685,6 +656,7 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n AssertFatal(num_pdus <= sizeof(ul_tti_req->pdus_list) / sizeof(ul_tti_req->pdus_list[0]), "Too many pdus %d in ul_tti_req\n", num_pdus); + bool sent_crc_rx = send_crc_ind_and_rx_ind(sfn_slot); bool sent_uci = false; for (int i = 0; i < num_pdus; i++) { @@ -696,8 +668,16 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n AssertFatal(nr_uci_ind_queue.num_items >= 0, "Invalid num_items in UCI_ind queue %lu\n", nr_uci_ind_queue.num_items); - nfapi_nr_uci_indication_t *uci_ind = multiplex_uci_ind(mac, sfn_slot); - + nfapi_nr_uci_indication_t *uci_ind = unqueue_matching(&nr_uci_ind_queue, + MAX_QUEUE_SIZE, + sfn_slot_matcher, + &sfn_slot); + if (!uci_ind) + { + LOG_I(NR_MAC, "There was not a matching UCI with sfn %d, slot %d in queue\n", + NFAPI_SFNSLOT2SFN(sfn_slot), NFAPI_SFNSLOT2SLOT(sfn_slot)); + return; + } if (uci_ind && uci_ind->num_ucis > 0) { uci_ind->sfn = ul_tti_req->SFN; @@ -712,22 +692,12 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n if (pdu_list->pucch_pdu.sr_flag) { pdu_0_1->pduBitmap = 1; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR + if (pdu_list->pucch_pdu.bit_len_harq > 0) + pdu_0_1->pduBitmap = 3; pdu_0_1->sr = CALLOC(1, sizeof(*pdu_0_1->sr)); pdu_0_1->sr->sr_confidence_level = 0; pdu_0_1->sr->sr_indication = 1; } - if (pdu_list->pucch_pdu.bit_len_harq > 0) - { - pdu_0_1->pduBitmap = 2; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR - pdu_0_1->harq = CALLOC(1, sizeof(*pdu_0_1->harq)); - pdu_0_1->harq->num_harq = 1; - pdu_0_1->harq->harq_confidence_level = 0; - pdu_0_1->harq->harq_list = CALLOC(pdu_0_1->harq->num_harq, sizeof(*pdu_0_1->harq->harq_list)); - for (int k = 0; k < pdu_0_1->harq->num_harq; k++) - { - pdu_0_1->harq->harq_list[k].harq_value = 0; - } - } } if (uci_ind->uci_list[j].pdu_type == NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE) { @@ -742,6 +712,7 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n } if (pdu_list->pucch_pdu.bit_len_harq > 0) { + pdu_2_3_4->pduBitmap = 6; if (pdu_list->pucch_pdu.sr_flag) { pdu_2_3_4->pduBitmap = 7; @@ -770,9 +741,9 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n } } } - if (!sent_uci) + if (!sent_uci && !sent_crc_rx) { - LOG_E(NR_MAC, "UCI ind not sent\n"); + LOG_E(NR_MAC, "UCI and CRC_RX ind not sent\n"); if (!put_queue(&nr_ul_tti_req_queue, ul_tti_req)) { LOG_E(NR_PHY, "put_queue failed for ul_tti_req.\n"); @@ -878,7 +849,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, else { if (pthread_mutex_unlock(&mac->mutex_dl_info)) abort(); - LOG_E(NR_MAC, "Error! All indications were NULL\n"); + LOG_D(NR_MAC, "All indications were NULL in %s\n", __FUNCTION__); return; } @@ -964,6 +935,10 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea } LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST message in sfn/slot %d %d. \n", dl_tti_request->SFN, dl_tti_request->Slot); + + if (is_channel_modeling()) + save_pdsch_pdu_for_crnti(dl_tti_request); + if (!put_queue(&nr_dl_tti_req_queue, dl_tti_request)) { LOG_E(NR_PHY, "put_queue failed for dl_tti_request.\n"); @@ -1024,9 +999,11 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea } LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST message in SFN/slot %d %d.\n", ul_tti_request->SFN, ul_tti_request->Slot); - if (ul_tti_request && ul_tti_request->n_pdus > 0) + if (!put_queue(&nr_ul_tti_req_queue, ul_tti_request)) { - check_and_process_dci(NULL, NULL, NULL, ul_tti_request); + LOG_E(NR_PHY, "put_queue failed for ul_tti_request.\n"); + nfapi_nr_ul_tti_request_t *evicted_ul_tti_req = put_queue_replace(&nr_ul_tti_req_queue, ul_tti_request); + free(evicted_ul_tti_req); } break; } @@ -1039,6 +1016,35 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea return; } +static void save_pdsch_pdu_for_crnti(nfapi_nr_dl_tti_request_t *dl_tti_request) +{ + int count_sent = 0; + NR_UE_MAC_INST_t *mac = get_mac_inst(0); + int number_of_pdu = dl_tti_request->dl_tti_request_body.nPDUs; + if (number_of_pdu <= 0) + { + LOG_E(NR_MAC, "%s: dl_tti_request pdu size <= 0\n", __FUNCTION__); + abort(); + } + + for (int i = 0; i < number_of_pdu; i++) + { + const nfapi_nr_dl_tti_request_pdu_t *pdu_list = &dl_tti_request->dl_tti_request_body.dl_tti_pdu_list[i]; + + if (pdu_list->PDUType == NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE) + { + const nfapi_nr_dl_tti_pdsch_pdu_rel15_t *pdsch_pdu = &pdu_list->pdsch_pdu.pdsch_pdu_rel15; + if (pdsch_pdu->rnti == mac->crnti && mac->ra.ra_state == RA_SUCCEEDED) + { + read_channel_param(pdsch_pdu, dl_tti_request->Slot, count_sent); + count_sent++; + LOG_D(NR_MAC, "pdsch_pdu->rnti %x mac->crnti %x mac->ra.ra_state %d count_sent %d\n", + pdsch_pdu->rnti, mac->crnti, mac->ra.ra_state, count_sent); + } + } + } +} + void *nrue_standalone_pnf_task(void *context) { struct sockaddr_in server_address; @@ -1087,6 +1093,7 @@ void *nrue_standalone_pnf_task(void *context) nr_phy_channel_params_t *ch_info = CALLOC(1, sizeof(*ch_info)); memcpy(ch_info, buffer, sizeof(*ch_info)); + slot_rnti_mcs[NFAPI_SFNSLOT2SLOT(ch_info->sfn_slot)].sinr = ch_info->sinr; LOG_D(NR_PHY, "Received_SINR = %f, sfn:slot %d:%d\n", ch_info->sinr, NFAPI_SFNSLOT2SFN(ch_info->sfn_slot), NFAPI_SFNSLOT2SLOT(ch_info->sfn_slot)); @@ -1176,7 +1183,6 @@ void update_harq_status(module_id_t module_id, uint8_t harq_pid, uint8_t ack_nac } } - int nr_ue_ul_indication(nr_uplink_indication_t *ul_info){ NR_UE_L2_STATE_t ret; @@ -1389,3 +1395,241 @@ void RCconfig_nr_ue_L1(void) { } } } + +static int get_mcs_from_sinr(float sinr) +{ + if (sinr < (nr_bler_data[0].bler_table[0][0])) + { + LOG_I(NR_MAC, "The SINR found is smaller than first MCS table\n"); + return 0; + } + + if (sinr > (nr_bler_data[NUM_MCS-1].bler_table[nr_bler_data[NUM_MCS-1].length - 1][0])) + { + LOG_I(NR_MAC, "The SINR found is larger than last MCS table\n"); + return NUM_MCS-1; + } + + for (int n = NUM_MCS-1; n >= 0; n--) + { + CHECK_INDEX(nr_bler_data, n); + float largest_sinr = (nr_bler_data[n].bler_table[nr_bler_data[n].length - 1][0]); + float smallest_sinr = (nr_bler_data[n].bler_table[0][0]); + if (sinr < largest_sinr && sinr > smallest_sinr) + { + LOG_I(NR_MAC, "The SINR found in MCS %d table\n", n); + return n; + } + } + LOG_E(NR_MAC, "Unable to get an MCS value.\n"); + abort(); +} + +static int get_cqi_from_mcs(void) +{ + static const int mcs_to_cqi[] = {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, + 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15}; + assert(NUM_ELEMENTS(mcs_to_cqi) == NUM_MCS); + int slot = 0; + while (slot < NUM_NFAPI_SLOT) + { + if (slot_rnti_mcs[slot].latest) + { + int num_pdus = slot_rnti_mcs[slot].num_pdus; + if (num_pdus <= 0) + { + LOG_E(NR_MAC, "%s: slot_rnti_mcs[%d].num_pdus = 0\n", __FUNCTION__, slot); + abort(); + } + + CHECK_INDEX(slot_rnti_mcs[slot].mcs, num_pdus); + int mcs = get_mcs_from_sinr(slot_rnti_mcs[slot].sinr); + CHECK_INDEX(mcs_to_cqi, mcs); + int cqi = mcs_to_cqi[mcs]; + LOG_I(NR_MAC, "SINR: %f -> MCS: %d -> CQI: %d\n", slot_rnti_mcs[slot].sinr, mcs, cqi); + return cqi; + } + slot++; + } + LOG_E(NR_MAC, "Unable to get CQI value because no MCS found\n"); + abort(); +} + +static void read_channel_param(const nfapi_nr_dl_tti_pdsch_pdu_rel15_t * pdu, int slot, int index) +{ + if (pdu == NULL) + { + LOG_E(NR_MAC,"PDU NULL\n"); + abort(); + } + + /* This function is executed for every pdsch pdu type in a dl_tti_request. We save + the assocaited MCS and RNTI value for each. The 'index' passed in is a count of + how many times we have called this function for a particular dl_tti_request. It + allows us to save MCS/RNTI data in correct indicies when multiple pdsch pdu's are received.*/ + for (int i = 0; i < NUM_NFAPI_SLOT; i++) + { + slot_rnti_mcs[i].latest = false; + } + + CHECK_INDEX(slot_rnti_mcs[slot].rnti, index); + CHECK_INDEX(slot_rnti_mcs[slot].mcs, index); + CHECK_INDEX(slot_rnti_mcs[slot].drop_flag, index); + slot_rnti_mcs[slot].rnti[index] = pdu->rnti; + slot_rnti_mcs[slot].mcs[index] = pdu->mcsIndex[0]; + slot_rnti_mcs[slot].rvIndex[index] = pdu->rvIndex[0]; + slot_rnti_mcs[slot].drop_flag[index] = false; + slot_rnti_mcs[slot].num_pdus = index+1; //index starts at 0 so we incrament to get num of pdus + slot_rnti_mcs[slot].latest = true; + LOG_I(NR_MAC, "Adding MCS %d and RNTI %x for slot_rnti_mcs[%d]\n", slot_rnti_mcs[slot].mcs[index], slot_rnti_mcs[slot].rnti[index], slot); + + return; +} + +static bool did_drop_transport_block(int slot, uint16_t rnti) +{ + int num_pdus = slot_rnti_mcs[slot].num_pdus; + if (num_pdus <= 0) + { + LOG_E(MAC, "Problem, the PDU size is <= 0. We dropped this packet\n"); + return true; + } + CHECK_INDEX(slot_rnti_mcs[slot].rnti, num_pdus); + CHECK_INDEX(slot_rnti_mcs[slot].drop_flag, num_pdus); + for (int n = 0; n < num_pdus; n++) + { + if (slot_rnti_mcs[slot].rnti[n] == rnti && slot_rnti_mcs[slot].drop_flag[n]) + { + return true; + } + } + return false; +} + +static float get_bler_val(uint8_t mcs, int sinr) +{ + // 4th col = dropped packets, 5th col = total packets + float bler_val = 0.0; + CHECK_INDEX(nr_bler_data, mcs); + LOG_I(NR_MAC, "sinr %d min %d max %d\n", sinr, + (int)(nr_bler_data[mcs].bler_table[0][0] * 10), + (int)(nr_bler_data[mcs].bler_table[nr_bler_data[mcs].length - 1][0] * 10) + ); + + if (sinr < (int)(nr_bler_data[mcs].bler_table[0][0] * 10)) + { + LOG_I(NR_MAC, "MCS %d table. SINR is smaller than lowest SINR, bler_val is set based on lowest SINR in table\n", mcs); + bler_val = nr_bler_data[mcs].bler_table[0][4] / nr_bler_data[mcs].bler_table[0][5]; + return bler_val; + } + if (sinr > (int)(nr_bler_data[mcs].bler_table[nr_bler_data[mcs].length - 1][0] * 10)) + { + LOG_I(NR_MAC, "MCS %d table. SINR is greater than largest SINR. bler_val is set based on largest SINR in table\n", mcs); + bler_val = nr_bler_data[mcs].bler_table[(nr_bler_data[mcs].length - 1)][4] / nr_bler_data[mcs].bler_table[(nr_bler_data[mcs].length - 1)][5]; + return bler_val; + } + // Loop through bler table to find sinr_index + for (int i = 0; i < nr_bler_data[mcs].length; i++) + { + int temp_sinr = (int)(nr_bler_data[mcs].bler_table[i][0] * 10); + if (temp_sinr == sinr) + { + bler_val = nr_bler_data[mcs].bler_table[i][4] / nr_bler_data[mcs].bler_table[i][5]; + return bler_val; + } + // Linear interpolation when SINR is between indices + if (temp_sinr > sinr) + { + float bler_val1 = nr_bler_data[mcs].bler_table[i - 1][4] / nr_bler_data[mcs].bler_table[i - 1][5]; + float bler_val2 = nr_bler_data[mcs].bler_table[i][4] / nr_bler_data[mcs].bler_table[i][5]; + LOG_I(NR_MAC, "sinr %d min %f max %f\n", sinr, bler_val1, bler_val2); + return ((bler_val1 + bler_val2) / 2); + } + } + LOG_E(NR_MAC, "NO SINR INDEX FOUND!\n"); + abort(); + +} + +static inline bool is_channel_modeling(void) +{ + /* TODO: For now we enable channel modeling based on the node_number. + Replace with a command line option to enable/disable channel modeling. + The LTE UE will crash when channel modeling is conducted for NSA + mode. It does not crash for LTE mode. We have not implemented channel + modeling for NSA mode yet. For now, we ensure only do do chanel modeling + in LTE mode. */ + return get_softmodem_params()->node_number == 0 && !get_softmodem_params()->nsa; +} + +static bool should_drop_transport_block(int slot, uint16_t rnti) +{ + if (!is_channel_modeling()) + { + return false; + } + + /* We want to avoid dropping setup messages because this would be pathological. + This assumes were in standalone_pnf mode where + UE_rrc_inst[0] is module_id = 0 and Info[0] is eNB_index = 0. */ + NR_UE_STATE_t state = NR_UE_rrc_inst[0].Info[0].State; + if (state < NR_RRC_CONNECTED) + { + LOG_I(NR_MAC, "Not dropping because state: %d", state); + return false; + } + + /* Get block error rate (bler_val) from table based on every saved + MCS and SINR to be used as the cutoff rate for dropping packets. + Generate random uniform vairable to compare against bler_val. */ + int num_pdus = slot_rnti_mcs[slot].num_pdus; + assert(slot < 20 && slot >= 0); + LOG_I(NR_MAC, "rnti: %x num_pdus %d state %d slot %u sinr %f\n", + rnti, num_pdus, state, slot, slot_rnti_mcs[slot].sinr); + assert(num_pdus > 0); + CHECK_INDEX(slot_rnti_mcs[slot].rnti, num_pdus); + CHECK_INDEX(slot_rnti_mcs[slot].mcs, num_pdus); + CHECK_INDEX(slot_rnti_mcs[slot].drop_flag, num_pdus); + int n = 0; + uint8_t mcs = 99; + for (n = 0; n < num_pdus; n++) + { + if (slot_rnti_mcs[slot].rnti[n] == rnti) + { + mcs = slot_rnti_mcs[slot].mcs[n]; + } + if (mcs != 99) + { + /* Use MCS to get the bler value. Since there can be multiple MCS + values for a particular slot, we verify that all PDUs are not + flagged for drop before returning. If even one is flagged for drop + we return immediately because we drop the entire packet. */ + + LOG_I(NR_MAC, "rnti: %x mcs %u slot %u sinr %f\n", + slot_rnti_mcs[slot].rnti[n], mcs, slot, slot_rnti_mcs[slot].sinr); + + float bler_val; + if (slot_rnti_mcs[slot].rvIndex[n] != 0) + bler_val = 0; + else + bler_val = get_bler_val(mcs, ((int)(slot_rnti_mcs[slot].sinr * 10))); + double drop_cutoff = ((double) rand() / (RAND_MAX)); + assert(drop_cutoff <= 1); + LOG_I(NR_MAC, "SINR = %f, Bler_val = %f, MCS = %"PRIu8"\n", slot_rnti_mcs[slot].sinr, bler_val, slot_rnti_mcs[slot].mcs[n]); + if (drop_cutoff <= bler_val) + { + slot_rnti_mcs[slot].drop_flag[n] = true; + LOG_D(NR_MAC, "We are dropping this packet. Bler_val = %f, MCS = %"PRIu8", slot = %d\n", bler_val, slot_rnti_mcs[slot].mcs[n], slot); + return slot_rnti_mcs[slot].drop_flag[n]; + } + } + + } + + if (mcs == 99) + { + LOG_E(NR_MAC, "NO MCS Found for rnti %x. slot_rnti_mcs[%d].mcs[%d] \n", rnti, slot, n); + abort(); + } + return false; +} diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index 039b919b12..d3b12abc2b 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -41,6 +41,11 @@ #include "nfapi_nr_interface_scf.h" #include "openair2/NR_PHY_INTERFACE/NR_IF_Module.h" +#define NUM_MCS 29 +#define NUM_SINR 100 +#define NUM_BLER_COL 13 +#define NUM_NFAPI_SLOT 20 + typedef struct NR_UL_TIME_ALIGNMENT NR_UL_TIME_ALIGNMENT_t; typedef struct nr_phy_channel_params_t @@ -50,6 +55,27 @@ typedef struct nr_phy_channel_params_t // Incomplete, need all channel parameters } nr_phy_channel_params_t; +typedef struct +{ + uint8_t slot; + uint16_t rnti[256]; + uint8_t mcs[256]; + uint8_t rvIndex[256]; + float sinr; + uint16_t num_pdus; + bool drop_flag[256]; + bool latest; + +} slot_rnti_mcs_s; + +typedef struct +{ + uint16_t length; + float bler_table[NUM_SINR][NUM_BLER_COL]; +} nr_bler_struct; + +extern nr_bler_struct nr_bler_data[NUM_MCS]; + typedef enum { ONLY_PUSCH, NOT_PUSCH, diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index f910ff68d4..3670de2516 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -2826,7 +2826,6 @@ void start_oai_nrue_threads() init_queue(&nr_tx_req_queue); init_queue(&nr_ul_dci_req_queue); init_queue(&nr_ul_tti_req_queue); - init_queue(&nr_wait_ul_tti_req_queue); if (sem_init(&sfn_slot_semaphore, 0, 0) != 0) { diff --git a/openair2/RRC/NR_UE/rrc_proto.h b/openair2/RRC/NR_UE/rrc_proto.h index 62d9167251..510fbff230 100644 --- a/openair2/RRC/NR_UE/rrc_proto.h +++ b/openair2/RRC/NR_UE/rrc_proto.h @@ -51,7 +51,6 @@ extern queue_t nr_dl_tti_req_queue; extern queue_t nr_tx_req_queue; extern queue_t nr_ul_dci_req_queue; extern queue_t nr_ul_tti_req_queue; -extern queue_t nr_wait_ul_tti_req_queue; // // main_rrc.c // From cfc2311a96270748411bc8ae0cb6fcd3e30543d7 Mon Sep 17 00:00:00 2001 From: Melissa Date: Tue, 25 Jan 2022 23:15:06 +0000 Subject: [PATCH 006/150] Merge branch 'episys/david/adding_logs_for_timing_analysis' into 'episys/master-nsa' Added logs for timing analysis. See merge request aburger/openairinterface5g!106 --- nfapi/oai_integration/nfapi_vnf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nfapi/oai_integration/nfapi_vnf.c b/nfapi/oai_integration/nfapi_vnf.c index 0fed6b33d0..56ad438e0e 100644 --- a/nfapi/oai_integration/nfapi_vnf.c +++ b/nfapi/oai_integration/nfapi_vnf.c @@ -1924,8 +1924,7 @@ int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req) { int oai_nfapi_dl_tti_req(nfapi_nr_dl_tti_request_t *dl_config_req) { - //LOG_I(PHY, "sfn:%d,slot:%d\n",dl_config_req->SFN,dl_config_req->Slot); - //printf("\nEntering oai_nfapi_nr_dl_config_req sfn:%d,slot:%d\n",dl_config_req->SFN,dl_config_req->Slot); + LOG_D(NR_PHY, "Entering oai_nfapi_nr_dl_config_req sfn:%d,slot:%d\n", dl_config_req->SFN, dl_config_req->Slot); nfapi_vnf_p7_config_t *p7_config = vnf.p7_vnfs[0].config; dl_config_req->header.message_id= NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST; dl_config_req->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!! @@ -1944,6 +1943,7 @@ int oai_nfapi_dl_tti_req(nfapi_nr_dl_tti_request_t *dl_config_req) int oai_nfapi_tx_data_req(nfapi_nr_tx_data_request_t *tx_data_req) { + LOG_D(NR_PHY, "Entering oai_nfapi_nr_tx_data_req sfn:%d,slot:%d\n", tx_data_req->SFN, tx_data_req->Slot); nfapi_vnf_p7_config_t *p7_config = vnf.p7_vnfs[0].config; tx_data_req->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!! tx_data_req->header.message_id = NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST; From 2ec11592c30ea1581ecb58b519f456fcacb149f5 Mon Sep 17 00:00:00 2001 From: Melissa Date: Mon, 7 Feb 2022 22:14:17 +0000 Subject: [PATCH 007/150] Merge branch 'episys/david/fixing_Bler_tables' into 'episys/master-nsa' Removed strange characters in the first line. See merge request aburger/openairinterface5g!108 --- .../AWGN/AWGN_results/mcs0_awgn_5G.csv | 124 ++++++------ .../AWGN/AWGN_results/mcs10_awgn_5G.csv | 184 +++++++++--------- .../AWGN/AWGN_results/mcs11_awgn_5G.csv | 184 +++++++++--------- .../AWGN/AWGN_results/mcs12_awgn_5G.csv | 184 +++++++++--------- .../AWGN/AWGN_results/mcs13_awgn_5G.csv | 144 +++++++------- .../AWGN/AWGN_results/mcs14_awgn_5G.csv | 144 +++++++------- .../AWGN/AWGN_results/mcs15_awgn_5G.csv | 144 +++++++------- .../AWGN/AWGN_results/mcs16_awgn_5G.csv | 144 +++++++------- .../AWGN/AWGN_results/mcs17_awgn_5G.csv | 144 +++++++------- .../AWGN/AWGN_results/mcs18_awgn_5G.csv | 144 +++++++------- .../AWGN/AWGN_results/mcs19_awgn_5G.csv | 144 +++++++------- .../AWGN/AWGN_results/mcs1_awgn_5G.csv | 54 ++--- .../AWGN/AWGN_results/mcs20_awgn_5G.csv | 144 +++++++------- .../AWGN/AWGN_results/mcs21_awgn_5G.csv | 144 +++++++------- .../AWGN/AWGN_results/mcs22_awgn_5G.csv | 104 +++++----- .../AWGN/AWGN_results/mcs23_awgn_5G.csv | 184 +++++++++--------- .../AWGN/AWGN_results/mcs24_awgn_5G.csv | 184 +++++++++--------- .../AWGN/AWGN_results/mcs25_awgn_5G.csv | 184 +++++++++--------- .../AWGN/AWGN_results/mcs26_awgn_5G.csv | 184 +++++++++--------- .../AWGN/AWGN_results/mcs27_awgn_5G.csv | 184 +++++++++--------- .../AWGN/AWGN_results/mcs28_awgn_5G.csv | 184 +++++++++--------- .../AWGN/AWGN_results/mcs2_awgn_5G.csv | 124 ++++++------ .../AWGN/AWGN_results/mcs3_awgn_5G.csv | 124 ++++++------ .../AWGN/AWGN_results/mcs4_awgn_5G.csv | 124 ++++++------ .../AWGN/AWGN_results/mcs5_awgn_5G.csv | 124 ++++++------ .../AWGN/AWGN_results/mcs6_awgn_5G.csv | 124 ++++++------ .../AWGN/AWGN_results/mcs7_awgn_5G.csv | 124 ++++++------ .../AWGN/AWGN_results/mcs8_awgn_5G.csv | 124 ++++++------ .../AWGN/AWGN_results/mcs9_awgn_5G.csv | 128 ++++++------ 29 files changed, 2115 insertions(+), 2115 deletions(-) diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs0_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs0_awgn_5G.csv index ac9dd0b8ae..ae7824fe1e 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs0_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs0_awgn_5G.csv @@ -1,62 +1,62 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err --4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --3.9;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --3.8;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --3.7;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --3.6;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --3.5;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --3.4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --3.3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --3.2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --3.1;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --2.9;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --2.8;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --2.7;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --2.6;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --2.5;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --2.4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --2.3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --2.2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --2.1;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 --1.9;0;1864;0.2344;1499;1500;0;0;0;0;0;0;0 --1.8;0;1864;0.2344;1499;1500;0;0;0;0;0;0;0 --1.7;0;1864;0.2344;1498;1500;0;0;0;0;0;0;0 --1.6;0;1864;0.2344;1498;1500;0;0;0;0;0;0;0 --1.5;0;1864;0.2344;1497;1500;0;0;0;0;0;0;0 --1.4;0;1864;0.2344;1445;1500;0;0;0;0;0;0;0 --1.3;0;1864;0.2344;1394;1500;0;0;0;0;0;0;0 --1.2;0;1864;0.2344;1346;1500;0;0;0;0;0;0;0 --1.1;0;1864;0.2344;1299;1500;0;0;0;0;0;0;0 --1;0;1864;0.2344;1253;1500;0;0;0;0;0;0;0 --0.9;0;1864;0.2344;980;1500;0;0;0;0;0;0;0 --0.8;0;1864;0.2344;767;1500;0;0;0;0;0;0;0 --0.7;0;1864;0.2344;600;1500;0;0;0;0;0;0;0 --0.6;0;1864;0.2344;469;1500;0;0;0;0;0;0;0 --0.5;0;1864;0.2344;367;1500;0;0;0;0;0;0;0 --0.4;0;1864;0.2344;215;1500;0;0;0;0;0;0;0 --0.3;0;1864;0.2344;126;1500;0;0;0;0;0;0;0 --0.2;0;1864;0.2344;74;1500;0;0;0;0;0;0;0 --0.1;0;1864;0.2344;43;1500;0;0;0;0;0;0;0 -0;0;1864;0.2344;26;1500;0;0;0;0;0;0;0 -0.1;0;1864;0.2344;12;1500;0;0;0;0;0;0;0 -0.2;0;1864;0.2344;5;1500;0;0;0;0;0;0;0 -0.3;0;1864;0.2344;2;1500;0;0;0;0;0;0;0 -0.4;0;1864;0.2344;1;1500;0;0;0;0;0;0;0 -0.5;0;1864;0.2344;1;1500;0;0;0;0;0;0;0 -0.6;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -0.7;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -0.8;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -0.9;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -1;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -1.1;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -1.2;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -1.3;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -1.4;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -1.5;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -1.6;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -1.7;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -1.8;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -1.9;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 -2;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.9;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.8;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.7;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.6;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.5;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3.1;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.9;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.8;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.7;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.6;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.5;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.4;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.3;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2.1;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-2;0;1864;0.2344;1500;1500;0;0;0;0;0;0;0 +-1.9;0;1864;0.2344;1499;1500;0;0;0;0;0;0;0 +-1.8;0;1864;0.2344;1499;1500;0;0;0;0;0;0;0 +-1.7;0;1864;0.2344;1498;1500;0;0;0;0;0;0;0 +-1.6;0;1864;0.2344;1498;1500;0;0;0;0;0;0;0 +-1.5;0;1864;0.2344;1497;1500;0;0;0;0;0;0;0 +-1.4;0;1864;0.2344;1445;1500;0;0;0;0;0;0;0 +-1.3;0;1864;0.2344;1394;1500;0;0;0;0;0;0;0 +-1.2;0;1864;0.2344;1346;1500;0;0;0;0;0;0;0 +-1.1;0;1864;0.2344;1299;1500;0;0;0;0;0;0;0 +-1;0;1864;0.2344;1253;1500;0;0;0;0;0;0;0 +-0.9;0;1864;0.2344;980;1500;0;0;0;0;0;0;0 +-0.8;0;1864;0.2344;767;1500;0;0;0;0;0;0;0 +-0.7;0;1864;0.2344;600;1500;0;0;0;0;0;0;0 +-0.6;0;1864;0.2344;469;1500;0;0;0;0;0;0;0 +-0.5;0;1864;0.2344;367;1500;0;0;0;0;0;0;0 +-0.4;0;1864;0.2344;215;1500;0;0;0;0;0;0;0 +-0.3;0;1864;0.2344;126;1500;0;0;0;0;0;0;0 +-0.2;0;1864;0.2344;74;1500;0;0;0;0;0;0;0 +-0.1;0;1864;0.2344;43;1500;0;0;0;0;0;0;0 +0;0;1864;0.2344;26;1500;0;0;0;0;0;0;0 +0.1;0;1864;0.2344;12;1500;0;0;0;0;0;0;0 +0.2;0;1864;0.2344;5;1500;0;0;0;0;0;0;0 +0.3;0;1864;0.2344;2;1500;0;0;0;0;0;0;0 +0.4;0;1864;0.2344;1;1500;0;0;0;0;0;0;0 +0.5;0;1864;0.2344;1;1500;0;0;0;0;0;0;0 +0.6;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +0.7;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +0.8;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +0.9;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.1;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.2;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.3;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.4;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.5;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.6;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.7;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.8;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +1.9;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 +2;0;1864;0.2344;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs10_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs10_awgn_5G.csv index 65de0084ce..8d1ff3ebb6 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs10_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs10_awgn_5G.csv @@ -1,92 +1,92 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -3.1;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -3.2;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -3.3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -3.4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -3.5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -3.6;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -3.7;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -3.8;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -3.9;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -4.1;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -4.2;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -4.3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -4.4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -4.5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -4.6;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -4.7;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -4.8;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -4.9;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 -5.1;10;10504;1.3281;1454;1500;0;0;0;0;0;0;0 -5.2;10;10504;1.3281;1410;1500;0;0;0;0;0;0;0 -5.3;10;10504;1.3281;1367;1500;0;0;0;0;0;0;0 -5.4;10;10504;1.3281;1325;1500;0;0;0;0;0;0;0 -5.5;10;10504;1.3281;1285;1500;0;0;0;0;0;0;0 -5.6;10;10504;1.3281;1026;1500;0;0;0;0;0;0;0 -5.7;10;10504;1.3281;819;1500;0;0;0;0;0;0;0 -5.8;10;10504;1.3281;654;1500;0;0;0;0;0;0;0 -5.9;10;10504;1.3281;522;1500;0;0;0;0;0;0;0 -6;10;10504;1.3281;417;1500;0;0;0;0;0;0;0 -6.1;10;10504;1.3281;309;1500;0;0;0;0;0;0;0 -6.2;10;10504;1.3281;229;1500;0;0;0;0;0;0;0 -6.3;10;10504;1.3281;169;1500;0;0;0;0;0;0;0 -6.4;10;10504;1.3281;125;1500;0;0;0;0;0;0;0 -6.5;10;10504;1.3281;93;1500;0;0;0;0;0;0;0 -6.6;10;10504;1.3281;64;1500;0;0;0;0;0;0;0 -6.7;10;10504;1.3281;44;1500;0;0;0;0;0;0;0 -6.8;10;10504;1.3281;31;1500;0;0;0;0;0;0;0 -6.9;10;10504;1.3281;21;1500;0;0;0;0;0;0;0 -7;10;10504;1.3281;15;1500;0;0;0;0;0;0;0 -7.1;10;10504;1.3281;7;1500;0;0;0;0;0;0;0 -7.2;10;10504;1.3281;3;1500;0;0;0;0;0;0;0 -7.3;10;10504;1.3281;1;1500;0;0;0;0;0;0;0 -7.4;10;10504;1.3281;1;1500;0;0;0;0;0;0;0 -7.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -7.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -7.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -7.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -7.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -8.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -8.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -8.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -8.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -8.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -8.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -8.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -8.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -8.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -9.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -9.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -9.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -9.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -9.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -9.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -9.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -9.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -9.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -10;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -10.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -10.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -10.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -10.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -10.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -10.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -10.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -10.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -10.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -11;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -11.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -11.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -11.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -11.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -11.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -11.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -11.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -11.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -11.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 -12;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.1;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.2;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.6;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.7;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.8;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +3.9;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.1;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.2;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.3;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.4;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.6;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.7;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.8;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +4.9;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +5;10;10504;1.3281;1500;1500;0;0;0;0;0;0;0 +5.1;10;10504;1.3281;1454;1500;0;0;0;0;0;0;0 +5.2;10;10504;1.3281;1410;1500;0;0;0;0;0;0;0 +5.3;10;10504;1.3281;1367;1500;0;0;0;0;0;0;0 +5.4;10;10504;1.3281;1325;1500;0;0;0;0;0;0;0 +5.5;10;10504;1.3281;1285;1500;0;0;0;0;0;0;0 +5.6;10;10504;1.3281;1026;1500;0;0;0;0;0;0;0 +5.7;10;10504;1.3281;819;1500;0;0;0;0;0;0;0 +5.8;10;10504;1.3281;654;1500;0;0;0;0;0;0;0 +5.9;10;10504;1.3281;522;1500;0;0;0;0;0;0;0 +6;10;10504;1.3281;417;1500;0;0;0;0;0;0;0 +6.1;10;10504;1.3281;309;1500;0;0;0;0;0;0;0 +6.2;10;10504;1.3281;229;1500;0;0;0;0;0;0;0 +6.3;10;10504;1.3281;169;1500;0;0;0;0;0;0;0 +6.4;10;10504;1.3281;125;1500;0;0;0;0;0;0;0 +6.5;10;10504;1.3281;93;1500;0;0;0;0;0;0;0 +6.6;10;10504;1.3281;64;1500;0;0;0;0;0;0;0 +6.7;10;10504;1.3281;44;1500;0;0;0;0;0;0;0 +6.8;10;10504;1.3281;31;1500;0;0;0;0;0;0;0 +6.9;10;10504;1.3281;21;1500;0;0;0;0;0;0;0 +7;10;10504;1.3281;15;1500;0;0;0;0;0;0;0 +7.1;10;10504;1.3281;7;1500;0;0;0;0;0;0;0 +7.2;10;10504;1.3281;3;1500;0;0;0;0;0;0;0 +7.3;10;10504;1.3281;1;1500;0;0;0;0;0;0;0 +7.4;10;10504;1.3281;1;1500;0;0;0;0;0;0;0 +7.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +7.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +7.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +7.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +7.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +8.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +9.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +10.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.1;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.2;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.3;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.4;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.5;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.6;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.7;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.8;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +11.9;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 +12;10;10504;1.3281;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs11_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs11_awgn_5G.csv index 3d1dbcad12..e581ab2ff1 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs11_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs11_awgn_5G.csv @@ -1,92 +1,92 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -3.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -3.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -3.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -3.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -3.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -3.6;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -3.7;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -3.8;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -3.9;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -4.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -4.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -4.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -4.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -4.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -4.6;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -4.7;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -4.8;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -4.9;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -5.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -5.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -5.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -5.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -5.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 -5.6;11;11784;1.4766;1494;1500;0;0;0;0;0;0;0 -5.7;11;11784;1.4766;1489;1500;0;0;0;0;0;0;0 -5.8;11;11784;1.4766;1483;1500;0;0;0;0;0;0;0 -5.9;11;11784;1.4766;1477;1500;0;0;0;0;0;0;0 -6;11;11784;1.4766;1472;1500;0;0;0;0;0;0;0 -6.1;11;11784;1.4766;1367;1500;0;0;0;0;0;0;0 -6.2;11;11784;1.4766;1269;1500;0;0;0;0;0;0;0 -6.3;11;11784;1.4766;1179;1500;0;0;0;0;0;0;0 -6.4;11;11784;1.4766;1095;1500;0;0;0;0;0;0;0 -6.5;11;11784;1.4766;1016;1500;0;0;0;0;0;0;0 -6.6;11;11784;1.4766;762;1500;0;0;0;0;0;0;0 -6.7;11;11784;1.4766;571;1500;0;0;0;0;0;0;0 -6.8;11;11784;1.4766;428;1500;0;0;0;0;0;0;0 -6.9;11;11784;1.4766;320;1500;0;0;0;0;0;0;0 -7;11;11784;1.4766;240;1500;0;0;0;0;0;0;0 -7.1;11;11784;1.4766;169;1500;0;0;0;0;0;0;0 -7.2;11;11784;1.4766;119;1500;0;0;0;0;0;0;0 -7.3;11;11784;1.4766;83;1500;0;0;0;0;0;0;0 -7.4;11;11784;1.4766;59;1500;0;0;0;0;0;0;0 -7.5;11;11784;1.4766;41;1500;0;0;0;0;0;0;0 -7.6;11;11784;1.4766;24;1500;0;0;0;0;0;0;0 -7.7;11;11784;1.4766;14;1500;0;0;0;0;0;0;0 -7.8;11;11784;1.4766;8;1500;0;0;0;0;0;0;0 -7.9;11;11784;1.4766;5;1500;0;0;0;0;0;0;0 -8;11;11784;1.4766;3;1500;0;0;0;0;0;0;0 -8.1;11;11784;1.4766;1;1500;0;0;0;0;0;0;0 -8.2;11;11784;1.4766;1;1500;0;0;0;0;0;0;0 -8.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -8.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -8.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -8.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -8.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -8.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -8.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -9.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -9.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -9.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -9.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -9.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -9.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -9.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -9.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -9.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -10;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -10.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -10.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -10.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -10.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -10.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -10.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -10.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -10.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -10.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -11;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -11.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -11.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -11.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -11.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -11.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -11.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -11.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -11.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -11.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 -12;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.6;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.7;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.8;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +3.9;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.6;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.7;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.8;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +4.9;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.1;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.2;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.3;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.4;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.5;11;11784;1.4766;1500;1500;0;0;0;0;0;0;0 +5.6;11;11784;1.4766;1494;1500;0;0;0;0;0;0;0 +5.7;11;11784;1.4766;1489;1500;0;0;0;0;0;0;0 +5.8;11;11784;1.4766;1483;1500;0;0;0;0;0;0;0 +5.9;11;11784;1.4766;1477;1500;0;0;0;0;0;0;0 +6;11;11784;1.4766;1472;1500;0;0;0;0;0;0;0 +6.1;11;11784;1.4766;1367;1500;0;0;0;0;0;0;0 +6.2;11;11784;1.4766;1269;1500;0;0;0;0;0;0;0 +6.3;11;11784;1.4766;1179;1500;0;0;0;0;0;0;0 +6.4;11;11784;1.4766;1095;1500;0;0;0;0;0;0;0 +6.5;11;11784;1.4766;1016;1500;0;0;0;0;0;0;0 +6.6;11;11784;1.4766;762;1500;0;0;0;0;0;0;0 +6.7;11;11784;1.4766;571;1500;0;0;0;0;0;0;0 +6.8;11;11784;1.4766;428;1500;0;0;0;0;0;0;0 +6.9;11;11784;1.4766;320;1500;0;0;0;0;0;0;0 +7;11;11784;1.4766;240;1500;0;0;0;0;0;0;0 +7.1;11;11784;1.4766;169;1500;0;0;0;0;0;0;0 +7.2;11;11784;1.4766;119;1500;0;0;0;0;0;0;0 +7.3;11;11784;1.4766;83;1500;0;0;0;0;0;0;0 +7.4;11;11784;1.4766;59;1500;0;0;0;0;0;0;0 +7.5;11;11784;1.4766;41;1500;0;0;0;0;0;0;0 +7.6;11;11784;1.4766;24;1500;0;0;0;0;0;0;0 +7.7;11;11784;1.4766;14;1500;0;0;0;0;0;0;0 +7.8;11;11784;1.4766;8;1500;0;0;0;0;0;0;0 +7.9;11;11784;1.4766;5;1500;0;0;0;0;0;0;0 +8;11;11784;1.4766;3;1500;0;0;0;0;0;0;0 +8.1;11;11784;1.4766;1;1500;0;0;0;0;0;0;0 +8.2;11;11784;1.4766;1;1500;0;0;0;0;0;0;0 +8.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +8.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +9.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +10.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.1;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.2;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.3;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.4;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.5;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.6;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.7;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.8;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +11.9;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 +12;11;11784;1.4766;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs12_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs12_awgn_5G.csv index 5ce8b9bb19..08825dec27 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs12_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs12_awgn_5G.csv @@ -1,92 +1,92 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -3.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -3.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -3.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -3.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -3.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -3.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -3.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -3.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -3.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -4.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -4.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -4.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -4.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -4.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -4.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -4.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -4.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -4.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -5.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -5.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -5.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -5.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -5.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -5.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -5.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -5.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -5.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -6.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -6.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -6.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -6.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -6.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 -6.6;12;13576;1.6953;1498;1500;0;0;0;0;0;0;0 -6.7;12;13576;1.6953;1495;1500;0;0;0;0;0;0;0 -6.8;12;13576;1.6953;1493;1500;0;0;0;0;0;0;0 -6.9;12;13576;1.6953;1491;1500;0;0;0;0;0;0;0 -7;12;13576;1.6953;1488;1500;0;0;0;0;0;0;0 -7.1;12;13576;1.6953;1357;1500;0;0;0;0;0;0;0 -7.2;12;13576;1.6953;1238;1500;0;0;0;0;0;0;0 -7.3;12;13576;1.6953;1129;1500;0;0;0;0;0;0;0 -7.4;12;13576;1.6953;1029;1500;0;0;0;0;0;0;0 -7.5;12;13576;1.6953;939;1500;0;0;0;0;0;0;0 -7.6;12;13576;1.6953;632;1500;0;0;0;0;0;0;0 -7.7;12;13576;1.6953;425;1500;0;0;0;0;0;0;0 -7.8;12;13576;1.6953;286;1500;0;0;0;0;0;0;0 -7.9;12;13576;1.6953;193;1500;0;0;0;0;0;0;0 -8;12;13576;1.6953;130;1500;0;0;0;0;0;0;0 -8.1;12;13576;1.6953;91;1500;0;0;0;0;0;0;0 -8.2;12;13576;1.6953;64;1500;0;0;0;0;0;0;0 -8.3;12;13576;1.6953;45;1500;0;0;0;0;0;0;0 -8.4;12;13576;1.6953;32;1500;0;0;0;0;0;0;0 -8.5;12;13576;1.6953;23;1500;0;0;0;0;0;0;0 -8.6;12;13576;1.6953;12;1500;0;0;0;0;0;0;0 -8.7;12;13576;1.6953;6;1500;0;0;0;0;0;0;0 -8.8;12;13576;1.6953;3;1500;0;0;0;0;0;0;0 -8.9;12;13576;1.6953;2;1500;0;0;0;0;0;0;0 -9;12;13576;1.6953;1;1500;0;0;0;0;0;0;0 -9.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -9.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -9.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -9.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -9.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -9.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -9.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -9.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -9.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -10;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -10.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -10.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -10.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -10.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -10.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -10.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -10.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -10.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -10.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -11;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -11.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -11.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -11.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -11.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -11.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -11.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -11.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -11.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -11.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 -12;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +3.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +4.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.7;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.8;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +5.9;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.1;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.2;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.3;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.4;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.5;12;13576;1.6953;1500;1500;0;0;0;0;0;0;0 +6.6;12;13576;1.6953;1498;1500;0;0;0;0;0;0;0 +6.7;12;13576;1.6953;1495;1500;0;0;0;0;0;0;0 +6.8;12;13576;1.6953;1493;1500;0;0;0;0;0;0;0 +6.9;12;13576;1.6953;1491;1500;0;0;0;0;0;0;0 +7;12;13576;1.6953;1488;1500;0;0;0;0;0;0;0 +7.1;12;13576;1.6953;1357;1500;0;0;0;0;0;0;0 +7.2;12;13576;1.6953;1238;1500;0;0;0;0;0;0;0 +7.3;12;13576;1.6953;1129;1500;0;0;0;0;0;0;0 +7.4;12;13576;1.6953;1029;1500;0;0;0;0;0;0;0 +7.5;12;13576;1.6953;939;1500;0;0;0;0;0;0;0 +7.6;12;13576;1.6953;632;1500;0;0;0;0;0;0;0 +7.7;12;13576;1.6953;425;1500;0;0;0;0;0;0;0 +7.8;12;13576;1.6953;286;1500;0;0;0;0;0;0;0 +7.9;12;13576;1.6953;193;1500;0;0;0;0;0;0;0 +8;12;13576;1.6953;130;1500;0;0;0;0;0;0;0 +8.1;12;13576;1.6953;91;1500;0;0;0;0;0;0;0 +8.2;12;13576;1.6953;64;1500;0;0;0;0;0;0;0 +8.3;12;13576;1.6953;45;1500;0;0;0;0;0;0;0 +8.4;12;13576;1.6953;32;1500;0;0;0;0;0;0;0 +8.5;12;13576;1.6953;23;1500;0;0;0;0;0;0;0 +8.6;12;13576;1.6953;12;1500;0;0;0;0;0;0;0 +8.7;12;13576;1.6953;6;1500;0;0;0;0;0;0;0 +8.8;12;13576;1.6953;3;1500;0;0;0;0;0;0;0 +8.9;12;13576;1.6953;2;1500;0;0;0;0;0;0;0 +9;12;13576;1.6953;1;1500;0;0;0;0;0;0;0 +9.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +9.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +10.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.1;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.2;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.3;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.4;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.5;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.6;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.7;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.8;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +11.9;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 +12;12;13576;1.6953;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs13_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs13_awgn_5G.csv index a91d924705..ef85933aaf 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs13_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs13_awgn_5G.csv @@ -1,72 +1,72 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -7;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 -7.1;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 -7.2;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 -7.3;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 -7.4;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 -7.5;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 -7.6;13;15112;1.9141;1444;1500;0;0;0;0;0;0;0 -7.7;13;15112;1.9141;1391;1500;0;0;0;0;0;0;0 -7.8;13;15112;1.9141;1340;1500;0;0;0;0;0;0;0 -7.9;13;15112;1.9141;1290;1500;0;0;0;0;0;0;0 -8;13;15112;1.9141;1243;1500;0;0;0;0;0;0;0 -8.1;13;15112;1.9141;878;1500;0;0;0;0;0;0;0 -8.2;13;15112;1.9141;620;1500;0;0;0;0;0;0;0 -8.3;13;15112;1.9141;438;1500;0;0;0;0;0;0;0 -8.4;13;15112;1.9141;309;1500;0;0;0;0;0;0;0 -8.5;13;15112;1.9141;219;1500;0;0;0;0;0;0;0 -8.6;13;15112;1.9141;173;1500;0;0;0;0;0;0;0 -8.7;13;15112;1.9141;137;1500;0;0;0;0;0;0;0 -8.8;13;15112;1.9141;109;1500;0;0;0;0;0;0;0 -8.9;13;15112;1.9141;86;1500;0;0;0;0;0;0;0 -9;13;15112;1.9141;68;1500;0;0;0;0;0;0;0 -9.1;13;15112;1.9141;47;1500;0;0;0;0;0;0;0 -9.2;13;15112;1.9141;33;1500;0;0;0;0;0;0;0 -9.3;13;15112;1.9141;23;1500;0;0;0;0;0;0;0 -9.4;13;15112;1.9141;16;1500;0;0;0;0;0;0;0 -9.5;13;15112;1.9141;11;1500;0;0;0;0;0;0;0 -9.6;13;15112;1.9141;5;1500;0;0;0;0;0;0;0 -9.7;13;15112;1.9141;2;1500;0;0;0;0;0;0;0 -9.8;13;15112;1.9141;1;1500;0;0;0;0;0;0;0 -9.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -10;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -10.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -10.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -10.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -10.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -10.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -10.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -10.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -10.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -10.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -11;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -11.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -11.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -11.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -11.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -11.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -11.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -11.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -11.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -11.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -12;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -12.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -12.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -12.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -12.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -12.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -12.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -12.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -12.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -12.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -13;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -13.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -13.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -13.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -13.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -13.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -13.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -13.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -13.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -13.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 -14;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +7;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.1;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.2;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.3;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.4;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.5;13;15112;1.9141;1500;1500;0;0;0;0;0;0;0 +7.6;13;15112;1.9141;1444;1500;0;0;0;0;0;0;0 +7.7;13;15112;1.9141;1391;1500;0;0;0;0;0;0;0 +7.8;13;15112;1.9141;1340;1500;0;0;0;0;0;0;0 +7.9;13;15112;1.9141;1290;1500;0;0;0;0;0;0;0 +8;13;15112;1.9141;1243;1500;0;0;0;0;0;0;0 +8.1;13;15112;1.9141;878;1500;0;0;0;0;0;0;0 +8.2;13;15112;1.9141;620;1500;0;0;0;0;0;0;0 +8.3;13;15112;1.9141;438;1500;0;0;0;0;0;0;0 +8.4;13;15112;1.9141;309;1500;0;0;0;0;0;0;0 +8.5;13;15112;1.9141;219;1500;0;0;0;0;0;0;0 +8.6;13;15112;1.9141;173;1500;0;0;0;0;0;0;0 +8.7;13;15112;1.9141;137;1500;0;0;0;0;0;0;0 +8.8;13;15112;1.9141;109;1500;0;0;0;0;0;0;0 +8.9;13;15112;1.9141;86;1500;0;0;0;0;0;0;0 +9;13;15112;1.9141;68;1500;0;0;0;0;0;0;0 +9.1;13;15112;1.9141;47;1500;0;0;0;0;0;0;0 +9.2;13;15112;1.9141;33;1500;0;0;0;0;0;0;0 +9.3;13;15112;1.9141;23;1500;0;0;0;0;0;0;0 +9.4;13;15112;1.9141;16;1500;0;0;0;0;0;0;0 +9.5;13;15112;1.9141;11;1500;0;0;0;0;0;0;0 +9.6;13;15112;1.9141;5;1500;0;0;0;0;0;0;0 +9.7;13;15112;1.9141;2;1500;0;0;0;0;0;0;0 +9.8;13;15112;1.9141;1;1500;0;0;0;0;0;0;0 +9.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +10.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +11.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +12.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.1;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.2;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.3;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.4;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.5;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.6;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.7;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.8;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +13.9;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 +14;13;15112;1.9141;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs14_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs14_awgn_5G.csv index b28d592a5e..0667105011 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs14_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs14_awgn_5G.csv @@ -1,72 +1,72 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -7;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -7.1;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -7.2;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -7.3;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -7.4;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -7.5;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -7.6;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -7.7;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -7.8;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -7.9;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -8;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -8.1;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -8.2;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -8.3;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -8.4;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -8.5;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 -8.6;14;17424;2.1602;1497;1500;0;0;0;0;0;0;0 -8.7;14;17424;2.1602;1493;1500;0;0;0;0;0;0;0 -8.8;14;17424;2.1602;1490;1500;0;0;0;0;0;0;0 -8.9;14;17424;2.1602;1487;1500;0;0;0;0;0;0;0 -9;14;17424;2.1602;1484;1500;0;0;0;0;0;0;0 -9.1;14;17424;2.1602;1291;1500;0;0;0;0;0;0;0 -9.2;14;17424;2.1602;1123;1500;0;0;0;0;0;0;0 -9.3;14;17424;2.1602;977;1500;0;0;0;0;0;0;0 -9.4;14;17424;2.1602;850;1500;0;0;0;0;0;0;0 -9.5;14;17424;2.1602;739;1500;0;0;0;0;0;0;0 -9.6;14;17424;2.1602;508;1500;0;0;0;0;0;0;0 -9.7;14;17424;2.1602;349;1500;0;0;0;0;0;0;0 -9.8;14;17424;2.1602;239;1500;0;0;0;0;0;0;0 -9.9;14;17424;2.1602;164;1500;0;0;0;0;0;0;0 -10;14;17424;2.1602;113;1500;0;0;0;0;0;0;0 -10.1;14;17424;2.1602;85;1500;0;0;0;0;0;0;0 -10.2;14;17424;2.1602;63;1500;0;0;0;0;0;0;0 -10.3;14;17424;2.1602;47;1500;0;0;0;0;0;0;0 -10.4;14;17424;2.1602;35;1500;0;0;0;0;0;0;0 -10.5;14;17424;2.1602;27;1500;0;0;0;0;0;0;0 -10.6;14;17424;2.1602;12;1500;0;0;0;0;0;0;0 -10.7;14;17424;2.1602;6;1500;0;0;0;0;0;0;0 -10.8;14;17424;2.1602;3;1500;0;0;0;0;0;0;0 -10.9;14;17424;2.1602;1;1500;0;0;0;0;0;0;0 -11;14;17424;2.1602;1;1500;0;0;0;0;0;0;0 -11.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -11.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -11.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -11.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -11.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -11.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -11.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -11.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -11.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -12;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -12.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -12.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -12.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -12.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -12.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -12.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -12.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -12.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -12.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -13;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -13.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -13.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -13.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -13.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -13.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -13.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -13.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -13.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -13.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 -14;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +7;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.1;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.2;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.3;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.4;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.5;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.6;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.7;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.8;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +7.9;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.1;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.2;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.3;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.4;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.5;14;17424;2.1602;1500;1500;0;0;0;0;0;0;0 +8.6;14;17424;2.1602;1497;1500;0;0;0;0;0;0;0 +8.7;14;17424;2.1602;1493;1500;0;0;0;0;0;0;0 +8.8;14;17424;2.1602;1490;1500;0;0;0;0;0;0;0 +8.9;14;17424;2.1602;1487;1500;0;0;0;0;0;0;0 +9;14;17424;2.1602;1484;1500;0;0;0;0;0;0;0 +9.1;14;17424;2.1602;1291;1500;0;0;0;0;0;0;0 +9.2;14;17424;2.1602;1123;1500;0;0;0;0;0;0;0 +9.3;14;17424;2.1602;977;1500;0;0;0;0;0;0;0 +9.4;14;17424;2.1602;850;1500;0;0;0;0;0;0;0 +9.5;14;17424;2.1602;739;1500;0;0;0;0;0;0;0 +9.6;14;17424;2.1602;508;1500;0;0;0;0;0;0;0 +9.7;14;17424;2.1602;349;1500;0;0;0;0;0;0;0 +9.8;14;17424;2.1602;239;1500;0;0;0;0;0;0;0 +9.9;14;17424;2.1602;164;1500;0;0;0;0;0;0;0 +10;14;17424;2.1602;113;1500;0;0;0;0;0;0;0 +10.1;14;17424;2.1602;85;1500;0;0;0;0;0;0;0 +10.2;14;17424;2.1602;63;1500;0;0;0;0;0;0;0 +10.3;14;17424;2.1602;47;1500;0;0;0;0;0;0;0 +10.4;14;17424;2.1602;35;1500;0;0;0;0;0;0;0 +10.5;14;17424;2.1602;27;1500;0;0;0;0;0;0;0 +10.6;14;17424;2.1602;12;1500;0;0;0;0;0;0;0 +10.7;14;17424;2.1602;6;1500;0;0;0;0;0;0;0 +10.8;14;17424;2.1602;3;1500;0;0;0;0;0;0;0 +10.9;14;17424;2.1602;1;1500;0;0;0;0;0;0;0 +11;14;17424;2.1602;1;1500;0;0;0;0;0;0;0 +11.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +11.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +12.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.1;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.2;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.3;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.4;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.5;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.6;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.7;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.8;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +13.9;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 +14;14;17424;2.1602;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs15_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs15_awgn_5G.csv index a48c75a071..460d156d78 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs15_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs15_awgn_5G.csv @@ -1,72 +1,72 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -7.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -7.2;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -7.3;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -7.4;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -7.5;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -7.6;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -7.7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -7.8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -7.9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -8.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -8.2;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -8.3;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -8.4;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -8.5;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -8.6;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -8.7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -8.8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -8.9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -9.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 -9.2;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0 -9.3;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0 -9.4;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0 -9.5;15;18960;2.4063;1498;1500;0;0;0;0;0;0;0 -9.6;15;18960;2.4063;1377;1500;0;0;0;0;0;0;0 -9.7;15;18960;2.4063;1265;1500;0;0;0;0;0;0;0 -9.8;15;18960;2.4063;1163;1500;0;0;0;0;0;0;0 -9.9;15;18960;2.4063;1069;1500;0;0;0;0;0;0;0 -10;15;18960;2.4063;982;1500;0;0;0;0;0;0;0 -10.1;15;18960;2.4063;664;1500;0;0;0;0;0;0;0 -10.2;15;18960;2.4063;450;1500;0;0;0;0;0;0;0 -10.3;15;18960;2.4063;304;1500;0;0;0;0;0;0;0 -10.4;15;18960;2.4063;206;1500;0;0;0;0;0;0;0 -10.5;15;18960;2.4063;139;1500;0;0;0;0;0;0;0 -10.6;15;18960;2.4063;113;1500;0;0;0;0;0;0;0 -10.7;15;18960;2.4063;92;1500;0;0;0;0;0;0;0 -10.8;15;18960;2.4063;75;1500;0;0;0;0;0;0;0 -10.9;15;18960;2.4063;61;1500;0;0;0;0;0;0;0 -11;15;18960;2.4063;50;1500;0;0;0;0;0;0;0 -11.1;15;18960;2.4063;29;1500;0;0;0;0;0;0;0 -11.2;15;18960;2.4063;17;1500;0;0;0;0;0;0;0 -11.3;15;18960;2.4063;10;1500;0;0;0;0;0;0;0 -11.4;15;18960;2.4063;6;1500;0;0;0;0;0;0;0 -11.5;15;18960;2.4063;3;1500;0;0;0;0;0;0;0 -11.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -11.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -11.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -11.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -12;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -12.1;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -12.2;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -12.3;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -12.4;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -12.5;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -12.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -12.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -12.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -12.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -13;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -13.1;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -13.2;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -13.3;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -13.4;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -13.5;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -13.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -13.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -13.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -13.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 -14;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.2;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.3;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.4;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.5;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.6;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +7.9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.2;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.3;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.4;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.5;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.6;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.7;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.8;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +8.9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +9;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +9.1;15;18960;2.4063;1500;1500;0;0;0;0;0;0;0 +9.2;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0 +9.3;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0 +9.4;15;18960;2.4063;1499;1500;0;0;0;0;0;0;0 +9.5;15;18960;2.4063;1498;1500;0;0;0;0;0;0;0 +9.6;15;18960;2.4063;1377;1500;0;0;0;0;0;0;0 +9.7;15;18960;2.4063;1265;1500;0;0;0;0;0;0;0 +9.8;15;18960;2.4063;1163;1500;0;0;0;0;0;0;0 +9.9;15;18960;2.4063;1069;1500;0;0;0;0;0;0;0 +10;15;18960;2.4063;982;1500;0;0;0;0;0;0;0 +10.1;15;18960;2.4063;664;1500;0;0;0;0;0;0;0 +10.2;15;18960;2.4063;450;1500;0;0;0;0;0;0;0 +10.3;15;18960;2.4063;304;1500;0;0;0;0;0;0;0 +10.4;15;18960;2.4063;206;1500;0;0;0;0;0;0;0 +10.5;15;18960;2.4063;139;1500;0;0;0;0;0;0;0 +10.6;15;18960;2.4063;113;1500;0;0;0;0;0;0;0 +10.7;15;18960;2.4063;92;1500;0;0;0;0;0;0;0 +10.8;15;18960;2.4063;75;1500;0;0;0;0;0;0;0 +10.9;15;18960;2.4063;61;1500;0;0;0;0;0;0;0 +11;15;18960;2.4063;50;1500;0;0;0;0;0;0;0 +11.1;15;18960;2.4063;29;1500;0;0;0;0;0;0;0 +11.2;15;18960;2.4063;17;1500;0;0;0;0;0;0;0 +11.3;15;18960;2.4063;10;1500;0;0;0;0;0;0;0 +11.4;15;18960;2.4063;6;1500;0;0;0;0;0;0;0 +11.5;15;18960;2.4063;3;1500;0;0;0;0;0;0;0 +11.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +11.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +11.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +11.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.1;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.2;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.3;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.4;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.5;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +12.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.1;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.2;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.3;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.4;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.5;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.6;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.7;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.8;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +13.9;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 +14;15;18960;2.4063;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs16_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs16_awgn_5G.csv index cabe546aef..4f122de8c1 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs16_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs16_awgn_5G.csv @@ -1,72 +1,72 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -7.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -7.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -7.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -7.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -7.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -7.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -7.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -7.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -7.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -8.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -8.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -8.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -8.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -8.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -8.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -8.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -8.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -8.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -9.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -9.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -9.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -9.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -9.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -9.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -9.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -9.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -9.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -10;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 -10.1;16;20496;2.5703;1424;1500;0;0;0;0;0;0;0 -10.2;16;20496;2.5703;1352;1500;0;0;0;0;0;0;0 -10.3;16;20496;2.5703;1283;1500;0;0;0;0;0;0;0 -10.4;16;20496;2.5703;1218;1500;0;0;0;0;0;0;0 -10.5;16;20496;2.5703;1157;1500;0;0;0;0;0;0;0 -10.6;16;20496;2.5703;775;1500;0;0;0;0;0;0;0 -10.7;16;20496;2.5703;519;1500;0;0;0;0;0;0;0 -10.8;16;20496;2.5703;348;1500;0;0;0;0;0;0;0 -10.9;16;20496;2.5703;233;1500;0;0;0;0;0;0;0 -11;16;20496;2.5703;156;1500;0;0;0;0;0;0;0 -11.1;16;20496;2.5703;132;1500;0;0;0;0;0;0;0 -11.2;16;20496;2.5703;111;1500;0;0;0;0;0;0;0 -11.3;16;20496;2.5703;94;1500;0;0;0;0;0;0;0 -11.4;16;20496;2.5703;79;1500;0;0;0;0;0;0;0 -11.5;16;20496;2.5703;67;1500;0;0;0;0;0;0;0 -11.6;16;20496;2.5703;44;1500;0;0;0;0;0;0;0 -11.7;16;20496;2.5703;29;1500;0;0;0;0;0;0;0 -11.8;16;20496;2.5703;19;1500;0;0;0;0;0;0;0 -11.9;16;20496;2.5703;12;1500;0;0;0;0;0;0;0 -12;16;20496;2.5703;8;1500;0;0;0;0;0;0;0 -12.1;16;20496;2.5703;4;1500;0;0;0;0;0;0;0 -12.2;16;20496;2.5703;2;1500;0;0;0;0;0;0;0 -12.3;16;20496;2.5703;1;1500;0;0;0;0;0;0;0 -12.4;16;20496;2.5703;1;1500;0;0;0;0;0;0;0 -12.5;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -12.6;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -12.7;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -12.8;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -12.9;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -13;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -13.1;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -13.2;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -13.3;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -13.4;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -13.5;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -13.6;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -13.7;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -13.8;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -13.9;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 -14;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +7.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +8.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.1;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.2;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.3;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.4;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.5;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.6;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.7;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.8;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +9.9;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +10;16;20496;2.5703;1500;1500;0;0;0;0;0;0;0 +10.1;16;20496;2.5703;1424;1500;0;0;0;0;0;0;0 +10.2;16;20496;2.5703;1352;1500;0;0;0;0;0;0;0 +10.3;16;20496;2.5703;1283;1500;0;0;0;0;0;0;0 +10.4;16;20496;2.5703;1218;1500;0;0;0;0;0;0;0 +10.5;16;20496;2.5703;1157;1500;0;0;0;0;0;0;0 +10.6;16;20496;2.5703;775;1500;0;0;0;0;0;0;0 +10.7;16;20496;2.5703;519;1500;0;0;0;0;0;0;0 +10.8;16;20496;2.5703;348;1500;0;0;0;0;0;0;0 +10.9;16;20496;2.5703;233;1500;0;0;0;0;0;0;0 +11;16;20496;2.5703;156;1500;0;0;0;0;0;0;0 +11.1;16;20496;2.5703;132;1500;0;0;0;0;0;0;0 +11.2;16;20496;2.5703;111;1500;0;0;0;0;0;0;0 +11.3;16;20496;2.5703;94;1500;0;0;0;0;0;0;0 +11.4;16;20496;2.5703;79;1500;0;0;0;0;0;0;0 +11.5;16;20496;2.5703;67;1500;0;0;0;0;0;0;0 +11.6;16;20496;2.5703;44;1500;0;0;0;0;0;0;0 +11.7;16;20496;2.5703;29;1500;0;0;0;0;0;0;0 +11.8;16;20496;2.5703;19;1500;0;0;0;0;0;0;0 +11.9;16;20496;2.5703;12;1500;0;0;0;0;0;0;0 +12;16;20496;2.5703;8;1500;0;0;0;0;0;0;0 +12.1;16;20496;2.5703;4;1500;0;0;0;0;0;0;0 +12.2;16;20496;2.5703;2;1500;0;0;0;0;0;0;0 +12.3;16;20496;2.5703;1;1500;0;0;0;0;0;0;0 +12.4;16;20496;2.5703;1;1500;0;0;0;0;0;0;0 +12.5;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +12.6;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +12.7;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +12.8;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +12.9;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.1;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.2;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.3;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.4;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.5;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.6;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.7;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.8;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +13.9;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 +14;16;20496;2.5703;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs17_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs17_awgn_5G.csv index 5b26a5a722..3254f76eb9 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs17_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs17_awgn_5G.csv @@ -1,72 +1,72 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -10;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 -10.1;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 -10.2;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 -10.3;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 -10.4;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 -10.5;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 -10.6;17;20496;2.5664;1498;1500;0;0;0;0;0;0;0 -10.7;17;20496;2.5664;1496;1500;0;0;0;0;0;0;0 -10.8;17;20496;2.5664;1494;1500;0;0;0;0;0;0;0 -10.9;17;20496;2.5664;1493;1500;0;0;0;0;0;0;0 -11;17;20496;2.5664;1491;1500;0;0;0;0;0;0;0 -11.1;17;20496;2.5664;1336;1500;0;0;0;0;0;0;0 -11.2;17;20496;2.5664;1197;1500;0;0;0;0;0;0;0 -11.3;17;20496;2.5664;1072;1500;0;0;0;0;0;0;0 -11.4;17;20496;2.5664;961;1500;0;0;0;0;0;0;0 -11.5;17;20496;2.5664;861;1500;0;0;0;0;0;0;0 -11.6;17;20496;2.5664;603;1500;0;0;0;0;0;0;0 -11.7;17;20496;2.5664;423;1500;0;0;0;0;0;0;0 -11.8;17;20496;2.5664;296;1500;0;0;0;0;0;0;0 -11.9;17;20496;2.5664;208;1500;0;0;0;0;0;0;0 -12;17;20496;2.5664;146;1500;0;0;0;0;0;0;0 -12.1;17;20496;2.5664;125;1500;0;0;0;0;0;0;0 -12.2;17;20496;2.5664;107;1500;0;0;0;0;0;0;0 -12.3;17;20496;2.5664;92;1500;0;0;0;0;0;0;0 -12.4;17;20496;2.5664;79;1500;0;0;0;0;0;0;0 -12.5;17;20496;2.5664;68;1500;0;0;0;0;0;0;0 -12.6;17;20496;2.5664;50;1500;0;0;0;0;0;0;0 -12.7;17;20496;2.5664;37;1500;0;0;0;0;0;0;0 -12.8;17;20496;2.5664;28;1500;0;0;0;0;0;0;0 -12.9;17;20496;2.5664;20;1500;0;0;0;0;0;0;0 -13;17;20496;2.5664;15;1500;0;0;0;0;0;0;0 -13.1;17;20496;2.5664;9;1500;0;0;0;0;0;0;0 -13.2;17;20496;2.5664;5;1500;0;0;0;0;0;0;0 -13.3;17;20496;2.5664;3;1500;0;0;0;0;0;0;0 -13.4;17;20496;2.5664;2;1500;0;0;0;0;0;0;0 -13.5;17;20496;2.5664;1;1500;0;0;0;0;0;0;0 -13.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -13.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -13.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -13.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -14;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -14.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -14.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -14.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -14.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -14.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -14.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -14.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -14.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -14.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -15;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -15.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -15.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -15.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -15.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -15.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -15.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -15.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -15.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -15.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -16;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -16.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -16.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -16.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -16.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -16.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -16.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -16.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -16.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -16.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 -17;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +10;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.1;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.2;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.3;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.4;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.5;17;20496;2.5664;1500;1500;0;0;0;0;0;0;0 +10.6;17;20496;2.5664;1498;1500;0;0;0;0;0;0;0 +10.7;17;20496;2.5664;1496;1500;0;0;0;0;0;0;0 +10.8;17;20496;2.5664;1494;1500;0;0;0;0;0;0;0 +10.9;17;20496;2.5664;1493;1500;0;0;0;0;0;0;0 +11;17;20496;2.5664;1491;1500;0;0;0;0;0;0;0 +11.1;17;20496;2.5664;1336;1500;0;0;0;0;0;0;0 +11.2;17;20496;2.5664;1197;1500;0;0;0;0;0;0;0 +11.3;17;20496;2.5664;1072;1500;0;0;0;0;0;0;0 +11.4;17;20496;2.5664;961;1500;0;0;0;0;0;0;0 +11.5;17;20496;2.5664;861;1500;0;0;0;0;0;0;0 +11.6;17;20496;2.5664;603;1500;0;0;0;0;0;0;0 +11.7;17;20496;2.5664;423;1500;0;0;0;0;0;0;0 +11.8;17;20496;2.5664;296;1500;0;0;0;0;0;0;0 +11.9;17;20496;2.5664;208;1500;0;0;0;0;0;0;0 +12;17;20496;2.5664;146;1500;0;0;0;0;0;0;0 +12.1;17;20496;2.5664;125;1500;0;0;0;0;0;0;0 +12.2;17;20496;2.5664;107;1500;0;0;0;0;0;0;0 +12.3;17;20496;2.5664;92;1500;0;0;0;0;0;0;0 +12.4;17;20496;2.5664;79;1500;0;0;0;0;0;0;0 +12.5;17;20496;2.5664;68;1500;0;0;0;0;0;0;0 +12.6;17;20496;2.5664;50;1500;0;0;0;0;0;0;0 +12.7;17;20496;2.5664;37;1500;0;0;0;0;0;0;0 +12.8;17;20496;2.5664;28;1500;0;0;0;0;0;0;0 +12.9;17;20496;2.5664;20;1500;0;0;0;0;0;0;0 +13;17;20496;2.5664;15;1500;0;0;0;0;0;0;0 +13.1;17;20496;2.5664;9;1500;0;0;0;0;0;0;0 +13.2;17;20496;2.5664;5;1500;0;0;0;0;0;0;0 +13.3;17;20496;2.5664;3;1500;0;0;0;0;0;0;0 +13.4;17;20496;2.5664;2;1500;0;0;0;0;0;0;0 +13.5;17;20496;2.5664;1;1500;0;0;0;0;0;0;0 +13.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +13.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +13.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +13.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +14.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +15.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.1;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.2;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.3;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.4;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.5;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.6;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.7;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.8;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +16.9;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 +17;17;20496;2.5664;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs18_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs18_awgn_5G.csv index bf4864701f..67ede60066 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs18_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs18_awgn_5G.csv @@ -1,72 +1,72 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -10;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 -10.1;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 -10.2;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 -10.3;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 -10.4;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 -10.5;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 -10.6;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 -10.7;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 -10.8;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 -10.9;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 -11;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 -11.1;18;21504;2.7305;1499;1500;0;0;0;0;0;0;0 -11.2;18;21504;2.7305;1499;1500;0;0;0;0;0;0;0 -11.3;18;21504;2.7305;1498;1500;0;0;0;0;0;0;0 -11.4;18;21504;2.7305;1498;1500;0;0;0;0;0;0;0 -11.5;18;21504;2.7305;1497;1500;0;0;0;0;0;0;0 -11.6;18;21504;2.7305;1399;1500;0;0;0;0;0;0;0 -11.7;18;21504;2.7305;1307;1500;0;0;0;0;0;0;0 -11.8;18;21504;2.7305;1221;1500;0;0;0;0;0;0;0 -11.9;18;21504;2.7305;1141;1500;0;0;0;0;0;0;0 -12;18;21504;2.7305;1066;1500;0;0;0;0;0;0;0 -12.1;18;21504;2.7305;788;1500;0;0;0;0;0;0;0 -12.2;18;21504;2.7305;582;1500;0;0;0;0;0;0;0 -12.3;18;21504;2.7305;431;1500;0;0;0;0;0;0;0 -12.4;18;21504;2.7305;318;1500;0;0;0;0;0;0;0 -12.5;18;21504;2.7305;235;1500;0;0;0;0;0;0;0 -12.6;18;21504;2.7305;185;1500;0;0;0;0;0;0;0 -12.7;18;21504;2.7305;146;1500;0;0;0;0;0;0;0 -12.8;18;21504;2.7305;115;1500;0;0;0;0;0;0;0 -12.9;18;21504;2.7305;90;1500;0;0;0;0;0;0;0 -13;18;21504;2.7305;71;1500;0;0;0;0;0;0;0 -13.1;18;21504;2.7305;50;1500;0;0;0;0;0;0;0 -13.2;18;21504;2.7305;35;1500;0;0;0;0;0;0;0 -13.3;18;21504;2.7305;25;1500;0;0;0;0;0;0;0 -13.4;18;21504;2.7305;18;1500;0;0;0;0;0;0;0 -13.5;18;21504;2.7305;12;1500;0;0;0;0;0;0;0 -13.6;18;21504;2.7305;7;1500;0;0;0;0;0;0;0 -13.7;18;21504;2.7305;3;1500;0;0;0;0;0;0;0 -13.8;18;21504;2.7305;2;1500;0;0;0;0;0;0;0 -13.9;18;21504;2.7305;1;1500;0;0;0;0;0;0;0 -14;18;21504;2.7305;1;1500;0;0;0;0;0;0;0 -14.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -14.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -14.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -14.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -14.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -14.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -14.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -14.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -14.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -15;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -15.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -15.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -15.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -15.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -15.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -15.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -15.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -15.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -15.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -16;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -16.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -16.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -16.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -16.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -16.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -16.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -16.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -16.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -16.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 -17;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +10;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.1;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.2;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.3;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.4;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.5;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.6;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.7;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.8;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +10.9;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +11;18;21504;2.7305;1500;1500;0;0;0;0;0;0;0 +11.1;18;21504;2.7305;1499;1500;0;0;0;0;0;0;0 +11.2;18;21504;2.7305;1499;1500;0;0;0;0;0;0;0 +11.3;18;21504;2.7305;1498;1500;0;0;0;0;0;0;0 +11.4;18;21504;2.7305;1498;1500;0;0;0;0;0;0;0 +11.5;18;21504;2.7305;1497;1500;0;0;0;0;0;0;0 +11.6;18;21504;2.7305;1399;1500;0;0;0;0;0;0;0 +11.7;18;21504;2.7305;1307;1500;0;0;0;0;0;0;0 +11.8;18;21504;2.7305;1221;1500;0;0;0;0;0;0;0 +11.9;18;21504;2.7305;1141;1500;0;0;0;0;0;0;0 +12;18;21504;2.7305;1066;1500;0;0;0;0;0;0;0 +12.1;18;21504;2.7305;788;1500;0;0;0;0;0;0;0 +12.2;18;21504;2.7305;582;1500;0;0;0;0;0;0;0 +12.3;18;21504;2.7305;431;1500;0;0;0;0;0;0;0 +12.4;18;21504;2.7305;318;1500;0;0;0;0;0;0;0 +12.5;18;21504;2.7305;235;1500;0;0;0;0;0;0;0 +12.6;18;21504;2.7305;185;1500;0;0;0;0;0;0;0 +12.7;18;21504;2.7305;146;1500;0;0;0;0;0;0;0 +12.8;18;21504;2.7305;115;1500;0;0;0;0;0;0;0 +12.9;18;21504;2.7305;90;1500;0;0;0;0;0;0;0 +13;18;21504;2.7305;71;1500;0;0;0;0;0;0;0 +13.1;18;21504;2.7305;50;1500;0;0;0;0;0;0;0 +13.2;18;21504;2.7305;35;1500;0;0;0;0;0;0;0 +13.3;18;21504;2.7305;25;1500;0;0;0;0;0;0;0 +13.4;18;21504;2.7305;18;1500;0;0;0;0;0;0;0 +13.5;18;21504;2.7305;12;1500;0;0;0;0;0;0;0 +13.6;18;21504;2.7305;7;1500;0;0;0;0;0;0;0 +13.7;18;21504;2.7305;3;1500;0;0;0;0;0;0;0 +13.8;18;21504;2.7305;2;1500;0;0;0;0;0;0;0 +13.9;18;21504;2.7305;1;1500;0;0;0;0;0;0;0 +14;18;21504;2.7305;1;1500;0;0;0;0;0;0;0 +14.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +14.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +15.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.1;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.2;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.3;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.4;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.5;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.6;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.7;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.8;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +16.9;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 +17;18;21504;2.7305;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs19_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs19_awgn_5G.csv index 85e7f6a712..3d18bd7987 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs19_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs19_awgn_5G.csv @@ -1,72 +1,72 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -10;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -10.1;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -10.2;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -10.3;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -10.4;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -10.5;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -10.6;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -10.7;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -10.8;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -10.9;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -11;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -11.1;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -11.2;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -11.3;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -11.4;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -11.5;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -11.6;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -11.7;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -11.8;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -11.9;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -12;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 -12.1;19;24072;3.0293;1499;1500;0;0;0;0;0;0;0 -12.2;19;24072;3.0293;1499;1500;0;0;0;0;0;0;0 -12.3;19;24072;3.0293;1498;1500;0;0;0;0;0;0;0 -12.4;19;24072;3.0293;1497;1500;0;0;0;0;0;0;0 -12.5;19;24072;3.0293;1497;1500;0;0;0;0;0;0;0 -12.6;19;24072;3.0293;1389;1500;0;0;0;0;0;0;0 -12.7;19;24072;3.0293;1290;1500;0;0;0;0;0;0;0 -12.8;19;24072;3.0293;1197;1500;0;0;0;0;0;0;0 -12.9;19;24072;3.0293;1111;1500;0;0;0;0;0;0;0 -13;19;24072;3.0293;1032;1500;0;0;0;0;0;0;0 -13.1;19;24072;3.0293;746;1500;0;0;0;0;0;0;0 -13.2;19;24072;3.0293;539;1500;0;0;0;0;0;0;0 -13.3;19;24072;3.0293;390;1500;0;0;0;0;0;0;0 -13.4;19;24072;3.0293;282;1500;0;0;0;0;0;0;0 -13.5;19;24072;3.0293;204;1500;0;0;0;0;0;0;0 -13.6;19;24072;3.0293;166;1500;0;0;0;0;0;0;0 -13.7;19;24072;3.0293;135;1500;0;0;0;0;0;0;0 -13.8;19;24072;3.0293;110;1500;0;0;0;0;0;0;0 -13.9;19;24072;3.0293;89;1500;0;0;0;0;0;0;0 -14;19;24072;3.0293;73;1500;0;0;0;0;0;0;0 -14.1;19;24072;3.0293;54;1500;0;0;0;0;0;0;0 -14.2;19;24072;3.0293;41;1500;0;0;0;0;0;0;0 -14.3;19;24072;3.0293;30;1500;0;0;0;0;0;0;0 -14.4;19;24072;3.0293;23;1500;0;0;0;0;0;0;0 -14.5;19;24072;3.0293;17;1500;0;0;0;0;0;0;0 -14.6;19;24072;3.0293;9;1500;0;0;0;0;0;0;0 -14.7;19;24072;3.0293;5;1500;0;0;0;0;0;0;0 -14.8;19;24072;3.0293;3;1500;0;0;0;0;0;0;0 -14.9;19;24072;3.0293;2;1500;0;0;0;0;0;0;0 -15;19;24072;3.0293;1;1500;0;0;0;0;0;0;0 -15.1;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -15.2;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -15.3;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -15.4;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -15.5;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -15.6;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -15.7;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -15.8;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -15.9;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -16;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -16.1;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -16.2;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -16.3;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -16.4;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -16.5;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -16.6;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -16.7;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -16.8;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -16.9;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 -17;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +10;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.1;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.2;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.3;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.4;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.5;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.6;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.7;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.8;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +10.9;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.1;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.2;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.3;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.4;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.5;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.6;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.7;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.8;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +11.9;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +12;19;24072;3.0293;1500;1500;0;0;0;0;0;0;0 +12.1;19;24072;3.0293;1499;1500;0;0;0;0;0;0;0 +12.2;19;24072;3.0293;1499;1500;0;0;0;0;0;0;0 +12.3;19;24072;3.0293;1498;1500;0;0;0;0;0;0;0 +12.4;19;24072;3.0293;1497;1500;0;0;0;0;0;0;0 +12.5;19;24072;3.0293;1497;1500;0;0;0;0;0;0;0 +12.6;19;24072;3.0293;1389;1500;0;0;0;0;0;0;0 +12.7;19;24072;3.0293;1290;1500;0;0;0;0;0;0;0 +12.8;19;24072;3.0293;1197;1500;0;0;0;0;0;0;0 +12.9;19;24072;3.0293;1111;1500;0;0;0;0;0;0;0 +13;19;24072;3.0293;1032;1500;0;0;0;0;0;0;0 +13.1;19;24072;3.0293;746;1500;0;0;0;0;0;0;0 +13.2;19;24072;3.0293;539;1500;0;0;0;0;0;0;0 +13.3;19;24072;3.0293;390;1500;0;0;0;0;0;0;0 +13.4;19;24072;3.0293;282;1500;0;0;0;0;0;0;0 +13.5;19;24072;3.0293;204;1500;0;0;0;0;0;0;0 +13.6;19;24072;3.0293;166;1500;0;0;0;0;0;0;0 +13.7;19;24072;3.0293;135;1500;0;0;0;0;0;0;0 +13.8;19;24072;3.0293;110;1500;0;0;0;0;0;0;0 +13.9;19;24072;3.0293;89;1500;0;0;0;0;0;0;0 +14;19;24072;3.0293;73;1500;0;0;0;0;0;0;0 +14.1;19;24072;3.0293;54;1500;0;0;0;0;0;0;0 +14.2;19;24072;3.0293;41;1500;0;0;0;0;0;0;0 +14.3;19;24072;3.0293;30;1500;0;0;0;0;0;0;0 +14.4;19;24072;3.0293;23;1500;0;0;0;0;0;0;0 +14.5;19;24072;3.0293;17;1500;0;0;0;0;0;0;0 +14.6;19;24072;3.0293;9;1500;0;0;0;0;0;0;0 +14.7;19;24072;3.0293;5;1500;0;0;0;0;0;0;0 +14.8;19;24072;3.0293;3;1500;0;0;0;0;0;0;0 +14.9;19;24072;3.0293;2;1500;0;0;0;0;0;0;0 +15;19;24072;3.0293;1;1500;0;0;0;0;0;0;0 +15.1;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.2;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.3;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.4;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.5;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.6;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.7;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.8;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +15.9;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.1;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.2;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.3;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.4;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.5;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.6;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.7;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.8;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +16.9;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 +17;19;24072;3.0293;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs1_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs1_awgn_5G.csv index 4a22a46882..ccb17b0d1c 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs1_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs1_awgn_5G.csv @@ -1,27 +1,27 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err --4;1;2472;0.3066;1500;1500;0;0;0;0;0;0;0 --3.9;1;2472;0.3066;1497;1500;0;0;0;0;0;0;0 --3.8;1;2472;0.3066;1494;1500;0;0;0;0;0;0;0 --3.7;1;2472;0.3066;1490;1500;0;0;0;0;0;0;0 --3.6;1;2472;0.3066;1487;1500;0;0;0;0;0;0;0 --3.5;1;2472;0.3066;1484;1500;0;0;0;0;0;0;0 --3.4;1;2472;0.3066;1386;1500;0;0;0;0;0;0;0 --3.3;1;2472;0.3066;1295;1500;0;0;0;0;0;0;0 --3.2;1;2472;0.3066;1209;1500;0;0;0;0;0;0;0 --3.1;1;2472;0.3066;1130;1500;0;0;0;0;0;0;0 --3;1;2472;0.3066;1055;1500;0;0;0;0;0;0;0 --2.9;1;2472;0.3066;863;1500;0;0;0;0;0;0;0 --2.8;1;2472;0.3066;706;1500;0;0;0;0;0;0;0 --2.7;1;2472;0.3066;577;1500;0;0;0;0;0;0;0 --2.6;1;2472;0.3066;472;1500;0;0;0;0;0;0;0 --2.5;1;2472;0.3066;386;1500;0;0;0;0;0;0;0 --2.4;1;2472;0.3066;215;1500;0;0;0;0;0;0;0 --2.3;1;2472;0.3066;120;1500;0;0;0;0;0;0;0 --2.2;1;2472;0.3066;67;1500;0;0;0;0;0;0;0 --2.1;1;2472;0.3066;37;1500;0;0;0;0;0;0;0 --2;1;2472;0.3066;21;1500;0;0;0;0;0;0;0 --1.9;1;2472;0.3066;9;1500;0;0;0;0;0;0;0 --1.8;1;2472;0.3066;4;1500;0;0;0;0;0;0;0 --1.7;1;2472;0.3066;2;1500;0;0;0;0;0;0;0 --1.6;1;2472;0.3066;1;1500;0;0;0;0;0;0;0 --1.5;1;2472;0.3066;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-4;1;2472;0.3066;1500;1500;0;0;0;0;0;0;0 +-3.9;1;2472;0.3066;1497;1500;0;0;0;0;0;0;0 +-3.8;1;2472;0.3066;1494;1500;0;0;0;0;0;0;0 +-3.7;1;2472;0.3066;1490;1500;0;0;0;0;0;0;0 +-3.6;1;2472;0.3066;1487;1500;0;0;0;0;0;0;0 +-3.5;1;2472;0.3066;1484;1500;0;0;0;0;0;0;0 +-3.4;1;2472;0.3066;1386;1500;0;0;0;0;0;0;0 +-3.3;1;2472;0.3066;1295;1500;0;0;0;0;0;0;0 +-3.2;1;2472;0.3066;1209;1500;0;0;0;0;0;0;0 +-3.1;1;2472;0.3066;1130;1500;0;0;0;0;0;0;0 +-3;1;2472;0.3066;1055;1500;0;0;0;0;0;0;0 +-2.9;1;2472;0.3066;863;1500;0;0;0;0;0;0;0 +-2.8;1;2472;0.3066;706;1500;0;0;0;0;0;0;0 +-2.7;1;2472;0.3066;577;1500;0;0;0;0;0;0;0 +-2.6;1;2472;0.3066;472;1500;0;0;0;0;0;0;0 +-2.5;1;2472;0.3066;386;1500;0;0;0;0;0;0;0 +-2.4;1;2472;0.3066;215;1500;0;0;0;0;0;0;0 +-2.3;1;2472;0.3066;120;1500;0;0;0;0;0;0;0 +-2.2;1;2472;0.3066;67;1500;0;0;0;0;0;0;0 +-2.1;1;2472;0.3066;37;1500;0;0;0;0;0;0;0 +-2;1;2472;0.3066;21;1500;0;0;0;0;0;0;0 +-1.9;1;2472;0.3066;9;1500;0;0;0;0;0;0;0 +-1.8;1;2472;0.3066;4;1500;0;0;0;0;0;0;0 +-1.7;1;2472;0.3066;2;1500;0;0;0;0;0;0;0 +-1.6;1;2472;0.3066;1;1500;0;0;0;0;0;0;0 +-1.5;1;2472;0.3066;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs20_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs20_awgn_5G.csv index 545c8fc099..69d0055395 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs20_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs20_awgn_5G.csv @@ -1,72 +1,72 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -10;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -10.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -10.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -10.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -10.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -10.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -10.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -10.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -10.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -10.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -11;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -11.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -11.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -11.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -11.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -11.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -11.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -11.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -11.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -11.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -12;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -12.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -12.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -12.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -12.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -12.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -12.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -12.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -12.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -12.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -13;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 -13.1;20;26632;3.3223;1499;1500;0;0;0;0;0;0;0 -13.2;20;26632;3.3223;1499;1500;0;0;0;0;0;0;0 -13.3;20;26632;3.3223;1498;1500;0;0;0;0;0;0;0 -13.4;20;26632;3.3223;1498;1500;0;0;0;0;0;0;0 -13.5;20;26632;3.3223;1497;1500;0;0;0;0;0;0;0 -13.6;20;26632;3.3223;1390;1500;0;0;0;0;0;0;0 -13.7;20;26632;3.3223;1291;1500;0;0;0;0;0;0;0 -13.8;20;26632;3.3223;1199;1500;0;0;0;0;0;0;0 -13.9;20;26632;3.3223;1113;1500;0;0;0;0;0;0;0 -14;20;26632;3.3223;1034;1500;0;0;0;0;0;0;0 -14.1;20;26632;3.3223;745;1500;0;0;0;0;0;0;0 -14.2;20;26632;3.3223;537;1500;0;0;0;0;0;0;0 -14.3;20;26632;3.3223;387;1500;0;0;0;0;0;0;0 -14.4;20;26632;3.3223;279;1500;0;0;0;0;0;0;0 -14.5;20;26632;3.3223;201;1500;0;0;0;0;0;0;0 -14.6;20;26632;3.3223;161;1500;0;0;0;0;0;0;0 -14.7;20;26632;3.3223;129;1500;0;0;0;0;0;0;0 -14.8;20;26632;3.3223;104;1500;0;0;0;0;0;0;0 -14.9;20;26632;3.3223;83;1500;0;0;0;0;0;0;0 -15;20;26632;3.3223;67;1500;0;0;0;0;0;0;0 -15.1;20;26632;3.3223;45;1500;0;0;0;0;0;0;0 -15.2;20;26632;3.3223;30;1500;0;0;0;0;0;0;0 -15.3;20;26632;3.3223;20;1500;0;0;0;0;0;0;0 -15.4;20;26632;3.3223;13;1500;0;0;0;0;0;0;0 -15.5;20;26632;3.3223;9;1500;0;0;0;0;0;0;0 -15.6;20;26632;3.3223;4;1500;0;0;0;0;0;0;0 -15.7;20;26632;3.3223;1;1500;0;0;0;0;0;0;0 -15.8;20;26632;3.3223;1;1500;0;0;0;0;0;0;0 -15.9;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 -16;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 -16.1;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 -16.2;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 -16.3;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 -16.4;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 -16.5;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 -16.6;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 -16.7;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 -16.8;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 -16.9;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 -17;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +10;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +10.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +11.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.1;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.2;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.3;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.4;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.5;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.6;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.7;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.8;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +12.9;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +13;20;26632;3.3223;1500;1500;0;0;0;0;0;0;0 +13.1;20;26632;3.3223;1499;1500;0;0;0;0;0;0;0 +13.2;20;26632;3.3223;1499;1500;0;0;0;0;0;0;0 +13.3;20;26632;3.3223;1498;1500;0;0;0;0;0;0;0 +13.4;20;26632;3.3223;1498;1500;0;0;0;0;0;0;0 +13.5;20;26632;3.3223;1497;1500;0;0;0;0;0;0;0 +13.6;20;26632;3.3223;1390;1500;0;0;0;0;0;0;0 +13.7;20;26632;3.3223;1291;1500;0;0;0;0;0;0;0 +13.8;20;26632;3.3223;1199;1500;0;0;0;0;0;0;0 +13.9;20;26632;3.3223;1113;1500;0;0;0;0;0;0;0 +14;20;26632;3.3223;1034;1500;0;0;0;0;0;0;0 +14.1;20;26632;3.3223;745;1500;0;0;0;0;0;0;0 +14.2;20;26632;3.3223;537;1500;0;0;0;0;0;0;0 +14.3;20;26632;3.3223;387;1500;0;0;0;0;0;0;0 +14.4;20;26632;3.3223;279;1500;0;0;0;0;0;0;0 +14.5;20;26632;3.3223;201;1500;0;0;0;0;0;0;0 +14.6;20;26632;3.3223;161;1500;0;0;0;0;0;0;0 +14.7;20;26632;3.3223;129;1500;0;0;0;0;0;0;0 +14.8;20;26632;3.3223;104;1500;0;0;0;0;0;0;0 +14.9;20;26632;3.3223;83;1500;0;0;0;0;0;0;0 +15;20;26632;3.3223;67;1500;0;0;0;0;0;0;0 +15.1;20;26632;3.3223;45;1500;0;0;0;0;0;0;0 +15.2;20;26632;3.3223;30;1500;0;0;0;0;0;0;0 +15.3;20;26632;3.3223;20;1500;0;0;0;0;0;0;0 +15.4;20;26632;3.3223;13;1500;0;0;0;0;0;0;0 +15.5;20;26632;3.3223;9;1500;0;0;0;0;0;0;0 +15.6;20;26632;3.3223;4;1500;0;0;0;0;0;0;0 +15.7;20;26632;3.3223;1;1500;0;0;0;0;0;0;0 +15.8;20;26632;3.3223;1;1500;0;0;0;0;0;0;0 +15.9;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.1;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.2;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.3;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.4;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.5;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.6;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.7;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.8;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +16.9;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 +17;20;26632;3.3223;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs21_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs21_awgn_5G.csv index a9fe3dd606..2a5a691afb 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs21_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs21_awgn_5G.csv @@ -1,72 +1,72 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -10;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -10.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -10.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -10.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -10.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -10.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -10.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -10.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -10.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -10.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -11;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -11.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -11.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -11.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -11.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -11.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -11.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -11.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -11.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -11.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -12;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -12.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -12.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -12.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -12.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -12.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -12.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -12.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -12.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -12.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -13;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -13.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -13.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -13.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -13.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -13.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -13.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -13.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -13.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -13.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -14;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 -14.1;21;28680;3.6094;1472;1500;0;0;0;0;0;0;0 -14.2;21;28680;3.6094;1444;1500;0;0;0;0;0;0;0 -14.3;21;28680;3.6094;1417;1500;0;0;0;0;0;0;0 -14.4;21;28680;3.6094;1390;1500;0;0;0;0;0;0;0 -14.5;21;28680;3.6094;1364;1500;0;0;0;0;0;0;0 -14.6;21;28680;3.6094;1040;1500;0;0;0;0;0;0;0 -14.7;21;28680;3.6094;793;1500;0;0;0;0;0;0;0 -14.8;21;28680;3.6094;605;1500;0;0;0;0;0;0;0 -14.9;21;28680;3.6094;461;1500;0;0;0;0;0;0;0 -15;21;28680;3.6094;351;1500;0;0;0;0;0;0;0 -15.1;21;28680;3.6094;265;1500;0;0;0;0;0;0;0 -15.2;21;28680;3.6094;199;1500;0;0;0;0;0;0;0 -15.3;21;28680;3.6094;150;1500;0;0;0;0;0;0;0 -15.4;21;28680;3.6094;113;1500;0;0;0;0;0;0;0 -15.5;21;28680;3.6094;85;1500;0;0;0;0;0;0;0 -15.6;21;28680;3.6094;79;1500;0;0;0;0;0;0;0 -15.7;21;28680;3.6094;73;1500;0;0;0;0;0;0;0 -15.8;21;28680;3.6094;67;1500;0;0;0;0;0;0;0 -15.9;21;28680;3.6094;62;1500;0;0;0;0;0;0;0 -16;21;28680;3.6094;57;1500;0;0;0;0;0;0;0 -16.1;21;28680;3.6094;37;1500;0;0;0;0;0;0;0 -16.2;21;28680;3.6094;23;1500;0;0;0;0;0;0;0 -16.3;21;28680;3.6094;15;1500;0;0;0;0;0;0;0 -16.4;21;28680;3.6094;10;1500;0;0;0;0;0;0;0 -16.5;21;28680;3.6094;6;1500;0;0;0;0;0;0;0 -16.6;21;28680;3.6094;3;1500;0;0;0;0;0;0;0 -16.7;21;28680;3.6094;1;1500;0;0;0;0;0;0;0 -16.8;21;28680;3.6094;1;1500;0;0;0;0;0;0;0 -16.9;21;28680;3.6094;0;1500;0;0;0;0;0;0;0 -17;21;28680;3.6094;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +10;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +10.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +11.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +12.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.1;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.2;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.3;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.4;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.5;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.6;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.7;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.8;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +13.9;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +14;21;28680;3.6094;1500;1500;0;0;0;0;0;0;0 +14.1;21;28680;3.6094;1472;1500;0;0;0;0;0;0;0 +14.2;21;28680;3.6094;1444;1500;0;0;0;0;0;0;0 +14.3;21;28680;3.6094;1417;1500;0;0;0;0;0;0;0 +14.4;21;28680;3.6094;1390;1500;0;0;0;0;0;0;0 +14.5;21;28680;3.6094;1364;1500;0;0;0;0;0;0;0 +14.6;21;28680;3.6094;1040;1500;0;0;0;0;0;0;0 +14.7;21;28680;3.6094;793;1500;0;0;0;0;0;0;0 +14.8;21;28680;3.6094;605;1500;0;0;0;0;0;0;0 +14.9;21;28680;3.6094;461;1500;0;0;0;0;0;0;0 +15;21;28680;3.6094;351;1500;0;0;0;0;0;0;0 +15.1;21;28680;3.6094;265;1500;0;0;0;0;0;0;0 +15.2;21;28680;3.6094;199;1500;0;0;0;0;0;0;0 +15.3;21;28680;3.6094;150;1500;0;0;0;0;0;0;0 +15.4;21;28680;3.6094;113;1500;0;0;0;0;0;0;0 +15.5;21;28680;3.6094;85;1500;0;0;0;0;0;0;0 +15.6;21;28680;3.6094;79;1500;0;0;0;0;0;0;0 +15.7;21;28680;3.6094;73;1500;0;0;0;0;0;0;0 +15.8;21;28680;3.6094;67;1500;0;0;0;0;0;0;0 +15.9;21;28680;3.6094;62;1500;0;0;0;0;0;0;0 +16;21;28680;3.6094;57;1500;0;0;0;0;0;0;0 +16.1;21;28680;3.6094;37;1500;0;0;0;0;0;0;0 +16.2;21;28680;3.6094;23;1500;0;0;0;0;0;0;0 +16.3;21;28680;3.6094;15;1500;0;0;0;0;0;0;0 +16.4;21;28680;3.6094;10;1500;0;0;0;0;0;0;0 +16.5;21;28680;3.6094;6;1500;0;0;0;0;0;0;0 +16.6;21;28680;3.6094;3;1500;0;0;0;0;0;0;0 +16.7;21;28680;3.6094;1;1500;0;0;0;0;0;0;0 +16.8;21;28680;3.6094;1;1500;0;0;0;0;0;0;0 +16.9;21;28680;3.6094;0;1500;0;0;0;0;0;0;0 +17;21;28680;3.6094;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs22_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs22_awgn_5G.csv index c4e69590a5..10a4241376 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs22_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs22_awgn_5G.csv @@ -1,52 +1,52 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -14;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 -14.1;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 -14.2;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 -14.3;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 -14.4;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 -14.5;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 -14.6;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 -14.7;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 -14.8;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 -14.9;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 -15;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 -15.1;22;31240;3.9023;1421;1500;0;0;0;0;0;0;0 -15.2;22;31240;3.9023;1347;1500;0;0;0;0;0;0;0 -15.3;22;31240;3.9023;1276;1500;0;0;0;0;0;0;0 -15.4;22;31240;3.9023;1209;1500;0;0;0;0;0;0;0 -15.5;22;31240;3.9023;1146;1500;0;0;0;0;0;0;0 -15.6;22;31240;3.9023;807;1500;0;0;0;0;0;0;0 -15.7;22;31240;3.9023;569;1500;0;0;0;0;0;0;0 -15.8;22;31240;3.9023;400;1500;0;0;0;0;0;0;0 -15.9;22;31240;3.9023;282;1500;0;0;0;0;0;0;0 -16;22;31240;3.9023;199;1500;0;0;0;0;0;0;0 -16.1;22;31240;3.9023;165;1500;0;0;0;0;0;0;0 -16.2;22;31240;3.9023;137;1500;0;0;0;0;0;0;0 -16.3;22;31240;3.9023;114;1500;0;0;0;0;0;0;0 -16.4;22;31240;3.9023;94;1500;0;0;0;0;0;0;0 -16.5;22;31240;3.9023;78;1500;0;0;0;0;0;0;0 -16.6;22;31240;3.9023;74;1500;0;0;0;0;0;0;0 -16.7;22;31240;3.9023;69;1500;0;0;0;0;0;0;0 -16.8;22;31240;3.9023;65;1500;0;0;0;0;0;0;0 -16.9;22;31240;3.9023;61;1500;0;0;0;0;0;0;0 -17;22;31240;3.9023;58;1500;0;0;0;0;0;0;0 -17.1;22;31240;3.9023;36;1500;0;0;0;0;0;0;0 -17.2;22;31240;3.9023;23;1500;0;0;0;0;0;0;0 -17.3;22;31240;3.9023;15;1500;0;0;0;0;0;0;0 -17.4;22;31240;3.9023;9;1500;0;0;0;0;0;0;0 -17.5;22;31240;3.9023;6;1500;0;0;0;0;0;0;0 -17.6;22;31240;3.9023;3;1500;0;0;0;0;0;0;0 -17.7;22;31240;3.9023;1;1500;0;0;0;0;0;0;0 -17.8;22;31240;3.9023;1;1500;0;0;0;0;0;0;0 -17.9;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 -18;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 -18.1;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 -18.2;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 -18.3;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 -18.4;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 -18.5;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 -18.6;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 -18.7;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 -18.8;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 -18.9;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 -19;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +14;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.1;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.2;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.3;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.4;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.5;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.6;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.7;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.8;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +14.9;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +15;22;31240;3.9023;1500;1500;0;0;0;0;0;0;0 +15.1;22;31240;3.9023;1421;1500;0;0;0;0;0;0;0 +15.2;22;31240;3.9023;1347;1500;0;0;0;0;0;0;0 +15.3;22;31240;3.9023;1276;1500;0;0;0;0;0;0;0 +15.4;22;31240;3.9023;1209;1500;0;0;0;0;0;0;0 +15.5;22;31240;3.9023;1146;1500;0;0;0;0;0;0;0 +15.6;22;31240;3.9023;807;1500;0;0;0;0;0;0;0 +15.7;22;31240;3.9023;569;1500;0;0;0;0;0;0;0 +15.8;22;31240;3.9023;400;1500;0;0;0;0;0;0;0 +15.9;22;31240;3.9023;282;1500;0;0;0;0;0;0;0 +16;22;31240;3.9023;199;1500;0;0;0;0;0;0;0 +16.1;22;31240;3.9023;165;1500;0;0;0;0;0;0;0 +16.2;22;31240;3.9023;137;1500;0;0;0;0;0;0;0 +16.3;22;31240;3.9023;114;1500;0;0;0;0;0;0;0 +16.4;22;31240;3.9023;94;1500;0;0;0;0;0;0;0 +16.5;22;31240;3.9023;78;1500;0;0;0;0;0;0;0 +16.6;22;31240;3.9023;74;1500;0;0;0;0;0;0;0 +16.7;22;31240;3.9023;69;1500;0;0;0;0;0;0;0 +16.8;22;31240;3.9023;65;1500;0;0;0;0;0;0;0 +16.9;22;31240;3.9023;61;1500;0;0;0;0;0;0;0 +17;22;31240;3.9023;58;1500;0;0;0;0;0;0;0 +17.1;22;31240;3.9023;36;1500;0;0;0;0;0;0;0 +17.2;22;31240;3.9023;23;1500;0;0;0;0;0;0;0 +17.3;22;31240;3.9023;15;1500;0;0;0;0;0;0;0 +17.4;22;31240;3.9023;9;1500;0;0;0;0;0;0;0 +17.5;22;31240;3.9023;6;1500;0;0;0;0;0;0;0 +17.6;22;31240;3.9023;3;1500;0;0;0;0;0;0;0 +17.7;22;31240;3.9023;1;1500;0;0;0;0;0;0;0 +17.8;22;31240;3.9023;1;1500;0;0;0;0;0;0;0 +17.9;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.1;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.2;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.3;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.4;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.5;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.6;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.7;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.8;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +18.9;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 +19;22;31240;3.9023;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs23_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs23_awgn_5G.csv index 4ac1243d3b..07e9e257ff 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs23_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs23_awgn_5G.csv @@ -1,92 +1,92 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -15;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 -15.1;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 -15.2;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 -15.3;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 -15.4;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 -15.5;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 -15.6;23;33816;4.2129;1499;1500;0;0;0;0;0;0;0 -15.7;23;33816;4.2129;1499;1500;0;0;0;0;0;0;0 -15.8;23;33816;4.2129;1498;1500;0;0;0;0;0;0;0 -15.9;23;33816;4.2129;1498;1500;0;0;0;0;0;0;0 -16;23;33816;4.2129;1497;1500;0;0;0;0;0;0;0 -16.1;23;33816;4.2129;1360;1500;0;0;0;0;0;0;0 -16.2;23;33816;4.2129;1236;1500;0;0;0;0;0;0;0 -16.3;23;33816;4.2129;1123;1500;0;0;0;0;0;0;0 -16.4;23;33816;4.2129;1020;1500;0;0;0;0;0;0;0 -16.5;23;33816;4.2129;927;1500;0;0;0;0;0;0;0 -16.6;23;33816;4.2129;630;1500;0;0;0;0;0;0;0 -16.7;23;33816;4.2129;428;1500;0;0;0;0;0;0;0 -16.8;23;33816;4.2129;291;1500;0;0;0;0;0;0;0 -16.9;23;33816;4.2129;198;1500;0;0;0;0;0;0;0 -17;23;33816;4.2129;135;1500;0;0;0;0;0;0;0 -17.1;23;33816;4.2129;120;1500;0;0;0;0;0;0;0 -17.2;23;33816;4.2129;108;1500;0;0;0;0;0;0;0 -17.3;23;33816;4.2129;96;1500;0;0;0;0;0;0;0 -17.4;23;33816;4.2129;86;1500;0;0;0;0;0;0;0 -17.5;23;33816;4.2129;77;1500;0;0;0;0;0;0;0 -17.6;23;33816;4.2129;70;1500;0;0;0;0;0;0;0 -17.7;23;33816;4.2129;63;1500;0;0;0;0;0;0;0 -17.8;23;33816;4.2129;57;1500;0;0;0;0;0;0;0 -17.9;23;33816;4.2129;52;1500;0;0;0;0;0;0;0 -18;23;33816;4.2129;47;1500;0;0;0;0;0;0;0 -18.1;23;33816;4.2129;28;1500;0;0;0;0;0;0;0 -18.2;23;33816;4.2129;16;1500;0;0;0;0;0;0;0 -18.3;23;33816;4.2129;9;1500;0;0;0;0;0;0;0 -18.4;23;33816;4.2129;6;1500;0;0;0;0;0;0;0 -18.5;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 -18.6;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 -18.7;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 -18.8;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 -18.9;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 -19;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 -19.1;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 -19.2;23;33816;4.2129;4;1500;0;0;0;0;0;0;0 -19.3;23;33816;4.2129;5;1500;0;0;0;0;0;0;0 -19.4;23;33816;4.2129;6;1500;0;0;0;0;0;0;0 -19.5;23;33816;4.2129;8;1500;0;0;0;0;0;0;0 -19.6;23;33816;4.2129;6;1500;0;0;0;0;0;0;0 -19.7;23;33816;4.2129;4;1500;0;0;0;0;0;0;0 -19.8;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 -19.9;23;33816;4.2129;2;1500;0;0;0;0;0;0;0 -20;23;33816;4.2129;2;1500;0;0;0;0;0;0;0 -20.1;23;33816;4.2129;1;1500;0;0;0;0;0;0;0 -20.2;23;33816;4.2129;1;1500;0;0;0;0;0;0;0 -20.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -20.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -20.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -20.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -20.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -20.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -20.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -21;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -21.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -21.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -21.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -21.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -21.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -21.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -21.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -21.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -21.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -22;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -22.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -22.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -22.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -22.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -22.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -22.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -22.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -22.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -22.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -23;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -23.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -23.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -23.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -23.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -23.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -23.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -23.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -23.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -23.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 -24;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +15;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.1;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.2;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.3;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.4;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.5;23;33816;4.2129;1500;1500;0;0;0;0;0;0;0 +15.6;23;33816;4.2129;1499;1500;0;0;0;0;0;0;0 +15.7;23;33816;4.2129;1499;1500;0;0;0;0;0;0;0 +15.8;23;33816;4.2129;1498;1500;0;0;0;0;0;0;0 +15.9;23;33816;4.2129;1498;1500;0;0;0;0;0;0;0 +16;23;33816;4.2129;1497;1500;0;0;0;0;0;0;0 +16.1;23;33816;4.2129;1360;1500;0;0;0;0;0;0;0 +16.2;23;33816;4.2129;1236;1500;0;0;0;0;0;0;0 +16.3;23;33816;4.2129;1123;1500;0;0;0;0;0;0;0 +16.4;23;33816;4.2129;1020;1500;0;0;0;0;0;0;0 +16.5;23;33816;4.2129;927;1500;0;0;0;0;0;0;0 +16.6;23;33816;4.2129;630;1500;0;0;0;0;0;0;0 +16.7;23;33816;4.2129;428;1500;0;0;0;0;0;0;0 +16.8;23;33816;4.2129;291;1500;0;0;0;0;0;0;0 +16.9;23;33816;4.2129;198;1500;0;0;0;0;0;0;0 +17;23;33816;4.2129;135;1500;0;0;0;0;0;0;0 +17.1;23;33816;4.2129;120;1500;0;0;0;0;0;0;0 +17.2;23;33816;4.2129;108;1500;0;0;0;0;0;0;0 +17.3;23;33816;4.2129;96;1500;0;0;0;0;0;0;0 +17.4;23;33816;4.2129;86;1500;0;0;0;0;0;0;0 +17.5;23;33816;4.2129;77;1500;0;0;0;0;0;0;0 +17.6;23;33816;4.2129;70;1500;0;0;0;0;0;0;0 +17.7;23;33816;4.2129;63;1500;0;0;0;0;0;0;0 +17.8;23;33816;4.2129;57;1500;0;0;0;0;0;0;0 +17.9;23;33816;4.2129;52;1500;0;0;0;0;0;0;0 +18;23;33816;4.2129;47;1500;0;0;0;0;0;0;0 +18.1;23;33816;4.2129;28;1500;0;0;0;0;0;0;0 +18.2;23;33816;4.2129;16;1500;0;0;0;0;0;0;0 +18.3;23;33816;4.2129;9;1500;0;0;0;0;0;0;0 +18.4;23;33816;4.2129;6;1500;0;0;0;0;0;0;0 +18.5;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +18.6;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +18.7;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +18.8;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +18.9;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +19;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +19.1;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +19.2;23;33816;4.2129;4;1500;0;0;0;0;0;0;0 +19.3;23;33816;4.2129;5;1500;0;0;0;0;0;0;0 +19.4;23;33816;4.2129;6;1500;0;0;0;0;0;0;0 +19.5;23;33816;4.2129;8;1500;0;0;0;0;0;0;0 +19.6;23;33816;4.2129;6;1500;0;0;0;0;0;0;0 +19.7;23;33816;4.2129;4;1500;0;0;0;0;0;0;0 +19.8;23;33816;4.2129;3;1500;0;0;0;0;0;0;0 +19.9;23;33816;4.2129;2;1500;0;0;0;0;0;0;0 +20;23;33816;4.2129;2;1500;0;0;0;0;0;0;0 +20.1;23;33816;4.2129;1;1500;0;0;0;0;0;0;0 +20.2;23;33816;4.2129;1;1500;0;0;0;0;0;0;0 +20.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +20.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +21.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +22.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.1;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.2;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.3;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.4;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.5;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.6;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.7;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.8;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +23.9;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 +24;23;33816;4.2129;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs24_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs24_awgn_5G.csv index 5bed20cf58..6eac0f3f7d 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs24_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs24_awgn_5G.csv @@ -1,92 +1,92 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -15;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -15.1;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -15.2;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -15.3;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -15.4;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -15.5;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -15.6;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -15.7;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -15.8;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -15.9;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -16;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -16.1;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -16.2;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -16.3;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -16.4;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -16.5;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 -16.6;24;35856;4.5234;1474;1500;0;0;0;0;0;0;0 -16.7;24;35856;4.5234;1449;1500;0;0;0;0;0;0;0 -16.8;24;35856;4.5234;1424;1500;0;0;0;0;0;0;0 -16.9;24;35856;4.5234;1400;1500;0;0;0;0;0;0;0 -17;24;35856;4.5234;1376;1500;0;0;0;0;0;0;0 -17.1;24;35856;4.5234;1016;1500;0;0;0;0;0;0;0 -17.2;24;35856;4.5234;751;1500;0;0;0;0;0;0;0 -17.3;24;35856;4.5234;554;1500;0;0;0;0;0;0;0 -17.4;24;35856;4.5234;410;1500;0;0;0;0;0;0;0 -17.5;24;35856;4.5234;303;1500;0;0;0;0;0;0;0 -17.6;24;35856;4.5234;232;1500;0;0;0;0;0;0;0 -17.7;24;35856;4.5234;177;1500;0;0;0;0;0;0;0 -17.8;24;35856;4.5234;136;1500;0;0;0;0;0;0;0 -17.9;24;35856;4.5234;104;1500;0;0;0;0;0;0;0 -18;24;35856;4.5234;80;1500;0;0;0;0;0;0;0 -18.1;24;35856;4.5234;79;1500;0;0;0;0;0;0;0 -18.2;24;35856;4.5234;78;1500;0;0;0;0;0;0;0 -18.3;24;35856;4.5234;77;1500;0;0;0;0;0;0;0 -18.4;24;35856;4.5234;76;1500;0;0;0;0;0;0;0 -18.5;24;35856;4.5234;75;1500;0;0;0;0;0;0;0 -18.6;24;35856;4.5234;59;1500;0;0;0;0;0;0;0 -18.7;24;35856;4.5234;46;1500;0;0;0;0;0;0;0 -18.8;24;35856;4.5234;36;1500;0;0;0;0;0;0;0 -18.9;24;35856;4.5234;28;1500;0;0;0;0;0;0;0 -19;24;35856;4.5234;22;1500;0;0;0;0;0;0;0 -19.1;24;35856;4.5234;21;1500;0;0;0;0;0;0;0 -19.2;24;35856;4.5234;20;1500;0;0;0;0;0;0;0 -19.3;24;35856;4.5234;20;1500;0;0;0;0;0;0;0 -19.4;24;35856;4.5234;19;1500;0;0;0;0;0;0;0 -19.5;24;35856;4.5234;18;1500;0;0;0;0;0;0;0 -19.6;24;35856;4.5234;22;1500;0;0;0;0;0;0;0 -19.7;24;35856;4.5234;26;1500;0;0;0;0;0;0;0 -19.8;24;35856;4.5234;31;1500;0;0;0;0;0;0;0 -19.9;24;35856;4.5234;36;1500;0;0;0;0;0;0;0 -20;24;35856;4.5234;43;1500;0;0;0;0;0;0;0 -20.1;24;35856;4.5234;35;1500;0;0;0;0;0;0;0 -20.2;24;35856;4.5234;29;1500;0;0;0;0;0;0;0 -20.3;24;35856;4.5234;23;1500;0;0;0;0;0;0;0 -20.4;24;35856;4.5234;19;1500;0;0;0;0;0;0;0 -20.5;24;35856;4.5234;15;1500;0;0;0;0;0;0;0 -20.6;24;35856;4.5234;8;1500;0;0;0;0;0;0;0 -20.7;24;35856;4.5234;4;1500;0;0;0;0;0;0;0 -20.8;24;35856;4.5234;2;1500;0;0;0;0;0;0;0 -20.9;24;35856;4.5234;1;1500;0;0;0;0;0;0;0 -21;24;35856;4.5234;1;1500;0;0;0;0;0;0;0 -21.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -21.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -21.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -21.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -21.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -21.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -21.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -21.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -21.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -22;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -22.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -22.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -22.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -22.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -22.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -22.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -22.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -22.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -22.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -23;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -23.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -23.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -23.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -23.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -23.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -23.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -23.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -23.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -23.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 -24;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +15;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.1;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.2;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.3;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.4;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.5;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.6;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.7;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.8;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +15.9;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.1;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.2;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.3;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.4;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.5;24;35856;4.5234;1500;1500;0;0;0;0;0;0;0 +16.6;24;35856;4.5234;1474;1500;0;0;0;0;0;0;0 +16.7;24;35856;4.5234;1449;1500;0;0;0;0;0;0;0 +16.8;24;35856;4.5234;1424;1500;0;0;0;0;0;0;0 +16.9;24;35856;4.5234;1400;1500;0;0;0;0;0;0;0 +17;24;35856;4.5234;1376;1500;0;0;0;0;0;0;0 +17.1;24;35856;4.5234;1016;1500;0;0;0;0;0;0;0 +17.2;24;35856;4.5234;751;1500;0;0;0;0;0;0;0 +17.3;24;35856;4.5234;554;1500;0;0;0;0;0;0;0 +17.4;24;35856;4.5234;410;1500;0;0;0;0;0;0;0 +17.5;24;35856;4.5234;303;1500;0;0;0;0;0;0;0 +17.6;24;35856;4.5234;232;1500;0;0;0;0;0;0;0 +17.7;24;35856;4.5234;177;1500;0;0;0;0;0;0;0 +17.8;24;35856;4.5234;136;1500;0;0;0;0;0;0;0 +17.9;24;35856;4.5234;104;1500;0;0;0;0;0;0;0 +18;24;35856;4.5234;80;1500;0;0;0;0;0;0;0 +18.1;24;35856;4.5234;79;1500;0;0;0;0;0;0;0 +18.2;24;35856;4.5234;78;1500;0;0;0;0;0;0;0 +18.3;24;35856;4.5234;77;1500;0;0;0;0;0;0;0 +18.4;24;35856;4.5234;76;1500;0;0;0;0;0;0;0 +18.5;24;35856;4.5234;75;1500;0;0;0;0;0;0;0 +18.6;24;35856;4.5234;59;1500;0;0;0;0;0;0;0 +18.7;24;35856;4.5234;46;1500;0;0;0;0;0;0;0 +18.8;24;35856;4.5234;36;1500;0;0;0;0;0;0;0 +18.9;24;35856;4.5234;28;1500;0;0;0;0;0;0;0 +19;24;35856;4.5234;22;1500;0;0;0;0;0;0;0 +19.1;24;35856;4.5234;21;1500;0;0;0;0;0;0;0 +19.2;24;35856;4.5234;20;1500;0;0;0;0;0;0;0 +19.3;24;35856;4.5234;20;1500;0;0;0;0;0;0;0 +19.4;24;35856;4.5234;19;1500;0;0;0;0;0;0;0 +19.5;24;35856;4.5234;18;1500;0;0;0;0;0;0;0 +19.6;24;35856;4.5234;22;1500;0;0;0;0;0;0;0 +19.7;24;35856;4.5234;26;1500;0;0;0;0;0;0;0 +19.8;24;35856;4.5234;31;1500;0;0;0;0;0;0;0 +19.9;24;35856;4.5234;36;1500;0;0;0;0;0;0;0 +20;24;35856;4.5234;43;1500;0;0;0;0;0;0;0 +20.1;24;35856;4.5234;35;1500;0;0;0;0;0;0;0 +20.2;24;35856;4.5234;29;1500;0;0;0;0;0;0;0 +20.3;24;35856;4.5234;23;1500;0;0;0;0;0;0;0 +20.4;24;35856;4.5234;19;1500;0;0;0;0;0;0;0 +20.5;24;35856;4.5234;15;1500;0;0;0;0;0;0;0 +20.6;24;35856;4.5234;8;1500;0;0;0;0;0;0;0 +20.7;24;35856;4.5234;4;1500;0;0;0;0;0;0;0 +20.8;24;35856;4.5234;2;1500;0;0;0;0;0;0;0 +20.9;24;35856;4.5234;1;1500;0;0;0;0;0;0;0 +21;24;35856;4.5234;1;1500;0;0;0;0;0;0;0 +21.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +21.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +22.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.1;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.2;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.3;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.4;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.5;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.6;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.7;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.8;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +23.9;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 +24;24;35856;4.5234;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs25_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs25_awgn_5G.csv index fdb2abcadc..6f158f5bdc 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs25_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs25_awgn_5G.csv @@ -1,92 +1,92 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -15;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -15.1;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -15.2;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -15.3;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -15.4;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -15.5;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -15.6;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -15.7;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -15.8;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -15.9;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -16;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -16.1;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -16.2;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -16.3;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -16.4;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -16.5;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -16.6;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -16.7;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -16.8;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -16.9;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -17;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 -17.1;25;37896;4.8164;1493;1500;0;0;0;0;0;0;0 -17.2;25;37896;4.8164;1486;1500;0;0;0;0;0;0;0 -17.3;25;37896;4.8164;1478;1500;0;0;0;0;0;0;0 -17.4;25;37896;4.8164;1471;1500;0;0;0;0;0;0;0 -17.5;25;37896;4.8164;1464;1500;0;0;0;0;0;0;0 -17.6;25;37896;4.8164;1138;1500;0;0;0;0;0;0;0 -17.7;25;37896;4.8164;885;1500;0;0;0;0;0;0;0 -17.8;25;37896;4.8164;688;1500;0;0;0;0;0;0;0 -17.9;25;37896;4.8164;535;1500;0;0;0;0;0;0;0 -18;25;37896;4.8164;416;1500;0;0;0;0;0;0;0 -18.1;25;37896;4.8164;302;1500;0;0;0;0;0;0;0 -18.2;25;37896;4.8164;219;1500;0;0;0;0;0;0;0 -18.3;25;37896;4.8164;159;1500;0;0;0;0;0;0;0 -18.4;25;37896;4.8164;115;1500;0;0;0;0;0;0;0 -18.5;25;37896;4.8164;84;1500;0;0;0;0;0;0;0 -18.6;25;37896;4.8164;89;1500;0;0;0;0;0;0;0 -18.7;25;37896;4.8164;94;1500;0;0;0;0;0;0;0 -18.8;25;37896;4.8164;100;1500;0;0;0;0;0;0;0 -18.9;25;37896;4.8164;106;1500;0;0;0;0;0;0;0 -19;25;37896;4.8164;113;1500;0;0;0;0;0;0;0 -19.1;25;37896;4.8164;110;1500;0;0;0;0;0;0;0 -19.2;25;37896;4.8164;108;1500;0;0;0;0;0;0;0 -19.3;25;37896;4.8164;105;1500;0;0;0;0;0;0;0 -19.4;25;37896;4.8164;103;1500;0;0;0;0;0;0;0 -19.5;25;37896;4.8164;101;1500;0;0;0;0;0;0;0 -19.6;25;37896;4.8164;89;1500;0;0;0;0;0;0;0 -19.7;25;37896;4.8164;79;1500;0;0;0;0;0;0;0 -19.8;25;37896;4.8164;71;1500;0;0;0;0;0;0;0 -19.9;25;37896;4.8164;63;1500;0;0;0;0;0;0;0 -20;25;37896;4.8164;56;1500;0;0;0;0;0;0;0 -20.1;25;37896;4.8164;58;1500;0;0;0;0;0;0;0 -20.2;25;37896;4.8164;61;1500;0;0;0;0;0;0;0 -20.3;25;37896;4.8164;64;1500;0;0;0;0;0;0;0 -20.4;25;37896;4.8164;67;1500;0;0;0;0;0;0;0 -20.5;25;37896;4.8164;71;1500;0;0;0;0;0;0;0 -20.6;25;37896;4.8164;64;1500;0;0;0;0;0;0;0 -20.7;25;37896;4.8164;58;1500;0;0;0;0;0;0;0 -20.8;25;37896;4.8164;52;1500;0;0;0;0;0;0;0 -20.9;25;37896;4.8164;47;1500;0;0;0;0;0;0;0 -21;25;37896;4.8164;43;1500;0;0;0;0;0;0;0 -21.1;25;37896;4.8164;27;1500;0;0;0;0;0;0;0 -21.2;25;37896;4.8164;17;1500;0;0;0;0;0;0;0 -21.3;25;37896;4.8164;10;1500;0;0;0;0;0;0;0 -21.4;25;37896;4.8164;6;1500;0;0;0;0;0;0;0 -21.5;25;37896;4.8164;4;1500;0;0;0;0;0;0;0 -21.6;25;37896;4.8164;2;1500;0;0;0;0;0;0;0 -21.7;25;37896;4.8164;1;1500;0;0;0;0;0;0;0 -21.8;25;37896;4.8164;1;1500;0;0;0;0;0;0;0 -21.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -22;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -22.1;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -22.2;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -22.3;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -22.4;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -22.5;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -22.6;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -22.7;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -22.8;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -22.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -23;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -23.1;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -23.2;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -23.3;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -23.4;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -23.5;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -23.6;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -23.7;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -23.8;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -23.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 -24;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +15;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.1;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.2;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.3;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.4;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.5;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.6;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.7;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.8;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +15.9;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.1;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.2;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.3;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.4;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.5;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.6;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.7;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.8;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +16.9;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +17;25;37896;4.8164;1500;1500;0;0;0;0;0;0;0 +17.1;25;37896;4.8164;1493;1500;0;0;0;0;0;0;0 +17.2;25;37896;4.8164;1486;1500;0;0;0;0;0;0;0 +17.3;25;37896;4.8164;1478;1500;0;0;0;0;0;0;0 +17.4;25;37896;4.8164;1471;1500;0;0;0;0;0;0;0 +17.5;25;37896;4.8164;1464;1500;0;0;0;0;0;0;0 +17.6;25;37896;4.8164;1138;1500;0;0;0;0;0;0;0 +17.7;25;37896;4.8164;885;1500;0;0;0;0;0;0;0 +17.8;25;37896;4.8164;688;1500;0;0;0;0;0;0;0 +17.9;25;37896;4.8164;535;1500;0;0;0;0;0;0;0 +18;25;37896;4.8164;416;1500;0;0;0;0;0;0;0 +18.1;25;37896;4.8164;302;1500;0;0;0;0;0;0;0 +18.2;25;37896;4.8164;219;1500;0;0;0;0;0;0;0 +18.3;25;37896;4.8164;159;1500;0;0;0;0;0;0;0 +18.4;25;37896;4.8164;115;1500;0;0;0;0;0;0;0 +18.5;25;37896;4.8164;84;1500;0;0;0;0;0;0;0 +18.6;25;37896;4.8164;89;1500;0;0;0;0;0;0;0 +18.7;25;37896;4.8164;94;1500;0;0;0;0;0;0;0 +18.8;25;37896;4.8164;100;1500;0;0;0;0;0;0;0 +18.9;25;37896;4.8164;106;1500;0;0;0;0;0;0;0 +19;25;37896;4.8164;113;1500;0;0;0;0;0;0;0 +19.1;25;37896;4.8164;110;1500;0;0;0;0;0;0;0 +19.2;25;37896;4.8164;108;1500;0;0;0;0;0;0;0 +19.3;25;37896;4.8164;105;1500;0;0;0;0;0;0;0 +19.4;25;37896;4.8164;103;1500;0;0;0;0;0;0;0 +19.5;25;37896;4.8164;101;1500;0;0;0;0;0;0;0 +19.6;25;37896;4.8164;89;1500;0;0;0;0;0;0;0 +19.7;25;37896;4.8164;79;1500;0;0;0;0;0;0;0 +19.8;25;37896;4.8164;71;1500;0;0;0;0;0;0;0 +19.9;25;37896;4.8164;63;1500;0;0;0;0;0;0;0 +20;25;37896;4.8164;56;1500;0;0;0;0;0;0;0 +20.1;25;37896;4.8164;58;1500;0;0;0;0;0;0;0 +20.2;25;37896;4.8164;61;1500;0;0;0;0;0;0;0 +20.3;25;37896;4.8164;64;1500;0;0;0;0;0;0;0 +20.4;25;37896;4.8164;67;1500;0;0;0;0;0;0;0 +20.5;25;37896;4.8164;71;1500;0;0;0;0;0;0;0 +20.6;25;37896;4.8164;64;1500;0;0;0;0;0;0;0 +20.7;25;37896;4.8164;58;1500;0;0;0;0;0;0;0 +20.8;25;37896;4.8164;52;1500;0;0;0;0;0;0;0 +20.9;25;37896;4.8164;47;1500;0;0;0;0;0;0;0 +21;25;37896;4.8164;43;1500;0;0;0;0;0;0;0 +21.1;25;37896;4.8164;27;1500;0;0;0;0;0;0;0 +21.2;25;37896;4.8164;17;1500;0;0;0;0;0;0;0 +21.3;25;37896;4.8164;10;1500;0;0;0;0;0;0;0 +21.4;25;37896;4.8164;6;1500;0;0;0;0;0;0;0 +21.5;25;37896;4.8164;4;1500;0;0;0;0;0;0;0 +21.6;25;37896;4.8164;2;1500;0;0;0;0;0;0;0 +21.7;25;37896;4.8164;1;1500;0;0;0;0;0;0;0 +21.8;25;37896;4.8164;1;1500;0;0;0;0;0;0;0 +21.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.1;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.2;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.3;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.4;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.5;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.6;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.7;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.8;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +22.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.1;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.2;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.3;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.4;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.5;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.6;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.7;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.8;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +23.9;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 +24;25;37896;4.8164;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs26_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs26_awgn_5G.csv index ae2ed007aa..94d779fb21 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs26_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs26_awgn_5G.csv @@ -1,92 +1,92 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -15;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -15.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -15.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -15.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -15.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -15.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -15.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -15.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -15.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -15.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -16;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -16.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -16.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -16.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -16.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -16.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -16.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -16.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -16.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -16.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -17;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -17.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -17.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -17.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -17.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -17.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -17.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -17.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -17.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -17.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -18;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 -18.1;26;40976;5.1152;1496;1500;0;0;0;0;0;0;0 -18.2;26;40976;5.1152;1492;1500;0;0;0;0;0;0;0 -18.3;26;40976;5.1152;1487;1500;0;0;0;0;0;0;0 -18.4;26;40976;5.1152;1483;1500;0;0;0;0;0;0;0 -18.5;26;40976;5.1152;1479;1500;0;0;0;0;0;0;0 -18.6;26;40976;5.1152;1188;1500;0;0;0;0;0;0;0 -18.7;26;40976;5.1152;954;1500;0;0;0;0;0;0;0 -18.8;26;40976;5.1152;766;1500;0;0;0;0;0;0;0 -18.9;26;40976;5.1152;615;1500;0;0;0;0;0;0;0 -19;26;40976;5.1152;494;1500;0;0;0;0;0;0;0 -19.1;26;40976;5.1152;478;1500;0;0;0;0;0;0;0 -19.2;26;40976;5.1152;462;1500;0;0;0;0;0;0;0 -19.3;26;40976;5.1152;447;1500;0;0;0;0;0;0;0 -19.4;26;40976;5.1152;433;1500;0;0;0;0;0;0;0 -19.5;26;40976;5.1152;419;1500;0;0;0;0;0;0;0 -19.6;26;40976;5.1152;491;1500;0;0;0;0;0;0;0 -19.7;26;40976;5.1152;577;1500;0;0;0;0;0;0;0 -19.8;26;40976;5.1152;677;1500;0;0;0;0;0;0;0 -19.9;26;40976;5.1152;795;1500;0;0;0;0;0;0;0 -20;26;40976;5.1152;934;1500;0;0;0;0;0;0;0 -20.1;26;40976;5.1152;799;1500;0;0;0;0;0;0;0 -20.2;26;40976;5.1152;684;1500;0;0;0;0;0;0;0 -20.3;26;40976;5.1152;586;1500;0;0;0;0;0;0;0 -20.4;26;40976;5.1152;502;1500;0;0;0;0;0;0;0 -20.5;26;40976;5.1152;429;1500;0;0;0;0;0;0;0 -20.6;26;40976;5.1152;315;1500;0;0;0;0;0;0;0 -20.7;26;40976;5.1152;231;1500;0;0;0;0;0;0;0 -20.8;26;40976;5.1152;169;1500;0;0;0;0;0;0;0 -20.9;26;40976;5.1152;124;1500;0;0;0;0;0;0;0 -21;26;40976;5.1152;91;1500;0;0;0;0;0;0;0 -21.1;26;40976;5.1152;87;1500;0;0;0;0;0;0;0 -21.2;26;40976;5.1152;84;1500;0;0;0;0;0;0;0 -21.3;26;40976;5.1152;81;1500;0;0;0;0;0;0;0 -21.4;26;40976;5.1152;78;1500;0;0;0;0;0;0;0 -21.5;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 -21.6;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 -21.7;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 -21.8;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 -21.9;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 -22;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 -22.1;26;40976;5.1152;73;1500;0;0;0;0;0;0;0 -22.2;26;40976;5.1152;72;1500;0;0;0;0;0;0;0 -22.3;26;40976;5.1152;70;1500;0;0;0;0;0;0;0 -22.4;26;40976;5.1152;68;1500;0;0;0;0;0;0;0 -22.5;26;40976;5.1152;67;1500;0;0;0;0;0;0;0 -22.6;26;40976;5.1152;53;1500;0;0;0;0;0;0;0 -22.7;26;40976;5.1152;42;1500;0;0;0;0;0;0;0 -22.8;26;40976;5.1152;33;1500;0;0;0;0;0;0;0 -22.9;26;40976;5.1152;26;1500;0;0;0;0;0;0;0 -23;26;40976;5.1152;21;1500;0;0;0;0;0;0;0 -23.1;26;40976;5.1152;11;1500;0;0;0;0;0;0;0 -23.2;26;40976;5.1152;6;1500;0;0;0;0;0;0;0 -23.3;26;40976;5.1152;3;1500;0;0;0;0;0;0;0 -23.4;26;40976;5.1152;2;1500;0;0;0;0;0;0;0 -23.5;26;40976;5.1152;1;1500;0;0;0;0;0;0;0 -23.6;26;40976;5.1152;1;1500;0;0;0;0;0;0;0 -23.7;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 -23.8;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 -23.9;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 -24;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +15;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +15.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +16.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.1;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.2;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.3;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.4;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.5;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.6;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.7;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.8;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +17.9;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +18;26;40976;5.1152;1500;1500;0;0;0;0;0;0;0 +18.1;26;40976;5.1152;1496;1500;0;0;0;0;0;0;0 +18.2;26;40976;5.1152;1492;1500;0;0;0;0;0;0;0 +18.3;26;40976;5.1152;1487;1500;0;0;0;0;0;0;0 +18.4;26;40976;5.1152;1483;1500;0;0;0;0;0;0;0 +18.5;26;40976;5.1152;1479;1500;0;0;0;0;0;0;0 +18.6;26;40976;5.1152;1188;1500;0;0;0;0;0;0;0 +18.7;26;40976;5.1152;954;1500;0;0;0;0;0;0;0 +18.8;26;40976;5.1152;766;1500;0;0;0;0;0;0;0 +18.9;26;40976;5.1152;615;1500;0;0;0;0;0;0;0 +19;26;40976;5.1152;494;1500;0;0;0;0;0;0;0 +19.1;26;40976;5.1152;478;1500;0;0;0;0;0;0;0 +19.2;26;40976;5.1152;462;1500;0;0;0;0;0;0;0 +19.3;26;40976;5.1152;447;1500;0;0;0;0;0;0;0 +19.4;26;40976;5.1152;433;1500;0;0;0;0;0;0;0 +19.5;26;40976;5.1152;419;1500;0;0;0;0;0;0;0 +19.6;26;40976;5.1152;491;1500;0;0;0;0;0;0;0 +19.7;26;40976;5.1152;577;1500;0;0;0;0;0;0;0 +19.8;26;40976;5.1152;677;1500;0;0;0;0;0;0;0 +19.9;26;40976;5.1152;795;1500;0;0;0;0;0;0;0 +20;26;40976;5.1152;934;1500;0;0;0;0;0;0;0 +20.1;26;40976;5.1152;799;1500;0;0;0;0;0;0;0 +20.2;26;40976;5.1152;684;1500;0;0;0;0;0;0;0 +20.3;26;40976;5.1152;586;1500;0;0;0;0;0;0;0 +20.4;26;40976;5.1152;502;1500;0;0;0;0;0;0;0 +20.5;26;40976;5.1152;429;1500;0;0;0;0;0;0;0 +20.6;26;40976;5.1152;315;1500;0;0;0;0;0;0;0 +20.7;26;40976;5.1152;231;1500;0;0;0;0;0;0;0 +20.8;26;40976;5.1152;169;1500;0;0;0;0;0;0;0 +20.9;26;40976;5.1152;124;1500;0;0;0;0;0;0;0 +21;26;40976;5.1152;91;1500;0;0;0;0;0;0;0 +21.1;26;40976;5.1152;87;1500;0;0;0;0;0;0;0 +21.2;26;40976;5.1152;84;1500;0;0;0;0;0;0;0 +21.3;26;40976;5.1152;81;1500;0;0;0;0;0;0;0 +21.4;26;40976;5.1152;78;1500;0;0;0;0;0;0;0 +21.5;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +21.6;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +21.7;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +21.8;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +21.9;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +22;26;40976;5.1152;75;1500;0;0;0;0;0;0;0 +22.1;26;40976;5.1152;73;1500;0;0;0;0;0;0;0 +22.2;26;40976;5.1152;72;1500;0;0;0;0;0;0;0 +22.3;26;40976;5.1152;70;1500;0;0;0;0;0;0;0 +22.4;26;40976;5.1152;68;1500;0;0;0;0;0;0;0 +22.5;26;40976;5.1152;67;1500;0;0;0;0;0;0;0 +22.6;26;40976;5.1152;53;1500;0;0;0;0;0;0;0 +22.7;26;40976;5.1152;42;1500;0;0;0;0;0;0;0 +22.8;26;40976;5.1152;33;1500;0;0;0;0;0;0;0 +22.9;26;40976;5.1152;26;1500;0;0;0;0;0;0;0 +23;26;40976;5.1152;21;1500;0;0;0;0;0;0;0 +23.1;26;40976;5.1152;11;1500;0;0;0;0;0;0;0 +23.2;26;40976;5.1152;6;1500;0;0;0;0;0;0;0 +23.3;26;40976;5.1152;3;1500;0;0;0;0;0;0;0 +23.4;26;40976;5.1152;2;1500;0;0;0;0;0;0;0 +23.5;26;40976;5.1152;1;1500;0;0;0;0;0;0;0 +23.6;26;40976;5.1152;1;1500;0;0;0;0;0;0;0 +23.7;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 +23.8;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 +23.9;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 +24;26;40976;5.1152;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs27_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs27_awgn_5G.csv index 6b43b3e2aa..5f25579439 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs27_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs27_awgn_5G.csv @@ -1,92 +1,92 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -18;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 -18.1;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 -18.2;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 -18.3;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 -18.4;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 -18.5;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 -18.6;27;42016;5.332;1465;1500;0;0;0;0;0;0;0 -18.7;27;42016;5.332;1430;1500;0;0;0;0;0;0;0 -18.8;27;42016;5.332;1397;1500;0;0;0;0;0;0;0 -18.9;27;42016;5.332;1364;1500;0;0;0;0;0;0;0 -19;27;42016;5.332;1332;1500;0;0;0;0;0;0;0 -19.1;27;42016;5.332;1092;1500;0;0;0;0;0;0;0 -19.2;27;42016;5.332;896;1500;0;0;0;0;0;0;0 -19.3;27;42016;5.332;735;1500;0;0;0;0;0;0;0 -19.4;27;42016;5.332;603;1500;0;0;0;0;0;0;0 -19.5;27;42016;5.332;494;1500;0;0;0;0;0;0;0 -19.6;27;42016;5.332;572;1500;0;0;0;0;0;0;0 -19.7;27;42016;5.332;662;1500;0;0;0;0;0;0;0 -19.8;27;42016;5.332;766;1500;0;0;0;0;0;0;0 -19.9;27;42016;5.332;886;1500;0;0;0;0;0;0;0 -20;27;42016;5.332;1025;1500;0;0;0;0;0;0;0 -20.1;27;42016;5.332;1041;1500;0;0;0;0;0;0;0 -20.2;27;42016;5.332;1058;1500;0;0;0;0;0;0;0 -20.3;27;42016;5.332;1074;1500;0;0;0;0;0;0;0 -20.4;27;42016;5.332;1091;1500;0;0;0;0;0;0;0 -20.5;27;42016;5.332;1109;1500;0;0;0;0;0;0;0 -20.6;27;42016;5.332;811;1500;0;0;0;0;0;0;0 -20.7;27;42016;5.332;594;1500;0;0;0;0;0;0;0 -20.8;27;42016;5.332;434;1500;0;0;0;0;0;0;0 -20.9;27;42016;5.332;318;1500;0;0;0;0;0;0;0 -21;27;42016;5.332;233;1500;0;0;0;0;0;0;0 -21.1;27;42016;5.332;187;1500;0;0;0;0;0;0;0 -21.2;27;42016;5.332;150;1500;0;0;0;0;0;0;0 -21.3;27;42016;5.332;121;1500;0;0;0;0;0;0;0 -21.4;27;42016;5.332;97;1500;0;0;0;0;0;0;0 -21.5;27;42016;5.332;78;1500;0;0;0;0;0;0;0 -21.6;27;42016;5.332;78;1500;0;0;0;0;0;0;0 -21.7;27;42016;5.332;77;1500;0;0;0;0;0;0;0 -21.8;27;42016;5.332;76;1500;0;0;0;0;0;0;0 -21.9;27;42016;5.332;76;1500;0;0;0;0;0;0;0 -22;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -22.1;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -22.2;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -22.3;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -22.4;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -22.5;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -22.6;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -22.7;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -22.8;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -22.9;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -23;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -23.1;27;42016;5.332;75;1500;0;0;0;0;0;0;0 -23.2;27;42016;5.332;74;1500;0;0;0;0;0;0;0 -23.3;27;42016;5.332;74;1500;0;0;0;0;0;0;0 -23.4;27;42016;5.332;74;1500;0;0;0;0;0;0;0 -23.5;27;42016;5.332;74;1500;0;0;0;0;0;0;0 -23.6;27;42016;5.332;68;1500;0;0;0;0;0;0;0 -23.7;27;42016;5.332;63;1500;0;0;0;0;0;0;0 -23.8;27;42016;5.332;59;1500;0;0;0;0;0;0;0 -23.9;27;42016;5.332;55;1500;0;0;0;0;0;0;0 -24;27;42016;5.332;51;1500;0;0;0;0;0;0;0 -24.1;27;42016;5.332;38;1500;0;0;0;0;0;0;0 -24.2;27;42016;5.332;29;1500;0;0;0;0;0;0;0 -24.3;27;42016;5.332;21;1500;0;0;0;0;0;0;0 -24.4;27;42016;5.332;16;1500;0;0;0;0;0;0;0 -24.5;27;42016;5.332;12;1500;0;0;0;0;0;0;0 -24.6;27;42016;5.332;7;1500;0;0;0;0;0;0;0 -24.7;27;42016;5.332;4;1500;0;0;0;0;0;0;0 -24.8;27;42016;5.332;3;1500;0;0;0;0;0;0;0 -24.9;27;42016;5.332;2;1500;0;0;0;0;0;0;0 -25;27;42016;5.332;1;1500;0;0;0;0;0;0;0 -25.1;27;42016;5.332;1;1500;0;0;0;0;0;0;0 -25.2;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -25.3;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -25.4;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -25.5;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -25.6;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -25.7;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -25.8;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -25.9;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -26;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -26.1;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -26.2;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -26.3;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -26.4;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -26.5;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -26.6;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -26.7;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -26.8;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -26.9;27;42016;5.332;0;1500;0;0;0;0;0;0;0 -27;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +18;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.1;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.2;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.3;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.4;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.5;27;42016;5.332;1500;1500;0;0;0;0;0;0;0 +18.6;27;42016;5.332;1465;1500;0;0;0;0;0;0;0 +18.7;27;42016;5.332;1430;1500;0;0;0;0;0;0;0 +18.8;27;42016;5.332;1397;1500;0;0;0;0;0;0;0 +18.9;27;42016;5.332;1364;1500;0;0;0;0;0;0;0 +19;27;42016;5.332;1332;1500;0;0;0;0;0;0;0 +19.1;27;42016;5.332;1092;1500;0;0;0;0;0;0;0 +19.2;27;42016;5.332;896;1500;0;0;0;0;0;0;0 +19.3;27;42016;5.332;735;1500;0;0;0;0;0;0;0 +19.4;27;42016;5.332;603;1500;0;0;0;0;0;0;0 +19.5;27;42016;5.332;494;1500;0;0;0;0;0;0;0 +19.6;27;42016;5.332;572;1500;0;0;0;0;0;0;0 +19.7;27;42016;5.332;662;1500;0;0;0;0;0;0;0 +19.8;27;42016;5.332;766;1500;0;0;0;0;0;0;0 +19.9;27;42016;5.332;886;1500;0;0;0;0;0;0;0 +20;27;42016;5.332;1025;1500;0;0;0;0;0;0;0 +20.1;27;42016;5.332;1041;1500;0;0;0;0;0;0;0 +20.2;27;42016;5.332;1058;1500;0;0;0;0;0;0;0 +20.3;27;42016;5.332;1074;1500;0;0;0;0;0;0;0 +20.4;27;42016;5.332;1091;1500;0;0;0;0;0;0;0 +20.5;27;42016;5.332;1109;1500;0;0;0;0;0;0;0 +20.6;27;42016;5.332;811;1500;0;0;0;0;0;0;0 +20.7;27;42016;5.332;594;1500;0;0;0;0;0;0;0 +20.8;27;42016;5.332;434;1500;0;0;0;0;0;0;0 +20.9;27;42016;5.332;318;1500;0;0;0;0;0;0;0 +21;27;42016;5.332;233;1500;0;0;0;0;0;0;0 +21.1;27;42016;5.332;187;1500;0;0;0;0;0;0;0 +21.2;27;42016;5.332;150;1500;0;0;0;0;0;0;0 +21.3;27;42016;5.332;121;1500;0;0;0;0;0;0;0 +21.4;27;42016;5.332;97;1500;0;0;0;0;0;0;0 +21.5;27;42016;5.332;78;1500;0;0;0;0;0;0;0 +21.6;27;42016;5.332;78;1500;0;0;0;0;0;0;0 +21.7;27;42016;5.332;77;1500;0;0;0;0;0;0;0 +21.8;27;42016;5.332;76;1500;0;0;0;0;0;0;0 +21.9;27;42016;5.332;76;1500;0;0;0;0;0;0;0 +22;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.1;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.2;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.3;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.4;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.5;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.6;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.7;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.8;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +22.9;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +23;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +23.1;27;42016;5.332;75;1500;0;0;0;0;0;0;0 +23.2;27;42016;5.332;74;1500;0;0;0;0;0;0;0 +23.3;27;42016;5.332;74;1500;0;0;0;0;0;0;0 +23.4;27;42016;5.332;74;1500;0;0;0;0;0;0;0 +23.5;27;42016;5.332;74;1500;0;0;0;0;0;0;0 +23.6;27;42016;5.332;68;1500;0;0;0;0;0;0;0 +23.7;27;42016;5.332;63;1500;0;0;0;0;0;0;0 +23.8;27;42016;5.332;59;1500;0;0;0;0;0;0;0 +23.9;27;42016;5.332;55;1500;0;0;0;0;0;0;0 +24;27;42016;5.332;51;1500;0;0;0;0;0;0;0 +24.1;27;42016;5.332;38;1500;0;0;0;0;0;0;0 +24.2;27;42016;5.332;29;1500;0;0;0;0;0;0;0 +24.3;27;42016;5.332;21;1500;0;0;0;0;0;0;0 +24.4;27;42016;5.332;16;1500;0;0;0;0;0;0;0 +24.5;27;42016;5.332;12;1500;0;0;0;0;0;0;0 +24.6;27;42016;5.332;7;1500;0;0;0;0;0;0;0 +24.7;27;42016;5.332;4;1500;0;0;0;0;0;0;0 +24.8;27;42016;5.332;3;1500;0;0;0;0;0;0;0 +24.9;27;42016;5.332;2;1500;0;0;0;0;0;0;0 +25;27;42016;5.332;1;1500;0;0;0;0;0;0;0 +25.1;27;42016;5.332;1;1500;0;0;0;0;0;0;0 +25.2;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.3;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.4;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.5;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.6;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.7;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.8;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +25.9;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.1;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.2;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.3;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.4;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.5;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.6;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.7;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.8;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +26.9;27;42016;5.332;0;1500;0;0;0;0;0;0;0 +27;27;42016;5.332;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs28_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs28_awgn_5G.csv index a6066cbd61..edf6ef2e2c 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs28_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs28_awgn_5G.csv @@ -1,92 +1,92 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err -18;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 -18.1;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 -18.2;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 -18.3;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 -18.4;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 -18.5;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 -18.6;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 -18.7;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 -18.8;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 -18.9;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 -19;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 -19.1;28;44040;5.547;1499;1500;0;0;0;0;0;0;0 -19.2;28;44040;5.547;1498;1500;0;0;0;0;0;0;0 -19.3;28;44040;5.547;1498;1500;0;0;0;0;0;0;0 -19.4;28;44040;5.547;1497;1500;0;0;0;0;0;0;0 -19.5;28;44040;5.547;1496;1500;0;0;0;0;0;0;0 -19.6;28;44040;5.547;1429;1500;0;0;0;0;0;0;0 -19.7;28;44040;5.547;1366;1500;0;0;0;0;0;0;0 -19.8;28;44040;5.547;1305;1500;0;0;0;0;0;0;0 -19.9;28;44040;5.547;1247;1500;0;0;0;0;0;0;0 -20;28;44040;5.547;1191;1500;0;0;0;0;0;0;0 -20.1;28;44040;5.547;1234;1500;0;0;0;0;0;0;0 -20.2;28;44040;5.547;1279;1500;0;0;0;0;0;0;0 -20.3;28;44040;5.547;1325;1500;0;0;0;0;0;0;0 -20.4;28;44040;5.547;1373;1500;0;0;0;0;0;0;0 -20.5;28;44040;5.547;1423;1500;0;0;0;0;0;0;0 -20.6;28;44040;5.547;1426;1500;0;0;0;0;0;0;0 -20.7;28;44040;5.547;1429;1500;0;0;0;0;0;0;0 -20.8;28;44040;5.547;1432;1500;0;0;0;0;0;0;0 -20.9;28;44040;5.547;1435;1500;0;0;0;0;0;0;0 -21;28;44040;5.547;1438;1500;0;0;0;0;0;0;0 -21.1;28;44040;5.547;1207;1500;0;0;0;0;0;0;0 -21.2;28;44040;5.547;1014;1500;0;0;0;0;0;0;0 -21.3;28;44040;5.547;851;1500;0;0;0;0;0;0;0 -21.4;28;44040;5.547;715;1500;0;0;0;0;0;0;0 -21.5;28;44040;5.547;600;1500;0;0;0;0;0;0;0 -21.6;28;44040;5.547;418;1500;0;0;0;0;0;0;0 -21.7;28;44040;5.547;290;1500;0;0;0;0;0;0;0 -21.8;28;44040;5.547;202;1500;0;0;0;0;0;0;0 -21.9;28;44040;5.547;140;1500;0;0;0;0;0;0;0 -22;28;44040;5.547;98;1500;0;0;0;0;0;0;0 -22.1;28;44040;5.547;93;1500;0;0;0;0;0;0;0 -22.2;28;44040;5.547;88;1500;0;0;0;0;0;0;0 -22.3;28;44040;5.547;83;1500;0;0;0;0;0;0;0 -22.4;28;44040;5.547;79;1500;0;0;0;0;0;0;0 -22.5;28;44040;5.547;75;1500;0;0;0;0;0;0;0 -22.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -22.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -22.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -22.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -23;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -23.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -23.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -23.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -23.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -23.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -23.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -23.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -23.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -23.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -24;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -24.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -24.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -24.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -24.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -24.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -24.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -24.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -24.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -24.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -25;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -25.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -25.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -25.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -25.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -25.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -25.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -25.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -25.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -25.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -26;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -26.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -26.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -26.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -26.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -26.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -26.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -26.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -26.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -26.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 -27;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +18;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.1;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.2;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.3;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.4;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.5;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.6;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.7;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.8;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +18.9;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +19;28;44040;5.547;1500;1500;0;0;0;0;0;0;0 +19.1;28;44040;5.547;1499;1500;0;0;0;0;0;0;0 +19.2;28;44040;5.547;1498;1500;0;0;0;0;0;0;0 +19.3;28;44040;5.547;1498;1500;0;0;0;0;0;0;0 +19.4;28;44040;5.547;1497;1500;0;0;0;0;0;0;0 +19.5;28;44040;5.547;1496;1500;0;0;0;0;0;0;0 +19.6;28;44040;5.547;1429;1500;0;0;0;0;0;0;0 +19.7;28;44040;5.547;1366;1500;0;0;0;0;0;0;0 +19.8;28;44040;5.547;1305;1500;0;0;0;0;0;0;0 +19.9;28;44040;5.547;1247;1500;0;0;0;0;0;0;0 +20;28;44040;5.547;1191;1500;0;0;0;0;0;0;0 +20.1;28;44040;5.547;1234;1500;0;0;0;0;0;0;0 +20.2;28;44040;5.547;1279;1500;0;0;0;0;0;0;0 +20.3;28;44040;5.547;1325;1500;0;0;0;0;0;0;0 +20.4;28;44040;5.547;1373;1500;0;0;0;0;0;0;0 +20.5;28;44040;5.547;1423;1500;0;0;0;0;0;0;0 +20.6;28;44040;5.547;1426;1500;0;0;0;0;0;0;0 +20.7;28;44040;5.547;1429;1500;0;0;0;0;0;0;0 +20.8;28;44040;5.547;1432;1500;0;0;0;0;0;0;0 +20.9;28;44040;5.547;1435;1500;0;0;0;0;0;0;0 +21;28;44040;5.547;1438;1500;0;0;0;0;0;0;0 +21.1;28;44040;5.547;1207;1500;0;0;0;0;0;0;0 +21.2;28;44040;5.547;1014;1500;0;0;0;0;0;0;0 +21.3;28;44040;5.547;851;1500;0;0;0;0;0;0;0 +21.4;28;44040;5.547;715;1500;0;0;0;0;0;0;0 +21.5;28;44040;5.547;600;1500;0;0;0;0;0;0;0 +21.6;28;44040;5.547;418;1500;0;0;0;0;0;0;0 +21.7;28;44040;5.547;290;1500;0;0;0;0;0;0;0 +21.8;28;44040;5.547;202;1500;0;0;0;0;0;0;0 +21.9;28;44040;5.547;140;1500;0;0;0;0;0;0;0 +22;28;44040;5.547;98;1500;0;0;0;0;0;0;0 +22.1;28;44040;5.547;93;1500;0;0;0;0;0;0;0 +22.2;28;44040;5.547;88;1500;0;0;0;0;0;0;0 +22.3;28;44040;5.547;83;1500;0;0;0;0;0;0;0 +22.4;28;44040;5.547;79;1500;0;0;0;0;0;0;0 +22.5;28;44040;5.547;75;1500;0;0;0;0;0;0;0 +22.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +22.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +22.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +22.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +23.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +24.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +25.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.1;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.2;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.3;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.4;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.5;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.6;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.7;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.8;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +26.9;28;44040;5.547;0;1500;0;0;0;0;0;0;0 +27;28;44040;5.547;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs2_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs2_awgn_5G.csv index d5a802c177..2fbb6a20b9 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs2_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs2_awgn_5G.csv @@ -1,62 +1,62 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err --4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --3.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --3.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --3.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --3.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --3.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --3.4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --3.3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --3.2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --3.1;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --2.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --2.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --2.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --2.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --2.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --2.4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --2.3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --2.2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --2.1;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --1.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --1.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --1.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --1.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --1.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 --1.4;2;2976;0.377;1486;1500;0;0;0;0;0;0;0 --1.3;2;2976;0.377;1473;1500;0;0;0;0;0;0;0 --1.2;2;2976;0.377;1459;1500;0;0;0;0;0;0;0 --1.1;2;2976;0.377;1446;1500;0;0;0;0;0;0;0 --1;2;2976;0.377;1432;1500;0;0;0;0;0;0;0 --0.9;2;2976;0.377;1149;1500;0;0;0;0;0;0;0 --0.8;2;2976;0.377;921;1500;0;0;0;0;0;0;0 --0.7;2;2976;0.377;738;1500;0;0;0;0;0;0;0 --0.6;2;2976;0.377;592;1500;0;0;0;0;0;0;0 --0.5;2;2976;0.377;475;1500;0;0;0;0;0;0;0 --0.4;2;2976;0.377;292;1500;0;0;0;0;0;0;0 --0.3;2;2976;0.377;179;1500;0;0;0;0;0;0;0 --0.2;2;2976;0.377;110;1500;0;0;0;0;0;0;0 --0.1;2;2976;0.377;68;1500;0;0;0;0;0;0;0 -0;2;2976;0.377;42;1500;0;0;0;0;0;0;0 -0.1;2;2976;0.377;22;1500;0;0;0;0;0;0;0 -0.2;2;2976;0.377;11;1500;0;0;0;0;0;0;0 -0.3;2;2976;0.377;6;1500;0;0;0;0;0;0;0 -0.4;2;2976;0.377;3;1500;0;0;0;0;0;0;0 -0.5;2;2976;0.377;2;1500;0;0;0;0;0;0;0 -0.6;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -0.7;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -0.8;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -0.9;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -1;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -1.1;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -1.2;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -1.3;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -1.4;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -1.5;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -1.6;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -1.7;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -1.8;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -1.9;2;2976;0.377;0;1500;0;0;0;0;0;0;0 -2;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3.1;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.4;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.3;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2.1;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-2;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.9;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.8;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.7;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.6;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.5;2;2976;0.377;1500;1500;0;0;0;0;0;0;0 +-1.4;2;2976;0.377;1486;1500;0;0;0;0;0;0;0 +-1.3;2;2976;0.377;1473;1500;0;0;0;0;0;0;0 +-1.2;2;2976;0.377;1459;1500;0;0;0;0;0;0;0 +-1.1;2;2976;0.377;1446;1500;0;0;0;0;0;0;0 +-1;2;2976;0.377;1432;1500;0;0;0;0;0;0;0 +-0.9;2;2976;0.377;1149;1500;0;0;0;0;0;0;0 +-0.8;2;2976;0.377;921;1500;0;0;0;0;0;0;0 +-0.7;2;2976;0.377;738;1500;0;0;0;0;0;0;0 +-0.6;2;2976;0.377;592;1500;0;0;0;0;0;0;0 +-0.5;2;2976;0.377;475;1500;0;0;0;0;0;0;0 +-0.4;2;2976;0.377;292;1500;0;0;0;0;0;0;0 +-0.3;2;2976;0.377;179;1500;0;0;0;0;0;0;0 +-0.2;2;2976;0.377;110;1500;0;0;0;0;0;0;0 +-0.1;2;2976;0.377;68;1500;0;0;0;0;0;0;0 +0;2;2976;0.377;42;1500;0;0;0;0;0;0;0 +0.1;2;2976;0.377;22;1500;0;0;0;0;0;0;0 +0.2;2;2976;0.377;11;1500;0;0;0;0;0;0;0 +0.3;2;2976;0.377;6;1500;0;0;0;0;0;0;0 +0.4;2;2976;0.377;3;1500;0;0;0;0;0;0;0 +0.5;2;2976;0.377;2;1500;0;0;0;0;0;0;0 +0.6;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +0.7;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +0.8;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +0.9;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.1;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.2;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.3;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.4;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.5;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.6;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.7;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.8;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +1.9;2;2976;0.377;0;1500;0;0;0;0;0;0;0 +2;2;2976;0.377;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs3_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs3_awgn_5G.csv index 9acdfe3e2f..531c1548b0 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs3_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs3_awgn_5G.csv @@ -1,62 +1,62 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err --4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --3.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --3.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --3.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --3.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --3.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --3.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --3.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --3.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --3.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --2.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --2.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --2.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --2.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --2.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --2.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --2.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --2.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --2.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --1.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --1.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --1.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --1.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --1.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --1.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --1.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --1.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --1.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 --0.9;3;3912;0.4902;1499;1500;0;0;0;0;0;0;0 --0.8;3;3912;0.4902;1498;1500;0;0;0;0;0;0;0 --0.7;3;3912;0.4902;1496;1500;0;0;0;0;0;0;0 --0.6;3;3912;0.4902;1495;1500;0;0;0;0;0;0;0 --0.5;3;3912;0.4902;1494;1500;0;0;0;0;0;0;0 --0.4;3;3912;0.4902;1322;1500;0;0;0;0;0;0;0 --0.3;3;3912;0.4902;1169;1500;0;0;0;0;0;0;0 --0.2;3;3912;0.4902;1034;1500;0;0;0;0;0;0;0 --0.1;3;3912;0.4902;915;1500;0;0;0;0;0;0;0 -0;3;3912;0.4902;809;1500;0;0;0;0;0;0;0 -0.1;3;3912;0.4902;504;1500;0;0;0;0;0;0;0 -0.2;3;3912;0.4902;314;1500;0;0;0;0;0;0;0 -0.3;3;3912;0.4902;196;1500;0;0;0;0;0;0;0 -0.4;3;3912;0.4902;122;1500;0;0;0;0;0;0;0 -0.5;3;3912;0.4902;76;1500;0;0;0;0;0;0;0 -0.6;3;3912;0.4902;37;1500;0;0;0;0;0;0;0 -0.7;3;3912;0.4902;18;1500;0;0;0;0;0;0;0 -0.8;3;3912;0.4902;9;1500;0;0;0;0;0;0;0 -0.9;3;3912;0.4902;4;1500;0;0;0;0;0;0;0 -1;3;3912;0.4902;2;1500;0;0;0;0;0;0;0 -1.1;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 -1.2;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 -1.3;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 -1.4;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 -1.5;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 -1.6;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 -1.7;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 -1.8;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 -1.9;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 -2;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.9;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.8;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.7;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.6;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.5;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.4;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.3;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.2;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1.1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-1;3;3912;0.4902;1500;1500;0;0;0;0;0;0;0 +-0.9;3;3912;0.4902;1499;1500;0;0;0;0;0;0;0 +-0.8;3;3912;0.4902;1498;1500;0;0;0;0;0;0;0 +-0.7;3;3912;0.4902;1496;1500;0;0;0;0;0;0;0 +-0.6;3;3912;0.4902;1495;1500;0;0;0;0;0;0;0 +-0.5;3;3912;0.4902;1494;1500;0;0;0;0;0;0;0 +-0.4;3;3912;0.4902;1322;1500;0;0;0;0;0;0;0 +-0.3;3;3912;0.4902;1169;1500;0;0;0;0;0;0;0 +-0.2;3;3912;0.4902;1034;1500;0;0;0;0;0;0;0 +-0.1;3;3912;0.4902;915;1500;0;0;0;0;0;0;0 +0;3;3912;0.4902;809;1500;0;0;0;0;0;0;0 +0.1;3;3912;0.4902;504;1500;0;0;0;0;0;0;0 +0.2;3;3912;0.4902;314;1500;0;0;0;0;0;0;0 +0.3;3;3912;0.4902;196;1500;0;0;0;0;0;0;0 +0.4;3;3912;0.4902;122;1500;0;0;0;0;0;0;0 +0.5;3;3912;0.4902;76;1500;0;0;0;0;0;0;0 +0.6;3;3912;0.4902;37;1500;0;0;0;0;0;0;0 +0.7;3;3912;0.4902;18;1500;0;0;0;0;0;0;0 +0.8;3;3912;0.4902;9;1500;0;0;0;0;0;0;0 +0.9;3;3912;0.4902;4;1500;0;0;0;0;0;0;0 +1;3;3912;0.4902;2;1500;0;0;0;0;0;0;0 +1.1;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.2;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.3;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.4;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.5;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.6;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.7;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.8;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +1.9;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 +2;3;3912;0.4902;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs4_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs4_awgn_5G.csv index 99a1e652e5..033c81afaf 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs4_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs4_awgn_5G.csv @@ -1,62 +1,62 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err --1;4;4736;0.6016;1500;1500;0;0;0;0;0;0;0 --0.9;4;4736;0.6016;1499;1500;0;0;0;0;0;0;0 --0.8;4;4736;0.6016;1498;1500;0;0;0;0;0;0;0 --0.7;4;4736;0.6016;1496;1500;0;0;0;0;0;0;0 --0.6;4;4736;0.6016;1495;1500;0;0;0;0;0;0;0 --0.5;4;4736;0.6016;1494;1500;0;0;0;0;0;0;0 --0.4;4;4736;0.6016;1322;1500;0;0;0;0;0;0;0 --0.3;4;4736;0.6016;1169;1500;0;0;0;0;0;0;0 --0.2;4;4736;0.6016;1034;1500;0;0;0;0;0;0;0 --0.1;4;4736;0.6016;915;1500;0;0;0;0;0;0;0 -0;4;4736;0.6016;809;1500;0;0;0;0;0;0;0 -0.1;4;4736;0.6016;504;1500;0;0;0;0;0;0;0 -0.2;4;4736;0.6016;314;1500;0;0;0;0;0;0;0 -0.3;4;4736;0.6016;196;1500;0;0;0;0;0;0;0 -0.4;4;4736;0.6016;122;1500;0;0;0;0;0;0;0 -0.5;4;4736;0.6016;76;1500;0;0;0;0;0;0;0 -0.6;4;4736;0.6016;37;1500;0;0;0;0;0;0;0 -0.7;4;4736;0.6016;18;1500;0;0;0;0;0;0;0 -0.8;4;4736;0.6016;9;1500;0;0;0;0;0;0;0 -0.9;4;4736;0.6016;4;1500;0;0;0;0;0;0;0 -1;4;4736;0.6016;2;1500;0;0;0;0;0;0;0 -1.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -1.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -1.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -1.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -1.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -1.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -1.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -1.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -1.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -2.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -2.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -2.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -2.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -2.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -2.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -2.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -2.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -2.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -3.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -3.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -3.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -3.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -3.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -3.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -3.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -3.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -3.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -4.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -4.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -4.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -4.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -4.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -4.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -4.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -4.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -4.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 -5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;4;4736;0.6016;1500;1500;0;0;0;0;0;0;0 +-0.9;4;4736;0.6016;1499;1500;0;0;0;0;0;0;0 +-0.8;4;4736;0.6016;1498;1500;0;0;0;0;0;0;0 +-0.7;4;4736;0.6016;1496;1500;0;0;0;0;0;0;0 +-0.6;4;4736;0.6016;1495;1500;0;0;0;0;0;0;0 +-0.5;4;4736;0.6016;1494;1500;0;0;0;0;0;0;0 +-0.4;4;4736;0.6016;1322;1500;0;0;0;0;0;0;0 +-0.3;4;4736;0.6016;1169;1500;0;0;0;0;0;0;0 +-0.2;4;4736;0.6016;1034;1500;0;0;0;0;0;0;0 +-0.1;4;4736;0.6016;915;1500;0;0;0;0;0;0;0 +0;4;4736;0.6016;809;1500;0;0;0;0;0;0;0 +0.1;4;4736;0.6016;504;1500;0;0;0;0;0;0;0 +0.2;4;4736;0.6016;314;1500;0;0;0;0;0;0;0 +0.3;4;4736;0.6016;196;1500;0;0;0;0;0;0;0 +0.4;4;4736;0.6016;122;1500;0;0;0;0;0;0;0 +0.5;4;4736;0.6016;76;1500;0;0;0;0;0;0;0 +0.6;4;4736;0.6016;37;1500;0;0;0;0;0;0;0 +0.7;4;4736;0.6016;18;1500;0;0;0;0;0;0;0 +0.8;4;4736;0.6016;9;1500;0;0;0;0;0;0;0 +0.9;4;4736;0.6016;4;1500;0;0;0;0;0;0;0 +1;4;4736;0.6016;2;1500;0;0;0;0;0;0;0 +1.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +1.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +2.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +3.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.1;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.2;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.3;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.4;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.6;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.7;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.8;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +4.9;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 +5;4;4736;0.6016;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs5_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs5_awgn_5G.csv index 1d2c479112..f741966016 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs5_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs5_awgn_5G.csv @@ -1,62 +1,62 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err --1;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 --0.9;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 --0.8;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 --0.7;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 --0.6;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 --0.5;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 --0.4;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 --0.3;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 --0.2;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 --0.1;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 -0;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 -0.1;5;5888;0.7402;1499;1500;0;0;0;0;0;0;0 -0.2;5;5888;0.7402;1499;1500;0;0;0;0;0;0;0 -0.3;5;5888;0.7402;1498;1500;0;0;0;0;0;0;0 -0.4;5;5888;0.7402;1498;1500;0;0;0;0;0;0;0 -0.5;5;5888;0.7402;1497;1500;0;0;0;0;0;0;0 -0.6;5;5888;0.7402;1323;1500;0;0;0;0;0;0;0 -0.7;5;5888;0.7402;1170;1500;0;0;0;0;0;0;0 -0.8;5;5888;0.7402;1034;1500;0;0;0;0;0;0;0 -0.9;5;5888;0.7402;914;1500;0;0;0;0;0;0;0 -1;5;5888;0.7402;808;1500;0;0;0;0;0;0;0 -1.1;5;5888;0.7402;513;1500;0;0;0;0;0;0;0 -1.2;5;5888;0.7402;326;1500;0;0;0;0;0;0;0 -1.3;5;5888;0.7402;207;1500;0;0;0;0;0;0;0 -1.4;5;5888;0.7402;131;1500;0;0;0;0;0;0;0 -1.5;5;5888;0.7402;83;1500;0;0;0;0;0;0;0 -1.6;5;5888;0.7402;48;1500;0;0;0;0;0;0;0 -1.7;5;5888;0.7402;28;1500;0;0;0;0;0;0;0 -1.8;5;5888;0.7402;16;1500;0;0;0;0;0;0;0 -1.9;5;5888;0.7402;9;1500;0;0;0;0;0;0;0 -2;5;5888;0.7402;5;1500;0;0;0;0;0;0;0 -2.1;5;5888;0.7402;2;1500;0;0;0;0;0;0;0 -2.2;5;5888;0.7402;1;1500;0;0;0;0;0;0;0 -2.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -2.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -2.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -2.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -2.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -2.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -2.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -3.1;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -3.2;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -3.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -3.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -3.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -3.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -3.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -3.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -3.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -4.1;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -4.2;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -4.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -4.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -4.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -4.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -4.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -4.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -4.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 -5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.9;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.8;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.7;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.6;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.5;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.4;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.3;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.2;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +-0.1;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +0;5;5888;0.7402;1500;1500;0;0;0;0;0;0;0 +0.1;5;5888;0.7402;1499;1500;0;0;0;0;0;0;0 +0.2;5;5888;0.7402;1499;1500;0;0;0;0;0;0;0 +0.3;5;5888;0.7402;1498;1500;0;0;0;0;0;0;0 +0.4;5;5888;0.7402;1498;1500;0;0;0;0;0;0;0 +0.5;5;5888;0.7402;1497;1500;0;0;0;0;0;0;0 +0.6;5;5888;0.7402;1323;1500;0;0;0;0;0;0;0 +0.7;5;5888;0.7402;1170;1500;0;0;0;0;0;0;0 +0.8;5;5888;0.7402;1034;1500;0;0;0;0;0;0;0 +0.9;5;5888;0.7402;914;1500;0;0;0;0;0;0;0 +1;5;5888;0.7402;808;1500;0;0;0;0;0;0;0 +1.1;5;5888;0.7402;513;1500;0;0;0;0;0;0;0 +1.2;5;5888;0.7402;326;1500;0;0;0;0;0;0;0 +1.3;5;5888;0.7402;207;1500;0;0;0;0;0;0;0 +1.4;5;5888;0.7402;131;1500;0;0;0;0;0;0;0 +1.5;5;5888;0.7402;83;1500;0;0;0;0;0;0;0 +1.6;5;5888;0.7402;48;1500;0;0;0;0;0;0;0 +1.7;5;5888;0.7402;28;1500;0;0;0;0;0;0;0 +1.8;5;5888;0.7402;16;1500;0;0;0;0;0;0;0 +1.9;5;5888;0.7402;9;1500;0;0;0;0;0;0;0 +2;5;5888;0.7402;5;1500;0;0;0;0;0;0;0 +2.1;5;5888;0.7402;2;1500;0;0;0;0;0;0;0 +2.2;5;5888;0.7402;1;1500;0;0;0;0;0;0;0 +2.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +2.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.1;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.2;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +3.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.1;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.2;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.3;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.4;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.6;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.7;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.8;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +4.9;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 +5;5;5888;0.7402;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs6_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs6_awgn_5G.csv index 42a0cd6fb1..350c53d695 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs6_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs6_awgn_5G.csv @@ -1,62 +1,62 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err --1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 --0.9;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 --0.8;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 --0.7;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 --0.6;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 --0.5;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 --0.4;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 --0.3;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 --0.2;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 --0.1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -0;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -0.1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -0.2;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -0.3;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -0.4;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -0.5;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -0.6;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -0.7;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -0.8;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -0.9;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 -1.1;6;6912;0.877;1493;1500;0;0;0;0;0;0;0 -1.2;6;6912;0.877;1487;1500;0;0;0;0;0;0;0 -1.3;6;6912;0.877;1480;1500;0;0;0;0;0;0;0 -1.4;6;6912;0.877;1473;1500;0;0;0;0;0;0;0 -1.5;6;6912;0.877;1467;1500;0;0;0;0;0;0;0 -1.6;6;6912;0.877;1117;1500;0;0;0;0;0;0;0 -1.7;6;6912;0.877;850;1500;0;0;0;0;0;0;0 -1.8;6;6912;0.877;648;1500;0;0;0;0;0;0;0 -1.9;6;6912;0.877;493;1500;0;0;0;0;0;0;0 -2;6;6912;0.877;376;1500;0;0;0;0;0;0;0 -2.1;6;6912;0.877;254;1500;0;0;0;0;0;0;0 -2.2;6;6912;0.877;172;1500;0;0;0;0;0;0;0 -2.3;6;6912;0.877;116;1500;0;0;0;0;0;0;0 -2.4;6;6912;0.877;79;1500;0;0;0;0;0;0;0 -2.5;6;6912;0.877;53;1500;0;0;0;0;0;0;0 -2.6;6;6912;0.877;32;1500;0;0;0;0;0;0;0 -2.7;6;6912;0.877;19;1500;0;0;0;0;0;0;0 -2.8;6;6912;0.877;11;1500;0;0;0;0;0;0;0 -2.9;6;6912;0.877;7;1500;0;0;0;0;0;0;0 -3;6;6912;0.877;4;1500;0;0;0;0;0;0;0 -3.1;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -3.2;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -3.3;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -3.4;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -3.5;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -3.6;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -3.7;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -3.8;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -3.9;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -4;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -4.1;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -4.2;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -4.3;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -4.4;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -4.5;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -4.6;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -4.7;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -4.8;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -4.9;6;6912;0.877;0;1500;0;0;0;0;0;0;0 -5;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.9;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.8;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.7;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.6;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.5;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.4;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.3;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.2;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +-0.1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.2;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.3;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.4;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.5;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.6;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.7;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.8;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +0.9;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +1;6;6912;0.877;1500;1500;0;0;0;0;0;0;0 +1.1;6;6912;0.877;1493;1500;0;0;0;0;0;0;0 +1.2;6;6912;0.877;1487;1500;0;0;0;0;0;0;0 +1.3;6;6912;0.877;1480;1500;0;0;0;0;0;0;0 +1.4;6;6912;0.877;1473;1500;0;0;0;0;0;0;0 +1.5;6;6912;0.877;1467;1500;0;0;0;0;0;0;0 +1.6;6;6912;0.877;1117;1500;0;0;0;0;0;0;0 +1.7;6;6912;0.877;850;1500;0;0;0;0;0;0;0 +1.8;6;6912;0.877;648;1500;0;0;0;0;0;0;0 +1.9;6;6912;0.877;493;1500;0;0;0;0;0;0;0 +2;6;6912;0.877;376;1500;0;0;0;0;0;0;0 +2.1;6;6912;0.877;254;1500;0;0;0;0;0;0;0 +2.2;6;6912;0.877;172;1500;0;0;0;0;0;0;0 +2.3;6;6912;0.877;116;1500;0;0;0;0;0;0;0 +2.4;6;6912;0.877;79;1500;0;0;0;0;0;0;0 +2.5;6;6912;0.877;53;1500;0;0;0;0;0;0;0 +2.6;6;6912;0.877;32;1500;0;0;0;0;0;0;0 +2.7;6;6912;0.877;19;1500;0;0;0;0;0;0;0 +2.8;6;6912;0.877;11;1500;0;0;0;0;0;0;0 +2.9;6;6912;0.877;7;1500;0;0;0;0;0;0;0 +3;6;6912;0.877;4;1500;0;0;0;0;0;0;0 +3.1;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.2;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.3;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.4;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.5;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.6;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.7;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.8;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +3.9;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.1;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.2;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.3;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.4;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.5;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.6;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.7;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.8;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +4.9;6;6912;0.877;0;1500;0;0;0;0;0;0;0 +5;6;6912;0.877;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs7_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs7_awgn_5G.csv index ac98d0ae10..9bd689cf0e 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs7_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs7_awgn_5G.csv @@ -1,62 +1,62 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err --1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 --0.9;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 --0.8;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 --0.7;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 --0.6;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 --0.5;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 --0.4;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 --0.3;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 --0.2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 --0.1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -0;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -0.1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -0.2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -0.3;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -0.4;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -0.5;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -0.6;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -0.7;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -0.8;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -0.9;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -1.1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -1.2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -1.3;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -1.4;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -1.5;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -1.6;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -1.7;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -1.8;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -1.9;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 -2.1;7;8912;1.0273;1492;1500;0;0;0;0;0;0;0 -2.2;7;8912;1.0273;1484;1500;0;0;0;0;0;0;0 -2.3;7;8912;1.0273;1477;1500;0;0;0;0;0;0;0 -2.4;7;8912;1.0273;1469;1500;0;0;0;0;0;0;0 -2.5;7;8912;1.0273;1462;1500;0;0;0;0;0;0;0 -2.6;7;8912;1.0273;1159;1500;0;0;0;0;0;0;0 -2.7;7;8912;1.0273;919;1500;0;0;0;0;0;0;0 -2.8;7;8912;1.0273;729;1500;0;0;0;0;0;0;0 -2.9;7;8912;1.0273;578;1500;0;0;0;0;0;0;0 -3;7;8912;1.0273;458;1500;0;0;0;0;0;0;0 -3.1;7;8912;1.0273;319;1500;0;0;0;0;0;0;0 -3.2;7;8912;1.0273;222;1500;0;0;0;0;0;0;0 -3.3;7;8912;1.0273;155;1500;0;0;0;0;0;0;0 -3.4;7;8912;1.0273;108;1500;0;0;0;0;0;0;0 -3.5;7;8912;1.0273;75;1500;0;0;0;0;0;0;0 -3.6;7;8912;1.0273;48;1500;0;0;0;0;0;0;0 -3.7;7;8912;1.0273;30;1500;0;0;0;0;0;0;0 -3.8;7;8912;1.0273;19;1500;0;0;0;0;0;0;0 -3.9;7;8912;1.0273;12;1500;0;0;0;0;0;0;0 -4;7;8912;1.0273;8;1500;0;0;0;0;0;0;0 -4.1;7;8912;1.0273;4;1500;0;0;0;0;0;0;0 -4.2;7;8912;1.0273;2;1500;0;0;0;0;0;0;0 -4.3;7;8912;1.0273;1;1500;0;0;0;0;0;0;0 -4.4;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 -4.5;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 -4.6;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 -4.7;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 -4.8;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 -4.9;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 -5;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.9;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.8;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.7;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.6;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.5;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.4;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.3;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +-0.1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.3;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.4;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.5;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.6;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.7;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.8;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +0.9;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.1;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.3;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.4;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.5;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.6;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.7;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.8;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +1.9;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +2;7;8912;1.0273;1500;1500;0;0;0;0;0;0;0 +2.1;7;8912;1.0273;1492;1500;0;0;0;0;0;0;0 +2.2;7;8912;1.0273;1484;1500;0;0;0;0;0;0;0 +2.3;7;8912;1.0273;1477;1500;0;0;0;0;0;0;0 +2.4;7;8912;1.0273;1469;1500;0;0;0;0;0;0;0 +2.5;7;8912;1.0273;1462;1500;0;0;0;0;0;0;0 +2.6;7;8912;1.0273;1159;1500;0;0;0;0;0;0;0 +2.7;7;8912;1.0273;919;1500;0;0;0;0;0;0;0 +2.8;7;8912;1.0273;729;1500;0;0;0;0;0;0;0 +2.9;7;8912;1.0273;578;1500;0;0;0;0;0;0;0 +3;7;8912;1.0273;458;1500;0;0;0;0;0;0;0 +3.1;7;8912;1.0273;319;1500;0;0;0;0;0;0;0 +3.2;7;8912;1.0273;222;1500;0;0;0;0;0;0;0 +3.3;7;8912;1.0273;155;1500;0;0;0;0;0;0;0 +3.4;7;8912;1.0273;108;1500;0;0;0;0;0;0;0 +3.5;7;8912;1.0273;75;1500;0;0;0;0;0;0;0 +3.6;7;8912;1.0273;48;1500;0;0;0;0;0;0;0 +3.7;7;8912;1.0273;30;1500;0;0;0;0;0;0;0 +3.8;7;8912;1.0273;19;1500;0;0;0;0;0;0;0 +3.9;7;8912;1.0273;12;1500;0;0;0;0;0;0;0 +4;7;8912;1.0273;8;1500;0;0;0;0;0;0;0 +4.1;7;8912;1.0273;4;1500;0;0;0;0;0;0;0 +4.2;7;8912;1.0273;2;1500;0;0;0;0;0;0;0 +4.3;7;8912;1.0273;1;1500;0;0;0;0;0;0;0 +4.4;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +4.5;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +4.6;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +4.7;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +4.8;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +4.9;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 +5;7;8912;1.0273;0;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs8_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs8_awgn_5G.csv index 4c202068f1..470cce69ae 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs8_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs8_awgn_5G.csv @@ -1,62 +1,62 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err --1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 --0.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 --0.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 --0.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 --0.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 --0.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 --0.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 --0.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 --0.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 --0.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -0;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -0.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -0.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -0.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -0.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -0.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -0.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -0.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -0.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -0.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -1.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -1.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -1.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -1.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -1.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -1.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -1.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -1.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -1.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -2.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -2.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -2.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -2.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -2.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -2.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -2.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -2.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -2.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 -3.1;8;9224;1.1758;1464;1500;0;0;0;0;0;0;0 -3.2;8;9224;1.1758;1429;1500;0;0;0;0;0;0;0 -3.3;8;9224;1.1758;1394;1500;0;0;0;0;0;0;0 -3.4;8;9224;1.1758;1361;1500;0;0;0;0;0;0;0 -3.5;8;9224;1.1758;1328;1500;0;0;0;0;0;0;0 -3.6;8;9224;1.1758;973;1500;0;0;0;0;0;0;0 -3.7;8;9224;1.1758;713;1500;0;0;0;0;0;0;0 -3.8;8;9224;1.1758;522;1500;0;0;0;0;0;0;0 -3.9;8;9224;1.1758;382;1500;0;0;0;0;0;0;0 -4;8;9224;1.1758;280;1500;0;0;0;0;0;0;0 -4.1;8;9224;1.1758;190;1500;0;0;0;0;0;0;0 -4.2;8;9224;1.1758;129;1500;0;0;0;0;0;0;0 -4.3;8;9224;1.1758;87;1500;0;0;0;0;0;0;0 -4.4;8;9224;1.1758;59;1500;0;0;0;0;0;0;0 -4.5;8;9224;1.1758;40;1500;0;0;0;0;0;0;0 -4.6;8;9224;1.1758;20;1500;0;0;0;0;0;0;0 -4.7;8;9224;1.1758;10;1500;0;0;0;0;0;0;0 -4.8;8;9224;1.1758;5;1500;0;0;0;0;0;0;0 -4.9;8;9224;1.1758;2;1500;0;0;0;0;0;0;0 -5;8;9224;1.1758;1;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +-0.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +0.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +1.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.1;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.2;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.4;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.5;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.6;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.7;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.8;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +2.9;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +3;8;9224;1.1758;1500;1500;0;0;0;0;0;0;0 +3.1;8;9224;1.1758;1464;1500;0;0;0;0;0;0;0 +3.2;8;9224;1.1758;1429;1500;0;0;0;0;0;0;0 +3.3;8;9224;1.1758;1394;1500;0;0;0;0;0;0;0 +3.4;8;9224;1.1758;1361;1500;0;0;0;0;0;0;0 +3.5;8;9224;1.1758;1328;1500;0;0;0;0;0;0;0 +3.6;8;9224;1.1758;973;1500;0;0;0;0;0;0;0 +3.7;8;9224;1.1758;713;1500;0;0;0;0;0;0;0 +3.8;8;9224;1.1758;522;1500;0;0;0;0;0;0;0 +3.9;8;9224;1.1758;382;1500;0;0;0;0;0;0;0 +4;8;9224;1.1758;280;1500;0;0;0;0;0;0;0 +4.1;8;9224;1.1758;190;1500;0;0;0;0;0;0;0 +4.2;8;9224;1.1758;129;1500;0;0;0;0;0;0;0 +4.3;8;9224;1.1758;87;1500;0;0;0;0;0;0;0 +4.4;8;9224;1.1758;59;1500;0;0;0;0;0;0;0 +4.5;8;9224;1.1758;40;1500;0;0;0;0;0;0;0 +4.6;8;9224;1.1758;20;1500;0;0;0;0;0;0;0 +4.7;8;9224;1.1758;10;1500;0;0;0;0;0;0;0 +4.8;8;9224;1.1758;5;1500;0;0;0;0;0;0;0 +4.9;8;9224;1.1758;2;1500;0;0;0;0;0;0;0 +5;8;9224;1.1758;1;1500;0;0;0;0;0;0;0 diff --git a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs9_awgn_5G.csv b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs9_awgn_5G.csv index adfb19b6de..2ba438ea49 100644 --- a/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs9_awgn_5G.csv +++ b/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs9_awgn_5G.csv @@ -1,64 +1,64 @@ -SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err --1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 --0.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 --0.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 --0.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 --0.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 --0.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 --0.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 --0.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 --0.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 --0.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -0;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -0.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -0.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -0.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -0.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -0.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -0.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -0.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -0.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -0.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -1.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -1.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -1.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -1.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -1.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -1.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -1.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -1.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -1.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -2.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -2.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -2.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -2.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -2.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -2.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -2.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -2.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -2.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -3.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -3.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -3.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -3.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -3.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -3.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 -3.7;9;10504;1.3262;1499;1500;0;0;0;0;0;0;0 -3.8;9;10504;1.3262;1499;1500;0;0;0;0;0;0;0 -3.9;9;10504;1.3262;1499;1500;0;0;0;0;0;0;0 -4;9;10504;1.3262;1498;1500;0;0;0;0;0;0;0 -4.1;9;10504;1.3262;1339;1500;0;0;0;0;0;0;0 -4.2;9;10504;1.3262;1196;1500;0;0;0;0;0;0;0 -4.3;9;10504;1.3262;1068;1500;0;0;0;0;0;0;0 -4.4;9;10504;1.3262;955;1500;0;0;0;0;0;0;0 -4.5;9;10504;1.3262;853;1500;0;0;0;0;0;0;0 -4.6;9;10504;1.3262;552;1500;0;0;0;0;0;0;0 -4.7;9;10504;1.3262;357;1500;0;0;0;0;0;0;0 -4.8;9;10504;1.3262;231;1500;0;0;0;0;0;0;0 -4.9;9;10504;1.3262;149;1500;0;0;0;0;0;0;0 -5;9;10504;1.3262;96;1500;0;0;0;0;0;0;0 -5.1;9;10504;1.3262;0;1500;0;0;0;0;0;0;0 -5.2;9;10504;1.3262;0;1500;0;0;0;0;0;0;0 +SNR;MCS;TBS;rate;err0;trials0;err1;trials1;err2;trials2;err3;trials3;dci_err +-1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +-0.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +0.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +1.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.7;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.8;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +2.9;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.1;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.2;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.3;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.4;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.5;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.6;9;10504;1.3262;1500;1500;0;0;0;0;0;0;0 +3.7;9;10504;1.3262;1499;1500;0;0;0;0;0;0;0 +3.8;9;10504;1.3262;1499;1500;0;0;0;0;0;0;0 +3.9;9;10504;1.3262;1499;1500;0;0;0;0;0;0;0 +4;9;10504;1.3262;1498;1500;0;0;0;0;0;0;0 +4.1;9;10504;1.3262;1339;1500;0;0;0;0;0;0;0 +4.2;9;10504;1.3262;1196;1500;0;0;0;0;0;0;0 +4.3;9;10504;1.3262;1068;1500;0;0;0;0;0;0;0 +4.4;9;10504;1.3262;955;1500;0;0;0;0;0;0;0 +4.5;9;10504;1.3262;853;1500;0;0;0;0;0;0;0 +4.6;9;10504;1.3262;552;1500;0;0;0;0;0;0;0 +4.7;9;10504;1.3262;357;1500;0;0;0;0;0;0;0 +4.8;9;10504;1.3262;231;1500;0;0;0;0;0;0;0 +4.9;9;10504;1.3262;149;1500;0;0;0;0;0;0;0 +5;9;10504;1.3262;96;1500;0;0;0;0;0;0;0 +5.1;9;10504;1.3262;0;1500;0;0;0;0;0;0;0 +5.2;9;10504;1.3262;0;1500;0;0;0;0;0;0;0 From fb3e3ea6e533b43592638b396de543a532df78d5 Mon Sep 17 00:00:00 2001 From: Melissa Date: Tue, 8 Feb 2022 23:43:02 +0000 Subject: [PATCH 008/150] Merge branch 'episys/david/adding_NR_to_NUM_MCS' into 'episys/master-nsa' Added NR to NUM_MCS for nr channel modeling. See merge request aburger/openairinterface5g!109 --- executables/nr-uesoftmodem.c | 4 ++-- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 8 ++++---- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index 8fec3b3ad1..7b10f4fade 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -158,7 +158,7 @@ uint32_t N_RB_DL = 106; */ uint8_t abstraction_flag = 0; -nr_bler_struct nr_bler_data[NUM_MCS]; +nr_bler_struct nr_bler_data[NR_NUM_MCS]; static void init_bler_table(void); @@ -561,7 +561,7 @@ static void init_bler_table(void) abort(); } - for (unsigned int i = 0; i < NUM_MCS; i++) + for (unsigned int i = 0; i < NR_NUM_MCS; i++) { char fName[1024]; snprintf(fName, sizeof(fName), "%s/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs%d_awgn_5G.csv", openair_dir, i); diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index cfb24d5654..71345c6d9f 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -1404,13 +1404,13 @@ static int get_mcs_from_sinr(float sinr) return 0; } - if (sinr > (nr_bler_data[NUM_MCS-1].bler_table[nr_bler_data[NUM_MCS-1].length - 1][0])) + if (sinr > (nr_bler_data[NR_NUM_MCS-1].bler_table[nr_bler_data[NR_NUM_MCS-1].length - 1][0])) { LOG_I(NR_MAC, "The SINR found is larger than last MCS table\n"); - return NUM_MCS-1; + return NR_NUM_MCS-1; } - for (int n = NUM_MCS-1; n >= 0; n--) + for (int n = NR_NUM_MCS-1; n >= 0; n--) { CHECK_INDEX(nr_bler_data, n); float largest_sinr = (nr_bler_data[n].bler_table[nr_bler_data[n].length - 1][0]); @@ -1429,7 +1429,7 @@ static int get_cqi_from_mcs(void) { static const int mcs_to_cqi[] = {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15}; - assert(NUM_ELEMENTS(mcs_to_cqi) == NUM_MCS); + assert(NUM_ELEMENTS(mcs_to_cqi) == NR_NUM_MCS); int slot = 0; while (slot < NUM_NFAPI_SLOT) { diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index d3b12abc2b..499346f394 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -41,7 +41,7 @@ #include "nfapi_nr_interface_scf.h" #include "openair2/NR_PHY_INTERFACE/NR_IF_Module.h" -#define NUM_MCS 29 +#define NR_NUM_MCS 29 #define NUM_SINR 100 #define NUM_BLER_COL 13 #define NUM_NFAPI_SLOT 20 @@ -74,7 +74,7 @@ typedef struct float bler_table[NUM_SINR][NUM_BLER_COL]; } nr_bler_struct; -extern nr_bler_struct nr_bler_data[NUM_MCS]; +extern nr_bler_struct nr_bler_data[NR_NUM_MCS]; typedef enum { ONLY_PUSCH, From a8a04c729352b58d53e0d80c55398d8041f2cc02 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 8 Feb 2022 16:55:25 -0800 Subject: [PATCH 009/150] Accidentally ommited SISO channel modeling change We should be setting the queued UCI indication slot based on the SCHEDULED slot, not the current slot. --- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 799b759292..2eb1da9101 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -288,7 +288,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response nfapi_nr_uci_indication_t *uci_ind = CALLOC(1, sizeof(*uci_ind)); uci_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION; uci_ind->sfn = scheduled_response->frame; - uci_ind->slot = scheduled_response->slot; + uci_ind->slot = NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot); uci_ind->num_ucis = 1; uci_ind->uci_list = CALLOC(uci_ind->num_ucis, sizeof(*uci_ind->uci_list)); for (int j = 0; j < uci_ind->num_ucis; j++) From a1dee602fef316d841b9703da19e467d8dd1d5a4 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 8 Feb 2022 17:11:59 -0800 Subject: [PATCH 010/150] Duplicated packing and unpacking fixed in this commit This now matches the develop branch as well. --- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index d103200787..adc6d6e384 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -5906,25 +5906,9 @@ static uint8_t unpack_nr_uci_pucch_0_1(nfapi_nr_uci_pucch_pdu_format_0_1_t *valu return 1; } -static uint8_t unpack_nr_uci_pucch_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value, - uint8_t **ppReadPackedMsg, - uint8_t *end, - nfapi_p7_codec_config_t *config) { - if (!pull8(ppReadPackedMsg, &value->pduBitmap, end)) - return 0; - if (!pull32(ppReadPackedMsg, &value->handle, end)) - return 0; - if (!pull16(ppReadPackedMsg, &value->rnti, end)) - return 0; - if (!pull8(ppReadPackedMsg, &value->pucch_format, end)) - return 0; - if (!pull8(ppReadPackedMsg, &value->ul_cqi, end)) - return 0; - if (!pull16(ppReadPackedMsg, &value->timing_advance, end)) - return 0; - if (!pull16(ppReadPackedMsg, &value->rssi, end)) - return 0; +static uint8_t unpack_nr_uci_pucch_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t* tlv, uint8_t **ppReadPackedMsg, uint8_t *end) { + nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value = (nfapi_nr_uci_pucch_pdu_format_2_3_4_t*) tlv; if(!(pull8(ppReadPackedMsg, &value->pduBitmap, end) && pull32(ppReadPackedMsg, &value->handle, end) && @@ -6004,7 +5988,7 @@ static uint8_t unpack_nr_uci_indication_body(nfapi_nr_uci_t *value, } case NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE: { nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_pdu = &value->pucch_pdu_format_2_3_4; - if (!unpack_nr_uci_pucch_2_3_4(uci_pdu, ppReadPackedMsg, end, config)) + if (!unpack_nr_uci_pucch_2_3_4(uci_pdu, ppReadPackedMsg, end)) return 0; break; } From f336cbc645b49d72be8eec5a05890f4624a3c532 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Wed, 9 Feb 2022 07:30:04 -0800 Subject: [PATCH 011/150] Fixing pull/push array 32 and cleaning nFAPI code Several of these changes were made previously and lost in the merge. --- nfapi/open-nFAPI/nfapi/inc/nfapi.h | 12 +- nfapi/open-nFAPI/nfapi/src/nfapi.c | 46 ++-- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 314 +++++++++++++++++--------- 3 files changed, 242 insertions(+), 130 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/inc/nfapi.h b/nfapi/open-nFAPI/nfapi/inc/nfapi.h index 0f09efa78a..c1f423a8db 100644 --- a/nfapi/open-nFAPI/nfapi/inc/nfapi.h +++ b/nfapi/open-nFAPI/nfapi/inc/nfapi.h @@ -44,13 +44,21 @@ uint8_t pulls32(uint8_t **in, int32_t *out, uint8_t *end); uint32_t pullarray8(uint8_t **in, uint8_t out[], uint32_t max_len, uint32_t len, uint8_t *end); uint32_t pullarray16(uint8_t **in, uint16_t out[], uint32_t max_len, uint32_t len, uint8_t *end); uint32_t pullarrays16(uint8_t **in, int16_t out[], uint32_t max_len, uint32_t len, uint8_t *end); -uint32_t pullarray32(uint8_t **in, uint32_t out[], uint32_t max_len, uint32_t len, uint8_t *end); +uint32_t pullarray32(uint8_t **values_to_pull, + uint32_t out[], + uint32_t max_num_values_to_pull, + uint32_t num_values_to_pull, + uint8_t *out_end); uint32_t pullarrays32(uint8_t **in, int32_t out[], uint32_t max_len, uint32_t len, uint8_t *end); uint32_t pusharray8(uint8_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end); uint32_t pusharray16(uint16_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end); uint32_t pusharrays16(int16_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end); -uint32_t pusharray32(uint32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end); +uint32_t pusharray32(const uint32_t *values_to_push, + uint32_t max_num_values_to_push, + uint32_t num_values_to_push, + uint8_t **out, + uint8_t *out_end); uint32_t pusharrays32(int32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end); typedef uint8_t (*pack_array_elem_fn)(void* elem, uint8_t **ppWritePackedMsg, uint8_t *end); diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi.c b/nfapi/open-nFAPI/nfapi/src/nfapi.c index 2783781e2c..5b43cb1246 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi.c @@ -307,7 +307,8 @@ uint32_t pusharrays16(int16_t in[], uint32_t max_len, uint32_t len, uint8_t **ou uint32_t idx; for(idx = 0; idx < len; ++idx) { - pushs16(in[idx], out, end); + if (!pushs16(in[idx], out, end)) + return 0; } return sizeof(uint16_t) * len; @@ -316,24 +317,28 @@ uint32_t pusharrays16(int16_t in[], uint32_t max_len, uint32_t len, uint8_t **ou return 0; } } -uint32_t pullarray32(uint8_t **in, uint32_t out[], uint32_t max_len, uint32_t len, uint8_t *end) { - if(len == 0) +uint32_t pullarray32(uint8_t **values_to_pull, + uint32_t out[], + uint32_t max_num_values_to_pull, + uint32_t num_values_to_pull, + uint8_t *out_end) { + if(num_values_to_pull == 0) return 1; - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + if(num_values_to_pull > max_num_values_to_pull) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, num_values_to_pull, max_num_values_to_pull); return 0; } - if((end - (*in)) >= sizeof(uint32_t) * len) { + if((out_end - (*values_to_pull)) >= sizeof(uint32_t) * num_values_to_pull) { uint32_t idx; - for(idx = 0; idx < len; ++idx) { - if(!pull32(in, &out[idx], end)) + for(idx = 0; idx < num_values_to_pull; ++idx) { + if(!pull32(values_to_pull, &out[idx], out_end)) return 0; } - return sizeof(uint32_t) * len; + return sizeof(uint32_t) * num_values_to_pull; } else { NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); return 0; @@ -363,24 +368,28 @@ uint32_t pullarrays32(uint8_t **in, int32_t out[], uint32_t max_len, uint32_t le return 0; } } -uint32_t pusharray32(uint32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end) { - if(len == 0) +uint32_t pusharray32(const uint32_t *values_to_push, + uint32_t max_num_values_to_push, + uint32_t num_values_to_push, + uint8_t **out, + uint8_t *out_end) { + if(num_values_to_push == 0) return 1; - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + if(num_values_to_push > max_num_values_to_push) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, num_values_to_push, max_num_values_to_push); return 0; } - if((end - (*out)) >= sizeof(uint32_t) * len) { + if((out_end - (*out)) >= sizeof(uint32_t) * num_values_to_push) { uint32_t idx; - for(idx = 0; idx < len; ++idx) { - if(!push32(in[idx], out, end)) + for(idx = 0; idx < num_values_to_push; ++idx) { + if(!push32(values_to_push[idx], out, out_end)) return 0; } - return sizeof(uint32_t) * len; + return sizeof(uint32_t) * num_values_to_push; } else { NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); return 0; @@ -399,7 +408,8 @@ uint32_t pusharrays32(int32_t in[], uint32_t max_len, uint32_t len, uint8_t **ou uint32_t idx; for(idx = 0; idx < len; ++idx) { - pushs32(in[idx], out, end); + if (!pushs32(in[idx], out, end)) + return 0; } return sizeof(uint32_t) * len; diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index adc6d6e384..1cc062b68f 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -1893,15 +1893,23 @@ static uint8_t pack_tx_data_pdu_list_value(void *tlv, uint8_t **ppWritePackedMsg switch(value->TLVs[i].tag) { case 0: { - if(!pusharray32(value->TLVs[i].value.direct, 16384, value->TLVs[i].length, ppWritePackedMsg, end)) + if (!pusharray32(value->TLVs[i].value.direct, sizeof(value->TLVs[i].value.direct) / sizeof(uint32_t), + value->TLVs[i].length / sizeof(uint32_t), ppWritePackedMsg, end)) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s():%d. value->TLVs[i].length %d \n", + __FUNCTION__, __LINE__, value->TLVs[i].length); return 0; + } break; } case 1: { - if(!pusharray32(value->TLVs[i].value.ptr, value->TLVs[i].length, value->TLVs[i].length, ppWritePackedMsg, end)) + if (!pusharray32(value->TLVs[i].value.ptr, value->TLVs[i].length / sizeof(uint32_t), + value->TLVs[i].length / sizeof(uint32_t), ppWritePackedMsg, end)) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s():%d. value->TLVs[i].length %d \n", + __FUNCTION__, __LINE__, value->TLVs[i].length); return 0; + } break; } @@ -3181,32 +3189,36 @@ return 1; static uint8_t pack_nr_uci_pucch_0_1(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end) { nfapi_nr_uci_pucch_pdu_format_0_1_t* value = (nfapi_nr_uci_pucch_pdu_format_0_1_t*)tlv; - if(!(push8(value->pduBitmap, ppWritePackedMsg, end) && - push32(value->handle, ppWritePackedMsg, end) && - push16(value->rnti, ppWritePackedMsg, end) && - push8(value->pucch_format, ppWritePackedMsg, end) && - push8(value->ul_cqi, ppWritePackedMsg, end) && - push16(value->timing_advance, ppWritePackedMsg, end) && - push16(value->rssi, ppWritePackedMsg, end) - )) - return 0; + if (!push8(value->pduBitmap, ppWritePackedMsg, end)) + return 0; + if (!push32(value->handle, ppWritePackedMsg, end)) + return 0; + if (!push16(value->rnti, ppWritePackedMsg, end)) + return 0; + if (!push8(value->pucch_format, ppWritePackedMsg, end)) + return 0; + if (!push8(value->ul_cqi, ppWritePackedMsg, end)) + return 0; + if (!push16(value->timing_advance, ppWritePackedMsg, end)) + return 0; + if (!push16(value->rssi, ppWritePackedMsg, end)) + return 0; if (value->pduBitmap & 0x01) { //SR - if (!(push8(value->sr->sr_indication, ppWritePackedMsg, end) && - push8(value->sr->sr_confidence_level, ppWritePackedMsg, end) - )) - return 0; + if (!push8(value->sr->sr_indication, ppWritePackedMsg, end)) + return 0; + if (!push8(value->sr->sr_confidence_level, ppWritePackedMsg, end)) + return 0; } if (((value->pduBitmap >> 1) & 0x01)) { //HARQ - if (!(push8(value->harq->num_harq, ppWritePackedMsg, end) && - push8(value->harq->harq_confidence_level, ppWritePackedMsg, end) - )) + if (!push8(value->harq->num_harq, ppWritePackedMsg, end)) + return 0; + if (!push8(value->harq->harq_confidence_level, ppWritePackedMsg, end)) return 0; for (int i = 0; i < value->harq->num_harq; i++) { - if (!(push8(value->harq->harq_list[i].harq_value, ppWritePackedMsg, end) - )) - return 0; + if (!push8(value->harq->harq_list[i].harq_value, ppWritePackedMsg, end)) + return 0; } } @@ -3216,60 +3228,83 @@ static uint8_t pack_nr_uci_pucch_0_1(void* tlv, uint8_t **ppWritePackedMsg, uint static uint8_t pack_nr_uci_pucch_2_3_4(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end) { nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value = (nfapi_nr_uci_pucch_pdu_format_2_3_4_t*) tlv; - if(!(push8(value->pduBitmap, ppWritePackedMsg, end) && - push32(value->handle, ppWritePackedMsg, end) && - push16(value->rnti, ppWritePackedMsg, end) && - push8(value->pucch_format, ppWritePackedMsg, end) && - push8(value->ul_cqi, ppWritePackedMsg, end) && - push16(value->timing_advance, ppWritePackedMsg, end) && - push16(value->rssi, ppWritePackedMsg, end) - )) - return 0; + if (!push8(value->pduBitmap, ppWritePackedMsg, end)) + return 0; + if (!push32(value->handle, ppWritePackedMsg, end)) + return 0; + if (!push16(value->rnti, ppWritePackedMsg, end)) + return 0; + if (!push8(value->pucch_format, ppWritePackedMsg, end)) + return 0; + if (!push8(value->ul_cqi, ppWritePackedMsg, end)) + return 0; + if (!push16(value->timing_advance, ppWritePackedMsg, end)) + return 0; + if (!push16(value->rssi, ppWritePackedMsg, end)) + return 0; if (value->pduBitmap & 0x01) { //SR - if(!(push8(value->sr.sr_bit_len, ppWritePackedMsg, end) && - pusharray8(value->sr.sr_payload, (int)(value->sr.sr_bit_len / 8) + 1, (int)(value->sr.sr_bit_len / 8) + 1, ppWritePackedMsg, end) - )) - return 0; - } - - if (((value->pduBitmap >> 1) & 0x01)) { //HARQ - if(!(push8(value->harq.harq_crc, ppWritePackedMsg, end) && - push8(value->harq.harq_bit_len, ppWritePackedMsg, end) && - pusharray8(value->harq.harq_payload, (int)(value->harq.harq_bit_len / 8) + 1, (int)(value->harq.harq_bit_len / 8) + 1, ppWritePackedMsg, end) - )) + if (!push16(value->sr.sr_bit_len, ppWritePackedMsg, end)) + return 0; + if (!pusharray8(value->sr.sr_payload, + (int)((value->sr.sr_bit_len / 8) + 1), + (int)((value->sr.sr_bit_len / 8) + 1), + ppWritePackedMsg, + end)) return 0; } - if (((value->pduBitmap >> 2) & 0x01)) { //CSI-1 - if(!(push8(value->csi_part1.csi_part1_crc, ppWritePackedMsg, end) && - push8(value->csi_part1.csi_part1_bit_len, ppWritePackedMsg, end) && - pusharray8(value->csi_part1.csi_part1_payload, (int)(value->csi_part1.csi_part1_bit_len / 8) + 1, (int)(value->csi_part1.csi_part1_bit_len / 8) + 1, ppWritePackedMsg, end) - )) + if ((value->pduBitmap >> 1) & 0x01) { //HARQ + if (!push8(value->harq.harq_crc, ppWritePackedMsg, end)) + return 0; + if (!push16(value->harq.harq_bit_len, ppWritePackedMsg, end)) + return 0; + if (!pusharray8(value->harq.harq_payload, + (int)((value->harq.harq_bit_len / 8) + 1), + (int)((value->harq.harq_bit_len / 8) + 1), + ppWritePackedMsg, + end)) return 0; } - if (((value->pduBitmap >> 3) & 0x01)) { //CSI-2 - if(!(push8(value->csi_part2.csi_part2_crc, ppWritePackedMsg, end) && - push8(value->csi_part2.csi_part2_bit_len, ppWritePackedMsg, end) && - pusharray8(value->csi_part2.csi_part2_payload, (int)(value->csi_part2.csi_part2_bit_len / 8) + 1, (int)(value->csi_part2.csi_part2_bit_len / 8) + 1, ppWritePackedMsg, end) - )) + if ((value->pduBitmap >> 2) & 0x01) { //CSI-1 + if (!push8(value->csi_part1.csi_part1_crc, ppWritePackedMsg, end)) + return 0; + if (!push16(value->csi_part1.csi_part1_bit_len, ppWritePackedMsg, end)) + return 0; + if (!pusharray8(value->csi_part1.csi_part1_payload, + (int)((value->csi_part1.csi_part1_bit_len / 8) + 1), + (int)((value->csi_part1.csi_part1_bit_len / 8) + 1), + ppWritePackedMsg, + end)) + return 0; + } + + if ((value->pduBitmap >> 3) & 0x01) { //CSI-2 + if (!push8(value->csi_part2.csi_part2_crc, ppWritePackedMsg, end)) + return 0; + if (!push16(value->csi_part2.csi_part2_bit_len, ppWritePackedMsg, end)) + return 0; + if (!pusharray8(value->csi_part2.csi_part2_payload, + (int)((value->csi_part2.csi_part2_bit_len / 8) + 1), + (int)((value->csi_part2.csi_part2_bit_len / 8) + 1), + ppWritePackedMsg, + end)) return 0; } return 1; } -static uint8_t pack_nr_uci_indication_body(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end) +static uint8_t pack_nr_uci_indication_body(nfapi_nr_uci_t* value, uint8_t **ppWritePackedMsg, uint8_t *end) { - nfapi_nr_uci_t* value = (nfapi_nr_uci_t*)tlv; - - if(!(push16(value->pdu_type, ppWritePackedMsg, end) && - push16(value->pdu_size, ppWritePackedMsg, end) - )) + if (!push16(value->pdu_type, ppWritePackedMsg, end)) + return 0; + if (!push16(value->pdu_size, ppWritePackedMsg, end)) return 0; switch (value->pdu_type) { + NFAPI_TRACE(NFAPI_TRACE_INFO, " NFAPI_NR_UCI_PUSCH_PDU_TYPE = %d \n", value->pdu_type); case NFAPI_NR_UCI_PUSCH_PDU_TYPE: NFAPI_TRACE(NFAPI_TRACE_WARN, "Unhandled NFAPI_NR_UCI_PUSCH_PDU_TYPE \n"); break; @@ -3290,13 +3325,14 @@ static uint8_t pack_nr_uci_indication(void *msg, uint8_t **ppWritePackedMsg, uin { nfapi_nr_uci_indication_t *pNfapiMsg = (nfapi_nr_uci_indication_t*)msg; - if (!(push16(pNfapiMsg->sfn , ppWritePackedMsg, end) && - push16(pNfapiMsg->slot , ppWritePackedMsg, end) && - push16(pNfapiMsg->num_ucis, ppWritePackedMsg, end) - )) + if (!push16(pNfapiMsg->sfn , ppWritePackedMsg, end)) + return 0; + if (!push16(pNfapiMsg->slot , ppWritePackedMsg, end)) + return 0; + if (!push16(pNfapiMsg->num_ucis, ppWritePackedMsg, end)) return 0; - for(int i=0; inum_ucis;i++) + for (int i = 0; i < pNfapiMsg->num_ucis; i++) { if (!pack_nr_uci_indication_body(&pNfapiMsg->uci_list[i], ppWritePackedMsg, end)) return 0; @@ -5510,14 +5546,18 @@ static uint8_t unpack_tx_data_pdu_list_value(uint8_t **ppReadPackedMsg, uint8_t switch(pNfapiMsg->TLVs[i].tag) { case 0: { - if(!pullarray32(ppReadPackedMsg, pNfapiMsg->TLVs[i].value.direct, 16384, pNfapiMsg->TLVs[i].length, end)) + if (!pullarray32(ppReadPackedMsg, pNfapiMsg->TLVs[i].value.direct, + sizeof(pNfapiMsg->TLVs[i].value.direct) / sizeof(uint32_t), + pNfapiMsg->TLVs[i].length / sizeof(uint32_t), end)) return 0; break; } case 1: { - if(!pullarray32(ppReadPackedMsg, pNfapiMsg->TLVs[i].value.ptr, pNfapiMsg->TLVs[i].length, pNfapiMsg->TLVs[i].length, end)) + if (!pullarray32(ppReadPackedMsg,pNfapiMsg->TLVs[i].value.ptr, + pNfapiMsg->TLVs[i].length / sizeof(uint32_t), + pNfapiMsg->TLVs[i].length / sizeof(uint32_t), end)) return 0; break; @@ -5907,58 +5947,111 @@ static uint8_t unpack_nr_uci_pucch_0_1(nfapi_nr_uci_pucch_pdu_format_0_1_t *valu } -static uint8_t unpack_nr_uci_pucch_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t* tlv, uint8_t **ppReadPackedMsg, uint8_t *end) { - nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value = (nfapi_nr_uci_pucch_pdu_format_2_3_4_t*) tlv; +static uint8_t unpack_nr_uci_pucch_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value, + uint8_t **ppReadPackedMsg, + uint8_t *end, + nfapi_p7_codec_config_t *config) { + + if (!pull8(ppReadPackedMsg, &value->pduBitmap, end)) + return 0; + if (!pull32(ppReadPackedMsg, &value->handle, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->rnti, end)) + return 0; + if (!pull8(ppReadPackedMsg, &value->pucch_format, end)) + return 0; + if (!pull8(ppReadPackedMsg, &value->ul_cqi, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->timing_advance, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->rssi, end)) + return 0; - if(!(pull8(ppReadPackedMsg, &value->pduBitmap, end) && - pull32(ppReadPackedMsg, &value->handle, end) && - pull16(ppReadPackedMsg, &value->rnti, end) && - pull8(ppReadPackedMsg, &value->pucch_format, end) && - pull8(ppReadPackedMsg, &value->ul_cqi, end) && - pull16(ppReadPackedMsg, &value->timing_advance, end) && - pull16(ppReadPackedMsg, &value->rssi, end) - )) - return 0; if (value->pduBitmap & 0x01) { //SR - if(!(pull16(ppReadPackedMsg, &value->sr.sr_bit_len, end))) + if (!pull16(ppReadPackedMsg, &value->sr.sr_bit_len, end)) return 0; - value->sr.sr_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->sr.sr_bit_len/8))); - - if(!(pullarray8(ppReadPackedMsg, &value->sr.sr_payload[0], (int)(value->sr.sr_bit_len / 8), (int)(value->sr.sr_bit_len / 8), end))) - return 0; - } - - if (((value->pduBitmap >> 1) & 0x01)) { //HARQ - if(!(pull8(ppReadPackedMsg, &value->harq.harq_crc, end)) && - (pull16(ppReadPackedMsg, &value->harq.harq_bit_len, end))) + value->sr.sr_payload = nfapi_p7_allocate(sizeof(*value->sr.sr_payload) * + (int)((value->sr.sr_bit_len / 8) + 1), + config); + if (value->sr.sr_payload == NULL) + { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->sr.sr_payload\n", __FUNCTION__); return 0; + } - value->harq.harq_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->harq.harq_bit_len/8 ))); - - if(!(pullarray8(ppReadPackedMsg, value->harq.harq_payload, (int)(value->harq.harq_bit_len / 8), (int)(value->harq.harq_bit_len / 8), end))) + if (!pullarray8(ppReadPackedMsg, value->sr.sr_payload, + (int)((value->sr.sr_bit_len / 8) + 1), + (int)((value->sr.sr_bit_len / 8) + 1), + end)) return 0; } - if (((value->pduBitmap >> 2) & 0x01)) { //CSI-1 - if(!(pull8(ppReadPackedMsg, &value->csi_part1.csi_part1_crc, end)) && - (pull16(ppReadPackedMsg, &value->csi_part1.csi_part1_bit_len, end))) + if ((value->pduBitmap >> 1) & 0x01) { //HARQ + if (!pull8(ppReadPackedMsg, &value->harq.harq_crc, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->harq.harq_bit_len, end)) return 0; - value->csi_part1.csi_part1_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->csi_part1.csi_part1_bit_len/8))); + value->harq.harq_payload = nfapi_p7_allocate(sizeof(*value->harq.harq_payload) * + (int)((value->harq.harq_bit_len / 8) + 1), + config); + if (value->harq.harq_payload == NULL) + { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->harq.harq_payload\n", __FUNCTION__); + return 0; + } -// if(!(pullarray8(ppReadPackedMsg, value->csi_part1.csi_part1_payload, (int)(value->csi_part1.csi_part1_bit_len / 8), (int)(value->csi_part1.csi_part1_bit_len / 8), end))) -// return 0; + if (!pullarray8(ppReadPackedMsg, value->harq.harq_payload, + (int)((value->harq.harq_bit_len / 8) + 1), + (int)((value->harq.harq_bit_len / 8) + 1), + end)) + return 0; } - if (((value->pduBitmap >> 3) & 0x01)) { //CSI-2 - if(!(pull8(ppReadPackedMsg, &value->csi_part2.csi_part2_crc, end)) && - (pull16(ppReadPackedMsg, &value->csi_part2.csi_part2_bit_len, end))) + if ((value->pduBitmap >> 2) & 0x01) { //CSI-1 + if (!pull8(ppReadPackedMsg, &value->csi_part1.csi_part1_crc, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->csi_part1.csi_part1_bit_len, end)) return 0; - value->csi_part2.csi_part2_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->csi_part2.csi_part2_bit_len/8 ))); + value->csi_part1.csi_part1_payload = nfapi_p7_allocate(sizeof(*value->csi_part1.csi_part1_payload) * + (int)((value->csi_part1.csi_part1_bit_len / 8) + 1), + config); + if (value->csi_part1.csi_part1_payload == NULL) + { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->csi_part1.csi_part1_payload\n", + __FUNCTION__); + return 0; + } - if(!(pullarray8(ppReadPackedMsg, value->csi_part2.csi_part2_payload, (int)(value->csi_part2.csi_part2_bit_len / 8) , (int)(value->csi_part2.csi_part2_bit_len / 8) , end))) + if (!pullarray8(ppReadPackedMsg, value->csi_part1.csi_part1_payload, + (int)((value->csi_part1.csi_part1_bit_len / 8) + 1), + (int)((value->csi_part1.csi_part1_bit_len / 8) + 1), + end)) + return 0; + } + + if ((value->pduBitmap >> 3) & 0x01) { //CSI-2 + if (!pull8(ppReadPackedMsg, &value->csi_part2.csi_part2_crc, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->csi_part2.csi_part2_bit_len, end)) + return 0; + + value->csi_part2.csi_part2_payload = nfapi_p7_allocate(sizeof(*value->csi_part2.csi_part2_payload) * + (int)((value->csi_part2.csi_part2_bit_len / 8) + 1), + config); + if (value->csi_part2.csi_part2_payload == NULL) + { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->csi_part2.csi_part2_payload\n", + __FUNCTION__); + return 0; + } + + if (!pullarray8(ppReadPackedMsg, value->csi_part2.csi_part2_payload, + (int)((value->csi_part2.csi_part2_bit_len / 8) + 1), + (int)((value->csi_part2.csi_part2_bit_len / 8) + 1), + end)) return 0; } @@ -5970,9 +6063,9 @@ static uint8_t unpack_nr_uci_indication_body(nfapi_nr_uci_t *value, uint8_t *end, nfapi_p7_codec_config_t *config) { - if(!(pull16(ppReadPackedMsg, &value->pdu_type, end) && - pull16(ppReadPackedMsg, &value->pdu_size, end) - )) + if (!pull16(ppReadPackedMsg, &value->pdu_type, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->pdu_size, end)) return 0; switch (value->pdu_type) { @@ -5988,7 +6081,7 @@ static uint8_t unpack_nr_uci_indication_body(nfapi_nr_uci_t *value, } case NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE: { nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_pdu = &value->pucch_pdu_format_2_3_4; - if (!unpack_nr_uci_pucch_2_3_4(uci_pdu, ppReadPackedMsg, end)) + if (!unpack_nr_uci_pucch_2_3_4(uci_pdu, ppReadPackedMsg, end, config)) return 0; break; } @@ -6004,17 +6097,18 @@ static uint8_t unpack_nr_uci_indication(uint8_t **ppReadPackedMsg, uint8_t *end, { nfapi_nr_uci_indication_t *pNfapiMsg = (nfapi_nr_uci_indication_t*)msg; - if (!(pull16(ppReadPackedMsg, &pNfapiMsg->sfn , end) && - pull16(ppReadPackedMsg, &pNfapiMsg->slot , end) && - pull16(ppReadPackedMsg, &pNfapiMsg->num_ucis, end) - )) - return 0; + if (!pull16(ppReadPackedMsg, &pNfapiMsg->sfn , end)) + return 0; + if (!pull16(ppReadPackedMsg, &pNfapiMsg->slot , end)) + return 0; + if (!pull16(ppReadPackedMsg, &pNfapiMsg->num_ucis, end)) + return 0; pNfapiMsg->uci_list = nfapi_p7_allocate(sizeof(*pNfapiMsg->uci_list) * pNfapiMsg->num_ucis, config); for (int i = 0; i < pNfapiMsg->num_ucis; i++) { - if(!unpack_nr_uci_indication_body(&pNfapiMsg->uci_list[i], ppReadPackedMsg, end, config)) - return 0; + if (!unpack_nr_uci_indication_body(&pNfapiMsg->uci_list[i], ppReadPackedMsg, end, config)) + return 0; } return 1; From 60a9d41bc6b2b0c4c8717b8660d67dabacbd3487 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Wed, 9 Feb 2022 07:59:10 -0800 Subject: [PATCH 012/150] UCI ACK/NACK most of the way working We have gotten rid of filling the ACK/NACK with the DLSCH and now only fill with the PUCCH. This assumes that the MAC layer is properly decoding the dl_tti_req and tx_data_req and allows us to simply use the MAC layers scheduled SNF/Slot to return the ACK NACK. There are some hacks added in this commit which ensure that the PDCP packet has the correct header (1st byte = 80) and now with 15Mbps we are seeing about 20% packet loss and a gNB bug on the edge case (current frame is 1023 and the gNB schduler wants an ACK in frame 0 but the scheduled UL_TTI_REQ has a frame of 1023). --- executables/nr-ue.c | 39 ++-- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 180 +++++------------- openair2/LAYER2/NR_MAC_COMMON/nr_mac.h | 14 +- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 95 +++++++-- .../LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 3 + openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 167 ++++++---------- 6 files changed, 209 insertions(+), 289 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 86dc32674b..3370aa2fc2 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -32,6 +32,7 @@ #include "LAYER2/nr_pdcp/nr_pdcp_entity.h" #include "SCHED_NR_UE/pucch_uci_ue_nr.h" #include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h" +#include /* * NR SLOT PROCESSING SEQUENCE @@ -199,31 +200,16 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot) nfapi_nr_rach_indication_t *rach_ind = unqueue_matching(&nr_rach_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot); nfapi_nr_dl_tti_request_t *dl_tti_request = get_queue(&nr_dl_tti_req_queue); nfapi_nr_ul_dci_request_t *ul_dci_request = get_queue(&nr_ul_dci_req_queue); - LOG_D(NR_MAC, "Try to get a ul_tti_req for HARQ sfn/slot %d %d from queue with %lu items\n", - NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_harq_sfn_slot), - NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot), nr_ul_tti_req_queue.num_items); - nfapi_nr_ul_tti_request_t *ul_tti_request_harq = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.active_harq_sfn_slot); - if (ul_tti_request_harq && ul_tti_request_harq->n_pdus > 0) - { - check_and_process_dci(NULL, NULL, NULL, ul_tti_request_harq); - } - LOG_D(NR_MAC, "Try to get a ul_tti_req by matching CSI active SFN %d/SLOT %d from queue with %lu items\n", - NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_uci_sfn_slot), - NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_uci_sfn_slot), nr_ul_tti_req_queue.num_items); - nfapi_nr_ul_tti_request_t *ul_tti_request_uci = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.active_uci_sfn_slot); - if (ul_tti_request_uci && ul_tti_request_uci->n_pdus > 0) - { - check_and_process_dci(NULL, NULL, NULL, ul_tti_request_uci); - } - - LOG_D(NR_MAC, "Try to get a ul_tti_req by matching CRC active SFN %d/SLOT %d from queue with %lu items\n", - NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.crc_rx_ind_sfn_slot), - NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.crc_rx_ind_sfn_slot), nr_ul_tti_req_queue.num_items); - nfapi_nr_ul_tti_request_t *ul_tti_request_crc = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.crc_rx_ind_sfn_slot); - if (ul_tti_request_crc && ul_tti_request_crc->n_pdus > 0) - { - check_and_process_dci(NULL, NULL, NULL, ul_tti_request_crc); + for (int i = 0; i < 16; i++) { + LOG_D(NR_MAC, "Try to get a ul_tti_req by matching CRC active SFN %d/SLOT %d from queue with %lu items\n", + NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.harq[i].crc_rx_ind_sfn_slot), + NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.harq[i].crc_rx_ind_sfn_slot), nr_ul_tti_req_queue.num_items); + nfapi_nr_ul_tti_request_t *ul_tti_request_crc = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.harq[i].crc_rx_ind_sfn_slot); + if (ul_tti_request_crc && ul_tti_request_crc->n_pdus > 0) + { + check_and_process_dci(NULL, NULL, NULL, ul_tti_request_crc); + } } if (rach_ind && rach_ind->number_of_pdus > 0) @@ -389,6 +375,8 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) ul_info.slot_tx = (slot + slot_ahead) % slots_per_frame; ul_info.frame_tx = (ul_info.slot_rx + slot_ahead >= slots_per_frame) ? ul_info.frame_rx + 1 : ul_info.frame_rx; ul_info.ue_sched_mode = SCHED_ALL; + LOG_I(NR_MAC, "frame_rx %d, slot rx %d, frame tx %d, slot tx %d, slot_ahead %d\n", + ul_info.frame_rx, ul_info.slot_rx, ul_info.frame_tx, ul_info.slot_tx, slot_ahead); if (pthread_mutex_lock(&mac->mutex_dl_info)) abort(); @@ -417,8 +405,9 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) mac->scc_SIB->tdd_UL_DL_ConfigurationCommon, ul_info.slot_tx, mac->frame_type)) { - LOG_D(NR_MAC, "Slot %d. calling nr_ue_ul_ind() from %s\n", ul_info.slot_tx, __FUNCTION__); + LOG_I(NR_MAC, "Slot %d. calling nr_ue_ul_ind() and nr_ue_pucch_scheduler from %s\n", ul_info.slot_tx, __FUNCTION__); nr_ue_ul_indication(&ul_info); + nr_ue_pucch_scheduler(0, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id); check_nr_prach(mac, &ul_info, &prach_resources); } if (!IS_SOFTMODEM_NOS1 && get_softmodem_params()->sa) { diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 2eb1da9101..4583e4f193 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -36,10 +36,11 @@ #include "fapi_nr_ue_l1.h" #include "harq_nr.h" //#include "PHY/phy_vars_nr_ue.h" -#include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h" + #include "PHY/defs_nr_UE.h" #include "PHY/impl_defs_nr.h" #include "utils.h" +#include "openair2/PHY_INTERFACE/queue_t.h" extern PHY_VARS_NR_UE ***PHY_vars_UE_g; @@ -103,6 +104,8 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response rx_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION; rx_ind->sfn = scheduled_response->ul_config->sfn; rx_ind->slot = scheduled_response->ul_config->slot; + LOG_I(NR_MAC, "This is sched sfn/sl [%d %d] and rx sfn/sl [%d %d]\n", + scheduled_response->frame, scheduled_response->slot, rx_ind->sfn, rx_ind->slot); rx_ind->number_of_pdus = scheduled_response->tx_request->number_of_pdus; rx_ind->pdu_list = CALLOC(rx_ind->number_of_pdus, sizeof(*rx_ind->pdu_list)); for (int j = 0; j < rx_ind->number_of_pdus; j++) @@ -122,20 +125,20 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response crc_ind->number_crcs = scheduled_response->ul_config->number_pdus; crc_ind->sfn = scheduled_response->ul_config->sfn; crc_ind->slot = scheduled_response->ul_config->slot; - mac->nr_ue_emul_l1.crc_rx_ind_sfn_slot = NFAPI_SFNSLOT2HEX(crc_ind->sfn, crc_ind->slot); crc_ind->crc_list = CALLOC(crc_ind->number_crcs, sizeof(*crc_ind->crc_list)); for (int j = 0; j < crc_ind->number_crcs; j++) { crc_ind->crc_list[j].handle = pusch_config_pdu->handle; crc_ind->crc_list[j].harq_id = pusch_config_pdu->pusch_data.harq_process_id; - LOG_D(NR_MAC, "This is the harq pid %d for crc_list[%d]\n", crc_ind->crc_list[j].harq_id, j); - LOG_D(NR_MAC, "This is sched sfn/sl [%d %d] and crc sfn/sl [%d %d]\n", + LOG_I(NR_MAC, "This is the harq pid %d for crc_list[%d]\n", crc_ind->crc_list[j].harq_id, j); + LOG_I(NR_MAC, "This is sched sfn/sl [%d %d] and crc sfn/sl [%d %d]\n", scheduled_response->frame, scheduled_response->slot, crc_ind->sfn, crc_ind->slot); crc_ind->crc_list[j].num_cb = pusch_config_pdu->pusch_data.num_cb; crc_ind->crc_list[j].rnti = pusch_config_pdu->rnti; crc_ind->crc_list[j].tb_crc_status = 0; crc_ind->crc_list[j].timing_advance = scheduled_response->tx_request->tx_config.timing_advance; crc_ind->crc_list[j].ul_cqi = 255; + mac->nr_ue_emul_l1.harq[crc_ind->crc_list[j].harq_id].crc_rx_ind_sfn_slot = NFAPI_SFNSLOT2HEX(crc_ind->sfn, crc_ind->slot); LOG_D(NR_MAC, "This is sched sfn/sl [%d %d] and crc sfn/sl [%d %d] with mcs_index in ul_cqi -> %d\n", scheduled_response->frame, scheduled_response->slot, crc_ind->sfn, crc_ind->slot,pusch_config_pdu->mcs_index); } @@ -163,7 +166,8 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response crc_ind = NULL; } - LOG_D(PHY, "In %s: Filled queue rx/crc_ind which was filled by ulconfig. \n", __FUNCTION__); + LOG_I(PHY, "In %s: [%d, %d] Filled queue rx/crc_ind which was filled by ulconfig. \n", __FUNCTION__, + scheduled_response->frame, scheduled_response->slot); scheduled_response->tx_request->number_of_pdus = 0; } @@ -200,65 +204,58 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response pdu_0_1->ul_cqi = 255; pdu_0_1->timing_advance = 0; pdu_0_1->rssi = 0; - + LOG_I(NR_PHY, "In %s: UCI SFN/SLOT: [%d, %d] and mac->nr_ue_emul_l1.num_harq %d\n", + __FUNCTION__, uci_ind->sfn, uci_ind->slot, mac->nr_ue_emul_l1.num_harqs); if (mac->nr_ue_emul_l1.num_harqs > 0) { + int harq_index = 0; pdu_0_1->pduBitmap = 2; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR pdu_0_1->harq = CALLOC(1, sizeof(*pdu_0_1->harq)); - pdu_0_1->harq->num_harq = 1; + pdu_0_1->harq->num_harq = mac->nr_ue_emul_l1.num_harqs; pdu_0_1->harq->harq_confidence_level = 0; + pdu_0_1->harq->harq_list = CALLOC(pdu_0_1->harq->num_harq, sizeof(*pdu_0_1->harq->harq_list)); int harq_pid = -1; for (int k = 0; k < 16; k++) { - LOG_D(NR_MAC, "dl_frame = %d sl_slot = %d feedback_to_ul = %d active_harq_sfn_slot = %d.%d\n", - mac->dl_harq_info[k].dl_frame, - mac->dl_harq_info[k].dl_slot, - mac->dl_harq_info[k].feedback_to_ul, - NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_harq_sfn_slot), - NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot)); - int sfn_slot = NFAPI_SFNSLOT2HEX(mac->dl_harq_info[k].dl_frame, - (mac->dl_harq_info[k].dl_slot + - mac->dl_harq_info[k].feedback_to_ul)); - if (!mac->dl_harq_info[k].active && - (sfn_slot == mac->nr_ue_emul_l1.active_harq_sfn_slot || - sfn_slot == mac->nr_ue_emul_l1.active_uci_sfn_slot)) + LOG_I(NR_MAC, "HARQ PID %d active = %d saved sfn_slot = %d.%d vs current sfn.slot %d.%d\n", + k, mac->nr_ue_emul_l1.harq[k].active, + mac->nr_ue_emul_l1.harq[k].active_harq_sfn, + mac->nr_ue_emul_l1.harq[k].active_harq_slot, + uci_ind->sfn, + uci_ind->slot); + if (mac->nr_ue_emul_l1.harq[k].active && + mac->nr_ue_emul_l1.harq[k].active_harq_sfn == uci_ind->sfn && + mac->nr_ue_emul_l1.harq[k].active_harq_slot == uci_ind->slot) { + mac->nr_ue_emul_l1.harq[k].active = false; harq_pid = k; - LOG_D(NR_MAC, "Setting harq_pid = %d\n", k); + LOG_I(NR_MAC, "Setting harq_pid = %d and num_harqs %d for %d.%d\n", k, pdu_0_1->harq->num_harq, + uci_ind->sfn, uci_ind->slot); + pdu_0_1->harq->harq_list[harq_index].harq_value = !mac->dl_harq_info[k].ack; + harq_index++; + LOG_I(NR_PHY, "In %s: Building uci_ind_%d with num_harqs %d and pdu_bitmap %d\n" + "uci_num %d, SFN/SLOT: [%d, %d]\n", + __FUNCTION__, uci_ind->uci_list[0].pdu_type, + pdu_0_1->harq->num_harq, pdu_0_1->pduBitmap, + uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); } } - pdu_0_1->harq->harq_list = CALLOC(pdu_0_1->harq->num_harq, sizeof(*pdu_0_1->harq->harq_list)); - for (int k = 0; k < pdu_0_1->harq->num_harq; k++) - { - AssertFatal(harq_pid != -1, "No active harq_pid, sfn_slot = %u.%u", uci_ind->sfn, uci_ind->slot); - pdu_0_1->harq->harq_list[k].harq_value = !mac->dl_harq_info[harq_pid].ack; - } + AssertFatal(harq_pid != -1, "No active harq_pid, sfn_slot = %u.%u", uci_ind->sfn, uci_ind->slot); } } - int sfn_slot = NFAPI_SFNSLOT2HEX(uci_ind->sfn, uci_ind->slot); - nfapi_nr_uci_indication_t *queued_uci_ind = unqueue_matching(&nr_uci_ind_queue, - MAX_QUEUE_SIZE, - sfn_slot_matcher, - &sfn_slot); - if (queued_uci_ind) - { - LOG_I(NR_MAC, "There was a matching UCI with sfn %d, slot %d in queue\n", - NFAPI_SFNSLOT2SFN(sfn_slot), NFAPI_SFNSLOT2SLOT(sfn_slot)); - free(queued_uci_ind); - break; - } } - LOG_I(NR_PHY, "In %s: Filled queue uci_ind_%d which was filled by ulconfig.\n" - "uci_num %d, SFN/SLOT: [%d, %d]\n", + LOG_I(NR_PHY, "In %s: Sending uci_ind_%d which was filled by ulconfig.\n" + "uci_num %d, SFN/SLOT: [%d, %d] and pdu_bitmap %d\n", __FUNCTION__, uci_ind->uci_list[0].pdu_type, - uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); - - if (!put_queue(&nr_uci_ind_queue, uci_ind)) - { - LOG_E(NR_MAC, "Put_queue failed for uci_ind\n"); - free(uci_ind->uci_list); - free(uci_ind); - } + uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot, + uci_ind->uci_list[0].pucch_pdu_format_0_1.pduBitmap); + LOG_I(NR_MAC, "Sending UCI with %d PDUs in sfn.slot %d/%d\n", + uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); + NR_UL_IND_t UL_INFO = { + .uci_ind = *uci_ind, + }; + send_nsa_standalone_msg(&UL_INFO, uci_ind->header.message_id); + free_uci_inds(uci_ind); break; } @@ -269,93 +266,6 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response } scheduled_response->ul_config->number_pdus = 0; } - - if (scheduled_response->dl_config != NULL) - { - fapi_nr_dl_config_request_t *dl_config = scheduled_response->dl_config; - AssertFatal(dl_config->number_pdus < sizeof(dl_config->dl_config_list) / sizeof(dl_config->dl_config_list[0]), - "Too many dl_config pdus %d", dl_config->number_pdus); - for (int i = 0; i < dl_config->number_pdus; ++i) - { - LOG_D(PHY, "In %s: processing %s PDU of %d total DL PDUs (dl_config %p) \n", - __FUNCTION__, dl_pdu_type[dl_config->dl_config_list[i].pdu_type - 1], dl_config->number_pdus, dl_config); - - uint8_t pdu_type = dl_config->dl_config_list[i].pdu_type; - switch (pdu_type) - { - case (FAPI_NR_DL_CONFIG_TYPE_DLSCH): - { - nfapi_nr_uci_indication_t *uci_ind = CALLOC(1, sizeof(*uci_ind)); - uci_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION; - uci_ind->sfn = scheduled_response->frame; - uci_ind->slot = NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot); - uci_ind->num_ucis = 1; - uci_ind->uci_list = CALLOC(uci_ind->num_ucis, sizeof(*uci_ind->uci_list)); - for (int j = 0; j < uci_ind->num_ucis; j++) - { - nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[j].pucch_pdu_format_0_1; - uci_ind->uci_list[j].pdu_type = NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE; - uci_ind->uci_list[j].pdu_size = sizeof(nfapi_nr_uci_pucch_pdu_format_0_1_t); - memset(pdu_0_1, 0, sizeof(*pdu_0_1)); - pdu_0_1->handle = 0; - pdu_0_1->rnti = dl_config->dl_config_list[i].dlsch_config_pdu.rnti; - pdu_0_1->pucch_format = 1; - pdu_0_1->ul_cqi = 255; - pdu_0_1->timing_advance = 0; - pdu_0_1->rssi = 0; - pdu_0_1->pduBitmap = 2; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR - pdu_0_1->harq = CALLOC(1, sizeof(*pdu_0_1->harq)); - pdu_0_1->harq->num_harq = 1; - pdu_0_1->harq->harq_confidence_level = 0; - int harq_pid = -1; - for (int k = 0; k < 16; k++) - { - LOG_D(NR_MAC, "dl_frame = %d dl_slot = %d feedback_to_ul = %d active = %d k = %d " - "active_harq_sfn_slot = %d.%d " - "active_uci_sfn_slot = %d.%d\n", - mac->dl_harq_info[k].dl_frame, - mac->dl_harq_info[k].dl_slot, - mac->dl_harq_info[k].feedback_to_ul, - mac->dl_harq_info[k].active, - k, - NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_harq_sfn_slot), - NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_harq_sfn_slot), - NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.active_uci_sfn_slot), - NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.active_uci_sfn_slot)); - int sfn_slot = NFAPI_SFNSLOT2HEX(mac->dl_harq_info[k].dl_frame, - (mac->dl_harq_info[k].dl_slot + - mac->dl_harq_info[k].feedback_to_ul)); - if (mac->dl_harq_info[k].active && - sfn_slot == mac->nr_ue_emul_l1.active_harq_sfn_slot) - { - harq_pid = k; - LOG_D(NR_MAC, "Setting harq_pid = %d\n", k); - } - } - pdu_0_1->harq->harq_list = CALLOC(pdu_0_1->harq->num_harq, sizeof(*pdu_0_1->harq->harq_list)); - for (int k = 0; k < pdu_0_1->harq->num_harq; k++) - { - AssertFatal(harq_pid != -1, "No active harq_pid, sfn_slot = %u.%u", uci_ind->sfn, uci_ind->slot); - pdu_0_1->harq->harq_list[k].harq_value = !mac->dl_harq_info[harq_pid].ack; - } - } - - LOG_I(NR_PHY, "In %s: Filled queue uci_ind which was filled by dlconfig.\n" - "uci_num %d, SFN/SLOT: [%d, %d]\n", - __FUNCTION__, uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); - - if (!put_queue(&nr_uci_ind_queue, uci_ind)) - { - LOG_E(NR_MAC, "Put_queue failed for uci_ind\n"); - free(uci_ind->uci_list); - free(uci_ind); - } - break; - } - } - } - } - } return 0; } diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h index 35983582bc..4f1ed162e2 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h @@ -264,6 +264,17 @@ typedef struct { uint8_t nbits; } dci_field_t; +typedef struct { + /* The active harq sfn/slot field was created to save the + scheduled SFN/Slot transmission for the ACK/NAK. If we + do not save it, then we have to calculate it again as the + NRUE MAC layer already does in get_downlink_ack(). */ + int active_harq_sfn; + int active_harq_slot; + int crc_rx_ind_sfn_slot; + bool active; +} emul_l1_harq_t; + typedef struct { bool expected_sib; bool index_has_sib[16]; @@ -271,9 +282,8 @@ typedef struct { bool index_has_rar[16]; bool expected_dci; bool index_has_dci[16]; - int active_harq_sfn_slot; + emul_l1_harq_t harq[16]; int active_uci_sfn_slot; - int crc_rx_ind_sfn_slot; int num_srs; int num_harqs; int num_csi_reports; diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index b5680a9bf8..1c1b69ad65 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -599,14 +599,19 @@ int nr_ue_process_dci_indication_pdu(module_id_t module_id,int cc_id, int gNB_in NR_UE_MAC_INST_t *mac = get_mac_inst(module_id); dci_pdu_rel15_t *def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dci->dci_format]; - LOG_D(MAC,"Received dci indication (rnti %x,dci format %d,n_CCE %d,payloadSize %d,payload %llx)\n", - dci->rnti,dci->dci_format,dci->n_CCE,dci->payloadSize,*(unsigned long long*)dci->payloadBits); + LOG_I(MAC,"Received dci indication (rnti %x,dci format %d,n_CCE %d,payloadSize %d,payload %llx, pid %d)\n", + dci->rnti, dci->dci_format, + dci->n_CCE, dci->payloadSize, + *(unsigned long long*)dci->payloadBits, + def_dci_pdu_rel15->harq_pid); int8_t ret = nr_extract_dci_info(mac, dci->dci_format, dci->payloadSize, dci->rnti, (uint64_t *)dci->payloadBits, def_dci_pdu_rel15); if ((ret&1) == 1) return -1; else if (ret == 2) { dci->dci_format = NR_UL_DCI_FORMAT_0_0; def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dci->dci_format]; } + LOG_I(MAC,"After extracting dci info. dci format %d, pid %d\n", + dci->dci_format, def_dci_pdu_rel15->harq_pid); int8_t ret_proc = nr_ue_process_dci(module_id, cc_id, gNB_index, frame, slot, def_dci_pdu_rel15, dci); return ret_proc; } @@ -631,7 +636,8 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr else if (mac->scc_SIB) n_RB_DLBWP = NRRIV2BW(mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP.genericParameters.locationAndBandwidth,MAX_BWP_SIZE); else n_RB_DLBWP = mac->type0_PDCCH_CSS_config.num_rbs; - LOG_D(MAC, "In %s: Processing received DCI format %s (DL BWP %d)\n", __FUNCTION__, dci_formats[dci_format], n_RB_DLBWP); + LOG_I(MAC, "In %s: Processing received DCI format %s (DL BWP %d) harq_pid %d\n", + __FUNCTION__, dci_formats[dci_format], n_RB_DLBWP, dci->harq_pid); switch(dci_format){ case NR_UL_DCI_FORMAT_0_0: { @@ -947,6 +953,8 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr if(rnti != ra->ra_rnti && rnti != SI_RNTI) AssertFatal(1+dci->pdsch_to_harq_feedback_timing_indicator.val>=DURATION_RX_TO_TX,"PDSCH to HARQ feedback time (%d) cannot be less than DURATION_RX_TO_TX (%d).\n", 1+dci->pdsch_to_harq_feedback_timing_indicator.val,DURATION_RX_TO_TX); + LOG_I(MAC,"(nr_ue_procedures.c) dci->pdsch_to_harq_feedback_timing_indicator.val=%d \n", + dci->pdsch_to_harq_feedback_timing_indicator.val); // set the harq status at MAC for feedback set_harq_status(mac,dci->pucch_resource_indicator, @@ -1118,6 +1126,9 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr valid = 0; pucch_res_set_cnt = ubwpd->pucch_Config->choice.setup->resourceSetToAddModList->list.count; for (int id = 0; id < pucch_res_set_cnt; id++) { + LOG_I(NR_MAC, "pucch_resource_indicator %d, ubwpd[%d].resource.list.count %d\n", + dci->pucch_resource_indicator, id, + ubwpd->pucch_Config->choice.setup->resourceSetToAddModList->list.array[id]->resourceList.list.count); if (dci->pucch_resource_indicator < ubwpd->pucch_Config->choice.setup->resourceSetToAddModList->list.array[id]->resourceList.list.count) { valid = 1; break; @@ -1235,7 +1246,9 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr // according to TS 38.213 Table 9.2.3-1 uint8_t feedback_ti = ubwpd->pucch_Config->choice.setup->dl_DataToUL_ACK->list.array[dci->pdsch_to_harq_feedback_timing_indicator.val][0]; - + LOG_I(MAC,"(nr_ue_procedures.c) 1237 feedback_ti=%d and dci->pdsch_to_harq_feedback_timing_indicator.val %d, pdsch_to_harq_feedback_time_ind %d\n", + feedback_ti, dci->pdsch_to_harq_feedback_timing_indicator.val, + dlsch_config_pdu_1_1->pdsch_to_harq_feedback_time_ind); AssertFatal(feedback_ti>=DURATION_RX_TO_TX,"PDSCH to HARQ feedback time (%d) cannot be less than DURATION_RX_TO_TX (%d). Min feedback time set in config file (min_rxtxtime).\n", feedback_ti,DURATION_RX_TO_TX); @@ -1334,10 +1347,21 @@ void set_harq_status(NR_UE_MAC_INST_t *mac, // FIXME k0 != 0 currently not taken into consideration current_harq->dl_frame = frame; current_harq->dl_slot = slot; - mac->nr_ue_emul_l1.active_harq_sfn_slot = NFAPI_SFNSLOT2HEX(frame, (slot + data_toul_fb)); + // TODO: if (get_softmodem_params()->emaulte_l1) + // in downlink: 0-7, 10-17 + if (data_toul_fb + slot > 19) { + if (frame + 1 < 1024) + frame++; + else + frame = 0; + slot = (data_toul_fb + slot) - 20; + } + else { + slot = data_toul_fb + slot; + } - LOG_D(NR_PHY,"Setting harq_status for harq_id %d, dl %d.%d, sched ul %d.%d\n", - harq_id, frame, slot, frame, (slot + data_toul_fb)); + LOG_I(NR_PHY,"Setting harq_status for harq_id %d, dl %d.%d, sched ul %d.%d\n", + harq_id, current_harq->dl_frame, current_harq->dl_slot, frame, slot); } @@ -1819,18 +1843,24 @@ int find_pucch_resource_set(NR_UE_MAC_INST_t *mac, int uci_size) { mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup && mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup->resourceSetToAddModList && mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup->resourceSetToAddModList->list.array[pucch_resource_set_id] != NULL)) { - if (uci_size <= 2) { + if (uci_size <= 3) { pucch_resource_set_id = 0; + LOG_I(NR_MAC, "Melissa %s()%d, we are setting resource_set_id = %d", + __FUNCTION__, __LINE__, pucch_resource_set_id); return (pucch_resource_set_id); break; } else { pucch_resource_set_id = 1; + LOG_I(NR_MAC, "Melissa %s()%d, we are setting resource_set_id = %d", + __FUNCTION__, __LINE__, pucch_resource_set_id); return (pucch_resource_set_id); break; } } pucch_resource_set_id++; + LOG_I(NR_MAC, "Melissa %s()%d, we are setting resource_set_id = %d", + __FUNCTION__, __LINE__, pucch_resource_set_id); } pucch_resource_set_id = MAX_NB_OF_PUCCH_RESOURCE_SETS; @@ -1915,6 +1945,13 @@ void select_pucch_resource(NR_UE_MAC_INST_t *mac, pucch->pucch_resource = NULL; return; } + LOG_I(MAC,"Melissa resourceSetToAddModList %p\n", resourceSetToAddModList); + LOG_I(MAC,"Melissa resourceSetToAddModList->list.array[0] %p\n", resourceSetToAddModList->list.array[0]); + LOG_I(MAC,"Melissa pucch->resource_set_id %d\n", pucch->resource_set_id); + LOG_I(MAC,"Melissa resourceSetToAddModList->list.array[pucch->resource_set_id] %p\n", resourceSetToAddModList->list.array[pucch->resource_set_id]); + LOG_I(MAC,"Melissa resourceSetToAddModList->list.array[pucch->resource_set_id]->resourceList %p\n", resourceSetToAddModList->list.array[pucch->resource_set_id]->resourceList); + LOG_I(MAC,"Melissa resourceSetToAddModList->list.array[pucch->resource_set_id]->resourceList.list.count %d\n", resourceSetToAddModList->list.array[pucch->resource_set_id]->resourceList.list.count); + n_list = resourceSetToAddModList->list.array[pucch->resource_set_id]->resourceList.list.count; if (pucch->resource_indicator > n_list) { LOG_E(MAC,"Invalid PUCCH resource id %d\n",pucch->resource_indicator); @@ -2015,16 +2052,33 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, current_harq = &mac->dl_harq_info[dl_harq_pid]; if (current_harq->active) { - - sched_slot = current_harq->dl_slot + current_harq->feedback_to_ul; sched_frame = current_harq->dl_frame; - if (sched_slot>=slots_per_frame){ - sched_slot %= slots_per_frame; - sched_frame++; + if (current_harq->feedback_to_ul + current_harq->dl_slot > 19) { + if (sched_frame + 1 < 1024) + sched_frame++; + else + sched_frame = 0; + sched_slot = (current_harq->feedback_to_ul + current_harq->dl_slot) - slots_per_frame; } - LOG_D(PHY,"HARQ pid %d is active for %d.%d (dl_slot %d, feedback_to_ul %d, is_common %d\n",dl_harq_pid, sched_frame,sched_slot,current_harq->dl_slot,current_harq->feedback_to_ul,current_harq->is_common); + else { + sched_slot = current_harq->feedback_to_ul + current_harq->dl_slot; + } + + LOG_I(PHY,"HARQ pid %d is active for %d.%d and inputted %d.%d (dl_slot %d, feedback_to_ul %d, is_common %d active %d\n", + dl_harq_pid, + sched_frame, + sched_slot, frame, slot, + current_harq->dl_slot, + current_harq->feedback_to_ul, + current_harq->is_common, + current_harq->active); /* check if current tx slot should transmit downlink acknowlegment */ if (sched_frame == frame && sched_slot == slot) { + if (get_softmodem_params()->emulate_l1) { + mac->nr_ue_emul_l1.harq[dl_harq_pid].active = true; + mac->nr_ue_emul_l1.harq[dl_harq_pid].active_harq_sfn = frame; + mac->nr_ue_emul_l1.harq[dl_harq_pid].active_harq_slot = slot; + } if (current_harq->dai > NR_DL_MAX_DAI) { LOG_E(MAC,"PUCCH Downlink DAI has an invalid value : at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME); @@ -2045,6 +2099,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, } number_harq_feedback++; + LOG_I(NR_MAC, "number_harq_feedback = %d\n", number_harq_feedback); if (current_harq->ack_received) ack_data[code_word][dai_current - 1] = current_harq->ack; else @@ -2132,6 +2187,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, V_temp2 = dai[1][m]; /* second code word has been received */ O_bit_number_cw1 = (8 * j) + 2*(V_temp - 1) + 1; o_ACK = o_ACK | (ack_data[1][m] << O_bit_number_cw1); + LOG_I(NR_MAC, "%s():%d o_ACK = %d\n", __FUNCTION__, __LINE__, o_ACK); } if (two_transport_blocks == TRUE) { @@ -2141,6 +2197,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, O_bit_number_cw0 = (4 * j) + (V_temp - 1); } + LOG_I(NR_MAC, "%s():%d o_ACK = %d\n", __FUNCTION__, __LINE__, o_ACK); o_ACK = o_ACK | (ack_data[0][m] << O_bit_number_cw0); LOG_D(MAC,"m %d bit number %d o_ACK %d\n",m,O_bit_number_cw0,o_ACK); } @@ -2154,14 +2211,16 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, } else { O_ACK = 4 * j + V_temp2; /* only one transport block */ + LOG_I(NR_MAC, "%s():%d O_ACK = %d\n", __FUNCTION__, __LINE__, O_ACK); } if (number_harq_feedback != O_ACK) { - LOG_E(MAC,"PUCCH Error for number of bits for acknowledgment : at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME); - return (0); + LOG_E(MAC,"PUCCH Error for number of bits for acknowledgment. number_harq_feedback %d, O_ACK %d \n", + number_harq_feedback, O_ACK); + number_harq_feedback = O_ACK; //return (0); } - reverse_n_bits(&o_ACK,number_harq_feedback); + LOG_I(NR_MAC, "%s():%d o_ACK = %d\n", __FUNCTION__, __LINE__, o_ACK); pucch->ack_payload = o_ACK; LOG_D(MAC,"frame %d slot %d pucch acknack payload %d\n",frame,slot,o_ACK); @@ -3837,6 +3896,8 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t #endif if (ra->RA_RAPID_found) { + // if (rarh->RAPID != preamble_index) + // return 0; RAR_grant_t rar_grant; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 6d7dbf5506..40a9900284 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -220,6 +220,9 @@ int nr_process_mac_pdu(module_id_t module_idP, LOG_D(NR_MAC, "In %s: received UL-SCH sub-PDU with LCID 0x%x in %d.%d (remaining PDU length %d)\n", __func__, rx_lcid, frameP, slot, pdu_len); + if (pdu_len < 7) { + break; + } unsigned char *ce_ptr; int n_Lcg = 0; diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 71345c6d9f..1a68778df7 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -465,7 +465,7 @@ static void fill_rx_ind(nfapi_nr_pdu_t *pdu_list, fapi_nr_rx_indication_t *rx_in { length += pdu_list->TLVs[j].length; } - LOG_I(NR_PHY, "%s: num_tlv %d and length %d, pdu index %d\n", + LOG_I(NR_PHY, "Elkadi %s: num_tlv %d and length %d, pdu index %d\n", __FUNCTION__, pdu_list->num_TLV, length, pdu_idx); uint8_t *pdu = malloc(length); AssertFatal(pdu != NULL, "%s: Out of memory in malloc", __FUNCTION__); @@ -540,7 +540,7 @@ static void copy_tx_data_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi dl_info->rx_ind->number_pdus = pdu_idx; } -static void free_uci_inds(nfapi_nr_uci_indication_t *uci_ind) +void free_uci_inds(nfapi_nr_uci_indication_t *uci_ind) { for (int k = 0; k < uci_ind->num_ucis; k++) { @@ -618,6 +618,7 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n static bool send_crc_ind_and_rx_ind(int sfn_slot) { bool sent_crc_rx = true; + LOG_I(NR_MAC, "Melissa, This is the num items in crc %d and rx %d\n", nr_crc_ind_queue.num_items, nr_rx_ind_queue.num_items); nfapi_nr_rx_data_indication_t *rx_ind = unqueue_matching(&nr_rx_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot); nfapi_nr_crc_indication_t *crc_ind = unqueue_matching(&nr_crc_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot); @@ -655,102 +656,18 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n AssertFatal(num_pdus >= 0, "Invalid ul_tti_request number of PDUS\n"); AssertFatal(num_pdus <= sizeof(ul_tti_req->pdus_list) / sizeof(ul_tti_req->pdus_list[0]), "Too many pdus %d in ul_tti_req\n", num_pdus); - - bool sent_crc_rx = send_crc_ind_and_rx_ind(sfn_slot); - bool sent_uci = false; - for (int i = 0; i < num_pdus; i++) + if (!send_crc_ind_and_rx_ind(sfn_slot)) { - nfapi_nr_ul_tti_request_number_of_pdus_t *pdu_list = &ul_tti_req->pdus_list[i]; - LOG_D(NR_PHY, "This is the pdu type %d and rnti %x and SR flag %d and harq_pdu_len %d in in ul_tti_req\n", - pdu_list->pdu_type, ul_tti_req->pdus_list[i].pucch_pdu.rnti, pdu_list->pucch_pdu.sr_flag, pdu_list->pucch_pdu.bit_len_harq); - if (pdu_list->pdu_type == NFAPI_NR_UL_CONFIG_PUCCH_PDU_TYPE && pdu_list->pucch_pdu.rnti == mac->crnti) - { - AssertFatal(nr_uci_ind_queue.num_items >= 0, "Invalid num_items in UCI_ind queue %lu\n", - nr_uci_ind_queue.num_items); - - nfapi_nr_uci_indication_t *uci_ind = unqueue_matching(&nr_uci_ind_queue, - MAX_QUEUE_SIZE, - sfn_slot_matcher, - &sfn_slot); - if (!uci_ind) - { - LOG_I(NR_MAC, "There was not a matching UCI with sfn %d, slot %d in queue\n", - NFAPI_SFNSLOT2SFN(sfn_slot), NFAPI_SFNSLOT2SLOT(sfn_slot)); - return; - } - if (uci_ind && uci_ind->num_ucis > 0) - { - uci_ind->sfn = ul_tti_req->SFN; - uci_ind->slot = ul_tti_req->Slot; - LOG_D(NR_MAC, "This is the SFN/SF [%d, %d] and RNTI %x of the UCI ind. ul_tti_req.pdu[%d]->rnti = %x \n", - uci_ind->sfn, uci_ind->slot, uci_ind->uci_list[0].pucch_pdu_format_0_1.rnti, i, ul_tti_req->pdus_list[i].pucch_pdu.rnti); - for (int j = 0; j < uci_ind->num_ucis; j++) - { - if (uci_ind->uci_list[j].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE) - { - nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[j].pucch_pdu_format_0_1; - if (pdu_list->pucch_pdu.sr_flag) - { - pdu_0_1->pduBitmap = 1; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR - if (pdu_list->pucch_pdu.bit_len_harq > 0) - pdu_0_1->pduBitmap = 3; - pdu_0_1->sr = CALLOC(1, sizeof(*pdu_0_1->sr)); - pdu_0_1->sr->sr_confidence_level = 0; - pdu_0_1->sr->sr_indication = 1; - } - } - if (uci_ind->uci_list[j].pdu_type == NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE) - { - nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[j].pucch_pdu_format_2_3_4; - if (pdu_list->pucch_pdu.sr_flag) - { - pdu_2_3_4->pduBitmap = 5; - pdu_2_3_4->sr.sr_bit_len = 0; - AssertFatal(!pdu_2_3_4->sr.sr_payload, "pdu_2_3_4->sr.sr_payload != NULL\n"); - pdu_2_3_4->sr.sr_payload = CALLOC((int)((pdu_2_3_4->sr.sr_bit_len / 8) + 1), - sizeof(*pdu_2_3_4->sr.sr_payload)); - } - if (pdu_list->pucch_pdu.bit_len_harq > 0) - { - pdu_2_3_4->pduBitmap = 6; - if (pdu_list->pucch_pdu.sr_flag) - { - pdu_2_3_4->pduBitmap = 7; - } - pdu_2_3_4->harq.harq_bit_len = pdu_list->pucch_pdu.bit_len_harq; - LOG_D(NR_MAC, "This is bit_len_harq %d and pdu_2_3_4->pduBitmap %d\n", - pdu_list->pucch_pdu.bit_len_harq, pdu_2_3_4->pduBitmap); - pdu_2_3_4->harq.harq_crc = 0; - AssertFatal(!pdu_2_3_4->harq.harq_payload, "pdu_2_3_4->harq.harq_payload != NULL\n"); - pdu_2_3_4->harq.harq_payload = CALLOC((int)((pdu_2_3_4->harq.harq_bit_len / 8) + 1), - sizeof(*pdu_2_3_4->harq.harq_payload)); - /* TODO: Later, when abstracting, we can set particular bits in the - payload to 0 to indicate a NACK. For now, we memset all bits to 1. */ - memset(pdu_2_3_4->harq.harq_payload, 0xff, sizeof(*pdu_2_3_4->harq.harq_payload)); - } - } - } - LOG_I(NR_MAC, "We have dequeued the previously filled uci_ind and updated the snf/slot to %d/%d.\n", - uci_ind->sfn, uci_ind->slot); - NR_UL_IND_t UL_INFO = { - .uci_ind = *uci_ind, - }; - send_nsa_standalone_msg(&UL_INFO, uci_ind->header.message_id); - sent_uci = true; - free_uci_inds(uci_ind); - } - } - } - if (!sent_uci && !sent_crc_rx) - { - LOG_E(NR_MAC, "UCI and CRC_RX ind not sent\n"); + LOG_E(NR_MAC, "CRC_RX ind not sent\n"); if (!put_queue(&nr_ul_tti_req_queue, ul_tti_req)) { LOG_E(NR_PHY, "put_queue failed for ul_tti_req.\n"); free(ul_tti_req); ul_tti_req = NULL; } + return; } + free(ul_tti_req); } static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_config_request_t *dl_config) @@ -784,17 +701,19 @@ static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_ "dl_config->number_pdus %d > dci_ind->dci_list array\n", num_dcis); for (int k = 0; k < num_dcis; k++) { - LOG_I(NR_PHY, "Received len %d, length options[%d] %d, format assigned %d, format options[%d] %d\n", + LOG_D(NR_PHY, "Received len %d, length options[%d] %d, format assigned %d, format options[%d] %d\n", dl_ind->dci_ind->dci_list[k].payloadSize, j, rel15_dci->dci_length_options[j], dl_ind->dci_ind->dci_list[k].dci_format, j, rel15_dci->dci_format_options[j]); if (rel15_dci->dci_length_options[j] == dl_ind->dci_ind->dci_list[k].payloadSize) { dl_ind->dci_ind->dci_list[k].dci_format = rel15_dci->dci_format_options[j]; + LOG_I(NR_PHY, "format assigned dl_ind->dci_ind->dci_list[k].dci_format %d\n", + dl_ind->dci_ind->dci_list[k].dci_format); + int CCEind = rel15_dci->CCE[j]; + int L = rel15_dci->L[j]; + dl_ind->dci_ind->dci_list[k].n_CCE = CCEind; + dl_ind->dci_ind->dci_list[k].N_CCE = L; } - int CCEind = rel15_dci->CCE[j]; - int L = rel15_dci->L[j]; - dl_ind->dci_ind->dci_list[k].n_CCE = CCEind; - dl_ind->dci_ind->dci_list[k].N_CCE = L; } } } @@ -877,8 +796,10 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, mac->scc->tdd_UL_DL_ConfigurationCommon : mac->scc_SIB->tdd_UL_DL_ConfigurationCommon, ul_info.slot_tx, - mac->frame_type)) + mac->frame_type)) { + LOG_I(NR_MAC, "Slot %d. calling nr_ue_ul_ind() from %s\n", ul_info.slot_tx, __FUNCTION__); nr_ue_ul_indication(&ul_info); + } } } @@ -921,7 +842,7 @@ void save_nr_measurement_info(nfapi_nr_dl_tti_request_t *dl_tti_request) static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_header_t header) { - + NR_UE_MAC_INST_t *mac = get_mac_inst(0); switch (header.message_id) { case NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST: @@ -999,11 +920,32 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea } LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST message in SFN/slot %d %d.\n", ul_tti_request->SFN, ul_tti_request->Slot); - if (!put_queue(&nr_ul_tti_req_queue, ul_tti_request)) - { - LOG_E(NR_PHY, "put_queue failed for ul_tti_request.\n"); - nfapi_nr_ul_tti_request_t *evicted_ul_tti_req = put_queue_replace(&nr_ul_tti_req_queue, ul_tti_request); - free(evicted_ul_tti_req); + for (int i = 0; i < ul_tti_request->n_pdus; i++) { + LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST pdu_type %d, ra_state %d.\n", + ul_tti_request->pdus_list[i].pdu_type, mac->ra.ra_state); + if (ul_tti_request->pdus_list[i].pdu_type == 1 && + mac->ra.ra_state >= RA_SUCCEEDED) { + + LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST that were queueing with rnti %x!\n", + ul_tti_request->pdus_list[i].pucch_pdu.rnti); + if (!put_queue(&nr_ul_tti_req_queue, ul_tti_request)) + { + LOG_I(NR_PHY, "put_queue failed for ul_tti_request, calling put_queue_replace.\n"); + nfapi_nr_ul_tti_request_t *evicted_ul_tti_req = put_queue_replace(&nr_ul_tti_req_queue, ul_tti_request); + free(evicted_ul_tti_req); + } + break; + } + else if (mac->ra.ra_state < RA_SUCCEEDED) { + LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST before RA_SUCEEDED that were queueing with rnti %x!\n", + ul_tti_request->pdus_list[i].pucch_pdu.rnti); + if (!put_queue(&nr_ul_tti_req_queue, ul_tti_request)) + { + LOG_I(NR_PHY, "put_queue failed for ul_tti_request, calling put_queue_replace.\n"); + nfapi_nr_ul_tti_request_t *evicted_ul_tti_req = put_queue_replace(&nr_ul_tti_req_queue, ul_tti_request); + free(evicted_ul_tti_req); + } + } } break; } @@ -1204,8 +1146,10 @@ int nr_ue_ul_indication(nr_uplink_indication_t *ul_info){ if (is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type) && !get_softmodem_params()->phy_test) nr_ue_prach_scheduler(module_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->thread_id); - - if (is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type)) + LOG_I(NR_MAC, "In %s():%d calling nr_ue_pucch_scheduler in %d.%d\n", + __FUNCTION__, __LINE__, ul_info->frame_tx, ul_info->slot_tx); + if (is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type) && + !get_softmodem_params()->emulate_l1) nr_ue_pucch_scheduler(module_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->thread_id); switch(ret){ @@ -1239,20 +1183,23 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ if (dl_info && dl_info->dci_ind && dl_info->dci_ind->number_of_dcis) { LOG_D(MAC,"[L2][IF MODULE][DL INDICATION][DCI_IND]\n"); for (int i = 0; i < dl_info->dci_ind->number_of_dcis; i++) { - LOG_D(MAC,">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d\n",i,dl_info->dci_ind->number_of_dcis); + fapi_nr_dci_indication_pdu_t *dci_index = dl_info->dci_ind->dci_list+i; + LOG_I(MAC,">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d, format %d, harq_pid %d\n", + i, + dl_info->dci_ind->number_of_dcis, + dci_index->dci_format, + mac->def_dci_pdu_rel15[dci_index->dci_format].harq_pid); nr_scheduled_response_t scheduled_response; int8_t ret = handle_dci(dl_info->module_id, dl_info->cc_id, dl_info->gNB_index, dl_info->frame, dl_info->slot, - dl_info->dci_ind->dci_list+i); - - fapi_nr_dci_indication_pdu_t *dci_index = dl_info->dci_ind->dci_list+i; + dci_index); /* The check below filters out UL_DCIs (format 7) which are being processed as DL_DCIs. */ if (dci_index->dci_format == 7 && mac->ra.ra_state == RA_SUCCEEDED) { - LOG_D(NR_MAC, "We are filtering a UL_DCI to prevent it from being treated like a DL_DCI\n"); + LOG_I(NR_MAC, "We are filtering a UL_DCI to prevent it from being treated like a DL_DCI\n"); break; } dci_pdu_rel15_t *def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dci_index->dci_format]; @@ -1266,7 +1213,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, dl_info->module_id, dl_info->cc_id, dl_info->frame, dl_info->slot, dl_info->thread_id); nr_ue_if_module_inst[module_id]->scheduled_response(&scheduled_response); } - memset(def_dci_pdu_rel15, 0, sizeof(*def_dci_pdu_rel15)); + //memset(def_dci_pdu_rel15, 0, sizeof(*def_dci_pdu_rel15)); } free(dl_info->dci_ind); dl_info->dci_ind = NULL; From 9322701ce42f462a3fa42f0bf82b92875ff04ead Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Wed, 9 Feb 2022 13:32:09 -0800 Subject: [PATCH 013/150] Need a break if we queue a ul_tti_req based on PDU state If we dont have this break we are trying to queue the UL_TTI_REQ we just queued --- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 1 + 1 file changed, 1 insertion(+) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 1a68778df7..f5076dc180 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -945,6 +945,7 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea nfapi_nr_ul_tti_request_t *evicted_ul_tti_req = put_queue_replace(&nr_ul_tti_req_queue, ul_tti_request); free(evicted_ul_tti_req); } + break; } } break; From 65dadfb3e2eca0095cc76beb80d2ef7c8d420ce8 Mon Sep 17 00:00:00 2001 From: Melissa Date: Tue, 4 Jan 2022 16:52:25 +0000 Subject: [PATCH 014/150] Merge branch 'episys/master-nsa-nfapi-errors' into 'episys/master-nsa' nfapi.c: Add on_error() See merge request aburger/openairinterface5g!96 --- nfapi/open-nFAPI/nfapi/src/nfapi.c | 1627 +++++++++++++++------------- 1 file changed, 844 insertions(+), 783 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi.c b/nfapi/open-nFAPI/nfapi/src/nfapi.c index 2783781e2c..44ac0c3720 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi.c @@ -1,783 +1,844 @@ -/* - * Copyright (c) 2001-2016, Cisco Systems, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * Neither the name of the Cisco Systems, Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - - -// Fundamental routines - -uint8_t push8(uint8_t in, uint8_t **out, uint8_t *end) { - uint8_t *pOut = *out; - - if((end - pOut) >= 1) { - pOut[0] = in; - (*out)+=1; - return 1; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t pushs8(int8_t in, uint8_t **out, uint8_t *end) { - uint8_t *pOut = *out; - - if((end - pOut) >= 1) { - pOut[0] = in; - (*out)+=1; - return 1; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t push16(uint16_t in, uint8_t **out, uint8_t *end) { - uint8_t *pOut = *out; - - if((end - pOut) >= 2) { - pOut[0] = (in & 0xFF00) >> 8; - pOut[1] = (in & 0xFF); - (*out)+=2; - return 2; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t pushs16(int16_t in, uint8_t **out, uint8_t *end) { - uint8_t *pOut = *out; - - if((end - pOut) >= 2) { - pOut[0] = (in & 0xFF00) >> 8; - pOut[1] = (in & 0xFF); - (*out)+=2; - return 2; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t push32(uint32_t in, uint8_t **out, uint8_t *end) { - uint8_t *pOut = *out; - - if((end - pOut) >= 4) { - pOut[0] = (in & 0xFF000000) >> 24; - pOut[1] = (in & 0xFF0000) >> 16; - pOut[2] = (in & 0xFF00) >> 8; - pOut[3] = (in & 0xFF); - (*out)+=4; - return 4; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t pushs32(int32_t in, uint8_t **out, uint8_t *end) { - uint8_t *pOut = *out; - - if((end - pOut) >= 4) { - pOut[0] = (in & 0xFF000000) >> 24; - pOut[1] = (in & 0xFF0000) >> 16; - pOut[2] = (in & 0xFF00) >> 8; - pOut[3] = (in & 0xFF); - (*out)+=4; - return 4; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t pull8(uint8_t **in, uint8_t *out, uint8_t *end) { - uint8_t *pIn = *in; - - if((end - pIn) >= 1 ) { - *out = *pIn; - (*in)+=1; - return 1; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t pulls8(uint8_t **in, int8_t *out, uint8_t *end) { - uint8_t *pIn = *in; - - if((end - pIn) >= 1 ) { - *out = *pIn; - (*in)+=1; - return 1; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t pull16(uint8_t **in, uint16_t *out, uint8_t *end) { - uint8_t *pIn = *in; - - if((end - pIn) >=2 ) { - *out = ((pIn[0]) << 8) | pIn[1]; - (*in)+=2; - return 2; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t pulls16(uint8_t **in, int16_t *out, uint8_t *end) { - uint8_t *pIn = *in; - - if((end - pIn) >=2 ) { - *out = ((pIn[0]) << 8) | pIn[1]; - (*in)+=2; - return 2; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t pull32(uint8_t **in, uint32_t *out, uint8_t *end) { - uint8_t *pIn = *in; - - if((end - pIn) >=4 ) { - *out = (pIn[0] << 24) | (pIn[1] << 16) | (pIn[2] << 8) | pIn[3]; - (*in)+=4; - return 4; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t pulls32(uint8_t **in, int32_t *out, uint8_t *end) { - uint8_t *pIn = *in; - - if((end - pIn) >=4 ) { - *out = (pIn[0] << 24) | (pIn[1] << 16) | (pIn[2] << 8) | pIn[3]; - (*in)+=4; - return 4; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -/* -inline void pusharray16(uint8_t **, uint16_t, uint32_t len) -{ -} -*/ - -uint32_t pullarray16(uint8_t **in, uint16_t out[], uint32_t max_len, uint32_t len, uint8_t *end) { - if(len == 0) - return 1; - - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); - return 0; - } - - if((end - (*in)) >= sizeof(uint16_t) * len) { - uint32_t idx; - - for(idx = 0; idx < len; ++idx) { - if(!pull16(in, &out[idx], end)) - return 0; - } - - return sizeof(uint16_t) * len; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint32_t pullarrays16(uint8_t **in, int16_t out[], uint32_t max_len, uint32_t len, uint8_t *end) { - if(len == 0) - return 1; - - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); - return 0; - } - - if((end - (*in)) >= sizeof(uint16_t) * len) { - uint32_t idx; - - for(idx = 0; idx < len; ++idx) { - if(!pulls16(in, &out[idx], end)) - return 0; - } - - return sizeof(uint16_t) * len; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} -uint32_t pusharray16(uint16_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end) { - if(len == 0) - return 1; - - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); - return 0; - } - - if((end - (*out)) >= sizeof(uint16_t) * len) { - uint32_t idx; - - for(idx = 0; idx < len; ++idx) { - if(!push16(in[idx], out, end)) - return 0; - } - - return sizeof(uint16_t) * len; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} -uint32_t pusharrays16(int16_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end) { - if(len == 0) - return 1; - - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); - return 0; - } - - if((end - (*out)) >= sizeof(uint16_t) * len) { - uint32_t idx; - - for(idx = 0; idx < len; ++idx) { - pushs16(in[idx], out, end); - } - - return sizeof(uint16_t) * len; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} -uint32_t pullarray32(uint8_t **in, uint32_t out[], uint32_t max_len, uint32_t len, uint8_t *end) { - if(len == 0) - return 1; - - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); - return 0; - } - - if((end - (*in)) >= sizeof(uint32_t) * len) { - uint32_t idx; - - for(idx = 0; idx < len; ++idx) { - if(!pull32(in, &out[idx], end)) - return 0; - } - - return sizeof(uint32_t) * len; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint32_t pullarrays32(uint8_t **in, int32_t out[], uint32_t max_len, uint32_t len, uint8_t *end) { - if(len == 0) - return 1; - - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); - return 0; - } - - if((end - (*in)) >= sizeof(uint32_t) * len) { - uint32_t idx; - - for(idx = 0; idx < len; ++idx) { - if(!pulls32(in, &out[idx], end)) - return 0; - } - - return sizeof(uint32_t) * len; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} -uint32_t pusharray32(uint32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end) { - if(len == 0) - return 1; - - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); - return 0; - } - - if((end - (*out)) >= sizeof(uint32_t) * len) { - uint32_t idx; - - for(idx = 0; idx < len; ++idx) { - if(!push32(in[idx], out, end)) - return 0; - } - - return sizeof(uint32_t) * len; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} -uint32_t pusharrays32(int32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end) { - if(len == 0) - return 1; - - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); - return 0; - } - - if((end - (*out)) >= sizeof(uint32_t) * len) { - uint32_t idx; - - for(idx = 0; idx < len; ++idx) { - pushs32(in[idx], out, end); - } - - return sizeof(uint32_t) * len; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} -uint32_t pullarray8(uint8_t **in, uint8_t out[], uint32_t max_len, uint32_t len, uint8_t *end) { - if(len == 0) - return 1; - - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); - return 0; - } - - if((end - (*in)) >= sizeof(uint8_t) * len) { - memcpy(out, (*in), len); - (*in)+=len; - return sizeof(uint8_t) * len; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint32_t pusharray8(uint8_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end) { - if(len == 0) - return 1; - - if(len > max_len) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); - return 0; - } - - if((end - (*out)) >= sizeof(uint8_t) * len) { - memcpy((*out), in, len); - (*out)+=len; - return sizeof(uint8_t) * len; - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); - return 0; - } -} - -uint8_t packarray(void *array, uint16_t array_element_size, uint16_t max_count, uint16_t count, uint8_t **ppwritepackedmsg, uint8_t *end, pack_array_elem_fn fn) { - if(count > max_count) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, count, max_count); - return 0; - } - - uint16_t i = 0; - - for(i = 0; i < count; ++i) { - if((fn)(array, ppwritepackedmsg, end) == 0) - return 0; - - array += array_element_size; - } - - return 1; -} - -uint8_t unpackarray(uint8_t **ppReadPackedMsg, void *array, uint16_t array_element_size, uint16_t max_count, uint16_t count, uint8_t *end, unpack_array_elem_fn fn) { - if(count > max_count) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, count, max_count); - return 0; - } - - uint16_t i = 0; - - for(i = 0; i < count; ++i) { - if((fn)(array, ppReadPackedMsg, end) == 0) - return 0; - - array += array_element_size; - } - - return 1; -} - - -uint32_t pack_vendor_extension_tlv(nfapi_tl_t *ve, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) { - if(ve != 0 && config != 0) { - if(config->pack_vendor_extension_tlv) { - uint8_t *pStartOfTlv = *ppWritePackedMsg; - - if(pack_tl(ve, ppWritePackedMsg, end) == 0) - return 0; - - uint8_t *pStartOfValue = *ppWritePackedMsg; - - if((config->pack_vendor_extension_tlv)(ve, ppWritePackedMsg, end, config) == 0) - return 0; - - ve->length = (*ppWritePackedMsg) - pStartOfValue; - pack_tl(ve, &pStartOfTlv, end); - return 1; - } - } - - return 1; -} - -uint32_t unpack_vendor_extension_tlv(nfapi_tl_t *tl, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config, nfapi_tl_t **ve_tlv) { - if(ve_tlv != 0 && config != 0) { - if(config->unpack_vendor_extension_tlv) { - return (config->unpack_vendor_extension_tlv)(tl, ppReadPackedMsg, end, (void **)ve_tlv, config); - } - } - - return 1; -} - -uint32_t pack_p7_vendor_extension_tlv(nfapi_tl_t *ve, uint8_t **ppWritePackedMsg, uint8_t *end,nfapi_p7_codec_config_t *config) { - if(ve != 0 && config != 0) { - if(config->pack_vendor_extension_tlv) { - uint8_t *pStartOfTlv = *ppWritePackedMsg; - - if(pack_tl(ve, ppWritePackedMsg, end) == 0) - return 0; - - uint8_t *pStartOfValue = *ppWritePackedMsg; - - if((config->pack_vendor_extension_tlv)(ve, ppWritePackedMsg, end, config) == 0) - return 0; - - ve->length = (*ppWritePackedMsg) - pStartOfValue; - pack_tl(ve, &pStartOfTlv, end); - return 1; - } - } - - return 1; -} - -int unpack_p7_vendor_extension_tlv(nfapi_tl_t *tl, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t *config, nfapi_tl_t **ve_tlv) { - if(ve_tlv != 0 && config != 0) { - if(config->unpack_vendor_extension_tlv) { - return (config->unpack_vendor_extension_tlv)(tl, ppReadPackedMsg, end, (void **)ve_tlv, config); - } - } - - return 1; -} - - -uint8_t pack_tl(nfapi_tl_t *tl, uint8_t **ppWritePackedMsg, uint8_t *end) { - return (push16(tl->tag, ppWritePackedMsg, end) && - push16(tl->length, ppWritePackedMsg, end)); -} - -uint8_t unpack_tl(uint8_t **ppReadPackedMsg, nfapi_tl_t *tl, uint8_t *end) { - return (pull16(ppReadPackedMsg, &tl->tag, end) && - pull16(ppReadPackedMsg, &tl->length, end)); -} - -int unpack_tlv_list(unpack_tlv_t unpack_fns[], uint16_t size, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config, nfapi_tl_t **ve) { - nfapi_tl_t generic_tl; - uint8_t numBadTags = 0; - uint16_t idx = 0; - - while ((uint8_t *)(*ppReadPackedMsg) < end) { - // unpack the tl and process the values accordingly - if(unpack_tl(ppReadPackedMsg, &generic_tl, end) == 0) - return 0; - - uint8_t tagMatch = 0; - uint8_t *pStartOfValue = *ppReadPackedMsg; - - for(idx = 0; idx < size; ++idx) { - if(unpack_fns[idx].tag == generic_tl.tag) { // match the extracted tag value with all the tags in unpack_fn list - tagMatch = 1; - nfapi_tl_t *tl = (nfapi_tl_t *)(unpack_fns[idx].tlv); - tl->tag = generic_tl.tag; - tl->length = generic_tl.length; - int result = (*unpack_fns[idx].unpack_func)(tl, ppReadPackedMsg, end); - - if(result == 0) { - return 0; - } - - // check if the length was right; - if(tl->length != (*ppReadPackedMsg - pStartOfValue)) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "Warning tlv tag 0x%x length %d not equal to unpack %ld\n", tl->tag, tl->length, (*ppReadPackedMsg - pStartOfValue)); - } - } - } - - if(tagMatch == 0) { - if(generic_tl.tag >= NFAPI_VENDOR_EXTENSION_MIN_TAG_VALUE && - generic_tl.tag <= NFAPI_VENDOR_EXTENSION_MAX_TAG_VALUE) { - int result = unpack_vendor_extension_tlv(&generic_tl, ppReadPackedMsg, end, config, ve); - - if(result == 0) { - // got tot the end. - return 0; - } else if(result < 0) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown VE TAG value: 0x%04x\n", generic_tl.tag); - - if (++numBadTags > MAX_BAD_TAG) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n"); - return 0; - } - - if((end - *ppReadPackedMsg) >= generic_tl.length) { - // Advance past the unknown TLV - (*ppReadPackedMsg) += generic_tl.length; - } else { - // go to the end - return 0; - } - } - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown TAG value: 0x%04x\n", generic_tl.tag); - - if (++numBadTags > MAX_BAD_TAG) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n"); - return 0; - } - - if((end - *ppReadPackedMsg) >= generic_tl.length) { - // Advance past the unknown TLV - (*ppReadPackedMsg) += generic_tl.length; - } else { - // go to the end - return 0; - } - } - } - } - - return 1; -} -int unpack_p7_tlv_list(unpack_p7_tlv_t unpack_fns[], uint16_t size, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t *config, nfapi_tl_t **ve) { - nfapi_tl_t generic_tl; - uint8_t numBadTags = 0; - uint16_t idx = 0; - - while ((uint8_t *)(*ppReadPackedMsg) < end) { - // unpack the tl and process the values accordingly - if(unpack_tl(ppReadPackedMsg, &generic_tl, end) == 0) - return 0; - - uint8_t tagMatch = 0; - uint8_t *pStartOfValue = *ppReadPackedMsg; - - for(idx = 0; idx < size; ++idx) { - if(unpack_fns[idx].tag == generic_tl.tag) { - tagMatch = 1; - nfapi_tl_t *tl = (nfapi_tl_t *)(unpack_fns[idx].tlv); - tl->tag = generic_tl.tag; - tl->length = generic_tl.length; - int result = (*unpack_fns[idx].unpack_func)(tl, ppReadPackedMsg, end, config); - - if(result == 0) { - return 0; - } - - // check if the length was right; - if(tl->length != (*ppReadPackedMsg - pStartOfValue)) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "Warning tlv tag 0x%x length %d not equal to unpack %ld\n", tl->tag, tl->length, (*ppReadPackedMsg - pStartOfValue)); - } - } - } - - if(tagMatch == 0) { - if(generic_tl.tag >= NFAPI_VENDOR_EXTENSION_MIN_TAG_VALUE && - generic_tl.tag <= NFAPI_VENDOR_EXTENSION_MAX_TAG_VALUE) { - int result = unpack_p7_vendor_extension_tlv(&generic_tl, ppReadPackedMsg, end, config, ve); - - if(result == 0) { - // got to end - return 0; - } else if(result < 0) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown TAG value: 0x%04x\n", generic_tl.tag); - - if (++numBadTags > MAX_BAD_TAG) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n"); - return -1; - } - - if((end - *ppReadPackedMsg) >= generic_tl.length) { - // Advance past the unknown TLV - (*ppReadPackedMsg) += generic_tl.length; - } else { - // got ot the dn - return 0; - } - } - } else { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown TAG value: 0x%04x\n", generic_tl.tag); - - if (++numBadTags > MAX_BAD_TAG) { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n"); - return -1; - } - - if((end - *ppReadPackedMsg) >= generic_tl.length) { - // Advance past the unknown TLV - (*ppReadPackedMsg) += generic_tl.length; - } else { - // got ot the dn - return 0; - } - } - } - } - - return 1; -} - -// This intermediate function deals with calculating the length of the value -// and writing into the tlv header. -uint8_t pack_tlv(uint16_t tag, void *tlv, uint8_t **ppWritePackedMsg, uint8_t *end, pack_tlv_fn fn) { - nfapi_tl_t *tl = (nfapi_tl_t *)tlv; - - // If the tag is defined - if(tl->tag == tag) { - uint8_t *pStartOfTlv = *ppWritePackedMsg; - - // write a dumy tlv header - if(pack_tl(tl, ppWritePackedMsg, end) == 0) - return 0; - - // Record the start of the value - uint8_t *pStartOfValue = *ppWritePackedMsg; - - // pack the tlv value - if(fn(tlv, ppWritePackedMsg, end) == 0) - return 0; - - // calculate the length of the value and rewrite the tl header - tl->length = (*ppWritePackedMsg) - pStartOfValue; - // rewrite the header with the correct length - pack_tl(tl, &pStartOfTlv, end); - } else { - if(tl->tag != 0) { - NFAPI_TRACE(NFAPI_TRACE_WARN, "Warning pack_tlv tag 0x%x does not match expected 0x%x\n", tl->tag, tag); - } else { - //NFAPI_TRACE(NFAPI_TRACE_ERROR, "Warning pack_tlv tag 0x%x ZERO does not match expected 0x%x\n", tl->tag, tag); - } - } - - return 1; -} - -const char *nfapi_error_code_to_str(nfapi_error_code_e value) { - switch(value) { - case NFAPI_MSG_OK: - return "NFAPI_MSG_OK"; - - case NFAPI_MSG_INVALID_STATE: - return "NFAPI_MSG_INVALID_STATE"; - - case NFAPI_MSG_INVALID_CONFIG: - return "NFAPI_MSG_INVALID_CONFIG"; - - case NFAPI_SFN_OUT_OF_SYNC: - return "NFAPI_SFN_OUT_OF_SYNC"; - - case NFAPI_MSG_SUBFRAME_ERR: - return "NFAPI_MSG_SUBFRAME_ERR"; - - case NFAPI_MSG_BCH_MISSING: - return "NFAPI_MSG_BCH_MISSING"; - - case NFAPI_MSG_INVALID_SFN: - return "NFAPI_MSG_INVALID_SFN"; - - case NFAPI_MSG_HI_ERR: - return "NFAPI_MSG_HI_ERR"; - - case NFAPI_MSG_TX_ERR: - return "NFAPI_MSG_TX_ERR"; - - default: - return "UNKNOWN"; - } -} +/* + * Copyright (c) 2001-2016, Cisco Systems, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * Neither the name of the Cisco Systems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +// What to do when an error happens (e.g., a push or pull fails) +static inline void on_error() +{ + // show the call stack + int fd = STDERR_FILENO; + static const char msg[] = "---stack trace---\n"; + __attribute__((unused)) int r = + write(fd, msg, sizeof(msg) - 1); + void *buffer[100]; + int nptrs = backtrace(buffer, sizeof(buffer) / sizeof(buffer[0])); + backtrace_symbols_fd(buffer, nptrs, fd); + + //abort(); +} + +// Fundamental routines + +uint8_t push8(uint8_t in, uint8_t **out, uint8_t *end) { + uint8_t *pOut = *out; + + if((end - pOut) >= 1) { + pOut[0] = in; + (*out)+=1; + return 1; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t pushs8(int8_t in, uint8_t **out, uint8_t *end) { + uint8_t *pOut = *out; + + if((end - pOut) >= 1) { + pOut[0] = in; + (*out)+=1; + return 1; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t push16(uint16_t in, uint8_t **out, uint8_t *end) { + uint8_t *pOut = *out; + + if((end - pOut) >= 2) { + pOut[0] = (in & 0xFF00) >> 8; + pOut[1] = (in & 0xFF); + (*out)+=2; + return 2; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t pushs16(int16_t in, uint8_t **out, uint8_t *end) { + uint8_t *pOut = *out; + + if((end - pOut) >= 2) { + pOut[0] = (in & 0xFF00) >> 8; + pOut[1] = (in & 0xFF); + (*out)+=2; + return 2; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t push32(uint32_t in, uint8_t **out, uint8_t *end) { + uint8_t *pOut = *out; + + if((end - pOut) >= 4) { + pOut[0] = (in & 0xFF000000) >> 24; + pOut[1] = (in & 0xFF0000) >> 16; + pOut[2] = (in & 0xFF00) >> 8; + pOut[3] = (in & 0xFF); + (*out)+=4; + return 4; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t pushs32(int32_t in, uint8_t **out, uint8_t *end) { + uint8_t *pOut = *out; + + if((end - pOut) >= 4) { + pOut[0] = (in & 0xFF000000) >> 24; + pOut[1] = (in & 0xFF0000) >> 16; + pOut[2] = (in & 0xFF00) >> 8; + pOut[3] = (in & 0xFF); + (*out)+=4; + return 4; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t pull8(uint8_t **in, uint8_t *out, uint8_t *end) { + uint8_t *pIn = *in; + + if((end - pIn) >= 1 ) { + *out = *pIn; + (*in)+=1; + return 1; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t pulls8(uint8_t **in, int8_t *out, uint8_t *end) { + uint8_t *pIn = *in; + + if((end - pIn) >= 1 ) { + *out = *pIn; + (*in)+=1; + return 1; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t pull16(uint8_t **in, uint16_t *out, uint8_t *end) { + uint8_t *pIn = *in; + + if((end - pIn) >=2 ) { + *out = ((pIn[0]) << 8) | pIn[1]; + (*in)+=2; + return 2; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t pulls16(uint8_t **in, int16_t *out, uint8_t *end) { + uint8_t *pIn = *in; + + if((end - pIn) >=2 ) { + *out = ((pIn[0]) << 8) | pIn[1]; + (*in)+=2; + return 2; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t pull32(uint8_t **in, uint32_t *out, uint8_t *end) { + uint8_t *pIn = *in; + + if((end - pIn) >=4 ) { + *out = (pIn[0] << 24) | (pIn[1] << 16) | (pIn[2] << 8) | pIn[3]; + (*in)+=4; + return 4; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t pulls32(uint8_t **in, int32_t *out, uint8_t *end) { + uint8_t *pIn = *in; + + if((end - pIn) >=4 ) { + *out = (pIn[0] << 24) | (pIn[1] << 16) | (pIn[2] << 8) | pIn[3]; + (*in)+=4; + return 4; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +/* +inline void pusharray16(uint8_t **, uint16_t, uint32_t len) +{ +} +*/ + +uint32_t pullarray16(uint8_t **in, uint16_t out[], uint32_t max_len, uint32_t len, uint8_t *end) { + if(len == 0) + return 1; + + if(len > max_len) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + on_error(); + return 0; + } + + if((end - (*in)) >= sizeof(uint16_t) * len) { + uint32_t idx; + + for(idx = 0; idx < len; ++idx) { + if(!pull16(in, &out[idx], end)) + return 0; + } + + return sizeof(uint16_t) * len; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint32_t pullarrays16(uint8_t **in, int16_t out[], uint32_t max_len, uint32_t len, uint8_t *end) { + if(len == 0) + return 1; + + if(len > max_len) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + on_error(); + return 0; + } + + if((end - (*in)) >= sizeof(uint16_t) * len) { + uint32_t idx; + + for(idx = 0; idx < len; ++idx) { + if(!pulls16(in, &out[idx], end)) + return 0; + } + + return sizeof(uint16_t) * len; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} +uint32_t pusharray16(uint16_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end) { + if(len == 0) + return 1; + + if(len > max_len) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + on_error(); + return 0; + } + + if((end - (*out)) >= sizeof(uint16_t) * len) { + uint32_t idx; + + for(idx = 0; idx < len; ++idx) { + if(!push16(in[idx], out, end)) + return 0; + } + + return sizeof(uint16_t) * len; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} +uint32_t pusharrays16(int16_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end) { + if(len == 0) + return 1; + + if(len > max_len) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + on_error(); + return 0; + } + + if((end - (*out)) >= sizeof(uint16_t) * len) { + uint32_t idx; + + for(idx = 0; idx < len; ++idx) { + if (!pushs16(in[idx], out, end)) + return 0; + } + + return sizeof(uint16_t) * len; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} +uint32_t pullarray32(uint8_t **in, uint32_t out[], uint32_t max_len, uint32_t len, uint8_t *end) { + if(len == 0) + return 1; + + if(len > max_len) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + on_error(); + return 0; + } + + if((end - (*in)) >= sizeof(uint32_t) * len) { + uint32_t idx; + + for(idx = 0; idx < len; ++idx) { + if(!pull32(in, &out[idx], end)) + return 0; + } + + return sizeof(uint32_t) * len; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint32_t pullarrays32(uint8_t **in, int32_t out[], uint32_t max_len, uint32_t len, uint8_t *end) { + if(len == 0) + return 1; + + if(len > max_len) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + on_error(); + return 0; + } + + if((end - (*in)) >= sizeof(uint32_t) * len) { + uint32_t idx; + + for(idx = 0; idx < len; ++idx) { + if(!pulls32(in, &out[idx], end)) + return 0; + } + + return sizeof(uint32_t) * len; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} +uint32_t pusharray32(uint32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end) { + if(len == 0) + return 1; + + if(len > max_len) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + on_error(); + return 0; + } + + if((end - (*out)) >= sizeof(uint32_t) * len) { + uint32_t idx; + + for(idx = 0; idx < len; ++idx) { + if(!push32(in[idx], out, end)) + return 0; + } + + return sizeof(uint32_t) * len; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} +uint32_t pusharrays32(int32_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end) { + if(len == 0) + return 1; + + if(len > max_len) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + on_error(); + return 0; + } + + if((end - (*out)) >= sizeof(uint32_t) * len) { + uint32_t idx; + + for(idx = 0; idx < len; ++idx) { + if (!pushs32(in[idx], out, end)) + return 0; + } + + return sizeof(uint32_t) * len; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} +uint32_t pullarray8(uint8_t **in, uint8_t out[], uint32_t max_len, uint32_t len, uint8_t *end) { + if(len == 0) + return 1; + + if(len > max_len) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + on_error(); + return 0; + } + + if((end - (*in)) >= sizeof(uint8_t) * len) { + memcpy(out, (*in), len); + (*in)+=len; + return sizeof(uint8_t) * len; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint32_t pusharray8(uint8_t in[], uint32_t max_len, uint32_t len, uint8_t **out, uint8_t *end) { + if(len == 0) + return 1; + + if(len > max_len) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, len, max_len); + on_error(); + return 0; + } + + if((end - (*out)) >= sizeof(uint8_t) * len) { + memcpy((*out), in, len); + (*out)+=len; + return sizeof(uint8_t) * len; + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s no space in buffer\n", __FUNCTION__); + on_error(); + return 0; + } +} + +uint8_t packarray(void *array, uint16_t array_element_size, uint16_t max_count, uint16_t count, uint8_t **ppwritepackedmsg, uint8_t *end, pack_array_elem_fn fn) { + if(count > max_count) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, count, max_count); + on_error(); + return 0; + } + + uint16_t i = 0; + + for(i = 0; i < count; ++i) { + if((fn)(array, ppwritepackedmsg, end) == 0) + return 0; + + array += array_element_size; + } + + return 1; +} + +uint8_t unpackarray(uint8_t **ppReadPackedMsg, void *array, uint16_t array_element_size, uint16_t max_count, uint16_t count, uint8_t *end, unpack_array_elem_fn fn) { + if(count > max_count) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, count, max_count); + on_error(); + return 0; + } + + uint16_t i = 0; + + for(i = 0; i < count; ++i) { + if((fn)(array, ppReadPackedMsg, end) == 0) + return 0; + + array += array_element_size; + } + + return 1; +} + + +uint32_t pack_vendor_extension_tlv(nfapi_tl_t *ve, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config) { + if(ve != 0 && config != 0) { + if(config->pack_vendor_extension_tlv) { + uint8_t *pStartOfTlv = *ppWritePackedMsg; + + if(pack_tl(ve, ppWritePackedMsg, end) == 0) + return 0; + + uint8_t *pStartOfValue = *ppWritePackedMsg; + + if((config->pack_vendor_extension_tlv)(ve, ppWritePackedMsg, end, config) == 0) + return 0; + + ve->length = (*ppWritePackedMsg) - pStartOfValue; + pack_tl(ve, &pStartOfTlv, end); + return 1; + } + } + + return 1; +} + +uint32_t unpack_vendor_extension_tlv(nfapi_tl_t *tl, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config, nfapi_tl_t **ve_tlv) { + if(ve_tlv != 0 && config != 0) { + if(config->unpack_vendor_extension_tlv) { + return (config->unpack_vendor_extension_tlv)(tl, ppReadPackedMsg, end, (void **)ve_tlv, config); + } + } + + return 1; +} + +uint32_t pack_p7_vendor_extension_tlv(nfapi_tl_t *ve, uint8_t **ppWritePackedMsg, uint8_t *end,nfapi_p7_codec_config_t *config) { + if(ve != 0 && config != 0) { + if(config->pack_vendor_extension_tlv) { + uint8_t *pStartOfTlv = *ppWritePackedMsg; + + if(pack_tl(ve, ppWritePackedMsg, end) == 0) + return 0; + + uint8_t *pStartOfValue = *ppWritePackedMsg; + + if((config->pack_vendor_extension_tlv)(ve, ppWritePackedMsg, end, config) == 0) + return 0; + + ve->length = (*ppWritePackedMsg) - pStartOfValue; + pack_tl(ve, &pStartOfTlv, end); + return 1; + } + } + + return 1; +} + +int unpack_p7_vendor_extension_tlv(nfapi_tl_t *tl, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t *config, nfapi_tl_t **ve_tlv) { + if(ve_tlv != 0 && config != 0) { + if(config->unpack_vendor_extension_tlv) { + return (config->unpack_vendor_extension_tlv)(tl, ppReadPackedMsg, end, (void **)ve_tlv, config); + } + } + + return 1; +} + + +uint8_t pack_tl(nfapi_tl_t *tl, uint8_t **ppWritePackedMsg, uint8_t *end) { + return (push16(tl->tag, ppWritePackedMsg, end) && + push16(tl->length, ppWritePackedMsg, end)); +} + +uint8_t unpack_tl(uint8_t **ppReadPackedMsg, nfapi_tl_t *tl, uint8_t *end) { + return (pull16(ppReadPackedMsg, &tl->tag, end) && + pull16(ppReadPackedMsg, &tl->length, end)); +} + +int unpack_tlv_list(unpack_tlv_t unpack_fns[], uint16_t size, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p4_p5_codec_config_t *config, nfapi_tl_t **ve) { + nfapi_tl_t generic_tl; + uint8_t numBadTags = 0; + uint16_t idx = 0; + + while ((uint8_t *)(*ppReadPackedMsg) < end) { + // unpack the tl and process the values accordingly + if(unpack_tl(ppReadPackedMsg, &generic_tl, end) == 0) + return 0; + + uint8_t tagMatch = 0; + uint8_t *pStartOfValue = *ppReadPackedMsg; + + for(idx = 0; idx < size; ++idx) { + if(unpack_fns[idx].tag == generic_tl.tag) { // match the extracted tag value with all the tags in unpack_fn list + tagMatch = 1; + nfapi_tl_t *tl = (nfapi_tl_t *)(unpack_fns[idx].tlv); + tl->tag = generic_tl.tag; + tl->length = generic_tl.length; + int result = (*unpack_fns[idx].unpack_func)(tl, ppReadPackedMsg, end); + + if(result == 0) { + return 0; + } + + // check if the length was right; + if(tl->length != (*ppReadPackedMsg - pStartOfValue)) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "Warning tlv tag 0x%x length %d not equal to unpack %ld\n", tl->tag, tl->length, (*ppReadPackedMsg - pStartOfValue)); + on_error(); + } + } + } + + if(tagMatch == 0) { + if(generic_tl.tag >= NFAPI_VENDOR_EXTENSION_MIN_TAG_VALUE && + generic_tl.tag <= NFAPI_VENDOR_EXTENSION_MAX_TAG_VALUE) { + int result = unpack_vendor_extension_tlv(&generic_tl, ppReadPackedMsg, end, config, ve); + + if(result == 0) { + // got tot the end. + return 0; + } else if(result < 0) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown VE TAG value: 0x%04x\n", generic_tl.tag); + on_error(); + + if (++numBadTags > MAX_BAD_TAG) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n"); + on_error(); + return 0; + } + + if((end - *ppReadPackedMsg) >= generic_tl.length) { + // Advance past the unknown TLV + (*ppReadPackedMsg) += generic_tl.length; + } else { + // go to the end + return 0; + } + } + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown TAG value: 0x%04x\n", generic_tl.tag); + on_error(); + + if (++numBadTags > MAX_BAD_TAG) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n"); + on_error(); + return 0; + } + + if((end - *ppReadPackedMsg) >= generic_tl.length) { + // Advance past the unknown TLV + (*ppReadPackedMsg) += generic_tl.length; + } else { + // go to the end + return 0; + } + } + } + } + + return 1; +} +int unpack_p7_tlv_list(unpack_p7_tlv_t unpack_fns[], uint16_t size, uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_p7_codec_config_t *config, nfapi_tl_t **ve) { + nfapi_tl_t generic_tl; + uint8_t numBadTags = 0; + uint16_t idx = 0; + + while ((uint8_t *)(*ppReadPackedMsg) < end) { + // unpack the tl and process the values accordingly + if(unpack_tl(ppReadPackedMsg, &generic_tl, end) == 0) + return 0; + + uint8_t tagMatch = 0; + uint8_t *pStartOfValue = *ppReadPackedMsg; + + for(idx = 0; idx < size; ++idx) { + if(unpack_fns[idx].tag == generic_tl.tag) { + tagMatch = 1; + nfapi_tl_t *tl = (nfapi_tl_t *)(unpack_fns[idx].tlv); + tl->tag = generic_tl.tag; + tl->length = generic_tl.length; + int result = (*unpack_fns[idx].unpack_func)(tl, ppReadPackedMsg, end, config); + + if(result == 0) { + return 0; + } + + // check if the length was right; + if(tl->length != (*ppReadPackedMsg - pStartOfValue)) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "Warning tlv tag 0x%x length %d not equal to unpack %ld\n", tl->tag, tl->length, (*ppReadPackedMsg - pStartOfValue)); + on_error(); + } + } + } + + if(tagMatch == 0) { + if(generic_tl.tag >= NFAPI_VENDOR_EXTENSION_MIN_TAG_VALUE && + generic_tl.tag <= NFAPI_VENDOR_EXTENSION_MAX_TAG_VALUE) { + int result = unpack_p7_vendor_extension_tlv(&generic_tl, ppReadPackedMsg, end, config, ve); + + if(result == 0) { + // got to end + return 0; + } else if(result < 0) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown TAG value: 0x%04x\n", generic_tl.tag); + on_error(); + + if (++numBadTags > MAX_BAD_TAG) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n"); + on_error(); + return -1; + } + + if((end - *ppReadPackedMsg) >= generic_tl.length) { + // Advance past the unknown TLV + (*ppReadPackedMsg) += generic_tl.length; + } else { + // got ot the dn + return 0; + } + } + } else { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "Unknown TAG value: 0x%04x\n", generic_tl.tag); + on_error(); + + if (++numBadTags > MAX_BAD_TAG) { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "Supplied message has had too many bad tags\n"); + on_error(); + return -1; + } + + if((end - *ppReadPackedMsg) >= generic_tl.length) { + // Advance past the unknown TLV + (*ppReadPackedMsg) += generic_tl.length; + } else { + // got ot the dn + return 0; + } + } + } + } + + return 1; +} + +// This intermediate function deals with calculating the length of the value +// and writing into the tlv header. +uint8_t pack_tlv(uint16_t tag, void *tlv, uint8_t **ppWritePackedMsg, uint8_t *end, pack_tlv_fn fn) { + nfapi_tl_t *tl = (nfapi_tl_t *)tlv; + + // If the tag is defined + if(tl->tag == tag) { + uint8_t *pStartOfTlv = *ppWritePackedMsg; + + // write a dumy tlv header + if(pack_tl(tl, ppWritePackedMsg, end) == 0) + return 0; + + // Record the start of the value + uint8_t *pStartOfValue = *ppWritePackedMsg; + + // pack the tlv value + if(fn(tlv, ppWritePackedMsg, end) == 0) + return 0; + + // calculate the length of the value and rewrite the tl header + tl->length = (*ppWritePackedMsg) - pStartOfValue; + // rewrite the header with the correct length + pack_tl(tl, &pStartOfTlv, end); + } else { + if(tl->tag != 0) { + NFAPI_TRACE(NFAPI_TRACE_WARN, "Warning pack_tlv tag 0x%x does not match expected 0x%x\n", tl->tag, tag); + } else { + //NFAPI_TRACE(NFAPI_TRACE_ERROR, "Warning pack_tlv tag 0x%x ZERO does not match expected 0x%x\n", tl->tag, tag); + } + } + + return 1; +} + +const char *nfapi_error_code_to_str(nfapi_error_code_e value) { + switch(value) { + case NFAPI_MSG_OK: + return "NFAPI_MSG_OK"; + + case NFAPI_MSG_INVALID_STATE: + return "NFAPI_MSG_INVALID_STATE"; + + case NFAPI_MSG_INVALID_CONFIG: + return "NFAPI_MSG_INVALID_CONFIG"; + + case NFAPI_SFN_OUT_OF_SYNC: + return "NFAPI_SFN_OUT_OF_SYNC"; + + case NFAPI_MSG_SUBFRAME_ERR: + return "NFAPI_MSG_SUBFRAME_ERR"; + + case NFAPI_MSG_BCH_MISSING: + return "NFAPI_MSG_BCH_MISSING"; + + case NFAPI_MSG_INVALID_SFN: + return "NFAPI_MSG_INVALID_SFN"; + + case NFAPI_MSG_HI_ERR: + return "NFAPI_MSG_HI_ERR"; + + case NFAPI_MSG_TX_ERR: + return "NFAPI_MSG_TX_ERR"; + + default: + return "UNKNOWN"; + } +} From e81b901355fdb5e97792e94f53f7b9bf36b36df8 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Wed, 9 Feb 2022 14:05:05 -0800 Subject: [PATCH 015/150] nFAPI bug fix. Not properly packing/unpacking PUCCH PDU Attempting to manually cherry-pick this commit: 30c14c2f5ac7de6885941d73fc492072b8d48759 --- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 251 +++++++++++++++++--------- 1 file changed, 164 insertions(+), 87 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index adc6d6e384..3817aa0895 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -3216,57 +3216,79 @@ static uint8_t pack_nr_uci_pucch_0_1(void* tlv, uint8_t **ppWritePackedMsg, uint static uint8_t pack_nr_uci_pucch_2_3_4(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end) { nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value = (nfapi_nr_uci_pucch_pdu_format_2_3_4_t*) tlv; - if(!(push8(value->pduBitmap, ppWritePackedMsg, end) && - push32(value->handle, ppWritePackedMsg, end) && - push16(value->rnti, ppWritePackedMsg, end) && - push8(value->pucch_format, ppWritePackedMsg, end) && - push8(value->ul_cqi, ppWritePackedMsg, end) && - push16(value->timing_advance, ppWritePackedMsg, end) && - push16(value->rssi, ppWritePackedMsg, end) - )) - return 0; + if (!push8(value->pduBitmap, ppWritePackedMsg, end)) + return 0; + if (!push32(value->handle, ppWritePackedMsg, end)) + return 0; + if (!push16(value->rnti, ppWritePackedMsg, end)) + return 0; + if (!push8(value->pucch_format, ppWritePackedMsg, end)) + return 0; + if (!push8(value->ul_cqi, ppWritePackedMsg, end)) + return 0; + if (!push16(value->timing_advance, ppWritePackedMsg, end)) + return 0; + if (!push16(value->rssi, ppWritePackedMsg, end)) + return 0; if (value->pduBitmap & 0x01) { //SR - if(!(push8(value->sr.sr_bit_len, ppWritePackedMsg, end) && - pusharray8(value->sr.sr_payload, (int)(value->sr.sr_bit_len / 8) + 1, (int)(value->sr.sr_bit_len / 8) + 1, ppWritePackedMsg, end) - )) - return 0; - } - - if (((value->pduBitmap >> 1) & 0x01)) { //HARQ - if(!(push8(value->harq.harq_crc, ppWritePackedMsg, end) && - push8(value->harq.harq_bit_len, ppWritePackedMsg, end) && - pusharray8(value->harq.harq_payload, (int)(value->harq.harq_bit_len / 8) + 1, (int)(value->harq.harq_bit_len / 8) + 1, ppWritePackedMsg, end) - )) + if (!push16(value->sr.sr_bit_len, ppWritePackedMsg, end)) + return 0; + if (!pusharray8(value->sr.sr_payload, + (int)((value->sr.sr_bit_len / 8) + 1), + (int)((value->sr.sr_bit_len / 8) + 1), + ppWritePackedMsg, + end)) return 0; } - if (((value->pduBitmap >> 2) & 0x01)) { //CSI-1 - if(!(push8(value->csi_part1.csi_part1_crc, ppWritePackedMsg, end) && - push8(value->csi_part1.csi_part1_bit_len, ppWritePackedMsg, end) && - pusharray8(value->csi_part1.csi_part1_payload, (int)(value->csi_part1.csi_part1_bit_len / 8) + 1, (int)(value->csi_part1.csi_part1_bit_len / 8) + 1, ppWritePackedMsg, end) - )) + if ((value->pduBitmap >> 1) & 0x01) { //HARQ + if (!push8(value->harq.harq_crc, ppWritePackedMsg, end)) + return 0; + if (!push16(value->harq.harq_bit_len, ppWritePackedMsg, end)) + return 0; + if (!pusharray8(value->harq.harq_payload, + (int)((value->harq.harq_bit_len / 8) + 1), + (int)((value->harq.harq_bit_len / 8) + 1), + ppWritePackedMsg, + end)) return 0; } - if (((value->pduBitmap >> 3) & 0x01)) { //CSI-2 - if(!(push8(value->csi_part2.csi_part2_crc, ppWritePackedMsg, end) && - push8(value->csi_part2.csi_part2_bit_len, ppWritePackedMsg, end) && - pusharray8(value->csi_part2.csi_part2_payload, (int)(value->csi_part2.csi_part2_bit_len / 8) + 1, (int)(value->csi_part2.csi_part2_bit_len / 8) + 1, ppWritePackedMsg, end) - )) + if ((value->pduBitmap >> 2) & 0x01) { //CSI-1 + if (!push8(value->csi_part1.csi_part1_crc, ppWritePackedMsg, end)) + return 0; + if (!push16(value->csi_part1.csi_part1_bit_len, ppWritePackedMsg, end)) + return 0; + if (!pusharray8(value->csi_part1.csi_part1_payload, + (int)((value->csi_part1.csi_part1_bit_len / 8) + 1), + (int)((value->csi_part1.csi_part1_bit_len / 8) + 1), + ppWritePackedMsg, + end)) + return 0; + } + + if ((value->pduBitmap >> 3) & 0x01) { //CSI-2 + if (!push8(value->csi_part2.csi_part2_crc, ppWritePackedMsg, end)) + return 0; + if (!push16(value->csi_part2.csi_part2_bit_len, ppWritePackedMsg, end)) + return 0; + if (!pusharray8(value->csi_part2.csi_part2_payload, + (int)((value->csi_part2.csi_part2_bit_len / 8) + 1), + (int)((value->csi_part2.csi_part2_bit_len / 8) + 1), + ppWritePackedMsg, + end)) return 0; } return 1; } -static uint8_t pack_nr_uci_indication_body(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end) +static uint8_t pack_nr_uci_indication_body(nfapi_nr_uci_t* value, uint8_t **ppWritePackedMsg, uint8_t *end) { - nfapi_nr_uci_t* value = (nfapi_nr_uci_t*)tlv; - - if(!(push16(value->pdu_type, ppWritePackedMsg, end) && - push16(value->pdu_size, ppWritePackedMsg, end) - )) + if (!push16(value->pdu_type, ppWritePackedMsg, end)) + return 0; + if (!push16(value->pdu_size, ppWritePackedMsg, end)) return 0; switch (value->pdu_type) { @@ -3290,13 +3312,14 @@ static uint8_t pack_nr_uci_indication(void *msg, uint8_t **ppWritePackedMsg, uin { nfapi_nr_uci_indication_t *pNfapiMsg = (nfapi_nr_uci_indication_t*)msg; - if (!(push16(pNfapiMsg->sfn , ppWritePackedMsg, end) && - push16(pNfapiMsg->slot , ppWritePackedMsg, end) && - push16(pNfapiMsg->num_ucis, ppWritePackedMsg, end) - )) + if (!push16(pNfapiMsg->sfn , ppWritePackedMsg, end)) + return 0; + if (!push16(pNfapiMsg->slot , ppWritePackedMsg, end)) + return 0; + if (!push16(pNfapiMsg->num_ucis, ppWritePackedMsg, end)) return 0; - for(int i=0; inum_ucis;i++) + for (int i = 0; i < pNfapiMsg->num_ucis; i++) { if (!pack_nr_uci_indication_body(&pNfapiMsg->uci_list[i], ppWritePackedMsg, end)) return 0; @@ -5907,58 +5930,111 @@ static uint8_t unpack_nr_uci_pucch_0_1(nfapi_nr_uci_pucch_pdu_format_0_1_t *valu } -static uint8_t unpack_nr_uci_pucch_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t* tlv, uint8_t **ppReadPackedMsg, uint8_t *end) { - nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value = (nfapi_nr_uci_pucch_pdu_format_2_3_4_t*) tlv; +static uint8_t unpack_nr_uci_pucch_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t* value, + uint8_t **ppReadPackedMsg, + uint8_t *end, + nfapi_p7_codec_config_t *config) { + + if (!pull8(ppReadPackedMsg, &value->pduBitmap, end)) + return 0; + if (!pull32(ppReadPackedMsg, &value->handle, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->rnti, end)) + return 0; + if (!pull8(ppReadPackedMsg, &value->pucch_format, end)) + return 0; + if (!pull8(ppReadPackedMsg, &value->ul_cqi, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->timing_advance, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->rssi, end)) + return 0; - if(!(pull8(ppReadPackedMsg, &value->pduBitmap, end) && - pull32(ppReadPackedMsg, &value->handle, end) && - pull16(ppReadPackedMsg, &value->rnti, end) && - pull8(ppReadPackedMsg, &value->pucch_format, end) && - pull8(ppReadPackedMsg, &value->ul_cqi, end) && - pull16(ppReadPackedMsg, &value->timing_advance, end) && - pull16(ppReadPackedMsg, &value->rssi, end) - )) - return 0; if (value->pduBitmap & 0x01) { //SR - if(!(pull16(ppReadPackedMsg, &value->sr.sr_bit_len, end))) + if (!pull16(ppReadPackedMsg, &value->sr.sr_bit_len, end)) return 0; - value->sr.sr_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->sr.sr_bit_len/8))); - - if(!(pullarray8(ppReadPackedMsg, &value->sr.sr_payload[0], (int)(value->sr.sr_bit_len / 8), (int)(value->sr.sr_bit_len / 8), end))) - return 0; - } - - if (((value->pduBitmap >> 1) & 0x01)) { //HARQ - if(!(pull8(ppReadPackedMsg, &value->harq.harq_crc, end)) && - (pull16(ppReadPackedMsg, &value->harq.harq_bit_len, end))) + value->sr.sr_payload = nfapi_p7_allocate(sizeof(*value->sr.sr_payload) * + (int)((value->sr.sr_bit_len / 8) + 1), + config); + if (value->sr.sr_payload == NULL) + { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->sr.sr_payload\n", __FUNCTION__); return 0; + } - value->harq.harq_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->harq.harq_bit_len/8 ))); - - if(!(pullarray8(ppReadPackedMsg, value->harq.harq_payload, (int)(value->harq.harq_bit_len / 8), (int)(value->harq.harq_bit_len / 8), end))) + if (!pullarray8(ppReadPackedMsg, value->sr.sr_payload, + (int)((value->sr.sr_bit_len / 8) + 1), + (int)((value->sr.sr_bit_len / 8) + 1), + end)) return 0; } - if (((value->pduBitmap >> 2) & 0x01)) { //CSI-1 - if(!(pull8(ppReadPackedMsg, &value->csi_part1.csi_part1_crc, end)) && - (pull16(ppReadPackedMsg, &value->csi_part1.csi_part1_bit_len, end))) + if ((value->pduBitmap >> 1) & 0x01) { //HARQ + if (!pull8(ppReadPackedMsg, &value->harq.harq_crc, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->harq.harq_bit_len, end)) return 0; - value->csi_part1.csi_part1_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->csi_part1.csi_part1_bit_len/8))); + value->harq.harq_payload = nfapi_p7_allocate(sizeof(*value->harq.harq_payload) * + (int)((value->harq.harq_bit_len / 8) + 1), + config); + if (value->harq.harq_payload == NULL) + { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->harq.harq_payload\n", __FUNCTION__); + return 0; + } -// if(!(pullarray8(ppReadPackedMsg, value->csi_part1.csi_part1_payload, (int)(value->csi_part1.csi_part1_bit_len / 8), (int)(value->csi_part1.csi_part1_bit_len / 8), end))) -// return 0; + if (!pullarray8(ppReadPackedMsg, value->harq.harq_payload, + (int)((value->harq.harq_bit_len / 8) + 1), + (int)((value->harq.harq_bit_len / 8) + 1), + end)) + return 0; } - if (((value->pduBitmap >> 3) & 0x01)) { //CSI-2 - if(!(pull8(ppReadPackedMsg, &value->csi_part2.csi_part2_crc, end)) && - (pull16(ppReadPackedMsg, &value->csi_part2.csi_part2_bit_len, end))) + if ((value->pduBitmap >> 2) & 0x01) { //CSI-1 + if (!pull8(ppReadPackedMsg, &value->csi_part1.csi_part1_crc, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->csi_part1.csi_part1_bit_len, end)) return 0; - value->csi_part2.csi_part2_payload = (uint8_t*) malloc(sizeof(uint8_t) * ((value->csi_part2.csi_part2_bit_len/8 ))); + value->csi_part1.csi_part1_payload = nfapi_p7_allocate(sizeof(*value->csi_part1.csi_part1_payload) * + (int)((value->csi_part1.csi_part1_bit_len / 8) + 1), + config); + if (value->csi_part1.csi_part1_payload == NULL) + { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->csi_part1.csi_part1_payload\n", + __FUNCTION__); + return 0; + } - if(!(pullarray8(ppReadPackedMsg, value->csi_part2.csi_part2_payload, (int)(value->csi_part2.csi_part2_bit_len / 8) , (int)(value->csi_part2.csi_part2_bit_len / 8) , end))) + if (!pullarray8(ppReadPackedMsg, value->csi_part1.csi_part1_payload, + (int)((value->csi_part1.csi_part1_bit_len / 8) + 1), + (int)((value->csi_part1.csi_part1_bit_len / 8) + 1), + end)) + return 0; + } + + if ((value->pduBitmap >> 3) & 0x01) { //CSI-2 + if (!pull8(ppReadPackedMsg, &value->csi_part2.csi_part2_crc, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->csi_part2.csi_part2_bit_len, end)) + return 0; + + value->csi_part2.csi_part2_payload = nfapi_p7_allocate(sizeof(*value->csi_part2.csi_part2_payload) * + (int)((value->csi_part2.csi_part2_bit_len / 8) + 1), + config); + if (value->csi_part2.csi_part2_payload == NULL) + { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s failed to allocate value->csi_part2.csi_part2_payload\n", + __FUNCTION__); + return 0; + } + + if (!pullarray8(ppReadPackedMsg, value->csi_part2.csi_part2_payload, + (int)((value->csi_part2.csi_part2_bit_len / 8) + 1), + (int)((value->csi_part2.csi_part2_bit_len / 8) + 1), + end)) return 0; } @@ -5970,9 +6046,9 @@ static uint8_t unpack_nr_uci_indication_body(nfapi_nr_uci_t *value, uint8_t *end, nfapi_p7_codec_config_t *config) { - if(!(pull16(ppReadPackedMsg, &value->pdu_type, end) && - pull16(ppReadPackedMsg, &value->pdu_size, end) - )) + if (!pull16(ppReadPackedMsg, &value->pdu_type, end)) + return 0; + if (!pull16(ppReadPackedMsg, &value->pdu_size, end)) return 0; switch (value->pdu_type) { @@ -5988,7 +6064,7 @@ static uint8_t unpack_nr_uci_indication_body(nfapi_nr_uci_t *value, } case NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE: { nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_pdu = &value->pucch_pdu_format_2_3_4; - if (!unpack_nr_uci_pucch_2_3_4(uci_pdu, ppReadPackedMsg, end)) + if (!unpack_nr_uci_pucch_2_3_4(uci_pdu, ppReadPackedMsg, end, config)) return 0; break; } @@ -6004,17 +6080,18 @@ static uint8_t unpack_nr_uci_indication(uint8_t **ppReadPackedMsg, uint8_t *end, { nfapi_nr_uci_indication_t *pNfapiMsg = (nfapi_nr_uci_indication_t*)msg; - if (!(pull16(ppReadPackedMsg, &pNfapiMsg->sfn , end) && - pull16(ppReadPackedMsg, &pNfapiMsg->slot , end) && - pull16(ppReadPackedMsg, &pNfapiMsg->num_ucis, end) - )) - return 0; + if (!pull16(ppReadPackedMsg, &pNfapiMsg->sfn , end)) + return 0; + if (!pull16(ppReadPackedMsg, &pNfapiMsg->slot , end)) + return 0; + if (!pull16(ppReadPackedMsg, &pNfapiMsg->num_ucis, end)) + return 0; pNfapiMsg->uci_list = nfapi_p7_allocate(sizeof(*pNfapiMsg->uci_list) * pNfapiMsg->num_ucis, config); for (int i = 0; i < pNfapiMsg->num_ucis; i++) { - if(!unpack_nr_uci_indication_body(&pNfapiMsg->uci_list[i], ppReadPackedMsg, end, config)) - return 0; + if (!unpack_nr_uci_indication_body(&pNfapiMsg->uci_list[i], ppReadPackedMsg, end, config)) + return 0; } return 1; From 4c950bb0067ed58ab130fb79aca09074fcab3a8e Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Wed, 9 Feb 2022 14:06:55 -0800 Subject: [PATCH 016/150] Resetting dl_config->number_pdus in NRUE scheduler --- openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 6c44a028ae..f82383c1c0 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -944,6 +944,10 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) mac->if_module->scheduled_response(&scheduled_response); } + else + { + dl_config->number_pdus = 0; + } } } else if (ul_info) { From d2a559f91ec12d35a4301f7297c3b1d2500a4bda Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 11 Feb 2022 18:35:26 +0100 Subject: [PATCH 017/150] improvements in config_csirs --- openair2/RRC/NR/nr_rrc_config.c | 136 +++++++++++++++++++++++++++++ openair2/RRC/NR/nr_rrc_config.h | 6 ++ openair2/RRC/NR/nr_rrc_proto.h | 2 - openair2/RRC/NR/rrc_gNB_reconfig.c | 72 +-------------- 4 files changed, 145 insertions(+), 71 deletions(-) diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c index 6b7f9a21b9..cd8f2530ae 100644 --- a/openair2/RRC/NR/nr_rrc_config.c +++ b/openair2/RRC/NR/nr_rrc_config.c @@ -31,6 +31,142 @@ #include "nr_rrc_config.h" #include "common/utils/nr/nr_common.h" +const uint8_t slotsperframe[5] = {10, 20, 40, 80, 160}; + + +void set_csirs_periodicity(NR_NZP_CSI_RS_Resource_t *nzpcsi0, int uid, int nb_slots_per_period) { + + nzpcsi0->periodicityAndOffset = calloc(1,sizeof(*nzpcsi0->periodicityAndOffset)); + int ideal_period = nb_slots_per_period*MAX_MOBILES_PER_GNB; + if (ideal_period<5) { + nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots4; + nzpcsi0->periodicityAndOffset->choice.slots4 = nb_slots_per_period*uid; + } + else if (ideal_period<6) { + nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots5; + nzpcsi0->periodicityAndOffset->choice.slots5 = nb_slots_per_period*uid; + } + else if (ideal_period<9) { + nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots8; + nzpcsi0->periodicityAndOffset->choice.slots8 = nb_slots_per_period*uid; + } + else if (ideal_period<11) { + nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots10; + nzpcsi0->periodicityAndOffset->choice.slots10 = nb_slots_per_period*uid; + } + else if (ideal_period<17) { + nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots16; + nzpcsi0->periodicityAndOffset->choice.slots16 = nb_slots_per_period*uid; + } + else if (ideal_period<21) { + nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots20; + nzpcsi0->periodicityAndOffset->choice.slots20 = nb_slots_per_period*uid; + } + else if (ideal_period<41) { + nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots40; + nzpcsi0->periodicityAndOffset->choice.slots40 = nb_slots_per_period*uid; + } + else if (ideal_period<81) { + nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots80; + nzpcsi0->periodicityAndOffset->choice.slots80 = nb_slots_per_period*uid; + } + else if (ideal_period<161) { + nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots160; + nzpcsi0->periodicityAndOffset->choice.slots160 = nb_slots_per_period*uid; + } + else { + nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots320; + nzpcsi0->periodicityAndOffset->choice.slots320 = (nb_slots_per_period*uid)%320 + (nb_slots_per_period*uid)/320; + } +} + + +void config_csirs(NR_ServingCellConfigCommon_t *servingcellconfigcommon, + NR_CSI_MeasConfig_t *csi_MeasConfig, + int num_dl_antenna_ports, + int uid, + int curr_bwp, + int do_csirs) { + + if (do_csirs) { + + csi_MeasConfig->nzp_CSI_RS_ResourceSetToAddModList = calloc(1,sizeof(*csi_MeasConfig->nzp_CSI_RS_ResourceSetToAddModList)); + NR_NZP_CSI_RS_ResourceSet_t *nzpcsirs0 = calloc(1,sizeof(*nzpcsirs0)); + nzpcsirs0->nzp_CSI_ResourceSetId = 0; + NR_NZP_CSI_RS_ResourceId_t *nzpid0 = calloc(1,sizeof(*nzpid0)); + *nzpid0 = 0; + ASN_SEQUENCE_ADD(&nzpcsirs0->nzp_CSI_RS_Resources,nzpid0); + nzpcsirs0->repetition = NULL; + nzpcsirs0->aperiodicTriggeringOffset = NULL; + nzpcsirs0->trs_Info = NULL; + ASN_SEQUENCE_ADD(&csi_MeasConfig->nzp_CSI_RS_ResourceSetToAddModList->list,nzpcsirs0); + + const NR_TDD_UL_DL_Pattern_t *tdd = servingcellconfigcommon->tdd_UL_DL_ConfigurationCommon ? + &servingcellconfigcommon->tdd_UL_DL_ConfigurationCommon->pattern1 : NULL; + + const int n_slots_frame = slotsperframe[*servingcellconfigcommon->ssbSubcarrierSpacing]; + + int nb_slots_per_period = n_slots_frame; + if (tdd) + nb_slots_per_period = n_slots_frame/get_nb_periods_per_frame(tdd->dl_UL_TransmissionPeriodicity); + + csi_MeasConfig->nzp_CSI_RS_ResourceToAddModList = calloc(1,sizeof(*csi_MeasConfig->nzp_CSI_RS_ResourceToAddModList)); + NR_NZP_CSI_RS_Resource_t *nzpcsi0 = calloc(1,sizeof(*nzpcsi0)); + nzpcsi0->nzp_CSI_RS_ResourceId = 0; + NR_CSI_RS_ResourceMapping_t resourceMapping; + switch (num_dl_antenna_ports) { + case 1: + resourceMapping.frequencyDomainAllocation.present = NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_row2; + resourceMapping.frequencyDomainAllocation.choice.row2.buf = calloc(2, sizeof(uint8_t)); + resourceMapping.frequencyDomainAllocation.choice.row2.size = 2; + resourceMapping.frequencyDomainAllocation.choice.row2.bits_unused = 4; + resourceMapping.frequencyDomainAllocation.choice.row2.buf[0] = 0; + resourceMapping.frequencyDomainAllocation.choice.row2.buf[1] = 16; + resourceMapping.nrofPorts = NR_CSI_RS_ResourceMapping__nrofPorts_p1; + resourceMapping.cdm_Type = NR_CSI_RS_ResourceMapping__cdm_Type_noCDM; + break; + case 2: + resourceMapping.frequencyDomainAllocation.present = NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_other; + resourceMapping.frequencyDomainAllocation.choice.other.buf = calloc(2, sizeof(uint8_t)); + resourceMapping.frequencyDomainAllocation.choice.other.size = 1; + resourceMapping.frequencyDomainAllocation.choice.other.bits_unused = 2; + resourceMapping.frequencyDomainAllocation.choice.other.buf[0] = 4; + resourceMapping.nrofPorts = NR_CSI_RS_ResourceMapping__nrofPorts_p2; + resourceMapping.cdm_Type = NR_CSI_RS_ResourceMapping__cdm_Type_fd_CDM2; + break; + case 4: + resourceMapping.frequencyDomainAllocation.present = NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_row4; + resourceMapping.frequencyDomainAllocation.choice.row4.buf = calloc(2, sizeof(uint8_t)); + resourceMapping.frequencyDomainAllocation.choice.row4.size = 1; + resourceMapping.frequencyDomainAllocation.choice.row4.bits_unused = 5; + resourceMapping.frequencyDomainAllocation.choice.row4.buf[0] = 32; + resourceMapping.nrofPorts = NR_CSI_RS_ResourceMapping__nrofPorts_p4; + resourceMapping.cdm_Type = NR_CSI_RS_ResourceMapping__cdm_Type_fd_CDM2; + break; + default: + AssertFatal(1==0,"Number of ports not yet supported\n"); + } + resourceMapping.firstOFDMSymbolInTimeDomain = 13; // last symbol of slot + resourceMapping.firstOFDMSymbolInTimeDomain2 = NULL; + resourceMapping.density.present = NR_CSI_RS_ResourceMapping__density_PR_one; + resourceMapping.density.choice.one = (NULL_t)0; + resourceMapping.freqBand.startingRB = 0; + resourceMapping.freqBand.nrofRBs = ((curr_bwp>>2)+(curr_bwp%4>0))<<2; + nzpcsi0->resourceMapping = resourceMapping; + nzpcsi0->powerControlOffset = 0; + nzpcsi0->powerControlOffsetSS=calloc(1,sizeof(*nzpcsi0->powerControlOffsetSS)); + *nzpcsi0->powerControlOffsetSS = NR_NZP_CSI_RS_Resource__powerControlOffsetSS_db0; + nzpcsi0->scramblingID = *servingcellconfigcommon->physCellId; + set_csirs_periodicity(nzpcsi0, uid, nb_slots_per_period); + nzpcsi0->qcl_InfoPeriodicCSI_RS = NULL; + ASN_SEQUENCE_ADD(&csi_MeasConfig->nzp_CSI_RS_ResourceToAddModList->list,nzpcsi0); + } + else { + csi_MeasConfig->nzp_CSI_RS_ResourceToAddModList = NULL; + csi_MeasConfig->nzp_CSI_RS_ResourceSetToAddModList = NULL; + } +} + void nr_rrc_config_dl_tda(NR_ServingCellConfigCommon_t *scc){ lte_frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); diff --git a/openair2/RRC/NR/nr_rrc_config.h b/openair2/RRC/NR/nr_rrc_config.h index 192fee754e..99e6de52a1 100644 --- a/openair2/RRC/NR/nr_rrc_config.h +++ b/openair2/RRC/NR/nr_rrc_config.h @@ -113,6 +113,12 @@ typedef struct physicalcellgroup_s{ void nr_rrc_config_dl_tda(NR_ServingCellConfigCommon_t *scc); void nr_rrc_config_ul_tda(NR_ServingCellConfigCommon_t *scc, int min_fb_delay); +void config_csirs(NR_ServingCellConfigCommon_t *servingcellconfigcommon, + NR_CSI_MeasConfig_t *csi_MeasConfig, + int num_dl_antenna_ports, + int uid, + int curr_bwp, + int do_csirs); #endif diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h index 22109c3029..450b155a35 100644 --- a/openair2/RRC/NR/nr_rrc_proto.h +++ b/openair2/RRC/NR/nr_rrc_proto.h @@ -84,8 +84,6 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco int initial_csi_index, int uid); -void config_csirs(NR_ServingCellConfigCommon_t *servingcellconfigcommon, NR_CSI_MeasConfig_t *csi_MeasConfig, int dl_antenna_ports, int do_csirs); - void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon, NR_ServingCellConfig_t *servingcellconfigdedicated, NR_RRCReconfiguration_IEs_t *reconfig, diff --git a/openair2/RRC/NR/rrc_gNB_reconfig.c b/openair2/RRC/NR/rrc_gNB_reconfig.c index 30604cd015..dd0b1bcc92 100644 --- a/openair2/RRC/NR/rrc_gNB_reconfig.c +++ b/openair2/RRC/NR/rrc_gNB_reconfig.c @@ -45,6 +45,7 @@ #include "SIMULATION/TOOLS/sim.h" #include "executables/softmodem-common.h" #include "LAYER2/nr_rlc/nr_rlc_oai_api.h" +#include "nr_rrc_config.h" #define false 0 #define true 1 @@ -1076,24 +1077,9 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco csi_MeasConfig->csi_IM_ResourceSetToAddModList = NULL; csi_MeasConfig->csi_IM_ResourceSetToReleaseList = NULL; - if (do_csirs) { - csi_MeasConfig->nzp_CSI_RS_ResourceSetToAddModList = calloc(1,sizeof(*csi_MeasConfig->nzp_CSI_RS_ResourceSetToAddModList)); - NR_NZP_CSI_RS_ResourceSet_t *nzpcsirs0 = calloc(1,sizeof(*nzpcsirs0)); - nzpcsirs0->nzp_CSI_ResourceSetId = 0; - NR_NZP_CSI_RS_ResourceId_t *nzpid0 = calloc(1,sizeof(*nzpid0)); - *nzpid0 = 0; - ASN_SEQUENCE_ADD(&nzpcsirs0->nzp_CSI_RS_Resources,nzpid0); - nzpcsirs0->repetition = NULL; - nzpcsirs0->aperiodicTriggeringOffset = NULL; - nzpcsirs0->trs_Info = NULL; - ASN_SEQUENCE_ADD(&csi_MeasConfig->nzp_CSI_RS_ResourceSetToAddModList->list,nzpcsirs0); - } - else - csi_MeasConfig->nzp_CSI_RS_ResourceSetToAddModList = NULL; - csi_MeasConfig->nzp_CSI_RS_ResourceSetToReleaseList = NULL; - config_csirs(servingcellconfigcommon, csi_MeasConfig,dl_antenna_ports,do_csirs); + config_csirs(servingcellconfigcommon, csi_MeasConfig, uid, dl_antenna_ports, curr_bwp, do_csirs); csi_MeasConfig->csi_SSB_ResourceSetToAddModList = calloc(1,sizeof(*csi_MeasConfig->csi_SSB_ResourceSetToAddModList)); csi_MeasConfig->csi_SSB_ResourceSetToReleaseList = NULL; @@ -1112,9 +1098,9 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco ASN_SEQUENCE_ADD(&csi_MeasConfig->csi_SSB_ResourceSetToAddModList->list,ssbresset0); csi_MeasConfig->csi_ResourceConfigToAddModList = calloc(1,sizeof(*csi_MeasConfig->csi_ResourceConfigToAddModList)); + csi_MeasConfig->csi_ResourceConfigToReleaseList = NULL; if (do_csirs) { - csi_MeasConfig->csi_ResourceConfigToReleaseList = NULL; NR_CSI_ResourceConfig_t *csires0 = calloc(1,sizeof(*csires0)); csires0->csi_ResourceConfigId=0; csires0->csi_RS_ResourceSetList.present = NR_CSI_ResourceConfig__csi_RS_ResourceSetList_PR_nzp_CSI_RS_SSB; @@ -1292,58 +1278,6 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco } -void config_csirs(NR_ServingCellConfigCommon_t *servingcellconfigcommon, NR_CSI_MeasConfig_t *csi_MeasConfig, int dl_antenna_ports, int do_csirs) { - - if (do_csirs) { - csi_MeasConfig->nzp_CSI_RS_ResourceToAddModList = calloc(1,sizeof(*csi_MeasConfig->nzp_CSI_RS_ResourceToAddModList)); - NR_NZP_CSI_RS_Resource_t *nzpcsi0 = calloc(1,sizeof(*nzpcsi0)); - nzpcsi0->nzp_CSI_RS_ResourceId = 0; - NR_CSI_RS_ResourceMapping_t resourceMapping; - switch (dl_antenna_ports) { - case 1: - resourceMapping.frequencyDomainAllocation.present = NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_row2; - resourceMapping.frequencyDomainAllocation.choice.row2.buf = calloc(2, sizeof(uint8_t)); - resourceMapping.frequencyDomainAllocation.choice.row2.size = 2; - resourceMapping.frequencyDomainAllocation.choice.row2.bits_unused = 4; - resourceMapping.frequencyDomainAllocation.choice.row2.buf[0]=0; - resourceMapping.frequencyDomainAllocation.choice.row2.buf[1]=16; - resourceMapping.nrofPorts = NR_CSI_RS_ResourceMapping__nrofPorts_p1; - resourceMapping.cdm_Type = NR_CSI_RS_ResourceMapping__cdm_Type_noCDM; - break; - case 2: - resourceMapping.frequencyDomainAllocation.present = NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_other; - resourceMapping.frequencyDomainAllocation.choice.row2.buf = calloc(2, sizeof(uint8_t)); - resourceMapping.frequencyDomainAllocation.choice.row2.size = 1; - resourceMapping.frequencyDomainAllocation.choice.row2.bits_unused = 2; - resourceMapping.frequencyDomainAllocation.choice.row2.buf[0]=4; - resourceMapping.nrofPorts = NR_CSI_RS_ResourceMapping__nrofPorts_p2; - resourceMapping.cdm_Type = NR_CSI_RS_ResourceMapping__cdm_Type_fd_CDM2; - break; - default: - AssertFatal(1==0,"Number of ports not yet supported\n"); - } - resourceMapping.firstOFDMSymbolInTimeDomain = 6; - resourceMapping.firstOFDMSymbolInTimeDomain2 = NULL; - resourceMapping.density.present = NR_CSI_RS_ResourceMapping__density_PR_one; - resourceMapping.density.choice.one = (NULL_t)0; - resourceMapping.freqBand.startingRB = 0; - resourceMapping.freqBand.nrofRBs = 108; - nzpcsi0->resourceMapping = resourceMapping; - nzpcsi0->powerControlOffset = 0; - nzpcsi0->powerControlOffsetSS=calloc(1,sizeof(*nzpcsi0->powerControlOffsetSS)); - *nzpcsi0->powerControlOffsetSS = NR_NZP_CSI_RS_Resource__powerControlOffsetSS_db0; - nzpcsi0->scramblingID = *servingcellconfigcommon->physCellId; - nzpcsi0->periodicityAndOffset = calloc(1,sizeof(*nzpcsi0->periodicityAndOffset)); - nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots320; - nzpcsi0->periodicityAndOffset->choice.slots320 = 0; - nzpcsi0->qcl_InfoPeriodicCSI_RS = NULL; - ASN_SEQUENCE_ADD(&csi_MeasConfig->nzp_CSI_RS_ResourceToAddModList->list,nzpcsi0); - } - else - csi_MeasConfig->nzp_CSI_RS_ResourceToAddModList = NULL; -} - - void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon, NR_ServingCellConfig_t *servingcellconfigdedicated, NR_RRCReconfiguration_IEs_t *reconfig, From 9237cb545cd9b86a37d700bb2588cc58952dee98 Mon Sep 17 00:00:00 2001 From: francescomani Date: Wed, 22 Dec 2021 10:43:08 +0100 Subject: [PATCH 018/150] passing UECAP structure to RRC reconfiguration functions --- openair1/SIMULATION/NR_PHY/dlsim.c | 3 ++- openair1/SIMULATION/NR_PHY/ulsim.c | 3 ++- openair2/RRC/NR/MESSAGES/asn1_msg.c | 21 ++++++++++++--------- openair2/RRC/NR/MESSAGES/asn1_msg.h | 6 ++++++ openair2/RRC/NR/nr_rrc_proto.h | 2 ++ openair2/RRC/NR/rrc_gNB.c | 8 ++++++++ openair2/RRC/NR/rrc_gNB_nsa.c | 2 ++ openair2/RRC/NR/rrc_gNB_reconfig.c | 3 +++ 8 files changed, 37 insertions(+), 11 deletions(-) diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index 891951460c..9ad0643b3f 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -777,7 +777,8 @@ int main(int argc, char **argv) prepare_scd(scd); - fill_default_secondaryCellGroup(scc, scd, secondaryCellGroup, 0, 1, n_tx, 6, 0, 0, 0); + // TODO do a UECAP for phy-sim + fill_default_secondaryCellGroup(scc, scd, secondaryCellGroup, NULL, 0, 1, n_tx, 6, 0, 0, 0); /* RRC parameter validation for secondaryCellGroup */ fix_scd(scd); diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index fe994dafe3..94f08eae06 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -720,7 +720,8 @@ int main(int argc, char **argv) prepare_scd(scd); - fill_default_secondaryCellGroup(scc, scd, secondaryCellGroup, 0, 1, n_tx, 0, 0, 0, 0); + // TODO do a UECAP for phy-sim + fill_default_secondaryCellGroup(scc, scd, secondaryCellGroup, NULL, 0, 1, n_tx, 0, 0, 0, 0); // xer_fprint(stdout, &asn_DEF_NR_CellGroupConfig, (const void*)secondaryCellGroup); diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c index 84a0cf75d1..75193ba5b1 100755 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.c +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c @@ -1396,6 +1396,13 @@ void fill_mastercellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, NR_CellGr ASN_SEQUENCE_ADD(&ue_context_mastercellGroup->rlc_BearerToAddModList->list, rlc_BearerConfig_drb); } + +void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, + rrc_gNB_carrier_data_t *carrier, + NR_UE_NR_Capability_t *uecap) { + +} + void fill_initial_cellGroupConfig(rnti_t rnti, NR_CellGroupConfig_t *cellGroupConfig, NR_ServingCellConfigCommon_t *scc, @@ -1815,6 +1822,8 @@ int16_t do_RRCReconfiguration( NR_SDAP_Config_t *sdap_config, NR_MeasConfig_t *meas_config, struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList *dedicatedNAS_MessageList, + rrc_gNB_ue_context_t *const ue_context_pP, + rrc_gNB_carrier_data_t *carrier, NR_MAC_CellGroupConfig_t *mac_CellGroupConfig, NR_CellGroupConfig_t *cellGroupConfig) //------------------------------------------------------------------------------ @@ -1851,15 +1860,6 @@ int16_t do_RRCReconfiguration( ie->radioBearerConfig->srb3_ToRelease = NULL; ie->radioBearerConfig->drb_ToReleaseList = DRB_releaseList; } - /******************** Secondary Cell Group ********************/ - // rrc_gNB_carrier_data_t *carrier = &(gnb_rrc_inst->carrier); - // fill_default_secondaryCellGroup( carrier->servingcellconfigcommon, - // ue_context_pP->ue_context.secondaryCellGroup, - // 1, - // 1, - // carrier->pdsch_AntennaPorts, - // carrier->initial_csi_index[ue_context_p->local_uid + 1], - // ue_context_pP->local_uid); /******************** Meas Config ********************/ // measConfig @@ -1875,6 +1875,9 @@ int16_t do_RRCReconfiguration( } if(cellGroupConfig!=NULL){ + update_cellGroupConfig(cellGroupConfig, + carrier, + ue_context_pP->ue_context.UE_Capability_nr); enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CellGroupConfig, NULL, (void *)cellGroupConfig, diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.h b/openair2/RRC/NR/MESSAGES/asn1_msg.h index 6803cf21d7..9c6e6db567 100644 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.h +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.h @@ -110,6 +110,10 @@ void fill_initial_cellGroupConfig(rnti_t rnti, NR_ServingCellConfigCommon_t *scc, rrc_gNB_carrier_data_t *carrier); +void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, + rrc_gNB_carrier_data_t *carrier, + NR_UE_NR_Capability_t *uecap); + void fill_mastercellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, NR_CellGroupConfig_t *ue_context_mastercellGroup); uint8_t do_RRCSetup(rrc_gNB_ue_context_t *const ue_context_pP, @@ -145,6 +149,8 @@ int16_t do_RRCReconfiguration( NR_SDAP_Config_t *sdap_config, NR_MeasConfig_t *meas_config, struct NR_RRCReconfiguration_v1530_IEs__dedicatedNAS_MessageList *dedicatedNAS_MessageList, + rrc_gNB_ue_context_t *const ue_context_pP, + rrc_gNB_carrier_data_t *carrier, NR_MAC_CellGroupConfig_t *mac_CellGroupConfig, NR_CellGroupConfig_t *cellGroupConfig); diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h index 450b155a35..a5ed540cd3 100644 --- a/openair2/RRC/NR/nr_rrc_proto.h +++ b/openair2/RRC/NR/nr_rrc_proto.h @@ -76,6 +76,7 @@ void rrc_remove_nsa_user(gNB_RRC_INST *rrc, int rnti); void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellconfigcommon, NR_ServingCellConfig_t *servingcellconfigdedicated, NR_CellGroupConfig_t *secondaryCellGroup, + NR_UE_NR_Capability_t *uecap, int scg_id, int servCellIndex, int dl_antenna_ports, @@ -88,6 +89,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon NR_ServingCellConfig_t *servingcellconfigdedicated, NR_RRCReconfiguration_IEs_t *reconfig, NR_CellGroupConfig_t *secondaryCellGroup, + NR_UE_NR_Capability_t *uecap, int dl_antenna_ports, int minRXTXTIMEpdsch, int do_csirs, diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 049e1a6827..4ab1804b2f 100755 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -759,6 +759,8 @@ rrc_gNB_generate_defaultRRCReconfiguration( NULL, dedicatedNAS_MessageList, NULL, + NULL, + NULL, NULL); free(ue_context_pP->ue_context.nas_pdu.buffer); @@ -1028,6 +1030,8 @@ rrc_gNB_generate_dedicatedRRCReconfiguration( NULL, NULL, dedicatedNAS_MessageList, + ue_context_pP, + &rrc->carrier, NULL, cellGroupConfig); LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size,"[MSG] RRC Reconfiguration\n"); @@ -1137,6 +1141,8 @@ rrc_gNB_generate_dedicatedRRCReconfiguration_release( NULL, dedicatedNAS_MessageList, NULL, + NULL, + NULL, NULL); ue_context_pP->ue_context.pdu_session_release_command_flag = 1; @@ -1706,6 +1712,8 @@ rrc_gNB_process_RRCConnectionReestablishmentComplete( NULL, // MeasObj_list, NULL, NULL, + NULL, + NULL, NULL); LOG_DUMPMSG(NR_RRC,DEBUG_RRC,(char *)buffer,size, "[MSG] RRC Reconfiguration\n"); diff --git a/openair2/RRC/NR/rrc_gNB_nsa.c b/openair2/RRC/NR/rrc_gNB_nsa.c index 15caff0b4d..42a39a4fa8 100644 --- a/openair2/RRC/NR/rrc_gNB_nsa.c +++ b/openair2/RRC/NR/rrc_gNB_nsa.c @@ -266,6 +266,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_ ue_context_p->ue_context.spCellConfig->spCellConfigDedicated, reconfig_ies, ue_context_p->ue_context.secondaryCellGroup, + ue_context_p->ue_context.UE_Capability_nr, carrier->pdsch_AntennaPorts, carrier->minRXTXTIME, carrier->do_CSIRS, @@ -276,6 +277,7 @@ void rrc_add_nsa_user(gNB_RRC_INST *rrc,struct rrc_gNB_ue_context_s *ue_context_ NULL, reconfig_ies, ue_context_p->ue_context.secondaryCellGroup, + ue_context_p->ue_context.UE_Capability_nr, carrier->pdsch_AntennaPorts, carrier->minRXTXTIME, carrier->do_CSIRS, diff --git a/openair2/RRC/NR/rrc_gNB_reconfig.c b/openair2/RRC/NR/rrc_gNB_reconfig.c index dd0b1bcc92..adf57cacb9 100644 --- a/openair2/RRC/NR/rrc_gNB_reconfig.c +++ b/openair2/RRC/NR/rrc_gNB_reconfig.c @@ -53,6 +53,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellconfigcommon, NR_ServingCellConfig_t *servingcellconfigdedicated, NR_CellGroupConfig_t *secondaryCellGroup, + NR_UE_NR_Capability_t *uecap, int scg_id, int servCellIndex, int dl_antenna_ports, @@ -1282,6 +1283,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon NR_ServingCellConfig_t *servingcellconfigdedicated, NR_RRCReconfiguration_IEs_t *reconfig, NR_CellGroupConfig_t *secondaryCellGroup, + NR_UE_NR_Capability_t *uecap, int dl_antenna_ports, int minRXTXTIME, int do_csirs, @@ -1296,6 +1298,7 @@ void fill_default_reconfig(NR_ServingCellConfigCommon_t *servingcellconfigcommon fill_default_secondaryCellGroup(servingcellconfigcommon, servingcellconfigdedicated, secondaryCellGroup, + uecap, 1, 1, dl_antenna_ports, From 67efa202e2f2d83f3379654a887197fa4a0b6ff5 Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 11 Feb 2022 19:32:40 +0100 Subject: [PATCH 019/150] call to config_csirs also in sa --- openair2/RRC/NR/MESSAGES/asn1_msg.c | 12 ++++++++++++ openair2/RRC/NR/MESSAGES/asn1_msg.h | 1 + openair2/RRC/NR/nr_rrc_config.c | 2 ++ openair2/RRC/NR/rrc_gNB_reconfig.c | 2 -- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c index 75193ba5b1..940f38a672 100755 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.c +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c @@ -1399,8 +1399,19 @@ void fill_mastercellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, NR_CellGr void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, rrc_gNB_carrier_data_t *carrier, + int uid, NR_UE_NR_Capability_t *uecap) { + NR_SpCellConfig_t *SpCellConfig = cellGroupConfig->spCellConfig; + if (SpCellConfig == NULL) return; + + NR_ServingCellConfigCommon_t *scc = carrier->servingcellconfigcommon; + + NR_CSI_MeasConfig_t *csi_MeasConfig = calloc(1,sizeof(*csi_MeasConfig)); + SpCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup = csi_MeasConfig; + + int curr_bwp = NRRIV2BW(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth,MAX_BWP_SIZE); + config_csirs(scc, csi_MeasConfig, uid, carrier->pdsch_AntennaPorts, curr_bwp, carrier->do_CSIRS); } void fill_initial_cellGroupConfig(rnti_t rnti, @@ -1877,6 +1888,7 @@ int16_t do_RRCReconfiguration( if(cellGroupConfig!=NULL){ update_cellGroupConfig(cellGroupConfig, carrier, + ue_context_pP->local_uid, ue_context_pP->ue_context.UE_Capability_nr); enc_rval = uper_encode_to_buffer(&asn_DEF_NR_CellGroupConfig, NULL, diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.h b/openair2/RRC/NR/MESSAGES/asn1_msg.h index 9c6e6db567..c7f7d29b41 100644 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.h +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.h @@ -112,6 +112,7 @@ void fill_initial_cellGroupConfig(rnti_t rnti, void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, rrc_gNB_carrier_data_t *carrier, + int uid, NR_UE_NR_Capability_t *uecap); void fill_mastercellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, NR_CellGroupConfig_t *ue_context_mastercellGroup); diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c index cd8f2530ae..85b421aa9e 100644 --- a/openair2/RRC/NR/nr_rrc_config.c +++ b/openair2/RRC/NR/nr_rrc_config.c @@ -165,6 +165,8 @@ void config_csirs(NR_ServingCellConfigCommon_t *servingcellconfigcommon, csi_MeasConfig->nzp_CSI_RS_ResourceToAddModList = NULL; csi_MeasConfig->nzp_CSI_RS_ResourceSetToAddModList = NULL; } + csi_MeasConfig->nzp_CSI_RS_ResourceSetToReleaseList = NULL; + csi_MeasConfig->nzp_CSI_RS_ResourceToReleaseList = NULL; } void nr_rrc_config_dl_tda(NR_ServingCellConfigCommon_t *scc){ diff --git a/openair2/RRC/NR/rrc_gNB_reconfig.c b/openair2/RRC/NR/rrc_gNB_reconfig.c index adf57cacb9..1f0b123a5c 100644 --- a/openair2/RRC/NR/rrc_gNB_reconfig.c +++ b/openair2/RRC/NR/rrc_gNB_reconfig.c @@ -1078,8 +1078,6 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco csi_MeasConfig->csi_IM_ResourceSetToAddModList = NULL; csi_MeasConfig->csi_IM_ResourceSetToReleaseList = NULL; - csi_MeasConfig->nzp_CSI_RS_ResourceSetToReleaseList = NULL; - config_csirs(servingcellconfigcommon, csi_MeasConfig, uid, dl_antenna_ports, curr_bwp, do_csirs); csi_MeasConfig->csi_SSB_ResourceSetToAddModList = calloc(1,sizeof(*csi_MeasConfig->csi_SSB_ResourceSetToAddModList)); From 665d1caa0b1553d1b517355645d043048179a373 Mon Sep 17 00:00:00 2001 From: englab Date: Fri, 11 Feb 2022 17:17:07 -0500 Subject: [PATCH 020/150] First examples of global structure elements move to function stack --- openair1/PHY/INIT/nr_init_ue.c | 8 +++---- openair1/PHY/NR_UE_TRANSPORT/dci_nr.c | 31 ++++++++++++++++++--------- openair1/PHY/defs_nr_UE.h | 4 ++-- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index c193733aef..4a1ce1c3eb 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -378,10 +378,10 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, ue->pdcch_vars[th_id][gNB_id]->llr16 = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) ); ue->pdcch_vars[th_id][gNB_id]->wbar = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) ); ue->pdcch_vars[th_id][gNB_id]->e_rx = (int16_t *)malloc16_clear( 4*2*100*12 ); - ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); + //ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); ue->pdcch_vars[th_id][gNB_id]->rho = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) ); - ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); + // ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); // Channel estimates ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates = (int32_t **)malloc16_clear(4*fp->nb_antennas_rx*sizeof(int32_t *)); @@ -396,9 +396,9 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_time[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->ofdm_symbol_size*2 ); // size_t num = 7*2*fp->N_RB_DL*12; size_t num = 4*273*12; // 4 symbols, 100 PRBs, 12 REs per PRB - ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num); + //ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num); ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num); - ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num); + // ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num); ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num); } } diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c index 84c9627c8a..74b229c451 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c @@ -206,7 +206,7 @@ void nr_pdcch_demapping_deinterleaving(uint32_t *llr, } } -int32_t nr_pdcch_llr(NR_DL_FRAME_PARMS *frame_parms, int32_t **rxdataF_comp, +int32_t nr_pdcch_llr(NR_DL_FRAME_PARMS *frame_parms, int32_t col, int32_t rxdataF_comp[][col], int16_t *pdcch_llr, uint8_t symbol,uint32_t coreset_nbr_rb) { int16_t *rxF = (int16_t *) &rxdataF_comp[0][(symbol * coreset_nbr_rb * 12)]; int32_t i; @@ -343,7 +343,8 @@ void nr_pdcch_channel_level(int32_t **dl_ch_estimates_ext, // This function will extract the mapped DM-RS PDCCH REs as per 38.211 Section 7.4.1.3.2 (Mapping to physical resources) void nr_pdcch_extract_rbs_single(int32_t **rxdataF, int32_t **dl_ch_estimates, - int32_t **rxdataF_ext, + int32_t col, + int32_t rxdataF_ext[][col], int32_t **dl_ch_estimates_ext, uint8_t symbol, NR_DL_FRAME_PARMS *frame_parms, @@ -537,9 +538,9 @@ void nr_pdcch_extract_rbs_single(int32_t **rxdataF, #define print_shorts(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7]) -void nr_pdcch_channel_compensation(int32_t **rxdataF_ext, +void nr_pdcch_channel_compensation(int32_t col, int32_t rxdataF_ext[][col], int32_t **dl_ch_estimates_ext, - int32_t **rxdataF_comp, + int32_t rxdataF_comp[][col], int32_t **rho, NR_DL_FRAME_PARMS *frame_parms, uint8_t symbol, @@ -650,7 +651,8 @@ void nr_pdcch_channel_compensation(int32_t **rxdataF_ext, void nr_pdcch_detection_mrc(NR_DL_FRAME_PARMS *frame_parms, - int32_t **rxdataF_comp, + int32_t col, + int32_t rxdataF_comp[][col], uint8_t symbol) { #if defined(__x86_64__) || defined(__i386__) __m128i *rxdataF_comp128_0,*rxdataF_comp128_1; @@ -698,6 +700,13 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, int32_t avgs; int32_t avgP[4]; int n_rb,rb_offset; + + /// \brief Pointers to extracted PDCCH symbols in frequency-domain. + /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx + /// - second index: ? [0..168*N_RB_DL[ + int32_t rxdataF_ext[4*frame_parms->nb_antennas_rx][4*273*12]; // 4 symbols, 100 PRBs, 12 REs per PRB] + int32_t rxdataF_comp[4*frame_parms->nb_antennas_rx][4*273*12]; // 4 symbols, 100 PRBs, 12 REs per PRB] + get_coreset_rballoc(rel15->coreset.frequency_domain_resource,&n_rb,&rb_offset); LOG_D(PHY,"pdcch coreset: freq %x, n_rb %d, rb_offset %d\n", rel15->coreset.frequency_domain_resource[0],n_rb,rb_offset); @@ -706,7 +715,8 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, nr_pdcch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF, pdcch_vars->dl_ch_estimates, - pdcch_vars->rxdataF_ext, + 4*273*12, + rxdataF_ext, pdcch_vars->dl_ch_estimates_ext, s, frame_parms, @@ -739,9 +749,9 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, LOG_D(PHY,"we enter nr_pdcch_channel_compensation(log2_maxh=%d)\n",log2_maxh); LOG_D(PHY,"in nr_pdcch_channel_compensation(rxdataF_ext x dl_ch_estimates_ext -> rxdataF_comp)\n"); // compute LLRs for ofdm symbol 0 only - nr_pdcch_channel_compensation(pdcch_vars->rxdataF_ext, + nr_pdcch_channel_compensation(4*273*12, rxdataF_ext, pdcch_vars->dl_ch_estimates_ext, - pdcch_vars->rxdataF_comp, + rxdataF_comp, NULL, frame_parms, s, @@ -749,13 +759,14 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, n_rb); // log2_maxh+I0_shift if (frame_parms->nb_antennas_rx > 1) { LOG_D(PHY,"we enter nr_pdcch_detection_mrc(frame_parms->nb_antennas_rx=%d)\n", frame_parms->nb_antennas_rx); - nr_pdcch_detection_mrc(frame_parms, pdcch_vars->rxdataF_comp,s); + nr_pdcch_detection_mrc(frame_parms, 4*273*12, rxdataF_comp,s); } LOG_D(PHY,"we enter nr_pdcch_llr(for symbol %d), pdcch_vars[eNB_id]->rxdataF_comp ---> pdcch_vars[eNB_id]->llr \n",s); LOG_D(PHY,"in nr_pdcch_llr(rxdataF_comp -> llr)\n"); nr_pdcch_llr(frame_parms, - pdcch_vars->rxdataF_comp, + 4*273*12, + rxdataF_comp, pdcch_vars->llr, s, n_rb); diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index 69978f5548..b411398d34 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -583,11 +583,11 @@ typedef struct { /// \brief Pointers to extracted PDCCH symbols in frequency-domain. /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx /// - second index: ? [0..168*N_RB_DL[ - int32_t **rxdataF_ext; + // int32_t **rxdataF_ext; /// \brief Pointers to extracted and compensated PDCCH symbols in frequency-domain. /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx /// - second index: ? [0..168*N_RB_DL[ - int32_t **rxdataF_comp; + // int32_t **rxdataF_comp; /// \brief Hold the channel estimates in frequency domain. /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx /// - second index: samples? [0..symbols_per_tti*(ofdm_symbol_size+LTE_CE_FILTER_LENGTH)[ From ba891206e52598dc70bac5c4cc8cb03c9cff3183 Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Mon, 14 Feb 2022 09:47:34 +0530 Subject: [PATCH 021/150] fixed stacksmashing error --- openair1/PHY/CODING/TESTBENCH/ldpctest.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/CODING/TESTBENCH/ldpctest.c b/openair1/PHY/CODING/TESTBENCH/ldpctest.c index 875cdf6cdc..d899eab63c 100644 --- a/openair1/PHY/CODING/TESTBENCH/ldpctest.c +++ b/openair1/PHY/CODING/TESTBENCH/ldpctest.c @@ -79,12 +79,12 @@ char quantize8bit(double D,double x) } typedef struct { - double n_iter_mean[100]; - double n_iter_std[100]; - int n_iter_max[100]; - double snr[100]; - double ber[100]; - double bler[100]; + double n_iter_mean[400]; + double n_iter_std[400]; + int n_iter_max[400]; + double snr[400]; + double ber[400]; + double bler[400]; } n_iter_stats_t; nrLDPC_encoderfunc_t encoder_orig; From 5c9c2783a58791b8f147b7f4cb789eab5ded6853 Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Mon, 14 Feb 2022 09:49:54 +0530 Subject: [PATCH 022/150] removed crc from ldpctest --- openair1/PHY/CODING/TESTBENCH/ldpctest.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/openair1/PHY/CODING/TESTBENCH/ldpctest.c b/openair1/PHY/CODING/TESTBENCH/ldpctest.c index d899eab63c..081aa39019 100644 --- a/openair1/PHY/CODING/TESTBENCH/ldpctest.c +++ b/openair1/PHY/CODING/TESTBENCH/ldpctest.c @@ -285,15 +285,6 @@ int test_ldpc(short No_iteration, removed_bit=(nrows-no_punctured_columns-2) * Zc+block_length-(int)(block_length/((float)nom_rate/(float)denom_rate)); encoder_implemparams_t impp=INIT0_LDPCIMPLEMPARAMS; - // CRC attachement - for (j=0; j>8; - test_input[j][(block_length-24)>>3] = ((uint8_t*)&crc)[2]; - test_input[j][1+((block_length-24)>>3)] = ((uint8_t*)&crc)[1]; - test_input[j][2+((block_length-24)>>3)] = ((uint8_t*)&crc)[0]; - } - impp.gen_code=1; if (ntrials==0) encoder_orig(test_input,channel_input, Zc, BG, block_length, BG, &impp); @@ -415,7 +406,7 @@ int test_ldpc(short No_iteration, //count errors for(j=0;j>3; i++) + for (i=0; i<(block_length)>>3; i++) { //printf("block_length>>3: %d \n",block_length>>3); /// printf("i: %d \n",i); @@ -429,7 +420,7 @@ int test_ldpc(short No_iteration, } } - for (i=0; i>(i&7); test_input_bit[i] = (test_input[j][i/8]&(1<<(i&7)))>>(i&7); // Further correct for multiple segments From 987363b8a83f8ee2301d6247d2b676068b76942a Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 14 Feb 2022 10:34:23 -0800 Subject: [PATCH 023/150] Clean up for MR --- executables/nr-ue.c | 8 +- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 46 +++-------- openair2/LAYER2/NR_MAC_COMMON/nr_mac.h | 14 ++-- openair2/LAYER2/NR_MAC_UE/mac_defs.h | 2 +- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 81 +++++--------------- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 44 ++++------- 6 files changed, 57 insertions(+), 138 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 3370aa2fc2..9aac2c7f90 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -201,11 +201,11 @@ static void process_queued_nr_nfapi_msgs(NR_UE_MAC_INST_t *mac, int sfn_slot) nfapi_nr_dl_tti_request_t *dl_tti_request = get_queue(&nr_dl_tti_req_queue); nfapi_nr_ul_dci_request_t *ul_dci_request = get_queue(&nr_ul_dci_req_queue); - for (int i = 0; i < 16; i++) { + for (int i = 0; i < NR_MAX_HARQ_PROCESSES; i++) { LOG_D(NR_MAC, "Try to get a ul_tti_req by matching CRC active SFN %d/SLOT %d from queue with %lu items\n", - NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.harq[i].crc_rx_ind_sfn_slot), - NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.harq[i].crc_rx_ind_sfn_slot), nr_ul_tti_req_queue.num_items); - nfapi_nr_ul_tti_request_t *ul_tti_request_crc = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.harq[i].crc_rx_ind_sfn_slot); + NFAPI_SFNSLOT2SFN(mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot), + NFAPI_SFNSLOT2SLOT(mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot), nr_ul_tti_req_queue.num_items); + nfapi_nr_ul_tti_request_t *ul_tti_request_crc = unqueue_matching(&nr_ul_tti_req_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot); if (ul_tti_request_crc && ul_tti_request_crc->n_pdus > 0) { check_and_process_dci(NULL, NULL, NULL, ul_tti_request_crc); diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 4583e4f193..c34877bd23 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -104,8 +104,6 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response rx_ind->header.message_id = NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION; rx_ind->sfn = scheduled_response->ul_config->sfn; rx_ind->slot = scheduled_response->ul_config->slot; - LOG_I(NR_MAC, "This is sched sfn/sl [%d %d] and rx sfn/sl [%d %d]\n", - scheduled_response->frame, scheduled_response->slot, rx_ind->sfn, rx_ind->slot); rx_ind->number_of_pdus = scheduled_response->tx_request->number_of_pdus; rx_ind->pdu_list = CALLOC(rx_ind->number_of_pdus, sizeof(*rx_ind->pdu_list)); for (int j = 0; j < rx_ind->number_of_pdus; j++) @@ -117,7 +115,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response rx_ind->pdu_list[j].pdu = CALLOC(tx_req_body->pdu_length, sizeof(*rx_ind->pdu_list[j].pdu)); memcpy(rx_ind->pdu_list[j].pdu, tx_req_body->pdu, tx_req_body->pdu_length * sizeof(*rx_ind->pdu_list[j].pdu)); rx_ind->pdu_list[j].rnti = pusch_config_pdu->rnti; - rx_ind->pdu_list[j].timing_advance = scheduled_response->tx_request->tx_config.timing_advance; + rx_ind->pdu_list[j].timing_advance = 31; rx_ind->pdu_list[j].ul_cqi = scheduled_response->tx_request->tx_config.ul_cqi; } @@ -130,15 +128,15 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response { crc_ind->crc_list[j].handle = pusch_config_pdu->handle; crc_ind->crc_list[j].harq_id = pusch_config_pdu->pusch_data.harq_process_id; - LOG_I(NR_MAC, "This is the harq pid %d for crc_list[%d]\n", crc_ind->crc_list[j].harq_id, j); - LOG_I(NR_MAC, "This is sched sfn/sl [%d %d] and crc sfn/sl [%d %d]\n", + LOG_D(NR_MAC, "This is the harq pid %d for crc_list[%d]\n", crc_ind->crc_list[j].harq_id, j); + LOG_D(NR_MAC, "This is sched sfn/sl [%d %d] and crc sfn/sl [%d %d]\n", scheduled_response->frame, scheduled_response->slot, crc_ind->sfn, crc_ind->slot); crc_ind->crc_list[j].num_cb = pusch_config_pdu->pusch_data.num_cb; crc_ind->crc_list[j].rnti = pusch_config_pdu->rnti; crc_ind->crc_list[j].tb_crc_status = 0; - crc_ind->crc_list[j].timing_advance = scheduled_response->tx_request->tx_config.timing_advance; + crc_ind->crc_list[j].timing_advance = 31; crc_ind->crc_list[j].ul_cqi = 255; - mac->nr_ue_emul_l1.harq[crc_ind->crc_list[j].harq_id].crc_rx_ind_sfn_slot = NFAPI_SFNSLOT2HEX(crc_ind->sfn, crc_ind->slot); + mac->nr_ue_emul_l1.harq[crc_ind->crc_list[j].harq_id].active_ul_harq_sfn_slot = NFAPI_SFNSLOT2HEX(crc_ind->sfn, crc_ind->slot); LOG_D(NR_MAC, "This is sched sfn/sl [%d %d] and crc sfn/sl [%d %d] with mcs_index in ul_cqi -> %d\n", scheduled_response->frame, scheduled_response->slot, crc_ind->sfn, crc_ind->slot,pusch_config_pdu->mcs_index); } @@ -166,8 +164,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response crc_ind = NULL; } - LOG_I(PHY, "In %s: [%d, %d] Filled queue rx/crc_ind which was filled by ulconfig. \n", __FUNCTION__, - scheduled_response->frame, scheduled_response->slot); + LOG_D(PHY, "In %s: Filled queue rx/crc_ind which was filled by ulconfig. \n", __FUNCTION__); scheduled_response->tx_request->number_of_pdus = 0; } @@ -204,8 +201,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response pdu_0_1->ul_cqi = 255; pdu_0_1->timing_advance = 0; pdu_0_1->rssi = 0; - LOG_I(NR_PHY, "In %s: UCI SFN/SLOT: [%d, %d] and mac->nr_ue_emul_l1.num_harq %d\n", - __FUNCTION__, uci_ind->sfn, uci_ind->slot, mac->nr_ue_emul_l1.num_harqs); + if (mac->nr_ue_emul_l1.num_harqs > 0) { int harq_index = 0; pdu_0_1->pduBitmap = 2; // (value->pduBitmap >> 1) & 0x01) == HARQ and (value->pduBitmap) & 0x01) == SR @@ -214,29 +210,16 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response pdu_0_1->harq->harq_confidence_level = 0; pdu_0_1->harq->harq_list = CALLOC(pdu_0_1->harq->num_harq, sizeof(*pdu_0_1->harq->harq_list)); int harq_pid = -1; - for (int k = 0; k < 16; k++) + for (int k = 0; k < NR_MAX_HARQ_PROCESSES; k++) { - LOG_I(NR_MAC, "HARQ PID %d active = %d saved sfn_slot = %d.%d vs current sfn.slot %d.%d\n", - k, mac->nr_ue_emul_l1.harq[k].active, - mac->nr_ue_emul_l1.harq[k].active_harq_sfn, - mac->nr_ue_emul_l1.harq[k].active_harq_slot, - uci_ind->sfn, - uci_ind->slot); if (mac->nr_ue_emul_l1.harq[k].active && - mac->nr_ue_emul_l1.harq[k].active_harq_sfn == uci_ind->sfn && - mac->nr_ue_emul_l1.harq[k].active_harq_slot == uci_ind->slot) + mac->nr_ue_emul_l1.harq[k].active_dl_harq_sfn == uci_ind->sfn && + mac->nr_ue_emul_l1.harq[k].active_dl_harq_slot == uci_ind->slot) { mac->nr_ue_emul_l1.harq[k].active = false; harq_pid = k; - LOG_I(NR_MAC, "Setting harq_pid = %d and num_harqs %d for %d.%d\n", k, pdu_0_1->harq->num_harq, - uci_ind->sfn, uci_ind->slot); pdu_0_1->harq->harq_list[harq_index].harq_value = !mac->dl_harq_info[k].ack; harq_index++; - LOG_I(NR_PHY, "In %s: Building uci_ind_%d with num_harqs %d and pdu_bitmap %d\n" - "uci_num %d, SFN/SLOT: [%d, %d]\n", - __FUNCTION__, uci_ind->uci_list[0].pdu_type, - pdu_0_1->harq->num_harq, pdu_0_1->pduBitmap, - uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); } } AssertFatal(harq_pid != -1, "No active harq_pid, sfn_slot = %u.%u", uci_ind->sfn, uci_ind->slot); @@ -244,13 +227,8 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response } } - LOG_I(NR_PHY, "In %s: Sending uci_ind_%d which was filled by ulconfig.\n" - "uci_num %d, SFN/SLOT: [%d, %d] and pdu_bitmap %d\n", - __FUNCTION__, uci_ind->uci_list[0].pdu_type, - uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot, - uci_ind->uci_list[0].pucch_pdu_format_0_1.pduBitmap); - LOG_I(NR_MAC, "Sending UCI with %d PDUs in sfn.slot %d/%d\n", - uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); + LOG_I(NR_PHY, "Sending UCI with %d PDUs in sfn.slot %d/%d\n", + uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); NR_UL_IND_t UL_INFO = { .uci_ind = *uci_ind, }; diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h index 4f1ed162e2..c3fc3206e4 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h @@ -269,20 +269,20 @@ typedef struct { scheduled SFN/Slot transmission for the ACK/NAK. If we do not save it, then we have to calculate it again as the NRUE MAC layer already does in get_downlink_ack(). */ - int active_harq_sfn; - int active_harq_slot; - int crc_rx_ind_sfn_slot; + int active_dl_harq_sfn; + int active_dl_harq_slot; + int active_ul_harq_sfn_slot; bool active; } emul_l1_harq_t; typedef struct { bool expected_sib; - bool index_has_sib[16]; + bool index_has_sib[NR_MAX_HARQ_PROCESSES]; bool expected_rar; - bool index_has_rar[16]; + bool index_has_rar[NR_MAX_HARQ_PROCESSES]; bool expected_dci; - bool index_has_dci[16]; - emul_l1_harq_t harq[16]; + bool index_has_dci[NR_MAX_HARQ_PROCESSES]; + emul_l1_harq_t harq[NR_MAX_HARQ_PROCESSES]; int active_uci_sfn_slot; int num_srs; int num_harqs; diff --git a/openair2/LAYER2/NR_MAC_UE/mac_defs.h b/openair2/LAYER2/NR_MAC_UE/mac_defs.h index ad86b1385d..fc2c2d2c8b 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_defs.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_defs.h @@ -432,7 +432,7 @@ typedef struct { // Defined for abstracted mode nr_downlink_indication_t dl_info; - NR_UE_HARQ_STATUS_t dl_harq_info[16]; + NR_UE_HARQ_STATUS_t dl_harq_info[NR_MAX_HARQ_PROCESSES]; nr_emulated_l1_t nr_ue_emul_l1; diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 1c1b69ad65..ed334758b6 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -599,19 +599,14 @@ int nr_ue_process_dci_indication_pdu(module_id_t module_id,int cc_id, int gNB_in NR_UE_MAC_INST_t *mac = get_mac_inst(module_id); dci_pdu_rel15_t *def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dci->dci_format]; - LOG_I(MAC,"Received dci indication (rnti %x,dci format %d,n_CCE %d,payloadSize %d,payload %llx, pid %d)\n", - dci->rnti, dci->dci_format, - dci->n_CCE, dci->payloadSize, - *(unsigned long long*)dci->payloadBits, - def_dci_pdu_rel15->harq_pid); + LOG_D(MAC,"Received dci indication (rnti %x,dci format %d,n_CCE %d,payloadSize %d,payload %llx)\n", + dci->rnti,dci->dci_format,dci->n_CCE,dci->payloadSize,*(unsigned long long*)dci->payloadBits); int8_t ret = nr_extract_dci_info(mac, dci->dci_format, dci->payloadSize, dci->rnti, (uint64_t *)dci->payloadBits, def_dci_pdu_rel15); if ((ret&1) == 1) return -1; else if (ret == 2) { dci->dci_format = NR_UL_DCI_FORMAT_0_0; def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dci->dci_format]; } - LOG_I(MAC,"After extracting dci info. dci format %d, pid %d\n", - dci->dci_format, def_dci_pdu_rel15->harq_pid); int8_t ret_proc = nr_ue_process_dci(module_id, cc_id, gNB_index, frame, slot, def_dci_pdu_rel15, dci); return ret_proc; } @@ -636,8 +631,8 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr else if (mac->scc_SIB) n_RB_DLBWP = NRRIV2BW(mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP.genericParameters.locationAndBandwidth,MAX_BWP_SIZE); else n_RB_DLBWP = mac->type0_PDCCH_CSS_config.num_rbs; - LOG_I(MAC, "In %s: Processing received DCI format %s (DL BWP %d) harq_pid %d\n", - __FUNCTION__, dci_formats[dci_format], n_RB_DLBWP, dci->harq_pid); + + LOG_D(MAC, "In %s: Processing received DCI format %s (DL BWP %d)\n", __FUNCTION__, dci_formats[dci_format], n_RB_DLBWP); switch(dci_format){ case NR_UL_DCI_FORMAT_0_0: { @@ -953,8 +948,6 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr if(rnti != ra->ra_rnti && rnti != SI_RNTI) AssertFatal(1+dci->pdsch_to_harq_feedback_timing_indicator.val>=DURATION_RX_TO_TX,"PDSCH to HARQ feedback time (%d) cannot be less than DURATION_RX_TO_TX (%d).\n", 1+dci->pdsch_to_harq_feedback_timing_indicator.val,DURATION_RX_TO_TX); - LOG_I(MAC,"(nr_ue_procedures.c) dci->pdsch_to_harq_feedback_timing_indicator.val=%d \n", - dci->pdsch_to_harq_feedback_timing_indicator.val); // set the harq status at MAC for feedback set_harq_status(mac,dci->pucch_resource_indicator, @@ -1126,9 +1119,6 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr valid = 0; pucch_res_set_cnt = ubwpd->pucch_Config->choice.setup->resourceSetToAddModList->list.count; for (int id = 0; id < pucch_res_set_cnt; id++) { - LOG_I(NR_MAC, "pucch_resource_indicator %d, ubwpd[%d].resource.list.count %d\n", - dci->pucch_resource_indicator, id, - ubwpd->pucch_Config->choice.setup->resourceSetToAddModList->list.array[id]->resourceList.list.count); if (dci->pucch_resource_indicator < ubwpd->pucch_Config->choice.setup->resourceSetToAddModList->list.array[id]->resourceList.list.count) { valid = 1; break; @@ -1246,9 +1236,6 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr // according to TS 38.213 Table 9.2.3-1 uint8_t feedback_ti = ubwpd->pucch_Config->choice.setup->dl_DataToUL_ACK->list.array[dci->pdsch_to_harq_feedback_timing_indicator.val][0]; - LOG_I(MAC,"(nr_ue_procedures.c) 1237 feedback_ti=%d and dci->pdsch_to_harq_feedback_timing_indicator.val %d, pdsch_to_harq_feedback_time_ind %d\n", - feedback_ti, dci->pdsch_to_harq_feedback_timing_indicator.val, - dlsch_config_pdu_1_1->pdsch_to_harq_feedback_time_ind); AssertFatal(feedback_ti>=DURATION_RX_TO_TX,"PDSCH to HARQ feedback time (%d) cannot be less than DURATION_RX_TO_TX (%d). Min feedback time set in config file (min_rxtxtime).\n", feedback_ti,DURATION_RX_TO_TX); @@ -1347,20 +1334,20 @@ void set_harq_status(NR_UE_MAC_INST_t *mac, // FIXME k0 != 0 currently not taken into consideration current_harq->dl_frame = frame; current_harq->dl_slot = slot; - // TODO: if (get_softmodem_params()->emaulte_l1) - // in downlink: 0-7, 10-17 - if (data_toul_fb + slot > 19) { - if (frame + 1 < 1024) - frame++; - else - frame = 0; - slot = (data_toul_fb + slot) - 20; - } - else { - slot = data_toul_fb + slot; + if (get_softmodem_params()->emaulte_l1) { + if (data_toul_fb + slot > 19) { + if (frame + 1 < 1024) + frame++; + else + frame = 0; + slot = (data_toul_fb + slot) - 20; + } + else { + slot = data_toul_fb + slot; + } } - LOG_I(NR_PHY,"Setting harq_status for harq_id %d, dl %d.%d, sched ul %d.%d\n", + LOG_D(NR_PHY,"Setting harq_status for harq_id %d, dl %d.%d, sched ul %d.%d\n", harq_id, current_harq->dl_frame, current_harq->dl_slot, frame, slot); } @@ -1845,22 +1832,16 @@ int find_pucch_resource_set(NR_UE_MAC_INST_t *mac, int uci_size) { mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup->resourceSetToAddModList->list.array[pucch_resource_set_id] != NULL)) { if (uci_size <= 3) { pucch_resource_set_id = 0; - LOG_I(NR_MAC, "Melissa %s()%d, we are setting resource_set_id = %d", - __FUNCTION__, __LINE__, pucch_resource_set_id); return (pucch_resource_set_id); break; } else { pucch_resource_set_id = 1; - LOG_I(NR_MAC, "Melissa %s()%d, we are setting resource_set_id = %d", - __FUNCTION__, __LINE__, pucch_resource_set_id); return (pucch_resource_set_id); break; } } pucch_resource_set_id++; - LOG_I(NR_MAC, "Melissa %s()%d, we are setting resource_set_id = %d", - __FUNCTION__, __LINE__, pucch_resource_set_id); } pucch_resource_set_id = MAX_NB_OF_PUCCH_RESOURCE_SETS; @@ -1945,13 +1926,6 @@ void select_pucch_resource(NR_UE_MAC_INST_t *mac, pucch->pucch_resource = NULL; return; } - LOG_I(MAC,"Melissa resourceSetToAddModList %p\n", resourceSetToAddModList); - LOG_I(MAC,"Melissa resourceSetToAddModList->list.array[0] %p\n", resourceSetToAddModList->list.array[0]); - LOG_I(MAC,"Melissa pucch->resource_set_id %d\n", pucch->resource_set_id); - LOG_I(MAC,"Melissa resourceSetToAddModList->list.array[pucch->resource_set_id] %p\n", resourceSetToAddModList->list.array[pucch->resource_set_id]); - LOG_I(MAC,"Melissa resourceSetToAddModList->list.array[pucch->resource_set_id]->resourceList %p\n", resourceSetToAddModList->list.array[pucch->resource_set_id]->resourceList); - LOG_I(MAC,"Melissa resourceSetToAddModList->list.array[pucch->resource_set_id]->resourceList.list.count %d\n", resourceSetToAddModList->list.array[pucch->resource_set_id]->resourceList.list.count); - n_list = resourceSetToAddModList->list.array[pucch->resource_set_id]->resourceList.list.count; if (pucch->resource_indicator > n_list) { LOG_E(MAC,"Invalid PUCCH resource id %d\n",pucch->resource_indicator); @@ -2063,21 +2037,13 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, else { sched_slot = current_harq->feedback_to_ul + current_harq->dl_slot; } - - LOG_I(PHY,"HARQ pid %d is active for %d.%d and inputted %d.%d (dl_slot %d, feedback_to_ul %d, is_common %d active %d\n", - dl_harq_pid, - sched_frame, - sched_slot, frame, slot, - current_harq->dl_slot, - current_harq->feedback_to_ul, - current_harq->is_common, - current_harq->active); + LOG_D(PHY,"HARQ pid %d is active for %d.%d (dl_slot %d, feedback_to_ul %d, is_common %d\n",dl_harq_pid, sched_frame,sched_slot,current_harq->dl_slot,current_harq->feedback_to_ul,current_harq->is_common); /* check if current tx slot should transmit downlink acknowlegment */ if (sched_frame == frame && sched_slot == slot) { if (get_softmodem_params()->emulate_l1) { mac->nr_ue_emul_l1.harq[dl_harq_pid].active = true; - mac->nr_ue_emul_l1.harq[dl_harq_pid].active_harq_sfn = frame; - mac->nr_ue_emul_l1.harq[dl_harq_pid].active_harq_slot = slot; + mac->nr_ue_emul_l1.harq[dl_harq_pid].active_dl_harq_sfn = frame; + mac->nr_ue_emul_l1.harq[dl_harq_pid].active_dl_harq_slot = slot; } if (current_harq->dai > NR_DL_MAX_DAI) { @@ -2099,7 +2065,6 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, } number_harq_feedback++; - LOG_I(NR_MAC, "number_harq_feedback = %d\n", number_harq_feedback); if (current_harq->ack_received) ack_data[code_word][dai_current - 1] = current_harq->ack; else @@ -2187,7 +2152,6 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, V_temp2 = dai[1][m]; /* second code word has been received */ O_bit_number_cw1 = (8 * j) + 2*(V_temp - 1) + 1; o_ACK = o_ACK | (ack_data[1][m] << O_bit_number_cw1); - LOG_I(NR_MAC, "%s():%d o_ACK = %d\n", __FUNCTION__, __LINE__, o_ACK); } if (two_transport_blocks == TRUE) { @@ -2197,7 +2161,6 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, O_bit_number_cw0 = (4 * j) + (V_temp - 1); } - LOG_I(NR_MAC, "%s():%d o_ACK = %d\n", __FUNCTION__, __LINE__, o_ACK); o_ACK = o_ACK | (ack_data[0][m] << O_bit_number_cw0); LOG_D(MAC,"m %d bit number %d o_ACK %d\n",m,O_bit_number_cw0,o_ACK); } @@ -2211,16 +2174,14 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, } else { O_ACK = 4 * j + V_temp2; /* only one transport block */ - LOG_I(NR_MAC, "%s():%d O_ACK = %d\n", __FUNCTION__, __LINE__, O_ACK); } if (number_harq_feedback != O_ACK) { LOG_E(MAC,"PUCCH Error for number of bits for acknowledgment. number_harq_feedback %d, O_ACK %d \n", number_harq_feedback, O_ACK); - number_harq_feedback = O_ACK; //return (0); + return (0); } - LOG_I(NR_MAC, "%s():%d o_ACK = %d\n", __FUNCTION__, __LINE__, o_ACK); pucch->ack_payload = o_ACK; LOG_D(MAC,"frame %d slot %d pucch acknack payload %d\n",frame,slot,o_ACK); @@ -3896,8 +3857,6 @@ int nr_ue_process_rar(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t #endif if (ra->RA_RAPID_found) { - // if (rarh->RAPID != preamble_index) - // return 0; RAR_grant_t rar_grant; diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index f5076dc180..3d32acffcf 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -465,7 +465,7 @@ static void fill_rx_ind(nfapi_nr_pdu_t *pdu_list, fapi_nr_rx_indication_t *rx_in { length += pdu_list->TLVs[j].length; } - LOG_I(NR_PHY, "Elkadi %s: num_tlv %d and length %d, pdu index %d\n", + LOG_I(NR_PHY, "%s: num_tlv %d and length %d, pdu index %d\n", __FUNCTION__, pdu_list->num_TLV, length, pdu_idx); uint8_t *pdu = malloc(length); AssertFatal(pdu != NULL, "%s: Out of memory in malloc", __FUNCTION__); @@ -618,7 +618,6 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n static bool send_crc_ind_and_rx_ind(int sfn_slot) { bool sent_crc_rx = true; - LOG_I(NR_MAC, "Melissa, This is the num items in crc %d and rx %d\n", nr_crc_ind_queue.num_items, nr_rx_ind_queue.num_items); nfapi_nr_rx_data_indication_t *rx_ind = unqueue_matching(&nr_rx_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot); nfapi_nr_crc_indication_t *crc_ind = unqueue_matching(&nr_crc_ind_queue, MAX_QUEUE_SIZE, sfn_slot_matcher, &sfn_slot); @@ -709,10 +708,8 @@ static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_ dl_ind->dci_ind->dci_list[k].dci_format = rel15_dci->dci_format_options[j]; LOG_I(NR_PHY, "format assigned dl_ind->dci_ind->dci_list[k].dci_format %d\n", dl_ind->dci_ind->dci_list[k].dci_format); - int CCEind = rel15_dci->CCE[j]; - int L = rel15_dci->L[j]; - dl_ind->dci_ind->dci_list[k].n_CCE = CCEind; - dl_ind->dci_ind->dci_list[k].N_CCE = L; + dl_ind->dci_ind->dci_list[k].n_CCE = rel15_dci->CCE[j]; + dl_ind->dci_ind->dci_list[k].N_CCE = rel15_dci->L[j]; } } } @@ -796,10 +793,8 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, mac->scc->tdd_UL_DL_ConfigurationCommon : mac->scc_SIB->tdd_UL_DL_ConfigurationCommon, ul_info.slot_tx, - mac->frame_type)) { - LOG_I(NR_MAC, "Slot %d. calling nr_ue_ul_ind() from %s\n", ul_info.slot_tx, __FUNCTION__); + mac->frame_type)) nr_ue_ul_indication(&ul_info); - } } } @@ -918,16 +913,10 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea LOG_E(NR_PHY, "Message ul_tti_request failed to unpack\n"); break; } - LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST message in SFN/slot %d %d.\n", - ul_tti_request->SFN, ul_tti_request->Slot); - for (int i = 0; i < ul_tti_request->n_pdus; i++) { - LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST pdu_type %d, ra_state %d.\n", - ul_tti_request->pdus_list[i].pdu_type, mac->ra.ra_state); - if (ul_tti_request->pdus_list[i].pdu_type == 1 && - mac->ra.ra_state >= RA_SUCCEEDED) { - LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST that were queueing with rnti %x!\n", - ul_tti_request->pdus_list[i].pucch_pdu.rnti); + for (int i = 0; i < ul_tti_request->n_pdus; i++) { + if (ul_tti_request->pdus_list[i].pdu_type == NFAPI_NR_UL_CONFIG_PUSCH_PDU_TYPE && + mac->ra.ra_state >= RA_SUCCEEDED) { if (!put_queue(&nr_ul_tti_req_queue, ul_tti_request)) { LOG_I(NR_PHY, "put_queue failed for ul_tti_request, calling put_queue_replace.\n"); @@ -937,8 +926,6 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea break; } else if (mac->ra.ra_state < RA_SUCCEEDED) { - LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_TTI_REQUEST before RA_SUCEEDED that were queueing with rnti %x!\n", - ul_tti_request->pdus_list[i].pucch_pdu.rnti); if (!put_queue(&nr_ul_tti_req_queue, ul_tti_request)) { LOG_I(NR_PHY, "put_queue failed for ul_tti_request, calling put_queue_replace.\n"); @@ -1098,8 +1085,8 @@ int handle_dci(module_id_t module_id, int cc_id, unsigned int gNB_index, frame_t // L2 Abstraction Layer // Note: sdu should always be processed because data and timing advance updates are transmitted by the UE int8_t handle_dlsch(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t *ul_time_alignment, int pdu_id){ - - dl_info->rx_ind->rx_indication_body[pdu_id].pdsch_pdu.harq_pid = g_harq_pid; + if (get_softmodem_params()->emulate_l1) + dl_info->rx_ind->rx_indication_body[pdu_id].pdsch_pdu.harq_pid = g_harq_pid; update_harq_status(dl_info->module_id, dl_info->rx_ind->rx_indication_body[pdu_id].pdsch_pdu.harq_pid, @@ -1147,8 +1134,6 @@ int nr_ue_ul_indication(nr_uplink_indication_t *ul_info){ if (is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type) && !get_softmodem_params()->phy_test) nr_ue_prach_scheduler(module_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->thread_id); - LOG_I(NR_MAC, "In %s():%d calling nr_ue_pucch_scheduler in %d.%d\n", - __FUNCTION__, __LINE__, ul_info->frame_tx, ul_info->slot_tx); if (is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type) && !get_softmodem_params()->emulate_l1) nr_ue_pucch_scheduler(module_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->thread_id); @@ -1184,12 +1169,8 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ if (dl_info && dl_info->dci_ind && dl_info->dci_ind->number_of_dcis) { LOG_D(MAC,"[L2][IF MODULE][DL INDICATION][DCI_IND]\n"); for (int i = 0; i < dl_info->dci_ind->number_of_dcis; i++) { + LOG_D(MAC,">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d\n",i,dl_info->dci_ind->number_of_dcis); fapi_nr_dci_indication_pdu_t *dci_index = dl_info->dci_ind->dci_list+i; - LOG_I(MAC,">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d, format %d, harq_pid %d\n", - i, - dl_info->dci_ind->number_of_dcis, - dci_index->dci_format, - mac->def_dci_pdu_rel15[dci_index->dci_format].harq_pid); nr_scheduled_response_t scheduled_response; int8_t ret = handle_dci(dl_info->module_id, dl_info->cc_id, @@ -1200,7 +1181,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ /* The check below filters out UL_DCIs (format 7) which are being processed as DL_DCIs. */ if (dci_index->dci_format == 7 && mac->ra.ra_state == RA_SUCCEEDED) { - LOG_I(NR_MAC, "We are filtering a UL_DCI to prevent it from being treated like a DL_DCI\n"); + LOG_D(NR_MAC, "We are filtering a UL_DCI to prevent it from being treated like a DL_DCI\n"); break; } dci_pdu_rel15_t *def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dci_index->dci_format]; @@ -1214,7 +1195,8 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, dl_info->module_id, dl_info->cc_id, dl_info->frame, dl_info->slot, dl_info->thread_id); nr_ue_if_module_inst[module_id]->scheduled_response(&scheduled_response); } - //memset(def_dci_pdu_rel15, 0, sizeof(*def_dci_pdu_rel15)); + if (!get_softmodem_params()->emulate_l1) + memset(def_dci_pdu_rel15, 0, sizeof(*def_dci_pdu_rel15)); } free(dl_info->dci_ind); dl_info->dci_ind = NULL; From 26349dbe20f43050e34dc7aea47c66853b80f351 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 14 Feb 2022 11:07:14 -0800 Subject: [PATCH 024/150] More clean up for merge request --- executables/nr-ue.c | 4 +--- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 7 ++++--- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 5 +++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 9aac2c7f90..b812026602 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -375,8 +375,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) ul_info.slot_tx = (slot + slot_ahead) % slots_per_frame; ul_info.frame_tx = (ul_info.slot_rx + slot_ahead >= slots_per_frame) ? ul_info.frame_rx + 1 : ul_info.frame_rx; ul_info.ue_sched_mode = SCHED_ALL; - LOG_I(NR_MAC, "frame_rx %d, slot rx %d, frame tx %d, slot tx %d, slot_ahead %d\n", - ul_info.frame_rx, ul_info.slot_rx, ul_info.frame_tx, ul_info.slot_tx, slot_ahead); if (pthread_mutex_lock(&mac->mutex_dl_info)) abort(); @@ -405,7 +403,7 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) mac->scc_SIB->tdd_UL_DL_ConfigurationCommon, ul_info.slot_tx, mac->frame_type)) { - LOG_I(NR_MAC, "Slot %d. calling nr_ue_ul_ind() and nr_ue_pucch_scheduler from %s\n", ul_info.slot_tx, __FUNCTION__); + LOG_I(NR_MAC, "Slot %d. calling nr_ue_ul_ind() and nr_ue_pucch_scheduler() from %s\n", ul_info.slot_tx, __FUNCTION__); nr_ue_ul_indication(&ul_info); nr_ue_pucch_scheduler(0, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id); check_nr_prach(mac, &ul_info, &prach_resources); diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index ed334758b6..e1096e484c 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -631,7 +631,6 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr else if (mac->scc_SIB) n_RB_DLBWP = NRRIV2BW(mac->scc_SIB->uplinkConfigCommon->initialUplinkBWP.genericParameters.locationAndBandwidth,MAX_BWP_SIZE); else n_RB_DLBWP = mac->type0_PDCCH_CSS_config.num_rbs; - LOG_D(MAC, "In %s: Processing received DCI format %s (DL BWP %d)\n", __FUNCTION__, dci_formats[dci_format], n_RB_DLBWP); switch(dci_format){ @@ -1236,6 +1235,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr // according to TS 38.213 Table 9.2.3-1 uint8_t feedback_ti = ubwpd->pucch_Config->choice.setup->dl_DataToUL_ACK->list.array[dci->pdsch_to_harq_feedback_timing_indicator.val][0]; + AssertFatal(feedback_ti>=DURATION_RX_TO_TX,"PDSCH to HARQ feedback time (%d) cannot be less than DURATION_RX_TO_TX (%d). Min feedback time set in config file (min_rxtxtime).\n", feedback_ti,DURATION_RX_TO_TX); @@ -2177,11 +2177,12 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, } if (number_harq_feedback != O_ACK) { - LOG_E(MAC,"PUCCH Error for number of bits for acknowledgment. number_harq_feedback %d, O_ACK %d \n", - number_harq_feedback, O_ACK); + + LOG_E(MAC,"PUCCH Error for number of bits for acknowledgment : at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME); return (0); } + reverse_n_bits(&o_ACK,number_harq_feedback); pucch->ack_payload = o_ACK; LOG_D(MAC,"frame %d slot %d pucch acknack payload %d\n",frame,slot,o_ACK); diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 3d32acffcf..70c0f8a386 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -1170,14 +1170,15 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ LOG_D(MAC,"[L2][IF MODULE][DL INDICATION][DCI_IND]\n"); for (int i = 0; i < dl_info->dci_ind->number_of_dcis; i++) { LOG_D(MAC,">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d\n",i,dl_info->dci_ind->number_of_dcis); - fapi_nr_dci_indication_pdu_t *dci_index = dl_info->dci_ind->dci_list+i; nr_scheduled_response_t scheduled_response; int8_t ret = handle_dci(dl_info->module_id, dl_info->cc_id, dl_info->gNB_index, dl_info->frame, dl_info->slot, - dci_index); + dl_info->dci_ind->dci_list+i); + + fapi_nr_dci_indication_pdu_t *dci_index = dl_info->dci_ind->dci_list+i; /* The check below filters out UL_DCIs (format 7) which are being processed as DL_DCIs. */ if (dci_index->dci_format == 7 && mac->ra.ra_state == RA_SUCCEEDED) { From af18fc7e70c192f88a13df884c129d2244725531 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 14 Feb 2022 11:14:13 -0800 Subject: [PATCH 025/150] Log demotion and white space clean up --- executables/nr-ue.c | 2 +- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 2 +- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index b812026602..0bb282c943 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -403,7 +403,7 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) mac->scc_SIB->tdd_UL_DL_ConfigurationCommon, ul_info.slot_tx, mac->frame_type)) { - LOG_I(NR_MAC, "Slot %d. calling nr_ue_ul_ind() and nr_ue_pucch_scheduler() from %s\n", ul_info.slot_tx, __FUNCTION__); + LOG_D(NR_MAC, "Slot %d. calling nr_ue_ul_ind() and nr_ue_pucch_scheduler() from %s\n", ul_info.slot_tx, __FUNCTION__); nr_ue_ul_indication(&ul_info); nr_ue_pucch_scheduler(0, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id); check_nr_prach(mac, &ul_info, &prach_resources); diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index c34877bd23..b80ddbf22c 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -36,7 +36,7 @@ #include "fapi_nr_ue_l1.h" #include "harq_nr.h" //#include "PHY/phy_vars_nr_ue.h" - +#include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h" #include "PHY/defs_nr_UE.h" #include "PHY/impl_defs_nr.h" #include "utils.h" diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index e1096e484c..c9f9337fe6 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -2177,7 +2177,6 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, } if (number_harq_feedback != O_ACK) { - LOG_E(MAC,"PUCCH Error for number of bits for acknowledgment : at line %d in function %s of file %s \n", LINE_FILE , __func__, FILE_NAME); return (0); } From 5e7de1cdfc36c8826c70ca8a12f85de7e2caacc2 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 14 Feb 2022 11:41:22 -0800 Subject: [PATCH 026/150] Fixing typo and adding .h files for linking --- openair2/LAYER2/NR_MAC_COMMON/nr_mac.h | 1 + openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 2 +- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 1 - openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h | 2 ++ 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h index c3fc3206e4..9dd03ddcf6 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h @@ -39,6 +39,7 @@ #include #include "NR_SubcarrierSpacing.h" +#include "openair1/SCHED_NR_UE/harq_nr.h" #define NR_SHORT_BSR_TABLE_SIZE 32 #define NR_LONG_BSR_TABLE_SIZE 256 diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index c9f9337fe6..92fc813e6a 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -1334,7 +1334,7 @@ void set_harq_status(NR_UE_MAC_INST_t *mac, // FIXME k0 != 0 currently not taken into consideration current_harq->dl_frame = frame; current_harq->dl_slot = slot; - if (get_softmodem_params()->emaulte_l1) { + if (get_softmodem_params()->emulate_l1) { if (data_toul_fb + slot > 19) { if (frame + 1 < 1024) frame++; diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 70c0f8a386..87f262dbe9 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -649,7 +649,6 @@ static bool send_crc_ind_and_rx_ind(int sfn_slot) static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_nr_ul_tti_request_t *ul_tti_req) { - NR_UE_MAC_INST_t *mac = get_mac_inst(dl_info->module_id); int num_pdus = ul_tti_req->n_pdus; int sfn_slot = NFAPI_SFNSLOT2HEX(ul_tti_req->SFN, ul_tti_req->Slot); AssertFatal(num_pdus >= 0, "Invalid ul_tti_request number of PDUS\n"); diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index 499346f394..3984ed3380 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -268,6 +268,8 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, bool sfn_slot_matcher(void *wanted, void *candidate); +void free_uci_inds(nfapi_nr_uci_indication_t *uci_ind); + /**\brief done free of memory allocation by module_id and release to pointer pool. \param module_id module id*/ int nr_ue_if_module_kill(uint32_t module_id); From d8d616a1fa4aa4fddcc30a6c97f44d3ee78bffdd Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 14 Feb 2022 12:24:34 -0800 Subject: [PATCH 027/150] Setting timing advance in stub function. The timing advance field could be abstracted in the proxy gNB. Currently we are not abstracting this value. --- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 2eb1da9101..9e4a0f2d3d 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -114,7 +114,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response rx_ind->pdu_list[j].pdu = CALLOC(tx_req_body->pdu_length, sizeof(*rx_ind->pdu_list[j].pdu)); memcpy(rx_ind->pdu_list[j].pdu, tx_req_body->pdu, tx_req_body->pdu_length * sizeof(*rx_ind->pdu_list[j].pdu)); rx_ind->pdu_list[j].rnti = pusch_config_pdu->rnti; - rx_ind->pdu_list[j].timing_advance = scheduled_response->tx_request->tx_config.timing_advance; + rx_ind->pdu_list[j].timing_advance = 31; rx_ind->pdu_list[j].ul_cqi = scheduled_response->tx_request->tx_config.ul_cqi; } @@ -134,7 +134,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response crc_ind->crc_list[j].num_cb = pusch_config_pdu->pusch_data.num_cb; crc_ind->crc_list[j].rnti = pusch_config_pdu->rnti; crc_ind->crc_list[j].tb_crc_status = 0; - crc_ind->crc_list[j].timing_advance = scheduled_response->tx_request->tx_config.timing_advance; + crc_ind->crc_list[j].timing_advance = 31; crc_ind->crc_list[j].ul_cqi = 255; LOG_D(NR_MAC, "This is sched sfn/sl [%d %d] and crc sfn/sl [%d %d] with mcs_index in ul_cqi -> %d\n", scheduled_response->frame, scheduled_response->slot, crc_ind->sfn, crc_ind->slot,pusch_config_pdu->mcs_index); From abddc13a130b955459e9b01056225d8730a85cd1 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 14 Feb 2022 13:51:57 -0800 Subject: [PATCH 028/150] Adding \n to several logs and demoting two logs --- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 2 +- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index b80ddbf22c..76521a5f3c 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -181,7 +181,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response uci_ind->uci_list = CALLOC(uci_ind->num_ucis, sizeof(*uci_ind->uci_list)); for (int j = 0; j < uci_ind->num_ucis; j++) { - LOG_I(NR_MAC, "ul_config->ul_config_list[%d].pucch_config_pdu.n_bit = %d", i, ul_config->ul_config_list[i].pucch_config_pdu.n_bit); + LOG_I(NR_MAC, "ul_config->ul_config_list[%d].pucch_config_pdu.n_bit = %d\n", i, ul_config->ul_config_list[i].pucch_config_pdu.n_bit); if (ul_config->ul_config_list[i].pucch_config_pdu.n_bit > 3 && mac->nr_ue_emul_l1.num_csi_reports > 0) { uci_ind->uci_list[j].pdu_type = NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE; diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 87f262dbe9..99d94e1a76 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -144,7 +144,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) case NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION: { char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE]; - LOG_D(NR_MAC, "RACH header id :%d", UL_INFO->rach_ind.header.message_id); + LOG_D(NR_MAC, "RACH header id :%d\n", UL_INFO->rach_ind.header.message_id); int encoded_size = nfapi_nr_p7_message_pack(&UL_INFO->rach_ind, buffer, sizeof(buffer), NULL); if (encoded_size <= 0) { @@ -164,7 +164,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) case NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION: { char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE]; - LOG_D(NR_MAC, "RX header id :%d", UL_INFO->rx_ind.header.message_id); + LOG_D(NR_MAC, "RX header id :%d\n", UL_INFO->rx_ind.header.message_id); int encoded_size = nfapi_nr_p7_message_pack(&UL_INFO->rx_ind, buffer, sizeof(buffer), NULL); if (encoded_size <= 0) { @@ -184,7 +184,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) case NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION: { char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE]; - LOG_D(NR_MAC, "CRC header id :%d", UL_INFO->crc_ind.header.message_id); + LOG_D(NR_MAC, "CRC header id :%d\n", UL_INFO->crc_ind.header.message_id); int encoded_size = nfapi_nr_p7_message_pack(&UL_INFO->crc_ind, buffer, sizeof(buffer), NULL); if (encoded_size <= 0) { @@ -204,7 +204,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) case NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION: { char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE]; - LOG_I(NR_MAC, "UCI header id :%d", UL_INFO->uci_ind.header.message_id); + LOG_I(NR_MAC, "UCI header id :%d\n", UL_INFO->uci_ind.header.message_id); int encoded_size = nfapi_nr_p7_message_pack(&UL_INFO->uci_ind, buffer, sizeof(buffer), NULL); if (encoded_size <= 0) { @@ -656,7 +656,7 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n "Too many pdus %d in ul_tti_req\n", num_pdus); if (!send_crc_ind_and_rx_ind(sfn_slot)) { - LOG_E(NR_MAC, "CRC_RX ind not sent\n"); + LOG_D(NR_MAC, "CRC_RX ind not sent\n"); if (!put_queue(&nr_ul_tti_req_queue, ul_tti_req)) { LOG_E(NR_PHY, "put_queue failed for ul_tti_req.\n"); @@ -758,7 +758,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, { frame = ul_tti_request->SFN; slot = ul_tti_request->Slot; - LOG_I(NR_PHY, "[%d, %d] ul_tti_request\n", frame, slot); + LOG_D(NR_PHY, "[%d, %d] ul_tti_request\n", frame, slot); copy_ul_tti_data_req_to_dl_info(&mac->dl_info, ul_tti_request); } else From 9a78b58927e0e8f68e6ebc8296ab747e89bf46e4 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Wed, 16 Feb 2022 13:12:12 -0800 Subject: [PATCH 029/150] Getting rid of pthread warning and fixing nfapi The nfapi code releases dl_ttis and tx_data_reqs if the buffer has data in it. In the proxy code we overwrite this instead of dropping the packet. --- executables/nr-ue.c | 3 +-- nfapi/open-nFAPI/pnf/src/pnf_p7.c | 43 ++++++------------------------- 2 files changed, 9 insertions(+), 37 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 0bb282c943..d448fa3ba4 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -18,7 +18,7 @@ * For more information about the OpenAirInterface (OAI) Software Alliance: * contact@openairinterface.org */ - +#define _GNU_SOURCE #include #include "executables/nr-uesoftmodem.h" #include "PHY/phy_extern_nr_ue.h" @@ -32,7 +32,6 @@ #include "LAYER2/nr_pdcp/nr_pdcp_entity.h" #include "SCHED_NR_UE/pucch_uci_ue_nr.h" #include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h" -#include /* * NR SLOT PROCESSING SEQUENCE diff --git a/nfapi/open-nFAPI/pnf/src/pnf_p7.c b/nfapi/open-nFAPI/pnf/src/pnf_p7.c index fb1a713e56..c44ad2f40d 100644 --- a/nfapi/open-nFAPI/pnf/src/pnf_p7.c +++ b/nfapi/open-nFAPI/pnf/src/pnf_p7.c @@ -1530,7 +1530,7 @@ uint8_t is_nr_p7_request_in_window(uint16_t sfn,uint16_t slot, const char* name, else { - + in_window = 1; NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] %s is out of window %d (delta:%d) [max:%d]\n", current_sfn_slot_dec, name, recv_sfn_slot_dec, (current_sfn_slot_dec - recv_sfn_slot_dec), timing_window); }//Need to add more cases @@ -1615,25 +1615,15 @@ void pnf_handle_dl_tti_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7) return; } - if(is_nr_p7_request_in_window(req->SFN,req->Slot, "dl_tti_request", pnf_p7)) - { - uint32_t sfn_slot_dec = NFAPI_SFNSLOT2DEC(req->SFN,req->Slot); - uint8_t buffer_index = sfn_slot_dec % 20; + if (is_nr_p7_request_in_window(req->SFN,req->Slot, "dl_tti_request", pnf_p7)) + { + uint32_t sfn_slot_dec = NFAPI_SFNSLOT2DEC(req->SFN,req->Slot); + uint8_t buffer_index = sfn_slot_dec % 20; - struct timespec t; - clock_gettime(CLOCK_MONOTONIC, &t); + struct timespec t; + clock_gettime(CLOCK_MONOTONIC, &t); - NFAPI_TRACE(NFAPI_TRACE_INFO,"%s() %ld.%09ld POPULATE DL_TTI_REQ current tx sfn/slot:%d.%d p7 msg sfn/slot: %d.%d buffer_index:%d\n", __FUNCTION__, t.tv_sec, t.tv_nsec, pnf_p7->sfn,pnf_p7->slot, req->SFN, req->Slot, buffer_index); - - // if there is already an dl_tti_req make sure we free it. - if(pnf_p7->slot_buffer[buffer_index].dl_tti_req != 0) - { - NFAPI_TRACE(NFAPI_TRACE_NOTE, "%s() is_nr_p7_request_in_window()=TRUE buffer_index occupied - free it first sfn_slot:%d buffer_index:%d\n", __FUNCTION__, NFAPI_SFNSLOT2DEC(req->SFN,req->Slot), buffer_index); - //NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing dl_config_req at index %d (%d/%d)", - // pMyPhyInfo->sfnSf, bufferIdx, - // SFNSF2SFN(dreq->sfn_sf), SFNSF2SF(dreq->sfn_sf)); - deallocate_nfapi_dl_tti_request(pnf_p7->slot_buffer[buffer_index].dl_tti_req, pnf_p7); - } + NFAPI_TRACE(NFAPI_TRACE_INFO,"%s() %ld.%09ld POPULATE DL_TTI_REQ current tx sfn/slot:%d.%d p7 msg sfn/slot: %d.%d buffer_index:%d\n", __FUNCTION__, t.tv_sec, t.tv_nsec, pnf_p7->sfn,pnf_p7->slot, req->SFN, req->Slot, buffer_index); // filling dl_tti_request in slot buffer pnf_p7->slot_buffer[buffer_index].sfn = req->SFN; @@ -2076,23 +2066,6 @@ void pnf_handle_tx_data_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7 struct timespec t; clock_gettime(CLOCK_MONOTONIC, &t); - //NFAPI_TRACE(NFAPI_TRACE_INFO,"%s() %ld.%09ld POPULATE TX_DATA_REQ sfn_sf:%d buffer_index:%d\n", __FUNCTION__, t.tv_sec, t.tv_nsec, sfn_slot_dec, buffer_index); -#if 0 - if (0 && NFAPI_SFNSF2DEC(req->sfn_sf)%100==0) NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() TX_REQ.req sfn_sf:%d pdus:%d - TX_REQ is within window\n", - __FUNCTION__, - NFAPI_SFNSF2DEC(req->sfn_sf), - req->tx_request_body.number_of_pdus); -#endif - - if(pnf_p7->slot_buffer[buffer_index].tx_data_req != 0) - { - //NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing tx_req at index %d (%d/%d)", - // pMyPhyInfo->sfnSf, bufferIdx, - // SFNSF2SFN(dreq->sfn_sf), SFNSF2SF(dreq->sfn_sf)); - - deallocate_nfapi_tx_data_request(pnf_p7->slot_buffer[buffer_index].tx_data_req, pnf_p7); - } - pnf_p7->slot_buffer[buffer_index].sfn = req->SFN; pnf_p7->slot_buffer[buffer_index].slot = req->Slot; pnf_p7->slot_buffer[buffer_index].tx_data_req = req; From 10d0f13ceb9b128bc4a7fd779e500f1cef35df5f Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Wed, 16 Feb 2022 13:15:15 -0800 Subject: [PATCH 030/150] Revert "Getting rid of pthread warning and fixing nfapi" This reverts commit 9a78b58927e0e8f68e6ebc8296ab747e89bf46e4. --- executables/nr-ue.c | 3 ++- nfapi/open-nFAPI/pnf/src/pnf_p7.c | 43 +++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index d448fa3ba4..0bb282c943 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -18,7 +18,7 @@ * For more information about the OpenAirInterface (OAI) Software Alliance: * contact@openairinterface.org */ -#define _GNU_SOURCE + #include #include "executables/nr-uesoftmodem.h" #include "PHY/phy_extern_nr_ue.h" @@ -32,6 +32,7 @@ #include "LAYER2/nr_pdcp/nr_pdcp_entity.h" #include "SCHED_NR_UE/pucch_uci_ue_nr.h" #include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h" +#include /* * NR SLOT PROCESSING SEQUENCE diff --git a/nfapi/open-nFAPI/pnf/src/pnf_p7.c b/nfapi/open-nFAPI/pnf/src/pnf_p7.c index c44ad2f40d..fb1a713e56 100644 --- a/nfapi/open-nFAPI/pnf/src/pnf_p7.c +++ b/nfapi/open-nFAPI/pnf/src/pnf_p7.c @@ -1530,7 +1530,7 @@ uint8_t is_nr_p7_request_in_window(uint16_t sfn,uint16_t slot, const char* name, else { - in_window = 1; + NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] %s is out of window %d (delta:%d) [max:%d]\n", current_sfn_slot_dec, name, recv_sfn_slot_dec, (current_sfn_slot_dec - recv_sfn_slot_dec), timing_window); }//Need to add more cases @@ -1615,15 +1615,25 @@ void pnf_handle_dl_tti_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7) return; } - if (is_nr_p7_request_in_window(req->SFN,req->Slot, "dl_tti_request", pnf_p7)) - { - uint32_t sfn_slot_dec = NFAPI_SFNSLOT2DEC(req->SFN,req->Slot); - uint8_t buffer_index = sfn_slot_dec % 20; + if(is_nr_p7_request_in_window(req->SFN,req->Slot, "dl_tti_request", pnf_p7)) + { + uint32_t sfn_slot_dec = NFAPI_SFNSLOT2DEC(req->SFN,req->Slot); + uint8_t buffer_index = sfn_slot_dec % 20; - struct timespec t; - clock_gettime(CLOCK_MONOTONIC, &t); + struct timespec t; + clock_gettime(CLOCK_MONOTONIC, &t); - NFAPI_TRACE(NFAPI_TRACE_INFO,"%s() %ld.%09ld POPULATE DL_TTI_REQ current tx sfn/slot:%d.%d p7 msg sfn/slot: %d.%d buffer_index:%d\n", __FUNCTION__, t.tv_sec, t.tv_nsec, pnf_p7->sfn,pnf_p7->slot, req->SFN, req->Slot, buffer_index); + NFAPI_TRACE(NFAPI_TRACE_INFO,"%s() %ld.%09ld POPULATE DL_TTI_REQ current tx sfn/slot:%d.%d p7 msg sfn/slot: %d.%d buffer_index:%d\n", __FUNCTION__, t.tv_sec, t.tv_nsec, pnf_p7->sfn,pnf_p7->slot, req->SFN, req->Slot, buffer_index); + + // if there is already an dl_tti_req make sure we free it. + if(pnf_p7->slot_buffer[buffer_index].dl_tti_req != 0) + { + NFAPI_TRACE(NFAPI_TRACE_NOTE, "%s() is_nr_p7_request_in_window()=TRUE buffer_index occupied - free it first sfn_slot:%d buffer_index:%d\n", __FUNCTION__, NFAPI_SFNSLOT2DEC(req->SFN,req->Slot), buffer_index); + //NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing dl_config_req at index %d (%d/%d)", + // pMyPhyInfo->sfnSf, bufferIdx, + // SFNSF2SFN(dreq->sfn_sf), SFNSF2SF(dreq->sfn_sf)); + deallocate_nfapi_dl_tti_request(pnf_p7->slot_buffer[buffer_index].dl_tti_req, pnf_p7); + } // filling dl_tti_request in slot buffer pnf_p7->slot_buffer[buffer_index].sfn = req->SFN; @@ -2066,6 +2076,23 @@ void pnf_handle_tx_data_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7 struct timespec t; clock_gettime(CLOCK_MONOTONIC, &t); + //NFAPI_TRACE(NFAPI_TRACE_INFO,"%s() %ld.%09ld POPULATE TX_DATA_REQ sfn_sf:%d buffer_index:%d\n", __FUNCTION__, t.tv_sec, t.tv_nsec, sfn_slot_dec, buffer_index); +#if 0 + if (0 && NFAPI_SFNSF2DEC(req->sfn_sf)%100==0) NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() TX_REQ.req sfn_sf:%d pdus:%d - TX_REQ is within window\n", + __FUNCTION__, + NFAPI_SFNSF2DEC(req->sfn_sf), + req->tx_request_body.number_of_pdus); +#endif + + if(pnf_p7->slot_buffer[buffer_index].tx_data_req != 0) + { + //NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing tx_req at index %d (%d/%d)", + // pMyPhyInfo->sfnSf, bufferIdx, + // SFNSF2SFN(dreq->sfn_sf), SFNSF2SF(dreq->sfn_sf)); + + deallocate_nfapi_tx_data_request(pnf_p7->slot_buffer[buffer_index].tx_data_req, pnf_p7); + } + pnf_p7->slot_buffer[buffer_index].sfn = req->SFN; pnf_p7->slot_buffer[buffer_index].slot = req->Slot; pnf_p7->slot_buffer[buffer_index].tx_data_req = req; From 3c925942a9471816c5538769adab6fd54ade78c7 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Wed, 16 Feb 2022 13:18:32 -0800 Subject: [PATCH 031/150] Getting rid of pthread warning with GNU_SOURCE --- executables/nr-ue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 0bb282c943..c5408d2e16 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -19,6 +19,7 @@ * contact@openairinterface.org */ +#define _GNU_SOURCE #include #include "executables/nr-uesoftmodem.h" #include "PHY/phy_extern_nr_ue.h" @@ -32,7 +33,6 @@ #include "LAYER2/nr_pdcp/nr_pdcp_entity.h" #include "SCHED_NR_UE/pucch_uci_ue_nr.h" #include "openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h" -#include /* * NR SLOT PROCESSING SEQUENCE From e5ddd558adf089f23826ec6442edd98795fe24d6 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Wed, 16 Feb 2022 15:13:26 -0800 Subject: [PATCH 032/150] Fixing spacing in nfapi code --- nfapi/open-nFAPI/nfapi/src/nfapi.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi.c b/nfapi/open-nFAPI/nfapi/src/nfapi.c index 6d4d61c927..09c0229db0 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi.c @@ -357,22 +357,22 @@ uint32_t pullarray32(uint8_t **values_to_pull, uint32_t max_num_values_to_pull, uint32_t num_values_to_pull, uint8_t *out_end) { - if(num_values_to_pull == 0) + if (num_values_to_pull == 0) return 1; - if(num_values_to_pull > max_num_values_to_pull) { + if (num_values_to_pull > max_num_values_to_pull) { NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, num_values_to_pull, max_num_values_to_pull); on_error(); return 0; } - if((out_end - (*values_to_pull)) >= sizeof(uint32_t) * num_values_to_pull) { + if ((out_end - (*values_to_pull)) >= sizeof(uint32_t) * num_values_to_pull) { uint32_t idx; - for(idx = 0; idx < num_values_to_pull; ++idx) { - if(!pull32(values_to_pull, &out[idx], out_end)) + for (idx = 0; idx < num_values_to_pull; ++idx) { + if (!pull32(values_to_pull, &out[idx], out_end)) return 0; } @@ -414,21 +414,21 @@ uint32_t pusharray32(const uint32_t *values_to_push, uint32_t num_values_to_push, uint8_t **out, uint8_t *out_end) { - if(num_values_to_push == 0) + if (num_values_to_push == 0) return 1; - if(num_values_to_push > max_num_values_to_push) { + if (num_values_to_push > max_num_values_to_push) { NFAPI_TRACE(NFAPI_TRACE_ERROR, "%s exceed array size (%d > %d)\n", __FUNCTION__, num_values_to_push, max_num_values_to_push); on_error(); return 0; } - if((out_end - (*out)) >= sizeof(uint32_t) * num_values_to_push) { + if ((out_end - (*out)) >= sizeof(uint32_t) * num_values_to_push) { uint32_t idx; - for(idx = 0; idx < num_values_to_push; ++idx) { - if(!push32(values_to_push[idx], out, out_end)) + for (idx = 0; idx < num_values_to_push; ++idx) { + if (!push32(values_to_push[idx], out, out_end)) return 0; } From c917352dd2c0e6c8c1fedf38d879e551271b4a1e Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Wed, 16 Feb 2022 16:11:19 -0800 Subject: [PATCH 033/150] Resolving issues in MR: Adding error checking before indexing in mac layer harq array Adding error checking before writing ul_harq_sfn_slot Added comments Made a "static" free_uci_inds() actually static --- executables/nr-ue.c | 9 +++- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 35 ++++++++++++++++ openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 11 ++--- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 43 +++++--------------- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h | 2 - 5 files changed, 55 insertions(+), 45 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index c5408d2e16..84288de469 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -313,6 +313,13 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) int last_sfn_slot = -1; uint16_t sfn_slot = 0; + module_id_t mod_id = 0; + NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id); + for (int i = 0; i < NR_MAX_HARQ_PROCESSES; i++) { + mac->nr_ue_emul_l1.harq[i].active = false; + mac->nr_ue_emul_l1.harq[i].active_ul_harq_sfn_slot = -1; + } + while (!oai_exit) { if (sem_wait(&sfn_slot_semaphore) != 0) @@ -347,8 +354,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) LOG_D(NR_MAC, "The received sfn/slot [%d %d] from proxy\n", frame, slot); - module_id_t mod_id = 0; - NR_UE_MAC_INST_t *mac = get_mac_inst(mod_id); if (get_softmodem_params()->sa && mac->mib == NULL) { LOG_D(NR_MAC, "We haven't gotten MIB. Lets see if we received it\n"); diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 76521a5f3c..702bf6d1a1 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -74,6 +74,38 @@ static void fill_uci_2_3_4(nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4, pdu_2_3_4->csi_part1.csi_part1_crc = 0; } +static void free_uci_inds(nfapi_nr_uci_indication_t *uci_ind) +{ + for (int k = 0; k < uci_ind->num_ucis; k++) + { + if (uci_ind->uci_list[k].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE) + { + nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[k].pucch_pdu_format_0_1; + free(pdu_0_1->sr); + pdu_0_1->sr = NULL; + if (pdu_0_1->harq) + { + free(pdu_0_1->harq->harq_list); + pdu_0_1->harq->harq_list = NULL; + } + free(pdu_0_1->harq); + pdu_0_1->harq = NULL; + } + if (uci_ind->uci_list[k].pdu_type == NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE) + { + nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[k].pucch_pdu_format_2_3_4; + free(pdu_2_3_4->sr.sr_payload); + pdu_2_3_4->sr.sr_payload = NULL; + free(pdu_2_3_4->harq.harq_payload); + pdu_2_3_4->harq.harq_payload = NULL; + } + } + free(uci_ind->uci_list); + uci_ind->uci_list = NULL; + free(uci_ind); + uci_ind = NULL; +} + int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response) { NR_UE_MAC_INST_t *mac = get_mac_inst(0); if(scheduled_response != NULL) @@ -136,6 +168,8 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response crc_ind->crc_list[j].tb_crc_status = 0; crc_ind->crc_list[j].timing_advance = 31; crc_ind->crc_list[j].ul_cqi = 255; + AssertFatal(mac->nr_ue_emul_l1.harq[crc_ind->crc_list[j].harq_id].active_ul_harq_sfn_slot == -1, + "We did not send an active CRC when we should have!\n"); mac->nr_ue_emul_l1.harq[crc_ind->crc_list[j].harq_id].active_ul_harq_sfn_slot = NFAPI_SFNSLOT2HEX(crc_ind->sfn, crc_ind->slot); LOG_D(NR_MAC, "This is sched sfn/sl [%d %d] and crc sfn/sl [%d %d] with mcs_index in ul_cqi -> %d\n", scheduled_response->frame, scheduled_response->slot, crc_ind->sfn, crc_ind->slot,pusch_config_pdu->mcs_index); @@ -218,6 +252,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response { mac->nr_ue_emul_l1.harq[k].active = false; harq_pid = k; + AssertFatal(harq_index < pdu_0_1->harq->num_harq, "Invalid harq_index %d\n", harq_index); pdu_0_1->harq->harq_list[harq_index].harq_value = !mac->dl_harq_info[k].ack; harq_index++; } diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 92fc813e6a..14c6824c45 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -1336,10 +1336,7 @@ void set_harq_status(NR_UE_MAC_INST_t *mac, current_harq->dl_slot = slot; if (get_softmodem_params()->emulate_l1) { if (data_toul_fb + slot > 19) { - if (frame + 1 < 1024) - frame++; - else - frame = 0; + frame = (frame + 1) % 1024; slot = (data_toul_fb + slot) - 20; } else { @@ -2028,15 +2025,13 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, if (current_harq->active) { sched_frame = current_harq->dl_frame; if (current_harq->feedback_to_ul + current_harq->dl_slot > 19) { - if (sched_frame + 1 < 1024) - sched_frame++; - else - sched_frame = 0; + sched_frame = (sched_frame + 1) % 1024; sched_slot = (current_harq->feedback_to_ul + current_harq->dl_slot) - slots_per_frame; } else { sched_slot = current_harq->feedback_to_ul + current_harq->dl_slot; } + AssertFatal(sched_slot < slots_per_frame, "sched_slot was calculated incorrect %d\n", sched_slot); LOG_D(PHY,"HARQ pid %d is active for %d.%d (dl_slot %d, feedback_to_ul %d, is_common %d\n",dl_harq_pid, sched_frame,sched_slot,current_harq->dl_slot,current_harq->feedback_to_ul,current_harq->is_common); /* check if current tx slot should transmit downlink acknowlegment */ if (sched_frame == frame && sched_slot == slot) { diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 99d94e1a76..d0d133dbfd 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -540,38 +540,6 @@ static void copy_tx_data_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi dl_info->rx_ind->number_pdus = pdu_idx; } -void free_uci_inds(nfapi_nr_uci_indication_t *uci_ind) -{ - for (int k = 0; k < uci_ind->num_ucis; k++) - { - if (uci_ind->uci_list[k].pdu_type == NFAPI_NR_UCI_FORMAT_0_1_PDU_TYPE) - { - nfapi_nr_uci_pucch_pdu_format_0_1_t *pdu_0_1 = &uci_ind->uci_list[k].pucch_pdu_format_0_1; - free(pdu_0_1->sr); - pdu_0_1->sr = NULL; - if (pdu_0_1->harq) - { - free(pdu_0_1->harq->harq_list); - pdu_0_1->harq->harq_list = NULL; - } - free(pdu_0_1->harq); - pdu_0_1->harq = NULL; - } - if (uci_ind->uci_list[k].pdu_type == NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE) - { - nfapi_nr_uci_pucch_pdu_format_2_3_4_t *pdu_2_3_4 = &uci_ind->uci_list[k].pucch_pdu_format_2_3_4; - free(pdu_2_3_4->sr.sr_payload); - pdu_2_3_4->sr.sr_payload = NULL; - free(pdu_2_3_4->harq.harq_payload); - pdu_2_3_4->harq.harq_payload = NULL; - } - } - free(uci_ind->uci_list); - uci_ind->uci_list = NULL; - free(uci_ind); - uci_ind = NULL; -} - static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_nr_ul_dci_request_t *ul_dci_req) { NR_UE_MAC_INST_t *mac = get_mac_inst(dl_info->module_id); @@ -624,6 +592,12 @@ static bool send_crc_ind_and_rx_ind(int sfn_slot) if (crc_ind && crc_ind->number_crcs > 0) { + NR_UE_MAC_INST_t *mac = get_mac_inst(0); + for (int i = 0; i < crc_ind->number_crcs; i++) { + int harq_pid = crc_ind->crc_list[i].harq_id; + LOG_D(NR_MAC, "Resetting harq_pid %d active_ul_harq_sfn_slot\n", harq_pid); + mac->nr_ue_emul_l1.harq[harq_pid].active_ul_harq_sfn_slot = -1; + } NR_UL_IND_t UL_INFO = { .crc_ind = *crc_ind, }; @@ -912,7 +886,10 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea LOG_E(NR_PHY, "Message ul_tti_request failed to unpack\n"); break; } - + /* We are filtering UL_TTI_REQs below. We only care about UL_TTI_REQs that + will trigger sending a ul_harq (CRC/RX pair). This UL_TTI_REQ will have + NFAPI_NR_UL_CONFIG_PUSCH_PDU_TYPE. If we have not yet completed the CBRA/ + CFRA procedure, we need to queue all UL_TTI_REQs. */ for (int i = 0; i < ul_tti_request->n_pdus; i++) { if (ul_tti_request->pdus_list[i].pdu_type == NFAPI_NR_UL_CONFIG_PUSCH_PDU_TYPE && mac->ra.ra_state >= RA_SUCCEEDED) { diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index 3984ed3380..499346f394 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -268,8 +268,6 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, bool sfn_slot_matcher(void *wanted, void *candidate); -void free_uci_inds(nfapi_nr_uci_indication_t *uci_ind); - /**\brief done free of memory allocation by module_id and release to pointer pool. \param module_id module id*/ int nr_ue_if_module_kill(uint32_t module_id); From 5637b62ed86204a8cf9297b8b91f659e5729a7d2 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Wed, 16 Feb 2022 16:26:41 -0800 Subject: [PATCH 034/150] Return in gNB if pdu_len is less than cast length This is what we did in the NRUE for NSA mode --- .../LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 40a9900284..57c74af314 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -220,9 +220,6 @@ int nr_process_mac_pdu(module_id_t module_idP, LOG_D(NR_MAC, "In %s: received UL-SCH sub-PDU with LCID 0x%x in %d.%d (remaining PDU length %d)\n", __func__, rx_lcid, frameP, slot, pdu_len); - if (pdu_len < 7) { - break; - } unsigned char *ce_ptr; int n_Lcg = 0; @@ -264,9 +261,13 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_L_TRUNCATED_BSR: //38.321 section 6.1.3.1 //variable length + if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) + return 0; mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; mac_subheader_len = 2; if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ + if (pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) + return 0; mac_ce_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; mac_subheader_len = 3; } @@ -343,9 +344,13 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_MULTI_ENTRY_PHR_1_OCT: //38.321 section 6.1.3.9 // varialbe length + if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) + return 0; mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; mac_subheader_len = 2; if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ + if (pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) + return 0; mac_ce_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; mac_subheader_len = 3; } @@ -355,9 +360,13 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_MULTI_ENTRY_PHR_4_OCT: //38.321 section 6.1.3.9 // varialbe length + if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) + return 0; mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; mac_subheader_len = 2; if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ + if (pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) + return 0; mac_ce_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; mac_subheader_len = 3; } @@ -371,8 +380,12 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_SRB1: case UL_SCH_LCID_SRB2: + if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) + return 0; if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ //mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; + if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) + return 0; mac_subheader_len = 3; mac_sdu_len = ((uint16_t)(((NR_MAC_SUBHEADER_LONG *) pduP)->L1 & 0x7f) << 8) | ((uint16_t)((NR_MAC_SUBHEADER_LONG *) pduP)->L2 & 0xff); @@ -456,8 +469,12 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_DTCH: // check if LCID is valid at current time. + if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) + return 0; if (((NR_MAC_SUBHEADER_SHORT *)pduP)->F) { // mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; + if (pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) + return 0; mac_subheader_len = 3; mac_sdu_len = ((uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L1 & 0x7f) << 8) | ((uint16_t)((NR_MAC_SUBHEADER_LONG *)pduP)->L2 & 0xff); From 2208abfedd776adbc90f07a27b10c71693bc0555 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Thu, 17 Feb 2022 08:48:26 -0800 Subject: [PATCH 035/150] Modifying change to MAC layer Instead of conditionally calling the pucch_scheduler we now only call the functions we need from the stub function directly. This is better because we are not modifying the OAI MAC layer code and ensuring that we are not calling the pucch_scheduler twice for the same sfn/slot --- executables/nr-ue.c | 5 +++-- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 8 +++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 84288de469..b957cb3bd4 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -409,8 +409,9 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) ul_info.slot_tx, mac->frame_type)) { LOG_D(NR_MAC, "Slot %d. calling nr_ue_ul_ind() and nr_ue_pucch_scheduler() from %s\n", ul_info.slot_tx, __FUNCTION__); - nr_ue_ul_indication(&ul_info); - nr_ue_pucch_scheduler(0, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id); + nr_ue_scheduler(NULL, &ul_info); + nr_ue_prach_scheduler(mod_id, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id); + nr_ue_pucch_scheduler(mod_id, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id); check_nr_prach(mac, &ul_info, &prach_resources); } if (!IS_SOFTMODEM_NOS1 && get_softmodem_params()->sa) { diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index d0d133dbfd..354de5fd5f 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -767,7 +767,10 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, mac->scc_SIB->tdd_UL_DL_ConfigurationCommon, ul_info.slot_tx, mac->frame_type)) - nr_ue_ul_indication(&ul_info); + { + nr_ue_scheduler(NULL, &ul_info); + nr_ue_prach_scheduler(ul_info.module_id, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id); + } } } @@ -1110,8 +1113,7 @@ int nr_ue_ul_indication(nr_uplink_indication_t *ul_info){ if (is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type) && !get_softmodem_params()->phy_test) nr_ue_prach_scheduler(module_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->thread_id); - if (is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type) && - !get_softmodem_params()->emulate_l1) + if (is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type)) nr_ue_pucch_scheduler(module_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->thread_id); switch(ret){ From a21fb77dd17c104266b848f3ee2a49dd78c382c9 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Thu, 17 Feb 2022 10:25:28 -0800 Subject: [PATCH 036/150] Added comment to justify uci_size condition Also, properly filling the CCE index and Agg level in the stub function when we get the DCI from nfapi --- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 1 + openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 14c6824c45..855b86d24c 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -1827,6 +1827,7 @@ int find_pucch_resource_set(NR_UE_MAC_INST_t *mac, int uci_size) { mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup && mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup->resourceSetToAddModList && mac->cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup->resourceSetToAddModList->list.array[pucch_resource_set_id] != NULL)) { + // PUCCH with format0 can be up to 3 bits (2 ack/nacks + 1 sr is 3 max bits) if (uci_size <= 3) { pucch_resource_set_id = 0; return (pucch_resource_set_id); diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 354de5fd5f..1f7eb83c60 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -303,6 +303,8 @@ static void fill_dl_info_with_pdcch(fapi_nr_dci_indication_t *dci, nfapi_nr_dl_d } dci->dci_list[idx].payloadSize = rx_dci->PayloadSizeBits; dci->dci_list[idx].rnti = rx_dci->RNTI; + dci->dci_list[idx].n_CCE = rx_dci->CceIndex; + dci->dci_list[idx].N_CCE = rx_dci->AggregationLevel; dci->number_of_dcis = idx + 1; } From cc22ec9978f484355fd4ab23e5e674865c4be38b Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Fri, 18 Feb 2022 09:29:00 -0800 Subject: [PATCH 037/150] Calling scheduler before handling DCI to ensure nbits are set Previously, we thought the memset in the nr_ue_dl_indication() was causing issues / exposing a race. This is not the case. The memset is not problematic, the issue is that in the emulate_l1 mode we were not always configuring the DCI nbits before handling the DCI when we are pushing high (15 Mbps) throughput traffic. --- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 1f7eb83c60..dc3bc52e9e 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -748,6 +748,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, NR_UL_TIME_ALIGNMENT_t ul_time_alignment; memset(&ul_time_alignment, 0, sizeof(ul_time_alignment)); fill_dci_from_dl_config(&mac->dl_info, &mac->dl_config_request); + nr_ue_scheduler(&mac->dl_info, NULL); nr_ue_dl_indication(&mac->dl_info, &ul_time_alignment); if (pthread_mutex_unlock(&mac->mutex_dl_info)) abort(); @@ -1176,8 +1177,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, dl_info->module_id, dl_info->cc_id, dl_info->frame, dl_info->slot, dl_info->thread_id); nr_ue_if_module_inst[module_id]->scheduled_response(&scheduled_response); } - if (!get_softmodem_params()->emulate_l1) - memset(def_dci_pdu_rel15, 0, sizeof(*def_dci_pdu_rel15)); + memset(def_dci_pdu_rel15, 0, sizeof(*def_dci_pdu_rel15)); } free(dl_info->dci_ind); dl_info->dci_ind = NULL; From bf3d7959bd6db261f5d58795058a4db828e568ff Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Fri, 18 Feb 2022 09:39:06 -0800 Subject: [PATCH 038/150] Comment for #define _GNU_SOURCE --- executables/nr-ue.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index b957cb3bd4..245e22ae60 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -19,7 +19,8 @@ * contact@openairinterface.org */ -#define _GNU_SOURCE +#define _GNU_SOURCE // For pthread_setname_np +#include #include #include "executables/nr-uesoftmodem.h" #include "PHY/phy_extern_nr_ue.h" From b7c767147e3ffb5d035927a64de6bedaf41bb9c0 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Fri, 18 Feb 2022 09:48:38 -0800 Subject: [PATCH 039/150] Hacks with comments are added in this commit. These allow the NRUE to reach roughtly 15-25 Mbps with ~20%-34% packetloss without crashing. --- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c | 6 +++++- openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c index 15c0c23feb..88d7342b5d 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c @@ -1309,9 +1309,13 @@ int nr_acknack_scheduling(int mod_id, /* we need to find a new PUCCH occasion */ /*(Re)Inizialization of timing information*/ + /* TODO: This is something of a hack. The last condition in the + if statement below was added. OAI is looking into this and is + expected to provide a solution. Without the hack, the gNB will + incorrectly schedule more than 2 ACK/nACKs in a single SFN/Slot. */ if ((pucch->frame == 0 && pucch->ul_slot == 0) || ((pucch->frame*n_slots_frame + pucch->ul_slot) < - (frame*n_slots_frame + slot))) { + (frame*n_slots_frame + slot)) && (frame!=1023)) { AssertFatal(pucch->sr_flag + pucch->dai_c == 0, "expected no SR/AckNack for UE %d in %4d.%2d, but has %d/%d for %4d.%2d\n", UE_id, frame, slot, pucch->sr_flag, pucch->dai_c, pucch->frame, pucch->ul_slot); diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c index 62aa101a50..d241e43a0f 100644 --- a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c +++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c @@ -51,7 +51,12 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity, if (entity->type != NR_PDCP_SRB && !(buffer[0] & 0x80)) { LOG_E(PDCP, "%s:%d:%s: fatal\n", __FILE__, __LINE__, __FUNCTION__); - exit(1); + /* TODO: This is something of a hack. The most significant bit + in buffer[0] should be 1 if the packet is a data packet. We are + processing malformed data packets if the most significant bit + is 0. Rather than exit(1), this hack allows us to continue for now. + We need to investigate why this hack is neccessary. */ + buffer[0] |= 128; } if (entity->sn_size == 12) { From 0db8f80f737647ce7424f20ff3d1a65fad4e6b7a Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Fri, 18 Feb 2022 09:58:26 -0800 Subject: [PATCH 040/150] Removing invalid log --- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 1 - 1 file changed, 1 deletion(-) diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index 1cc062b68f..ab3f2983e3 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -3304,7 +3304,6 @@ static uint8_t pack_nr_uci_indication_body(nfapi_nr_uci_t* value, uint8_t **ppWr return 0; switch (value->pdu_type) { - NFAPI_TRACE(NFAPI_TRACE_INFO, " NFAPI_NR_UCI_PUSCH_PDU_TYPE = %d \n", value->pdu_type); case NFAPI_NR_UCI_PUSCH_PDU_TYPE: NFAPI_TRACE(NFAPI_TRACE_WARN, "Unhandled NFAPI_NR_UCI_PUSCH_PDU_TYPE \n"); break; From b2e2a6bc2ed69c7f0bfdaf8dacf63c1468458f64 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Fri, 18 Feb 2022 10:08:44 -0800 Subject: [PATCH 041/150] Changing UL_INFO naming convention to be normal --- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 702bf6d1a1..81d0509f76 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -264,10 +264,10 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response LOG_I(NR_PHY, "Sending UCI with %d PDUs in sfn.slot %d/%d\n", uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); - NR_UL_IND_t UL_INFO = { + NR_UL_IND_t ul_info = { .uci_ind = *uci_ind, }; - send_nsa_standalone_msg(&UL_INFO, uci_ind->header.message_id); + send_nsa_standalone_msg(&ul_info, uci_ind->header.message_id); free_uci_inds(uci_ind); break; } From 221e8402cce3886867e10957d1a0661b36c3e033 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Fri, 18 Feb 2022 10:14:16 -0800 Subject: [PATCH 042/150] Fixing spacing in lines were already changing --- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c index 88d7342b5d..114250434c 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c @@ -1315,7 +1315,7 @@ int nr_acknack_scheduling(int mod_id, incorrectly schedule more than 2 ACK/nACKs in a single SFN/Slot. */ if ((pucch->frame == 0 && pucch->ul_slot == 0) || ((pucch->frame*n_slots_frame + pucch->ul_slot) < - (frame*n_slots_frame + slot)) && (frame!=1023)) { + (frame * n_slots_frame + slot)) && (frame != 1023)) { AssertFatal(pucch->sr_flag + pucch->dai_c == 0, "expected no SR/AckNack for UE %d in %4d.%2d, but has %d/%d for %4d.%2d\n", UE_id, frame, slot, pucch->sr_flag, pucch->dai_c, pucch->frame, pucch->ul_slot); From ca336ea9176271554f4a5f0297bf6df22089e52f Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Fri, 18 Feb 2022 10:27:34 -0800 Subject: [PATCH 043/150] Fixing comments from MR review. --- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 2 +- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 57c74af314..47550597bc 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -384,7 +384,7 @@ int nr_process_mac_pdu(module_id_t module_idP, return 0; if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ //mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) + if (pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) return 0; mac_subheader_len = 3; mac_sdu_len = ((uint16_t)(((NR_MAC_SUBHEADER_LONG *) pduP)->L1 & 0x7f) << 8) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index dc3bc52e9e..6ea67fc8f1 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -683,8 +683,6 @@ static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_ dl_ind->dci_ind->dci_list[k].dci_format = rel15_dci->dci_format_options[j]; LOG_I(NR_PHY, "format assigned dl_ind->dci_ind->dci_list[k].dci_format %d\n", dl_ind->dci_ind->dci_list[k].dci_format); - dl_ind->dci_ind->dci_list[k].n_CCE = rel15_dci->CCE[j]; - dl_ind->dci_ind->dci_list[k].N_CCE = rel15_dci->L[j]; } } } @@ -1067,6 +1065,10 @@ int handle_dci(module_id_t module_id, int cc_id, unsigned int gNB_index, frame_t // L2 Abstraction Layer // Note: sdu should always be processed because data and timing advance updates are transmitted by the UE int8_t handle_dlsch(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t *ul_time_alignment, int pdu_id){ + /* L1 assigns harq_pid, but in emulated L1 mode we need to assign + the harq_pid based on the saved global g_harq_pid. Because we are + emulating L1, no antenna measurements are conducted to calculate + a harq_pid, therefore we must set it here. */ if (get_softmodem_params()->emulate_l1) dl_info->rx_ind->rx_indication_body[pdu_id].pdsch_pdu.harq_pid = g_harq_pid; @@ -1116,6 +1118,7 @@ int nr_ue_ul_indication(nr_uplink_indication_t *ul_info){ if (is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type) && !get_softmodem_params()->phy_test) nr_ue_prach_scheduler(module_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->thread_id); + if (is_nr_UL_slot(tdd_UL_DL_ConfigurationCommon, ul_info->slot_tx, mac->frame_type)) nr_ue_pucch_scheduler(module_id, ul_info->frame_tx, ul_info->slot_tx, ul_info->thread_id); From 9b4a7526ad457623eff1e0924665b8f7442ebd59 Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Mon, 21 Feb 2022 15:26:00 +0530 Subject: [PATCH 044/150] Fix incorrect merge --- openair1/PHY/CODING/TESTBENCH/ldpctest.c | 6 +- openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c | 65 +----- .../PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c | 206 +++++++++--------- 3 files changed, 117 insertions(+), 160 deletions(-) diff --git a/openair1/PHY/CODING/TESTBENCH/ldpctest.c b/openair1/PHY/CODING/TESTBENCH/ldpctest.c index 081aa39019..7d9f123050 100644 --- a/openair1/PHY/CODING/TESTBENCH/ldpctest.c +++ b/openair1/PHY/CODING/TESTBENCH/ldpctest.c @@ -718,9 +718,9 @@ int main(int argc, char *argv[]) (double)time_decoder->diff/time_decoder->trials/1000.0/get_cpu_freq_GHz(), sqrt((double)time_decoder->diff_square/time_decoder->trials/pow(1000,2)/pow(get_cpu_freq_GHz(),2)-pow((double)time_decoder->diff/time_decoder->trials/1000.0/get_cpu_freq_GHz(),2)), (double)time_decoder->max/1000.0/get_cpu_freq_GHz(), - dec_iter.n_iter_mean[i], - dec_iter.n_iter_std[i], - dec_iter.n_iter_max[i] + dec_iter.n_iter_mean[i], + dec_iter.n_iter_std[i], + dec_iter.n_iter_max[i] ); i=i+1; diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c index 9cd5d8a96e..d79f2821b3 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c @@ -105,7 +105,7 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint { NR_gNB_ULSCH_t *ulsch; - uint8_t exit_flag = 0,i,r; + uint8_t i,r; uint16_t a_segments = MAX_NUM_NR_ULSCH_SEGMENTS; //number of segments to be allocated if (N_RB_UL != 273) { @@ -116,63 +116,22 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint uint16_t ulsch_bytes = a_segments*1056; // allocated bytes per segment ulsch = (NR_gNB_ULSCH_t *)malloc16(sizeof(NR_gNB_ULSCH_t)); - if (ulsch) { + ulsch->max_ldpc_iterations = max_ldpc_iterations; + ulsch->Mlimit = 4; - memset(ulsch,0,sizeof(NR_gNB_ULSCH_t)); + for (i=0; imax_ldpc_iterations = max_ldpc_iterations; - ulsch->Mlimit = 4; - - for (i=0; iharq_processes[i] = (NR_UL_gNB_HARQ_t *)malloc16(sizeof(NR_UL_gNB_HARQ_t)); - - if (ulsch->harq_processes[i]) { - - memset(ulsch->harq_processes[i],0,sizeof(NR_UL_gNB_HARQ_t)); - - ulsch->harq_processes[i]->b = (uint8_t*)malloc16(ulsch_bytes); - - if (ulsch->harq_processes[i]->b) - memset(ulsch->harq_processes[i]->b,0,ulsch_bytes); - else - exit_flag=3; - - if (abstraction_flag == 0) { - for (r=0; rharq_processes[i]->c[r] = (uint8_t*)malloc16(8448*sizeof(uint8_t)); - - if (ulsch->harq_processes[i]->c[r]) - memset(ulsch->harq_processes[i]->c[r],0,8448*sizeof(uint8_t)); - else - exit_flag=2; - - ulsch->harq_processes[i]->d[r] = (int16_t*)malloc16((68*384)*sizeof(int16_t)); - - if (ulsch->harq_processes[i]->d[r]) - memset(ulsch->harq_processes[i]->d[r],0,(68*384)*sizeof(int16_t)); - else - exit_flag=2; - - ulsch->harq_processes[i]->w[r] = (int16_t*)malloc16((3*(6144+64))*sizeof(int16_t)); - - if (ulsch->harq_processes[i]->w[r]) - memset(ulsch->harq_processes[i]->w[r],0,(3*(6144+64))*sizeof(int16_t)); - else - exit_flag=2; - } - } - } else { - exit_flag=1; + ulsch->harq_processes[i] = (NR_UL_gNB_HARQ_t *)malloc16_clear(sizeof(NR_UL_gNB_HARQ_t)); + ulsch->harq_processes[i]->b = (uint8_t*)malloc16_clear(ulsch_bytes); + if (abstraction_flag == 0) { + for (r=0; rharq_processes[i]->c[r] = (uint8_t*)malloc16_clear(8448*sizeof(uint8_t)); + ulsch->harq_processes[i]->d[r] = (int16_t*)malloc16_clear((68*384)*sizeof(int16_t)); + ulsch->harq_processes[i]->w[r] = (int16_t*)malloc16_clear((3*(6144+64))*sizeof(int16_t)); } } - - if (exit_flag==0) - return(ulsch); } - printf("new_gNB_ulsch with size %zu: exit_flag = %hhu\n",sizeof(NR_UL_gNB_HARQ_t), exit_flag); - free_gNB_ulsch(&ulsch,N_RB_UL); + return(NULL); } diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c index bd1e2b03e1..83a208018e 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c @@ -312,126 +312,124 @@ void nr_processDLSegment(void* arg) { t_nrLDPC_time_stats procTime = {0}; t_nrLDPC_time_stats* p_procTime = &procTime ; - t_nrLDPC_procBuf **p_nrLDPC_procBuf = harq_process->p_nrLDPC_procBuf; + start_meas(&rdata->ts_deinterleave); + //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_IN); + nr_deinterleaving_ldpc(E, + Qm, + harq_process->w[r], // [hna] w is e + dlsch_llr+r_offset); + //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_OUT); + stop_meas(&rdata->ts_deinterleave); - start_meas(&rdata->ts_deinterleave); - //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_IN); - nr_deinterleaving_ldpc(E, - Qm, - harq_process->w[r], // [hna] w is e - dlsch_llr+r_offset); - //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_OUT); - stop_meas(&rdata->ts_deinterleave); + start_meas(&rdata->ts_rate_unmatch); + /* LOG_D(PHY,"HARQ_PID %d Rate Matching Segment %d (coded bits %d,E %d, F %d,unpunctured/repeated bits %d, TBS %d, mod_order %d, nb_rb %d, Nl %d, rv %d, round %d)...\n", + harq_pid,r, G,E,harq_process->F, + Kr*3, + harq_process->TBS, + Qm, + harq_process->nb_rb, + harq_process->Nl, + harq_process->rvidx, + harq_process->round); */ + //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_IN); - start_meas(&rdata->ts_rate_unmatch); - /* LOG_D(PHY,"HARQ_PID %d Rate Matching Segment %d (coded bits %d,E %d, F %d,unpunctured/repeated bits %d, TBS %d, mod_order %d, nb_rb %d, Nl %d, rv %d, round %d)...\n", - harq_pid,r, G,E,harq_process->F, - Kr*3, - harq_process->TBS, - Qm, - harq_process->nb_rb, - harq_process->Nl, - harq_process->rvidx, - harq_process->round); */ - //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_IN); - - if (nr_rate_matching_ldpc_rx(Ilbrm, - Tbslbrm, - p_decoderParms->BG, - p_decoderParms->Z, - harq_process->d[r], - harq_process->w[r], - harq_process->C, - harq_process->rvidx, - (harq_process->first_rx==1)?1:0, - E, - harq_process->F, - Kr-harq_process->F-2*(p_decoderParms->Z))==-1) { - //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_OUT); - stop_meas(&rdata->ts_rate_unmatch); - LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n"); - rdata->decodeIterations = dlsch->max_ldpc_iterations + 1; - return; - } + if (nr_rate_matching_ldpc_rx(Ilbrm, + Tbslbrm, + p_decoderParms->BG, + p_decoderParms->Z, + harq_process->d[r], + harq_process->w[r], + harq_process->C, + harq_process->rvidx, + (harq_process->first_rx==1)?1:0, + E, + harq_process->F, + Kr-harq_process->F-2*(p_decoderParms->Z))==-1) { + //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_OUT); stop_meas(&rdata->ts_rate_unmatch); + LOG_E(PHY,"dlsch_decoding.c: Problem in rate_matching\n"); + rdata->decodeIterations = dlsch->max_ldpc_iterations + 1; + return; + } + stop_meas(&rdata->ts_rate_unmatch); - r_offset += E; + r_offset += E; - if (LOG_DEBUGFLAG(DEBUG_DLSCH_DECOD)) { - LOG_D(PHY,"decoder input(segment %u) :",r); + if (LOG_DEBUGFLAG(DEBUG_DLSCH_DECOD)) { + LOG_D(PHY,"decoder input(segment %u) :",r); - for (int i=0; id[r][i]); + for (int i=0; id[r][i]); - LOG_D(PHY,"\n"); + LOG_D(PHY,"\n"); + } + + memset(harq_process->c[r],0,Kr_bytes); + + if (harq_process->C == 1) { + if (A > NR_MAX_PDSCH_TBS) + crc_type = CRC24_A; + else + crc_type = CRC16; + + length_dec = harq_process->B; + } else { + crc_type = CRC24_B; + length_dec = (harq_process->B+24*harq_process->C)/harq_process->C; + } + + { + start_meas(&rdata->ts_ldpc_decode); + //set first 2*Z_c bits to zeros + memset(&z[0],0,2*harq_process->Z*sizeof(int16_t)); + //set Filler bits + memset((&z[0]+K_bits_F),127,harq_process->F*sizeof(int16_t)); + //Move coded bits before filler bits + memcpy((&z[0]+2*harq_process->Z),harq_process->d[r],(K_bits_F-2*harq_process->Z)*sizeof(int16_t)); + //skip filler bits + memcpy((&z[0]+Kr),harq_process->d[r]+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t)); + + //Saturate coded bits before decoding into 8 bits values + for (i=0, j=0; j < ((kc*harq_process->Z)>>4)+1; i+=2, j++) { + pl[j] = _mm_packs_epi16(pv[i],pv[i+1]); } - memset(harq_process->c[r],0,Kr_bytes); + //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_IN); + p_decoderParms->block_length=length_dec; + nrLDPC_initcall(p_decoderParms, (int8_t*)&pl[0], llrProcBuf); + no_iteration_ldpc = nrLDPC_decoder(p_decoderParms, + (int8_t *)&pl[0], + llrProcBuf, + p_procTime); + //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_OUT); - if (harq_process->C == 1) { - if (A > NR_MAX_PDSCH_TBS) - crc_type = CRC24_A; - else - crc_type = CRC16; + // Fixme: correct type is unsigned, but nrLDPC_decoder and all called behind use signed int + if (check_crc((uint8_t *)llrProcBuf,length_dec,harq_process->F,crc_type)) { + LOG_D(PHY,"Segment %u CRC OK\n\033[0m",r); - length_dec = harq_process->B; + if (r==0) { + for (int i=0; i<10; i++) LOG_D(PHY,"byte %d : %x\n",i,((uint8_t *)llrProcBuf)[i]); + } + + //Temporary hack + no_iteration_ldpc = dlsch->max_ldpc_iterations; + rdata->decodeIterations = no_iteration_ldpc; } else { - crc_type = CRC24_B; - length_dec = (harq_process->B+24*harq_process->C)/harq_process->C; + LOG_D(PHY,"CRC NOT OK\n\033[0m"); } - { - start_meas(&rdata->ts_ldpc_decode); - //set first 2*Z_c bits to zeros - memset(&z[0],0,2*harq_process->Z*sizeof(int16_t)); - //set Filler bits - memset((&z[0]+K_bits_F),127,harq_process->F*sizeof(int16_t)); - //Move coded bits before filler bits - memcpy((&z[0]+2*harq_process->Z),harq_process->d[r],(K_bits_F-2*harq_process->Z)*sizeof(int16_t)); - //skip filler bits - memcpy((&z[0]+Kr),harq_process->d[r]+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t)); + nb_total_decod++; - //Saturate coded bits before decoding into 8 bits values - for (i=0, j=0; j < ((kc*harq_process->Z)>>4)+1; i+=2, j++) { - pl[j] = _mm_packs_epi16(pv[i],pv[i+1]); - } - - //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_IN); - p_decoderParms->block_length=length_dec; - nrLDPC_initcall(p_decoderParms, (int8_t*)&pl[0], llrProcBuf); - no_iteration_ldpc = nrLDPC_decoder(p_decoderParms, - (int8_t *)&pl[0], - llrProcBuf, - p_procTime); - //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_OUT); - - // Fixme: correct type is unsigned, but nrLDPC_decoder and all called behind use signed int - if (check_crc((uint8_t *)llrProcBuf,length_dec,harq_process->F,crc_type)) { - LOG_D(PHY,"Segment %u CRC OK\n\033[0m",r); - - if (r==0) { - for (int i=0; i<10; i++) LOG_D(PHY,"byte %d : %x\n",i,((uint8_t *)llrProcBuf)[i]); - } - - //Temporary hack - no_iteration_ldpc = dlsch->max_ldpc_iterations; - rdata->decodeIterations = no_iteration_ldpc; - } else { - LOG_D(PHY,"CRC NOT OK\n\033[0m"); - } - - nb_total_decod++; - - if (no_iteration_ldpc > dlsch->max_ldpc_iterations) { - nb_error_decod++; - } - - for (int m=0; m < Kr>>3; m ++) { - harq_process->c[r][m]= (uint8_t) llrProcBuf[m]; - } - - stop_meas(&rdata->ts_ldpc_decode); + if (no_iteration_ldpc > dlsch->max_ldpc_iterations) { + nb_error_decod++; } + + for (int m=0; m < Kr>>3; m ++) { + harq_process->c[r][m]= (uint8_t) llrProcBuf[m]; + } + + stop_meas(&rdata->ts_ldpc_decode); + } } uint32_t nr_dlsch_decoding(PHY_VARS_NR_UE *phy_vars_ue, From f448f8021f5b17720464056239543a191078317a Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Mon, 21 Feb 2022 15:28:38 +0530 Subject: [PATCH 045/150] removed init function --- .../CODING/nrLDPC_decoder/nrLDPC_init_mem.h | 83 ------------------- openair1/PHY/CODING/nrLDPC_extern.h | 1 - 2 files changed, 84 deletions(-) delete mode 100644 openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init_mem.h diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init_mem.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init_mem.h deleted file mode 100644 index f08549130e..0000000000 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init_mem.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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 - */ - -/*!\file nrLDPC_init_mem.h - * \brief Defines the function to initialize the LDPC decoder and sets correct LUTs. - * \author Sebastian Wagner (TCL Communications) Email: - * \date 07-12-2018 - * \version 1.0 - * \note - * \warning - */ - -#ifndef __NR_LDPC_INIT_MEM__H__ -#define __NR_LDPC_INIT_MEM__H__ - -#include -#include "nrLDPC_types.h" - -/** - \brief Allocates 32 byte aligned memory and initializes to zero - \param size Input size in bytes - \return Pointer to memory -*/ -static inline void* malloc32_clear(size_t size) -{ - void* ptr = (void*) memalign(32, size+32); - memset(ptr, 0, size); - return ptr; -} - -/** - \brief Allocates and initializes the internal decoder processing buffers - \param p_decParams Pointer to decoder parameters - \param p_lut Pointer to decoder LUTs - \return Number of LLR values -*/ -static inline t_nrLDPC_procBuf* nrLDPC_init_mem(void) -{ - t_nrLDPC_procBuf* p_procBuf = (t_nrLDPC_procBuf*) malloc32_clear(sizeof(t_nrLDPC_procBuf)); - - if (p_procBuf) - { - p_procBuf->cnProcBuf = (int8_t*) malloc32_clear(NR_LDPC_SIZE_CN_PROC_BUF*sizeof(int8_t)); - p_procBuf->cnProcBufRes = (int8_t*) malloc32_clear(NR_LDPC_SIZE_CN_PROC_BUF*sizeof(int8_t)); - p_procBuf->bnProcBuf = (int8_t*) malloc32_clear(NR_LDPC_SIZE_BN_PROC_BUF*sizeof(int8_t)); - p_procBuf->bnProcBufRes = (int8_t*) malloc32_clear(NR_LDPC_SIZE_BN_PROC_BUF*sizeof(int8_t)); - p_procBuf->llrRes = (int8_t*) malloc32_clear(NR_LDPC_MAX_NUM_LLR *sizeof(int8_t)); - p_procBuf->llrProcBuf = (int8_t*) malloc32_clear(NR_LDPC_MAX_NUM_LLR *sizeof(int8_t)); - } - - return(p_procBuf); -} - -static inline void nrLDPC_free_mem(t_nrLDPC_procBuf* p_procBuf) -{ - free(p_procBuf->cnProcBuf); - free(p_procBuf->cnProcBufRes); - free(p_procBuf->bnProcBuf); - free(p_procBuf->bnProcBufRes); - free(p_procBuf->llrRes); - free(p_procBuf->llrProcBuf); - - free(p_procBuf); -} -#endif diff --git a/openair1/PHY/CODING/nrLDPC_extern.h b/openair1/PHY/CODING/nrLDPC_extern.h index b75b38fc76..b358119408 100644 --- a/openair1/PHY/CODING/nrLDPC_extern.h +++ b/openair1/PHY/CODING/nrLDPC_extern.h @@ -34,5 +34,4 @@ extern nrLDPC_initcallfunc_t nrLDPC_initcall; extern nrLDPC_decoderfunc_t nrLDPC_decoder; extern nrLDPC_encoderfunc_t nrLDPC_encoder; // inline functions: -#include "openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init_mem.h" #endif From f6e25c0e151c76ed471c41901de1f39d4c872c0c Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Mon, 21 Feb 2022 16:41:18 +0530 Subject: [PATCH 046/150] code cleanup ldpctest.c --- openair1/PHY/CODING/TESTBENCH/ldpctest.c | 221 +++++++++-------------- 1 file changed, 87 insertions(+), 134 deletions(-) diff --git a/openair1/PHY/CODING/TESTBENCH/ldpctest.c b/openair1/PHY/CODING/TESTBENCH/ldpctest.c index 7d9f123050..70eb795c5a 100644 --- a/openair1/PHY/CODING/TESTBENCH/ldpctest.c +++ b/openair1/PHY/CODING/TESTBENCH/ldpctest.c @@ -91,7 +91,7 @@ nrLDPC_encoderfunc_t encoder_orig; short lift_size[51]= {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,20,22,24,26,28,30,32,36,40,44,48,52,56,60,64,72,80,88,96,104,112,120,128,144,160,176,192,208,224,240,256,288,320,352,384}; -int test_ldpc(short No_iteration, +int test_ldpc(short max_iterations, int nom_rate, int denom_rate, double SNR, @@ -131,7 +131,6 @@ int test_ldpc(short No_iteration, double *channel_output; double *modulated_input[MAX_NUM_DLSCH_SEGMENTS]; char *channel_output_fixed[MAX_NUM_DLSCH_SEGMENTS]; - unsigned int i,j,trial=0; short BG=0,nrows=0;//,ncols; int no_punctured_columns,removed_bit; int i1,Zc,Kb=0; @@ -142,10 +141,9 @@ int test_ldpc(short No_iteration, int code_rate_vec[8] = {15, 13, 25, 12, 23, 34, 56, 89}; //double code_rate_actual_vec[8] = {0.2, 0.33333, 0.4, 0.5, 0.66667, 0.73333, 0.81481, 0.88}; - t_nrLDPC_dec_params decParams; - + t_nrLDPC_dec_params decParams[MAX_NUM_DLSCH_SEGMENTS]={0}; + t_nrLDPC_time_stats decoder_profiler = {0}; - t_nrLDPC_time_stats* p_decoder_profiler =&decoder_profiler ; int32_t n_iter = 0; @@ -155,26 +153,26 @@ int test_ldpc(short No_iteration, *crc_misses=0; // generate input block - for(j=0;j>3; i++) - { - //printf("block_length>>3: %d \n",block_length>>3); - /// printf("i: %d \n",i); - ///printf("estimated_output[%d]: %d \n",i,estimated_output[i]); - ///printf("test_input[0][%d]: %d \n",i,test_input[0][i]); - if (estimated_output[j][i] != test_input[j][i]) - { - //////printf("error pos %d (%d, %d)\n\n",i,estimated_output[i],test_input[0][i]); - segment_bler = segment_bler + 1; - break; } - } + +#ifdef DEBUG_CODER + printf("\n"); + exit(-1); +#endif - for (i=0; i>(i&7); test_input_bit[i] = (test_input[j][i/8]&(1<<(i&7)))>>(i&7); // Further correct for multiple segments @@ -430,23 +398,18 @@ int test_ldpc(short No_iteration, } } - //if (*errors == 1000) - //break; + n_iter_mean += n_iter; + n_iter_std += pow(n_iter-1,2); - n_iter_mean = n_iter_mean + n_iter; - n_iter_std = n_iter_std + pow(n_iter-1,2); + if ( n_iter > n_iter_max ) + n_iter_max = n_iter; - if ( n_iter > n_iter_max ) - n_iter_max = n_iter; - - } // end segments + } // end segments if (segment_bler != 0) - *errors = (*errors) + 1; + *errors = (*errors) + 1; } - /*else if (trial==0) - printf("decoder is not supported\n");*/ } @@ -456,7 +419,7 @@ int test_ldpc(short No_iteration, *errors_bit_uncoded = *errors_bit_uncoded / (double)((Kb+nrows-no_punctured_columns-2) * Zc-removed_bit); - for(j=0;j 1280, 2401 -> 2560 char *ldpc_version=NULL; /* version of the ldpc decoder library to use (XXX suffix to use when loading libldpc_XXX.so */ - short No_iteration=5; + short max_iterations=5; int n_segments=1; //double rate=0.333; @@ -511,7 +474,7 @@ int main(int argc, char *argv[]) unsigned char qbits=8; unsigned int decoded_errors[10000]; // initiate the size of matrix equivalent to size of SNR int c,i=0, i1 = 0; - int loglvl=OAILOG_WARNING; + int n_trials = 1; double SNR_step = 0.1; @@ -522,11 +485,8 @@ int main(int argc, char *argv[]) n_iter_stats_t dec_iter; short BG=0,Zc,Kb=0; - if ( load_configmodule(argc,argv,CONFIG_ENABLECMDLINEONLY) == 0) { - exit_fun(" Error, configuration module init failed\n"); - } // must be done before specific options parsing to prevent errasing them - - while ((c = getopt (argc, argv, "q:r:s:S:l:L:G:n:d:i:t:u:hv:")) != -1) + + while ((c = getopt (argc, argv, "q:r:s:S:l:G:n:d:i:t:u:hv:")) != -1) switch (c) { case 'q': @@ -544,10 +504,6 @@ int main(int argc, char *argv[]) case 'l': block_length = atoi(optarg); break; - - case 'L': - loglvl = atoi(optarg); - break; case 'G': ldpc_version="_cuda"; @@ -570,7 +526,7 @@ int main(int argc, char *argv[]) break; case 'i': - No_iteration = atoi(optarg); + max_iterations = atoi(optarg); break; case 'u': @@ -585,11 +541,10 @@ int main(int argc, char *argv[]) printf("BG1 (blocklength > 3840): 1/3, 2/3, 22/25 (8/9) \n"); printf("BG2 (blocklength <= 3840): 1/5, 1/3, 2/3 \n\n"); printf("-h This message\n"); - printf("-L \n"); printf("-q Quantization bits, Default: 8\n"); printf("-r Nominator rate, (1, 2, 22), Default: 1\n"); printf("-d Denominator rate, (3, 5, 25), Default: 1\n"); - printf("-l Block length (l > 3840 -> BG1, rest BG2 ), Default: 8448\n"); + printf("-l Block length (l > 3840 -> BG1, rest BG2 ), Default: 8448\n"); printf("-G give 1 to run cuda for LDPC, Default: 0\n"); printf("-n Number of simulation trials, Default: 1\n"); //printf("-M MCS2 for TB 2\n"); @@ -608,8 +563,6 @@ int main(int argc, char *argv[]) printf("n_trials %d: \n", n_trials); printf("SNR0 %f: \n", SNR0); - logInit(); - set_glog(loglvl); if (ldpc_version != NULL) load_nrLDPClib(ldpc_version); @@ -657,7 +610,7 @@ int main(int argc, char *argv[]) } char fname[200]; - sprintf(fname,"ldpctest_BG_%d_Zc_%d_rate_%d-%d_block_length_%d_maxit_%d.txt",BG,Zc,nom_rate,denom_rate,block_length, No_iteration); + sprintf(fname,"ldpctest_BG_%d_Zc_%d_rate_%d-%d_block_length_%d_maxit_%d.txt",BG,Zc,nom_rate,denom_rate,block_length, max_iterations); FILE *fd=fopen(fname,"w"); AssertFatal(fd!=NULL,"cannot open %s\n",fname); @@ -672,7 +625,7 @@ int main(int argc, char *argv[]) else SNR_lin = pow(10,SNR/10.0)*nom_rate/denom_rate; printf("Linear SNR: %f\n", SNR_lin); - decoded_errors[i]=test_ldpc(No_iteration, + decoded_errors[i]=test_ldpc(max_iterations, nom_rate, denom_rate, SNR_lin, // noise standard deviation @@ -718,9 +671,9 @@ int main(int argc, char *argv[]) (double)time_decoder->diff/time_decoder->trials/1000.0/get_cpu_freq_GHz(), sqrt((double)time_decoder->diff_square/time_decoder->trials/pow(1000,2)/pow(get_cpu_freq_GHz(),2)-pow((double)time_decoder->diff/time_decoder->trials/1000.0/get_cpu_freq_GHz(),2)), (double)time_decoder->max/1000.0/get_cpu_freq_GHz(), - dec_iter.n_iter_mean[i], - dec_iter.n_iter_std[i], - dec_iter.n_iter_max[i] + dec_iter.n_iter_mean[i], + dec_iter.n_iter_std[i], + dec_iter.n_iter_max[i] ); i=i+1; From edb32cad99253467ce984a4f9cb329fc631c4a6e Mon Sep 17 00:00:00 2001 From: francescomani Date: Tue, 22 Feb 2022 13:37:39 +0100 Subject: [PATCH 047/150] fix in config_csirs --- openair2/RRC/NR/nr_rrc_config.c | 2 +- openair2/RRC/NR/nr_rrc_config.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c index 85b421aa9e..bea9afb739 100644 --- a/openair2/RRC/NR/nr_rrc_config.c +++ b/openair2/RRC/NR/nr_rrc_config.c @@ -83,8 +83,8 @@ void set_csirs_periodicity(NR_NZP_CSI_RS_Resource_t *nzpcsi0, int uid, int nb_sl void config_csirs(NR_ServingCellConfigCommon_t *servingcellconfigcommon, NR_CSI_MeasConfig_t *csi_MeasConfig, - int num_dl_antenna_ports, int uid, + int num_dl_antenna_ports, int curr_bwp, int do_csirs) { diff --git a/openair2/RRC/NR/nr_rrc_config.h b/openair2/RRC/NR/nr_rrc_config.h index 99e6de52a1..9841b8d215 100644 --- a/openair2/RRC/NR/nr_rrc_config.h +++ b/openair2/RRC/NR/nr_rrc_config.h @@ -115,8 +115,8 @@ void nr_rrc_config_dl_tda(NR_ServingCellConfigCommon_t *scc); void nr_rrc_config_ul_tda(NR_ServingCellConfigCommon_t *scc, int min_fb_delay); void config_csirs(NR_ServingCellConfigCommon_t *servingcellconfigcommon, NR_CSI_MeasConfig_t *csi_MeasConfig, - int num_dl_antenna_ports, int uid, + int num_dl_antenna_ports, int curr_bwp, int do_csirs); From 41976e765307b6d2191a47b8266eb10639d92de0 Mon Sep 17 00:00:00 2001 From: rmagueta Date: Tue, 22 Feb 2022 13:33:36 +0000 Subject: [PATCH 048/150] Fix build after merge --- cmake_targets/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 82022da78f..1bd7591e58 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -2012,6 +2012,7 @@ set(NR_L2_SRC_UE ${NR_UE_RRC_DIR}/main_ue.c ${NR_UE_RRC_DIR}/rrc_UE.c ${NR_UE_RRC_DIR}/rrc_nsa.c + ${NR_RRC_DIR}/nr_rrc_config.c ) set (MAC_SRC From bfebc0cb1828326a820305b3d8f5c5ed0928765e Mon Sep 17 00:00:00 2001 From: "Deokseong \"David\" Kim" Date: Wed, 23 Feb 2022 22:59:45 +0000 Subject: [PATCH 049/150] Using message_id to identify channel info. --- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 27 ++++++++++++++++++--- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h | 5 +++- openair2/PHY_INTERFACE/phy_stub_UE.c | 24 +++++++++++++++--- openair2/PHY_INTERFACE/phy_stub_UE.h | 5 +++- 4 files changed, 52 insertions(+), 9 deletions(-) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 71345c6d9f..396aa54a47 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -1045,6 +1045,17 @@ static void save_pdsch_pdu_for_crnti(nfapi_nr_dl_tti_request_t *dl_tti_request) } } +static uint16_t get_message_id(const uint8_t *buffer, ssize_t len) +{ + if (len < 4) + return 0; + + // Unpack 2 bytes message_id from buffer. + uint16_t v; + memcpy(&v, buffer + 2, sizeof(v)); + return ntohs(v); +} + void *nrue_standalone_pnf_task(void *context) { struct sockaddr_in server_address; @@ -1088,14 +1099,22 @@ void *nrue_standalone_pnf_task(void *context) abort(); } } - else if (len == sizeof(nr_phy_channel_params_t)) + else if (get_message_id((const uint8_t *)buffer, len) == 0x0FFF) // 0x0FFF : channel info identifier. { nr_phy_channel_params_t *ch_info = CALLOC(1, sizeof(*ch_info)); memcpy(ch_info, buffer, sizeof(*ch_info)); - slot_rnti_mcs[NFAPI_SFNSLOT2SLOT(ch_info->sfn_slot)].sinr = ch_info->sinr; - LOG_D(NR_PHY, "Received_SINR = %f, sfn:slot %d:%d\n", - ch_info->sinr, NFAPI_SFNSLOT2SFN(ch_info->sfn_slot), NFAPI_SFNSLOT2SLOT(ch_info->sfn_slot)); + if (ch_info->nb_of_sinrs > 1) + LOG_W(NR_PHY, "Expecting at most one SINR.\n"); + + // TODO: Update sinr field of slot_rnti_mcs to be array. + for (int i = 0; i < ch_info->nb_of_sinrs; ++i) + { + slot_rnti_mcs[NFAPI_SFNSLOT2SLOT(ch_info->sfn_slot)].sinr = ch_info->sinr[i]; + + LOG_D(NR_PHY, "Received_SINR[%d] = %f, sfn:slot %d:%d\n", + i, ch_info->sinr[i], NFAPI_SFNSLOT2SFN(ch_info->sfn_slot), NFAPI_SFNSLOT2SLOT(ch_info->sfn_slot)); + } if (!put_queue(&nr_chan_param_queue, ch_info)) { diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index 499346f394..034c1c6b48 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -45,13 +45,16 @@ #define NUM_SINR 100 #define NUM_BLER_COL 13 #define NUM_NFAPI_SLOT 20 +#define NR_NUM_LAYER 1 typedef struct NR_UL_TIME_ALIGNMENT NR_UL_TIME_ALIGNMENT_t; typedef struct nr_phy_channel_params_t { uint16_t sfn_slot; - float sinr; + uint16_t message_id; + uint16_t nb_of_sinrs; + float sinr[NR_NUM_LAYER]; // Incomplete, need all channel parameters } nr_phy_channel_params_t; diff --git a/openair2/PHY_INTERFACE/phy_stub_UE.c b/openair2/PHY_INTERFACE/phy_stub_UE.c index 1598e3d620..c4650f18f3 100644 --- a/openair2/PHY_INTERFACE/phy_stub_UE.c +++ b/openair2/PHY_INTERFACE/phy_stub_UE.c @@ -1259,6 +1259,17 @@ void ue_init_standalone_socket(int tx_port, int rx_port) } } +static uint16_t get_message_id(const uint8_t *buffer, ssize_t len) +{ + if (len < 4) + return 0; + + // Unpack 2 bytes message_id from buffer. + uint16_t v; + memcpy(&v, buffer + 2, sizeof(v)); + return ntohs(v); +} + void *ue_standalone_pnf_task(void *context) { struct sockaddr_in server_address; @@ -1301,7 +1312,7 @@ void *ue_standalone_pnf_task(void *context) abort(); } } - else if (len == sizeof(phy_channel_params_t)) + else if (get_message_id((const uint8_t *)buffer, len) == 0x0FFF) // 0x0FFF : channel info identifier. { phy_channel_params_t ch_info; memcpy(&ch_info, buffer, sizeof(phy_channel_params_t)); @@ -1314,8 +1325,15 @@ void *ue_standalone_pnf_task(void *context) uint16_t sf = ch_info.sfn_sf & 15; assert(sf < 10); - sf_rnti_mcs[sf].sinr = ch_info.sinr; - LOG_D(MAC, "Received_SINR = %f\n",ch_info.sinr); + if (ch_info.nb_of_sinrs > 1) + LOG_W(MAC, "Expecting at most one SINR.\n"); + + // TODO: Update sinr field of slot_rnti_mcs to be array. + for (int i = 0; i < ch_info.nb_of_sinrs; ++i) + { + sf_rnti_mcs[sf].sinr = ch_info.sinr[i]; + LOG_D(MAC, "Received_SINR[%d] = %f\n", i, ch_info.sinr[i]); + } } else { diff --git a/openair2/PHY_INTERFACE/phy_stub_UE.h b/openair2/PHY_INTERFACE/phy_stub_UE.h index ebaae6e667..d68d1dffdd 100644 --- a/openair2/PHY_INTERFACE/phy_stub_UE.h +++ b/openair2/PHY_INTERFACE/phy_stub_UE.h @@ -24,6 +24,7 @@ #define NUM_MCS 28 #define NUM_SINR 100 #define NUM_BLER_COL 13 +#define LTE_NUM_LAYER 1 // this mutex is used to set multiple UE's UL value in L2 FAPI simulator. extern FILL_UL_INFO_MUTEX_t fill_ul_mutex; @@ -126,7 +127,9 @@ void handle_nfapi_ul_pdu_UE_MAC(module_id_t Mod_id, typedef struct phy_channel_params_t { uint16_t sfn_sf; - float sinr; + uint16_t message_id; + uint16_t nb_of_sinrs; + float sinr[LTE_NUM_LAYER]; // Incomplete, need all channel parameters } phy_channel_params_t; From ba92e37407d38d2b8c2ae9ed54873b90cecb774c Mon Sep 17 00:00:00 2001 From: francescomani Date: Thu, 24 Feb 2022 16:25:12 +0100 Subject: [PATCH 050/150] re-initialization of gold sequences at gnb if needed according to fapi messages --- openair1/PHY/INIT/nr_init.c | 14 +++++--- openair1/PHY/NR_REFSIG/nr_gold.c | 23 +++++------- openair1/PHY/NR_REFSIG/nr_refsig.h | 2 +- openair1/PHY/NR_TRANSPORT/nr_csi_rs.c | 19 +++------- openair1/PHY/NR_TRANSPORT/nr_dci.c | 35 ++++++++++++------- openair1/PHY/NR_TRANSPORT/nr_dci.h | 2 +- openair1/PHY/NR_TRANSPORT/nr_dlsch.c | 11 ++++-- .../PHY/NR_TRANSPORT/nr_transport_proto.h | 1 - openair1/PHY/defs_gNB.h | 4 +++ openair1/SCHED_NR/phy_procedures_nr_gNB.c | 5 ++- 10 files changed, 61 insertions(+), 55 deletions(-) diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index 3bf450703c..95e7c011fb 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -130,6 +130,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, } nr_generate_modulation_table(); + gNB->pdcch_gold_init = cfg->cell_config.phy_cell_id.value; nr_init_pdcch_dmrs(gNB, cfg->cell_config.phy_cell_id.value); nr_init_pbch_interleaver(gNB->nr_pbch_interleaver); @@ -142,17 +143,21 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, AssertFatal(pdsch_dmrs[slot]!=NULL, "NR init: pdsch_dmrs for slot %d - malloc failed\n", slot); for (int symb=0; symbsymbols_per_slot; symb++) { - pdsch_dmrs[slot][symb] = (uint32_t **)malloc16(NR_MAX_NB_CODEWORDS*sizeof(uint32_t *)); + pdsch_dmrs[slot][symb] = (uint32_t **)malloc16(2*sizeof(uint32_t *)); AssertFatal(pdsch_dmrs[slot][symb]!=NULL, "NR init: pdsch_dmrs for slot %d symbol %d - malloc failed\n", slot, symb); - for (int q=0; qcell_config.phy_cell_id.value); + + for (int nscid = 0; nscid < 2; nscid++) { + gNB->pdsch_gold_init[nscid] = cfg->cell_config.phy_cell_id.value; + nr_init_pdsch_dmrs(gNB, nscid, cfg->cell_config.phy_cell_id.value); + } //PUSCH DMRS init gNB->nr_gold_pusch_dmrs = (uint32_t ****)malloc16(2*sizeof(uint32_t ***)); @@ -193,6 +198,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, } } + gNB->csi_gold_init = cfg->cell_config.phy_cell_id.value; nr_init_csi_rs(gNB, cfg->cell_config.phy_cell_id.value); for (int id=0; idframe_parms; uint32_t ****pdsch_dmrs = gNB->nr_gold_pdsch_dmrs; - uint16_t N_n_scid[NR_MAX_NB_CODEWORDS]={Nid, Nid}; // Not correct, appropriate scrambling IDs have to be updated to support DCI 1_1 - uint8_t n_scid=0; // again works only for 1_0 for (uint8_t slot=0; slotslots_per_frame; slot++) { for (uint8_t symb=0; symbsymbols_per_slot; symb++) { - reset = 1; - x2 = ((1<<17) * (fp->symbols_per_slot*slot+symb+1) * ((N_n_scid[n_scid]<<1)+1) +((N_n_scid[n_scid]<<1)+n_scid)); - LOG_D(PHY,"PDSCH DMRS slot %d, symb %d x2 %x, N_n_scid %d,n_scid %d\n",slot,symb,x2,N_n_scid[n_scid],n_scid); - for (uint32_t n=0; nsymbols_per_slot*slot+symb+1) * ((Nid<<1)+1) +((Nid<<1)+nscid)); + LOG_D(PHY,"PDSCH DMRS slot %d, symb %d x2 %x, Nid %d,nscid %d\n",slot,symb,x2,Nid,nscid); + for (uint32_t n=0; nframe_parms; @@ -50,20 +49,10 @@ void nr_generate_csi_rs(PHY_VARS_gNB *gNB, AssertFatal(b!=0, "Invalid CSI frequency domain mapping: no bit selected in bitmap\n"); - // pre-computed for scrambling id equel to cell id - // if the scrambling id is not the cell id we need to re-initialize the rs - if (csi_params.scramb_id != cell_id) { - uint8_t reset; - uint32_t x1, x2; - uint32_t Nid = csi_params.scramb_id; - for (uint8_t symb=0; symbcsi_gold_init) { + gNB->csi_gold_init = csi_params.scramb_id; + nr_init_csi_rs(gNB, csi_params.scramb_id); } switch (csi_params.row) { diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index d233eb9ba6..dc0db4898a 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -66,11 +66,12 @@ void nr_pdcch_scrambling(uint32_t *in, } } -void nr_generate_dci(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15, - uint32_t **gold_pdcch_dmrs, +void nr_generate_dci(PHY_VARS_gNB *gNB, + nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15, int32_t *txdataF, int16_t amp, - NR_DL_FRAME_PARMS *frame_parms) { + NR_DL_FRAME_PARMS *frame_parms, + int slot) { int16_t mod_dmrs[NR_MAX_CSET_DURATION][NR_MAX_PDCCH_DMRS_LENGTH>>1] __attribute__((aligned(16))); // 3 for the max coreset duration uint16_t cset_start_sc; @@ -81,7 +82,7 @@ void nr_generate_dci(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15, int rb_offset; int n_rb; - + // compute rb_offset and n_prb based on frequency allocation nr_cce_t cce_list[MAX_DCI_CORESET][NR_MAX_PDCCH_AGG_LEVEL]; nr_fill_cce_list(cce_list,0,pdcch_pdu_rel15); @@ -95,6 +96,13 @@ void nr_generate_dci(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15, * in time: by its first slot and its first symbol*/ const nfapi_nr_dl_dci_pdu_t *dci_pdu = &pdcch_pdu_rel15->dci_pdu[d]; + if(dci_pdu->ScramblingId != gNB->pdcch_gold_init) { + gNB->pdcch_gold_init = dci_pdu->ScramblingId; + nr_init_pdcch_dmrs(gNB, dci_pdu->ScramblingId); + } + + uint32_t **gold_pdcch_dmrs = gNB->nr_gold_pdcch_dmrs[slot]; + cset_start_symb = pdcch_pdu_rel15->StartSymbolIndex; cset_nsymb = pdcch_pdu_rel15->DurationSymbols; dci_idx = 0; @@ -104,8 +112,8 @@ void nr_generate_dci(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15, uint32_t dmrs_length = n_rb*6; //2(QPSK)*3(per RB)*6(REG per CCE) uint32_t encoded_length = dci_pdu->AggregationLevel*108; //2(QPSK)*9(per RB)*6(REG per CCE) LOG_D(PHY, "DL_DCI : rb_offset %d, nb_rb %d, DMRS length per symbol %d\t DCI encoded length %d (precoder_granularity %d,reg_mapping %d),Scrambling_Id %d,ScramblingRNTI %x,PayloadSizeBits %d\n", - rb_offset, n_rb,dmrs_length, encoded_length,pdcch_pdu_rel15->precoderGranularity,pdcch_pdu_rel15->CceRegMappingType, - dci_pdu->ScramblingId,dci_pdu->ScramblingRNTI,dci_pdu->PayloadSizeBits); + rb_offset, n_rb,dmrs_length, encoded_length,pdcch_pdu_rel15->precoderGranularity,pdcch_pdu_rel15->CceRegMappingType, + dci_pdu->ScramblingId,dci_pdu->ScramblingRNTI,dci_pdu->PayloadSizeBits); dmrs_length += rb_offset*6; // To accommodate more DMRS symbols in case of rb offset /// DMRS QPSK modulation @@ -115,10 +123,10 @@ void nr_generate_dci(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15, #ifdef DEBUG_PDCCH_DMRS if(dci_pdu->RNTI!=0xFFFF) { - for (int i=0; i>1; i++) - printf("symb %d i %d %p gold seq 0x%08x mod_dmrs %d %d\n", symb, i, - &gold_pdcch_dmrs[symb][i>>5],gold_pdcch_dmrs[symb][i>>5], mod_dmrs[symb][i<<1], mod_dmrs[symb][(i<<1)+1] ); - } + for (int i=0; i>1; i++) + printf("symb %d i %d %p gold seq 0x%08x mod_dmrs %d %d\n", symb, i, + &gold_pdcch_dmrs[symb][i>>5],gold_pdcch_dmrs[symb][i>>5], mod_dmrs[symb][i<<1], mod_dmrs[symb][(i<<1)+1] ); + } #endif } @@ -251,15 +259,16 @@ void nr_generate_dci(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15, } void nr_generate_dci_top(processingData_L1tx_t *msgTx, - uint32_t **gold_pdcch_dmrs, + int slot, int32_t *txdataF, int16_t amp, NR_DL_FRAME_PARMS *frame_parms) { + for (int i=0; inum_ul_pdcch; i++) - nr_generate_dci(&msgTx->ul_pdcch_pdu[i].pdcch_pdu.pdcch_pdu_rel15,gold_pdcch_dmrs,txdataF,amp,frame_parms); + nr_generate_dci(msgTx->gNB,&msgTx->ul_pdcch_pdu[i].pdcch_pdu.pdcch_pdu_rel15,txdataF,amp,frame_parms,slot); for (int i=0; inum_dl_pdcch; i++) - nr_generate_dci(&msgTx->pdcch_pdu[i].pdcch_pdu_rel15,gold_pdcch_dmrs,txdataF,amp,frame_parms); + nr_generate_dci(msgTx->gNB,&msgTx->pdcch_pdu[i].pdcch_pdu_rel15,txdataF,amp,frame_parms,slot); } diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.h b/openair1/PHY/NR_TRANSPORT/nr_dci.h index bdc8509d12..490a8b5286 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.h +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.h @@ -30,7 +30,7 @@ uint16_t nr_get_dci_size(nfapi_nr_dci_format_e format, uint16_t N_RB); void nr_generate_dci_top(processingData_L1tx_t *msgTx, - uint32_t **gold_pdcch_dmrs, + int slot, int32_t *txdataF, int16_t amp, NR_DL_FRAME_PARMS *frame_parms); diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c index c6c89c80be..b5e4cbd651 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c @@ -58,7 +58,6 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, PHY_VARS_gNB *gNB = msgTx->gNB; NR_gNB_DLSCH_t *dlsch; - uint32_t ***pdsch_dmrs = gNB->nr_gold_pdsch_dmrs[slot]; int32_t** txdataF = gNB->common_vars.txdataF; int16_t amp = AMP; int xOverhead = 0; @@ -95,6 +94,12 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, } n_dmrs = (rel15->BWPStart+rel15->rbStart+rel15->rbSize)*nb_re_dmrs; + if(rel15->dlDmrsScramblingId != gNB->pdsch_gold_init[rel15->SCID]) { + gNB->pdsch_gold_init[rel15->SCID] = rel15->dlDmrsScramblingId; + nr_init_pdsch_dmrs(gNB, rel15->SCID, rel15->dlDmrsScramblingId); + } + + uint32_t ***pdsch_dmrs = gNB->nr_gold_pdsch_dmrs[slot]; uint16_t dmrs_symbol_map = rel15->dlDmrsSymbPos;//single DMRS: 010000100 Double DMRS 110001100 uint8_t dmrs_len = get_num_dmrs(rel15->dlDmrsSymbPos); uint16_t nb_re = ((12*rel15->NrOfSymbols)-nb_re_dmrs*dmrs_len-xOverhead)*rel15->rbSize*rel15->nrOfLayers; @@ -273,7 +278,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, l_prime = 0; } /// DMRS QPSK modulation - nr_modulation(pdsch_dmrs[l][0], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated + nr_modulation(pdsch_dmrs[l][rel15->SCID], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs); // Qm = 2 as DMRS is QPSK modulated #ifdef DEBUG_DLSCH printf("DMRS modulation (symbol %d, %d symbols, type %d):\n", l, n_dmrs, dmrs_Type); @@ -294,7 +299,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, if(ptrs_symbol) { /* PTRS QPSK Modulation for each OFDM symbol in a slot */ printf("Doing ptrs modulation for symbol %d, n_ptrs %d\n",l,n_ptrs); - nr_modulation(pdsch_dmrs[l][0], (n_ptrs<<1), DMRS_MOD_ORDER, mod_ptrs); + nr_modulation(pdsch_dmrs[l][rel15->SCID], (n_ptrs<<1), DMRS_MOD_ORDER, mod_ptrs); } } uint16_t k = start_sc; diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h index d45858bca0..a3a88f6c27 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h +++ b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h @@ -334,7 +334,6 @@ uint8_t get_nr_prach_duration(uint8_t prach_format); void nr_generate_csi_rs(PHY_VARS_gNB *gNB, int16_t amp, nfapi_nr_dl_tti_csi_rs_pdu_rel15_t csi_params, - uint16_t cell_id, int slot); void free_nr_prach_entry(PHY_VARS_gNB *gNB, int prach_id); diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 7c7d30a6e2..f549e9591b 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -847,6 +847,10 @@ typedef struct PHY_VARS_gNB_s { /// counter to average prach energh over first 100 prach opportunities int prach_energy_counter; + int csi_gold_init; + int pdcch_gold_init; + int pdsch_gold_init[2]; + int pucch0_thres; int pusch_thres; int prach_thres; diff --git a/openair1/SCHED_NR/phy_procedures_nr_gNB.c b/openair1/SCHED_NR/phy_procedures_nr_gNB.c index 7e9f4d091a..f28d9af325 100644 --- a/openair1/SCHED_NR/phy_procedures_nr_gNB.c +++ b/openair1/SCHED_NR/phy_procedures_nr_gNB.c @@ -161,8 +161,7 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx, VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_PDCCH_TX,1); - nr_generate_dci_top(msgTx, - gNB->nr_gold_pdcch_dmrs[slot], + nr_generate_dci_top(msgTx, slot, &gNB->common_vars.txdataF[0][txdataF_offset], AMP, fp); @@ -181,7 +180,7 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx, if (csirs->active == 1) { LOG_D(PHY, "CSI-RS generation started in frame %d.%d\n",frame,slot); nfapi_nr_dl_tti_csi_rs_pdu_rel15_t csi_params = csirs->csirs_pdu.csi_rs_pdu_rel15; - nr_generate_csi_rs(gNB, AMP, csi_params, gNB->gNB_config.cell_config.phy_cell_id.value, slot); + nr_generate_csi_rs(gNB, AMP, csi_params, slot); csirs->active = 0; } } From 5f7f56f056e928909d189562a4d6b01642d06142 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Thu, 24 Feb 2022 09:03:00 -0800 Subject: [PATCH 051/150] Added a comment to justify pdu_len checks in gNB --- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 47550597bc..699e0e1d71 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -261,6 +261,10 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_L_TRUNCATED_BSR: //38.321 section 6.1.3.1 //variable length + /* Several checks have been added to this function to + ensure that the casting of the pduP is possible. There + is an actual bug here, but it has not been resolved. This + means that the scheduled transport block size is invalid. */ if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) return 0; mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; From 13401a5f8cdff36ab20227bb2731303433e5f240 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Thu, 24 Feb 2022 09:49:47 -0800 Subject: [PATCH 052/150] Comments from OAI: This commit include dynamically setting the slots_per_frame value based on configuration. It also includes some comments. Lastly, simplified bug fix in MAC layer related to sched_frame calculation. --- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 17 +++++++++-------- .../LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 7 ++++--- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 855b86d24c..f8b6033277 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -1335,9 +1335,11 @@ void set_harq_status(NR_UE_MAC_INST_t *mac, current_harq->dl_frame = frame; current_harq->dl_slot = slot; if (get_softmodem_params()->emulate_l1) { - if (data_toul_fb + slot > 19) { + uint8_t scs = get_softmodem_params()->numerology; + int slots_per_frame = nr_slots_per_frame[scs]; + if (data_toul_fb + slot >= slots_per_frame) { frame = (frame + 1) % 1024; - slot = (data_toul_fb + slot) - 20; + slot = (data_toul_fb + slot) - slots_per_frame; } else { slot = data_toul_fb + slot; @@ -2024,13 +2026,12 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, current_harq = &mac->dl_harq_info[dl_harq_pid]; if (current_harq->active) { + + sched_slot = current_harq->dl_slot + current_harq->feedback_to_ul; sched_frame = current_harq->dl_frame; - if (current_harq->feedback_to_ul + current_harq->dl_slot > 19) { - sched_frame = (sched_frame + 1) % 1024; - sched_slot = (current_harq->feedback_to_ul + current_harq->dl_slot) - slots_per_frame; - } - else { - sched_slot = current_harq->feedback_to_ul + current_harq->dl_slot; + if (sched_slot>=slots_per_frame){ + sched_slot %= slots_per_frame; + sched_frame = (sched_frame + 1) % 1024; } AssertFatal(sched_slot < slots_per_frame, "sched_slot was calculated incorrect %d\n", sched_slot); LOG_D(PHY,"HARQ pid %d is active for %d.%d (dl_slot %d, feedback_to_ul %d, is_common %d\n",dl_harq_pid, sched_frame,sched_slot,current_harq->dl_slot,current_harq->feedback_to_ul,current_harq->is_common); diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 699e0e1d71..e9394888f4 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -262,9 +262,10 @@ int nr_process_mac_pdu(module_id_t module_idP, //38.321 section 6.1.3.1 //variable length /* Several checks have been added to this function to - ensure that the casting of the pduP is possible. There - is an actual bug here, but it has not been resolved. This - means that the scheduled transport block size is invalid. */ + ensure that the casting of the pduP is possible. There seems + to be a partial PDU at the end of this buffer, so here + we gracefully ignore that by returning 0. See: + https://gitlab.eurecom.fr/oai/openairinterface5g/-/issues/534 */ if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) return 0; mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; From 5846a9b832a1fd8724ef612ac34fcbede4de398f Mon Sep 17 00:00:00 2001 From: francescomani Date: Thu, 24 Feb 2022 18:51:07 +0100 Subject: [PATCH 053/150] checking if csi_MeasConfig was already allocated --- openair2/RRC/NR/MESSAGES/asn1_msg.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c index 28aee71d86..04b5b6c92e 100755 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.c +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c @@ -1462,8 +1462,13 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, NR_ServingCellConfigCommon_t *scc = carrier->servingcellconfigcommon; - NR_CSI_MeasConfig_t *csi_MeasConfig = calloc(1,sizeof(*csi_MeasConfig)); - SpCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup = csi_MeasConfig; + NR_CSI_MeasConfig_t *csi_MeasConfig; + if(!SpCellConfig->spCellConfigDedicated->csi_MeasConfig) { + csi_MeasConfig = calloc(1,sizeof(*csi_MeasConfig)); + SpCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup = csi_MeasConfig; + } + else + csi_MeasConfig = SpCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup; int curr_bwp = NRRIV2BW(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth,MAX_BWP_SIZE); config_csirs(scc, csi_MeasConfig, uid, carrier->pdsch_AntennaPorts, curr_bwp, carrier->do_CSIRS); From c918e76f7423053552fc0a8d3f9e3b4791588413 Mon Sep 17 00:00:00 2001 From: Mario Hudon Date: Thu, 24 Feb 2022 15:28:50 -0500 Subject: [PATCH 054/150] Complete NR_UE_PDCCH global variable/structure cleanup --- executables/nr-ue.c | 5 +- openair1/PHY/INIT/nr_init_ue.c | 32 -------- .../nr_dl_channel_estimation.c | 7 +- openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h | 4 +- openair1/PHY/NR_UE_TRANSPORT/dci_nr.c | 76 +++++++++++-------- .../PHY/NR_UE_TRANSPORT/nr_initial_sync.c | 41 ++++++---- openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c | 5 +- .../NR_UE_TRANSPORT/nr_transport_proto_ue.h | 15 +++- openair1/PHY/defs_nr_UE.h | 60 ++------------- openair1/SCHED_NR_UE/defs.h | 22 ++++-- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 19 ++--- openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 61 +++++++++------ openair1/SIMULATION/NR_PHY/dlsim.c | 6 +- .../SIMULATION/NR_PHY/nr_dummy_functions.c | 3 +- openair1/SIMULATION/NR_PHY/pbchsim.c | 10 ++- openair2/LAYER2/NR_MAC_UE/mac_proto.h | 12 ++- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 4 +- openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 19 +++-- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 7 +- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h | 8 ++ 20 files changed, 211 insertions(+), 205 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 05f9efae3c..d556636e98 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -697,6 +697,7 @@ void processSlotRX(void *arg) { int rx_slot_type = nr_ue_slot_select(cfg, proc->frame_rx, proc->nr_slot_rx); int tx_slot_type = nr_ue_slot_select(cfg, proc->frame_tx, proc->nr_slot_tx); uint8_t gNB_id = 0; + NR_UE_PDCCH_CONFIG phy_pdcch_config={0}; if (IS_SOFTMODEM_NOS1 || get_softmodem_params()->sa) { /* send tick to RLC and PDCP every ms */ @@ -712,7 +713,7 @@ void processSlotRX(void *arg) { if(UE->if_inst != NULL && UE->if_inst->dl_indication != NULL) { nr_downlink_indication_t dl_indication; - nr_fill_dl_indication(&dl_indication, NULL, NULL, proc, UE, gNB_id); + nr_fill_dl_indication(&dl_indication, NULL, NULL, proc, UE, gNB_id, &phy_pdcch_config); UE->if_inst->dl_indication(&dl_indication, NULL); } @@ -721,7 +722,7 @@ void processSlotRX(void *arg) { phy_procedures_slot_parallelization_nrUE_RX( UE, proc, 0, 0, 1, no_relay, NULL ); #else uint64_t a=rdtsc(); - phy_procedures_nrUE_RX(UE, proc, gNB_id, get_nrUE_params()->nr_dlsch_parallel, &rxtxD->txFifo); + phy_procedures_nrUE_RX(UE, proc, gNB_id, get_nrUE_params()->nr_dlsch_parallel, &phy_pdcch_config, &rxtxD->txFifo); LOG_D(PHY, "In %s: slot %d, time %lu\n", __FUNCTION__, proc->nr_slot_rx, (rdtsc()-a)/3500); #endif diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index 4a1ce1c3eb..7d0b0c59ed 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -372,38 +372,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, } } - // 100 PRBs * 12 REs/PRB * 4 PDCCH SYMBOLS * 2 LLRs/RE - for (th_id=0; th_idpdcch_vars[th_id][gNB_id]->llr = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) ); - ue->pdcch_vars[th_id][gNB_id]->llr16 = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) ); - ue->pdcch_vars[th_id][gNB_id]->wbar = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) ); - ue->pdcch_vars[th_id][gNB_id]->e_rx = (int16_t *)malloc16_clear( 4*2*100*12 ); - //ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); - ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); - ue->pdcch_vars[th_id][gNB_id]->rho = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) ); - // ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); - ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); - // Channel estimates - ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates = (int32_t **)malloc16_clear(4*fp->nb_antennas_rx*sizeof(int32_t *)); - ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_time = (int32_t **)malloc16_clear(4*fp->nb_antennas_rx*sizeof(int32_t *)); - - for (i=0; inb_antennas_rx; i++) { - ue->pdcch_vars[th_id][gNB_id]->rho[i] = (int32_t *)malloc16_clear( sizeof(int32_t)*(100*12*4)); - - for (j=0; j<4; j++) { - int idx = (j*fp->nb_antennas_rx)+i; - ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->symbols_per_slot*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH) ); - ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_time[idx] = (int32_t *)malloc16_clear( sizeof(int32_t)*fp->ofdm_symbol_size*2 ); - // size_t num = 7*2*fp->N_RB_DL*12; - size_t num = 4*273*12; // 4 symbols, 100 PRBs, 12 REs per PRB - //ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num); - ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num); - // ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num); - ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext[idx] = (int32_t *)malloc16_clear(sizeof(int32_t) * num); - } - } - } - // PBCH pbch_vars[gNB_id]->rxdataF_ext = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) ); pbch_vars[gNB_id]->rxdataF_comp = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c index 30eae2d30f..3cec2bd171 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c @@ -467,7 +467,9 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, unsigned char Ns, unsigned char symbol, unsigned short coreset_start_subcarrier, - unsigned short nb_rb_coreset) + unsigned short nb_rb_coreset, + int32_t pdcch_est_size, + int32_t pdcch_dl_ch_estimates[][pdcch_est_size]) { unsigned char aarx; @@ -476,7 +478,6 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, int16_t ch[2],*pil,*rxF,*dl_ch,*fl,*fm,*fr; int ch_offset,symbol_offset; - int **dl_ch_estimates =ue->pdcch_vars[proc->thread_id][gNB_id]->dl_ch_estimates; int **rxdataF=ue->common_vars.common_vars_rx_data_per_thread[proc->thread_id].rxdataF; ch_offset = ue->frame_parms.ofdm_symbol_size*symbol; @@ -511,7 +512,7 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, k = coreset_start_subcarrier; pil = (int16_t *)&pilot[0]; rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+1)]; - dl_ch = (int16_t *)&dl_ch_estimates[aarx][ch_offset]; + dl_ch = (int16_t *)&pdcch_dl_ch_estimates[aarx][ch_offset]; memset(dl_ch,0,4*(ue->frame_parms.ofdm_symbol_size)); diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h index c5330ce2f2..d2d5f08c2c 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h @@ -45,7 +45,9 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, unsigned char Ns, unsigned char symbol, unsigned short coreset_start_subcarrier, - unsigned short nb_rb_coreset); + unsigned short nb_rb_coreset, + int32_t pdcch_est_size, + int32_t pdcch_dl_ch_estimates[][pdcch_est_size]); int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c index 74b229c451..4bb474f40d 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c @@ -206,7 +206,7 @@ void nr_pdcch_demapping_deinterleaving(uint32_t *llr, } } -int32_t nr_pdcch_llr(NR_DL_FRAME_PARMS *frame_parms, int32_t col, int32_t rxdataF_comp[][col], +int32_t nr_pdcch_llr(NR_DL_FRAME_PARMS *frame_parms, int32_t rx_size, int32_t rxdataF_comp[][rx_size], int16_t *pdcch_llr, uint8_t symbol,uint32_t coreset_nbr_rb) { int16_t *rxF = (int16_t *) &rxdataF_comp[0][(symbol * coreset_nbr_rb * 12)]; int32_t i; @@ -275,7 +275,8 @@ int32_t pdcch_llr(NR_DL_FRAME_PARMS *frame_parms, //__m128i avg128P; //compute average channel_level on each (TX,RX) antenna pair -void nr_pdcch_channel_level(int32_t **dl_ch_estimates_ext, +void nr_pdcch_channel_level(int32_t rx_size, + int32_t dl_ch_estimates_ext[][rx_size], NR_DL_FRAME_PARMS *frame_parms, int32_t *avg, int symbol, @@ -342,10 +343,11 @@ void nr_pdcch_channel_level(int32_t **dl_ch_estimates_ext, // This function will extract the mapped DM-RS PDCCH REs as per 38.211 Section 7.4.1.3.2 (Mapping to physical resources) void nr_pdcch_extract_rbs_single(int32_t **rxdataF, - int32_t **dl_ch_estimates, - int32_t col, - int32_t rxdataF_ext[][col], - int32_t **dl_ch_estimates_ext, + int32_t est_size, + int32_t dl_ch_estimates[][est_size], + int32_t rx_size, + int32_t rxdataF_ext[][rx_size], + int32_t dl_ch_estimates_ext[][rx_size], uint8_t symbol, NR_DL_FRAME_PARMS *frame_parms, uint8_t *coreset_freq_dom, @@ -538,9 +540,9 @@ void nr_pdcch_extract_rbs_single(int32_t **rxdataF, #define print_shorts(s,x) printf("%s %d,%d,%d,%d,%d,%d,%d,%d\n",s,(x)[0],(x)[1],(x)[2],(x)[3],(x)[4],(x)[5],(x)[6],(x)[7]) -void nr_pdcch_channel_compensation(int32_t col, int32_t rxdataF_ext[][col], - int32_t **dl_ch_estimates_ext, - int32_t rxdataF_comp[][col], +void nr_pdcch_channel_compensation(int32_t rx_size, int32_t rxdataF_ext[][rx_size], + int32_t dl_ch_estimates_ext[][rx_size], + int32_t rxdataF_comp[][rx_size], int32_t **rho, NR_DL_FRAME_PARMS *frame_parms, uint8_t symbol, @@ -651,8 +653,8 @@ void nr_pdcch_channel_compensation(int32_t col, int32_t rxdataF_ext[][col], void nr_pdcch_detection_mrc(NR_DL_FRAME_PARMS *frame_parms, - int32_t col, - int32_t rxdataF_comp[][col], + int32_t rx_size, + int32_t rxdataF_comp[][rx_size], uint8_t symbol) { #if defined(__x86_64__) || defined(__i386__) __m128i *rxdataF_comp128_0,*rxdataF_comp128_1; @@ -688,24 +690,30 @@ void nr_pdcch_detection_mrc(NR_DL_FRAME_PARMS *frame_parms, int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, + int32_t pdcch_est_size, + int32_t pdcch_dl_ch_estimates[][pdcch_est_size], + int16_t *pdcch_e_rx, fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15) { uint32_t frame = proc->frame_rx; uint32_t slot = proc->nr_slot_rx; NR_UE_COMMON *common_vars = &ue->common_vars; NR_DL_FRAME_PARMS *frame_parms = &ue->frame_parms; - NR_UE_PDCCH *pdcch_vars = ue->pdcch_vars[proc->thread_id][0]; uint8_t log2_maxh, aarx; int32_t avgs; int32_t avgP[4]; int n_rb,rb_offset; - /// \brief Pointers to extracted PDCCH symbols in frequency-domain. - /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx - /// - second index: ? [0..168*N_RB_DL[ - int32_t rxdataF_ext[4*frame_parms->nb_antennas_rx][4*273*12]; // 4 symbols, 100 PRBs, 12 REs per PRB] - int32_t rxdataF_comp[4*frame_parms->nb_antennas_rx][4*273*12]; // 4 symbols, 100 PRBs, 12 REs per PRB] + // Pointers to extracted PDCCH symbols in frequency-domain. + int32_t rx_size = 4*273*12; + int32_t rxdataF_ext[4*frame_parms->nb_antennas_rx][rx_size]; + int32_t rxdataF_comp[4*frame_parms->nb_antennas_rx][rx_size]; + int32_t pdcch_dl_ch_estimates_ext[4*frame_parms->nb_antennas_rx][rx_size]; + + // Pointer to llrs, 4-bit resolution. + int32_t llr_size = 2*4*100*12; + int16_t llr[llr_size]; get_coreset_rballoc(rel15->coreset.frequency_domain_resource,&n_rb,&rb_offset); LOG_D(PHY,"pdcch coreset: freq %x, n_rb %d, rb_offset %d\n", @@ -714,10 +722,11 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, LOG_D(PHY,"in nr_pdcch_extract_rbs_single(rxdataF -> rxdataF_ext || dl_ch_estimates -> dl_ch_estimates_ext)\n"); nr_pdcch_extract_rbs_single(common_vars->common_vars_rx_data_per_thread[proc->thread_id].rxdataF, - pdcch_vars->dl_ch_estimates, - 4*273*12, + pdcch_est_size, + pdcch_dl_ch_estimates, + rx_size, rxdataF_ext, - pdcch_vars->dl_ch_estimates_ext, + pdcch_dl_ch_estimates_ext, s, frame_parms, rel15->coreset.frequency_domain_resource, @@ -727,7 +736,8 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, LOG_D(PHY,"we enter nr_pdcch_channel_level(avgP=%d) => compute channel level based on ofdm symbol 0, pdcch_vars[eNB_id]->dl_ch_estimates_ext\n",*avgP); LOG_D(PHY,"in nr_pdcch_channel_level(dl_ch_estimates_ext -> dl_ch_estimates_ext)\n"); // compute channel level based on ofdm symbol 0 - nr_pdcch_channel_level(pdcch_vars->dl_ch_estimates_ext, + nr_pdcch_channel_level(rx_size, + pdcch_dl_ch_estimates_ext, frame_parms, avgP, s, @@ -749,8 +759,8 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, LOG_D(PHY,"we enter nr_pdcch_channel_compensation(log2_maxh=%d)\n",log2_maxh); LOG_D(PHY,"in nr_pdcch_channel_compensation(rxdataF_ext x dl_ch_estimates_ext -> rxdataF_comp)\n"); // compute LLRs for ofdm symbol 0 only - nr_pdcch_channel_compensation(4*273*12, rxdataF_ext, - pdcch_vars->dl_ch_estimates_ext, + nr_pdcch_channel_compensation(rx_size, rxdataF_ext, + pdcch_dl_ch_estimates_ext, rxdataF_comp, NULL, frame_parms, @@ -759,15 +769,15 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, n_rb); // log2_maxh+I0_shift if (frame_parms->nb_antennas_rx > 1) { LOG_D(PHY,"we enter nr_pdcch_detection_mrc(frame_parms->nb_antennas_rx=%d)\n", frame_parms->nb_antennas_rx); - nr_pdcch_detection_mrc(frame_parms, 4*273*12, rxdataF_comp,s); + nr_pdcch_detection_mrc(frame_parms, rx_size, rxdataF_comp,s); } LOG_D(PHY,"we enter nr_pdcch_llr(for symbol %d), pdcch_vars[eNB_id]->rxdataF_comp ---> pdcch_vars[eNB_id]->llr \n",s); LOG_D(PHY,"in nr_pdcch_llr(rxdataF_comp -> llr)\n"); nr_pdcch_llr(frame_parms, - 4*273*12, + rx_size, rxdataF_comp, - pdcch_vars->llr, + llr, s, n_rb); #if T_TRACER @@ -783,8 +793,8 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, } LOG_D(PHY,"we enter nr_pdcch_demapping_deinterleaving(), number of candidates %d\n",rel15->number_of_candidates); - nr_pdcch_demapping_deinterleaving((uint32_t *) pdcch_vars->llr, - (uint32_t *) pdcch_vars->e_rx, + nr_pdcch_demapping_deinterleaving((uint32_t *) llr, + (uint32_t *) pdcch_e_rx, rel15->coreset.duration, rel15->coreset.StartSymbolIndex, n_rb, @@ -869,10 +879,10 @@ uint16_t nr_dci_false_detection(uint64_t *dci, uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, + int16_t *pdcch_e_rx, fapi_nr_dci_indication_t *dci_ind, - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15) { - - NR_UE_PDCCH *pdcch_vars = ue->pdcch_vars[proc->thread_id][0]; + fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15, + NR_UE_PDCCH_CONFIG *phy_pdcch_config) { //int gNB_id = 0; int16_t tmp_e[16*108]; @@ -902,7 +912,7 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, LOG_D(PHY, "Trying DCI candidate %d of %d number of candidates, CCE %d (%d), L %d, length %d, format %s\n", j, rel15->number_of_candidates, CCEind, CCEind*9*6*2, L, dci_length,nr_dci_format_string[rel15->dci_format_options[k]]); - nr_pdcch_unscrambling(&pdcch_vars->e_rx[CCEind*108], rel15->coreset.scrambling_rnti, L*108, rel15->coreset.pdcch_dmrs_scrambling_id, tmp_e); + nr_pdcch_unscrambling(&pdcch_e_rx[CCEind*108], rel15->coreset.scrambling_rnti, L*108, rel15->coreset.pdcch_dmrs_scrambling_id, tmp_e); #ifdef DEBUG_DCI_DECODING uint32_t * z = (uint32_t *) &pdcch_vars->e_rx[CCEind*108]; @@ -947,7 +957,7 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, } } } - pdcch_vars->nb_search_space = 0; + phy_pdcch_config->nb_search_space = 0; return(dci_ind->number_of_dcis); } diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c index 2963ad5010..0ea277c2a9 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c @@ -104,7 +104,7 @@ void free_list(NR_UE_SSB *node) { } -int nr_pbch_detection(UE_nr_rxtx_proc_t * proc, PHY_VARS_NR_UE *ue, int pbch_initial_symbol) +int nr_pbch_detection(UE_nr_rxtx_proc_t * proc, PHY_VARS_NR_UE *ue, int pbch_initial_symbol, NR_UE_PDCCH_CONFIG *phy_pdcch_config) { NR_DL_FRAME_PARMS *frame_parms=&ue->frame_parms; int ret =-1; @@ -159,7 +159,8 @@ int nr_pbch_detection(UE_nr_rxtx_proc_t * proc, PHY_VARS_NR_UE *ue, int pbch_ini frame_parms, 0, temp_ptr->i_ssb, - SISO); + SISO, + phy_pdcch_config); temp_ptr=temp_ptr->next_ssb; } @@ -209,6 +210,8 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, NR_DL_FRAME_PARMS *fp = &ue->frame_parms; int ret=-1; int rx_power=0; //aarx, + + NR_UE_PDCCH_CONFIG phy_pdcch_config={0}; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_NR_INITIAL_UE_SYNC, VCD_FUNCTION_IN); @@ -293,7 +296,7 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, rx_sss_nr(ue, proc, &metric_tdd_ncp, &phase_tdd_ncp); nr_gold_pbch(ue); - ret = nr_pbch_detection(proc, ue, 1); // start pbch detection at first symbol after pss + ret = nr_pbch_detection(proc, ue, 1, &phy_pdcch_config); // start pbch detection at first symbol after pss if (ret == 0) { // sync at symbol ue->symbol_offset @@ -472,33 +475,39 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, // if stand alone and sync on ssb do sib1 detection as part of initial sync if (sa==1 && ret==0) { bool dec = false; - NR_UE_PDCCH *pdcch_vars = ue->pdcch_vars[proc->thread_id][0]; int gnb_id = 0; //FIXME int coreset_nb_rb=0; int coreset_start_rb=0; - for(int n_ss = 0; n_ssnb_search_space; n_ss++) { - uint8_t nb_symb_pdcch = pdcch_vars->pdcch_config[n_ss].coreset.duration; - int start_symb = pdcch_vars->pdcch_config[n_ss].coreset.StartSymbolIndex; - get_coreset_rballoc(pdcch_vars->pdcch_config[n_ss].coreset.frequency_domain_resource,&coreset_nb_rb,&coreset_start_rb); + // Hold the channel estimates in frequency domain. + int32_t pdcch_est_size = fp->symbols_per_slot*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH); + int32_t pdcch_dl_ch_estimates[4*fp->nb_antennas_rx][pdcch_est_size]; + + + for(int n_ss = 0; n_ssslot, - is*fp->samples_per_frame+pdcch_vars->sfn*fp->samples_per_frame+ue->rx_offset); + phy_pdcch_config.slot, + is*fp->samples_per_frame+phy_pdcch_config.sfn*fp->samples_per_frame+ue->rx_offset); if (coreset_nb_rb > 0) nr_pdcch_channel_estimation(ue, proc, 0, - pdcch_vars->slot, + phy_pdcch_config.slot, l, - fp->first_carrier_offset+(pdcch_vars->pdcch_config[n_ss].BWPStart + coreset_start_rb)*12, - coreset_nb_rb); + fp->first_carrier_offset+(phy_pdcch_config.pdcch_config[n_ss].BWPStart + coreset_start_rb)*12, + coreset_nb_rb, + pdcch_est_size, + pdcch_dl_ch_estimates); } - int dci_cnt = nr_ue_pdcch_procedures(gnb_id, ue, proc, n_ss); + int dci_cnt = nr_ue_pdcch_procedures(gnb_id, ue, proc, pdcch_est_size, pdcch_dl_ch_estimates, &phy_pdcch_config, n_ss); if (dci_cnt>0){ NR_UE_DLSCH_t *dlsch = ue->dlsch_SI[gnb_id]; if (dlsch && (dlsch->active == 1)) { @@ -511,8 +520,8 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, nr_slot_fep_init_sync(ue, proc, m, - pdcch_vars->slot, // same slot and offset as pdcch - is*fp->samples_per_frame+pdcch_vars->sfn*fp->samples_per_frame+ue->rx_offset); + phy_pdcch_config.slot, // same slot and offset as pdcch + is*fp->samples_per_frame+phy_pdcch_config.sfn*fp->samples_per_frame+ue->rx_offset); } int ret = nr_ue_pdsch_procedures(ue, diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index dff347f7c0..ef791034ad 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -414,7 +414,8 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue, NR_DL_FRAME_PARMS *frame_parms, uint8_t gNB_id, uint8_t i_ssb, - MIMO_mode_t mimo_mode) { + MIMO_mode_t mimo_mode, + NR_UE_PDCCH_CONFIG *phy_pdcch_config) { NR_UE_COMMON *nr_ue_common_vars = &ue->common_vars; int max_h=0; @@ -604,7 +605,7 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue, fapi_nr_rx_indication_t *rx_ind = calloc(1, sizeof(*rx_ind)); uint16_t number_pdus = 1; - nr_fill_dl_indication(&dl_indication, NULL, rx_ind, proc, ue, gNB_id); + nr_fill_dl_indication(&dl_indication, NULL, rx_ind, proc, ue, gNB_id, phy_pdcch_config); nr_fill_rx_indication(rx_ind, FAPI_NR_RX_PDU_TYPE_SSB, gNB_id, ue, NULL, NULL, number_pdus, proc); if (ue->if_inst && ue->if_inst->dl_indication) 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 3cb002f9e1..6b160b5b34 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h @@ -1105,6 +1105,9 @@ uint32_t dlsch_decoding_emul(PHY_VARS_NR_UE *phy_vars_ue, int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, + int32_t pdcch_est_size, + int32_t pdcch_dl_ch_estimates[][pdcch_est_size], + int16_t *pdcch_e_rx, fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15); @@ -1156,11 +1159,13 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue, NR_DL_FRAME_PARMS *frame_parms, uint8_t eNB_id, uint8_t i_ssb, - MIMO_mode_t mimo_mode); + MIMO_mode_t mimo_mode, + NR_UE_PDCCH_CONFIG *phy_pdcch_config); int nr_pbch_detection(UE_nr_rxtx_proc_t *proc, - PHY_VARS_NR_UE *ue, - int pbch_initial_symbol); + PHY_VARS_NR_UE *ue, + int pbch_initial_symbol, + NR_UE_PDCCH_CONFIG *phy_pdcch_config); uint16_t rx_pbch_emul(PHY_VARS_NR_UE *phy_vars_ue, uint8_t eNB_id, @@ -1667,8 +1672,10 @@ uint8_t get_prach_prb_offset(NR_DL_FRAME_PARMS *frame_parms, uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, + int16_t *pdcch_e_rx, fapi_nr_dci_indication_t *dci_ind, - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15); + fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15, + NR_UE_PDCCH_CONFIG *phy_pdcch_config); /** \brief This function is the top-level entry point to PDSCH demodulation, after frequency-domain transformation and channel estimation. It performs diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index b411398d34..1064f23d01 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -580,64 +580,20 @@ typedef struct { } NR_UE_PDCCH_SEARCHSPACE; #endif typedef struct { - /// \brief Pointers to extracted PDCCH symbols in frequency-domain. - /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx - /// - second index: ? [0..168*N_RB_DL[ - // int32_t **rxdataF_ext; - /// \brief Pointers to extracted and compensated PDCCH symbols in frequency-domain. - /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx - /// - second index: ? [0..168*N_RB_DL[ - // int32_t **rxdataF_comp; - /// \brief Hold the channel estimates in frequency domain. - /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx - /// - second index: samples? [0..symbols_per_tti*(ofdm_symbol_size+LTE_CE_FILTER_LENGTH)[ - int32_t **dl_ch_estimates; - /// \brief Hold the channel estimates in time domain (used for tracking). - /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx - /// - second index: samples? [0..2*ofdm_symbol_size[ - int32_t **dl_ch_estimates_time; - /// \brief Pointers to extracted channel estimates of PDCCH symbols. - /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx - /// - second index: ? [0..168*N_RB_DL[ - int32_t **dl_ch_estimates_ext; - /// \brief Pointers to channel cross-correlation vectors for multi-gNB detection. - /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx - /// - second index: ? [0..168*N_RB_DL[ - int32_t **dl_ch_rho_ext; - /// \brief Pointers to channel cross-correlation vectors for multi-gNB detection. - /// - first index: rx antenna [0..nb_antennas_rx[ - /// - second index: ? [0..] - int32_t **rho; - /// \brief Pointer to llrs, 4-bit resolution. - /// - first index: ? [0..48*N_RB_DL[ - int16_t *llr; - /// \brief Pointer to llrs, 16-bit resolution. - /// - first index: ? [0..96*N_RB_DL[ - int16_t *llr16; - /// \brief \f$\overline{w}\f$ from 36-211. - /// - first index: ? [0..48*N_RB_DL[ - int16_t *wbar; - /// \brief PDCCH/DCI e-sequence (input to rate matching). - /// - first index: ? [0..96*N_RB_DL[ - int16_t *e_rx; - /// Total number of PDU errors (diagnostic mode) - uint32_t dci_errors; + int nb_search_space; + uint16_t sfn; + uint16_t slot; + fapi_nr_dl_config_dci_dl_pdu_rel15_t pdcch_config[FAPI_NR_MAX_SS]; +} NR_UE_PDCCH_CONFIG; + +typedef struct { /// Total number of PDU received uint32_t dci_received; /// Total number of DCI False detection (diagnostic mode) uint32_t dci_false; /// Total number of DCI missed (diagnostic mode) uint32_t dci_missed; - /// nCCE for PDCCH per subframe - uint8_t nCCE[10]; - //Check for specific DCIFormat and AgregationLevel - uint8_t dciFormat; - uint8_t agregationLevel; - int nb_search_space; - fapi_nr_dl_config_dci_dl_pdu_rel15_t pdcch_config[FAPI_NR_MAX_SS]; - // frame and slot for sib1 in initial sync - uint16_t sfn; - uint16_t slot; + /* #ifdef NR_PDCCH_DEFS_NR_UE int nb_searchSpaces; diff --git a/openair1/SCHED_NR_UE/defs.h b/openair1/SCHED_NR_UE/defs.h index b3527365a5..48b5e446d3 100644 --- a/openair1/SCHED_NR_UE/defs.h +++ b/openair1/SCHED_NR_UE/defs.h @@ -111,16 +111,18 @@ int phy_procedures_RN_UE_RX(unsigned char last_slot, unsigned char next_slot, re void phy_procedures_nrUE_TX(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t eNB_id); /*! \brief Scheduling for UE RX procedures in normal subframes. - @param ue Pointer to UE variables on which to act - @param proc Pointer to proc information - @param gNB_id Local id of eNB on which to act - @param dlsch_parallel use multithreaded dlsch processing - @param txFifo Result fifo if PDSCH is run in parallel + @param ue Pointer to UE variables on which to act + @param proc Pointer to proc information + @param gNB_id Local id of eNB on which to act + @param dlsch_parallel use multithreaded dlsch processing + @param phy_pdcch_config PDCCH Config for this slot + @param txFifo Result fifo if PDSCH is run in parallel */ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t gNB_id, uint8_t dlsch_parallel, + NR_UE_PDCCH_CONFIG *phy_pdcch_config, notifiedFIFO_t *txFifo); int phy_procedures_slot_parallelization_nrUE_RX(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t eNB_id, uint8_t abstraction_flag, uint8_t do_pdcch_flag, relaying_type_t r_type); @@ -400,7 +402,8 @@ void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind, fapi_nr_rx_indication_t *rx_ind, UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, - uint8_t gNB_id); + uint8_t gNB_id, + void *phy_data); /*@}*/ @@ -434,8 +437,11 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, NR_UE_DLSCH_t *dlsch0, NR_UE_DLSCH_t *dlsch1); int nr_ue_pdcch_procedures(uint8_t gNB_id, - PHY_VARS_NR_UE *ue, - UE_nr_rxtx_proc_t *proc, + PHY_VARS_NR_UE *ue, + UE_nr_rxtx_proc_t *proc, + int32_t pdcch_est_size, + int32_t pdcch_dl_ch_estimates[][pdcch_est_size], + NR_UE_PDCCH_CONFIG *phy_pdcch_config, int n_ss); diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index f67c84a07c..c1fbc9f4bd 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -223,15 +223,13 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ // Note: we have to handle the thread IDs for this. To be revisited completely. thread_id = scheduled_response->thread_id; NR_UE_DLSCH_t *dlsch0 = NULL; - NR_UE_PDCCH *pdcch_vars = PHY_vars_UE_g[module_id][cc_id]->pdcch_vars[thread_id][0]; NR_UE_ULSCH_t *ulsch0 = PHY_vars_UE_g[module_id][cc_id]->ulsch[thread_id][0][0]; NR_UE_PUCCH *pucch_vars = PHY_vars_UE_g[module_id][cc_id]->pucch_vars[thread_id][0]; + NR_UE_PDCCH_CONFIG *phy_pdcch_config = NULL; if(scheduled_response->dl_config != NULL){ fapi_nr_dl_config_request_t *dl_config = scheduled_response->dl_config; - pdcch_vars->nb_search_space = 0; - for (i = 0; i < dl_config->number_pdus; ++i){ AssertFatal(dl_config->number_pdus < FAPI_NR_DL_CONFIG_LIST_NUM,"dl_config->number_pdus %d out of bounds\n",dl_config->number_pdus); AssertFatal(dl_config->dl_config_list[i].pdu_type<=FAPI_NR_DL_CONFIG_TYPES,"pdu_type %d > 2\n",dl_config->dl_config_list[i].pdu_type); @@ -239,13 +237,16 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ __FUNCTION__, scheduled_response->frame, slot, dl_pdu_type[dl_config->dl_config_list[i].pdu_type - 1], dl_config->number_pdus); if (dl_config->dl_config_list[i].pdu_type == FAPI_NR_DL_CONFIG_TYPE_DCI) { - + if (NULL == phy_pdcch_config) { + phy_pdcch_config = (NR_UE_PDCCH_CONFIG *)scheduled_response->phy_data; + phy_pdcch_config->nb_search_space = 0; + } fapi_nr_dl_config_dci_dl_pdu_rel15_t *pdcch_config = &dl_config->dl_config_list[i].dci_config_pdu.dci_config_rel15; - memcpy((void*)&pdcch_vars->pdcch_config[pdcch_vars->nb_search_space],(void*)pdcch_config,sizeof(*pdcch_config)); - pdcch_vars->nb_search_space = pdcch_vars->nb_search_space + 1; - pdcch_vars->sfn = scheduled_response->frame; - pdcch_vars->slot = slot; - LOG_D(PHY,"Number of DCI SearchSpaces %d\n",pdcch_vars->nb_search_space); + memcpy((void*)&phy_pdcch_config->pdcch_config[phy_pdcch_config->nb_search_space],(void*)pdcch_config,sizeof(*pdcch_config)); + phy_pdcch_config->nb_search_space = phy_pdcch_config->nb_search_space + 1; + phy_pdcch_config->sfn = scheduled_response->frame; + phy_pdcch_config->slot = slot; + LOG_D(PHY,"Number of DCI SearchSpaces %d\n",phy_pdcch_config->nb_search_space); } else { diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index b0ad4b4a83..3d3ab001b0 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -91,7 +91,8 @@ void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind, fapi_nr_rx_indication_t *rx_ind, UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, - uint8_t gNB_id){ + uint8_t gNB_id, + void *phy_data){ memset((void*)dl_ind, 0, sizeof(nr_downlink_indication_t)); @@ -101,6 +102,7 @@ void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind, dl_ind->frame = proc->frame_rx; dl_ind->slot = proc->nr_slot_rx; dl_ind->thread_id = proc->thread_id; + dl_ind->phy_data = phy_data; if (dci_ind) { @@ -359,7 +361,8 @@ void nr_ue_measurement_procedures(uint16_t l, void nr_ue_pbch_procedures(uint8_t gNB_id, PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, - uint8_t abstraction_flag) + uint8_t abstraction_flag, + NR_UE_PDCCH_CONFIG *phy_pdcch_config) { int ret = 0; @@ -377,7 +380,8 @@ void nr_ue_pbch_procedures(uint8_t gNB_id, &ue->frame_parms, gNB_id, (ue->frame_parms.ssb_index)&7, - SISO); + SISO, + phy_pdcch_config); if (ret==0) { @@ -484,6 +488,9 @@ unsigned int nr_get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb int nr_ue_pdcch_procedures(uint8_t gNB_id, PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, + int32_t pdcch_est_size, + int32_t pdcch_dl_ch_estimates[][pdcch_est_size], + NR_UE_PDCCH_CONFIG *phy_pdcch_config, int n_ss) { int frame_rx = proc->frame_rx; @@ -492,8 +499,7 @@ int nr_ue_pdcch_procedures(uint8_t gNB_id, fapi_nr_dci_indication_t *dci_ind = calloc(1, sizeof(*dci_ind)); nr_downlink_indication_t dl_indication; - NR_UE_PDCCH *pdcch_vars = ue->pdcch_vars[proc->thread_id][gNB_id]; - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15 = &pdcch_vars->pdcch_config[n_ss]; + fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15 = &phy_pdcch_config->pdcch_config[n_ss]; /* // unsigned int dci_cnt=0, i; //removed for nr_ue_pdcch_procedures and added in the loop for nb_coreset_active @@ -675,9 +681,14 @@ int nr_ue_pdcch_procedures(uint8_t gNB_id, #endif */ - + + /// \brief PDCCH/DCI e-sequence (input to rate matching). + /// - first index: ? [0..96*N_RB_DL[ + int32_t pdcch_e_rx_size = 2*4*100*12; + int16_t pdcch_e_rx[pdcch_e_rx_size]; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_IN); - nr_rx_pdcch(ue, proc, rel15); + nr_rx_pdcch(ue, proc, pdcch_est_size, pdcch_dl_ch_estimates, pdcch_e_rx, rel15); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_OUT); @@ -688,7 +699,7 @@ int nr_ue_pdcch_procedures(uint8_t gNB_id, n_ss); #endif - dci_cnt = nr_dci_decoding_procedure(ue, proc, dci_ind, rel15); + dci_cnt = nr_dci_decoding_procedure(ue, proc, pdcch_e_rx, dci_ind, rel15, phy_pdcch_config); #ifdef NR_PDCCH_SCHED_DEBUG LOG_I(PHY,"<-NR_PDCCH_PHY_PROCEDURES_LTE_UE (nr_ue_pdcch_procedures)-> Ending function nr_dci_decoding_procedure() -> dci_cnt=%u\n",dci_cnt); @@ -745,7 +756,7 @@ int nr_ue_pdcch_procedures(uint8_t gNB_id, */ // fill dl_indication message - nr_fill_dl_indication(&dl_indication, dci_ind, NULL, proc, ue, gNB_id); + nr_fill_dl_indication(&dl_indication, dci_ind, NULL, proc, ue, gNB_id, phy_pdcch_config); // send to mac ue->if_inst->dl_indication(&dl_indication, NULL); @@ -1013,16 +1024,16 @@ bool nr_ue_dlsch_procedures(PHY_VARS_NR_UE *ue, switch (pdsch) { case RA_PDSCH: - nr_fill_dl_indication(&dl_indication, NULL, rx_ind, proc, ue, gNB_id); + nr_fill_dl_indication(&dl_indication, NULL, rx_ind, proc, ue, gNB_id, NULL); nr_fill_rx_indication(rx_ind, FAPI_NR_RX_PDU_TYPE_RAR, gNB_id, ue, dlsch0, NULL, number_pdus, proc); ue->UE_mode[gNB_id] = RA_RESPONSE; break; case PDSCH: - nr_fill_dl_indication(&dl_indication, NULL, rx_ind, proc, ue, gNB_id); + nr_fill_dl_indication(&dl_indication, NULL, rx_ind, proc, ue, gNB_id, NULL); nr_fill_rx_indication(rx_ind, FAPI_NR_RX_PDU_TYPE_DLSCH, gNB_id, ue, dlsch0, NULL, number_pdus, proc); break; case SI_PDSCH: - nr_fill_dl_indication(&dl_indication, NULL, rx_ind, proc, ue, gNB_id); + nr_fill_dl_indication(&dl_indication, NULL, rx_ind, proc, ue, gNB_id, NULL); nr_fill_rx_indication(rx_ind, FAPI_NR_RX_PDU_TYPE_SIB, gNB_id, ue, dlsch0, NULL, number_pdus, proc); break; default: @@ -1586,6 +1597,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, uint8_t gNB_id, uint8_t dlsch_parallel, + NR_UE_PDCCH_CONFIG *phy_pdcch_config, notifiedFIFO_t *txFifo ) { @@ -1593,10 +1605,9 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, int nr_slot_rx = proc->nr_slot_rx; int slot_pbch; int slot_ssb; - NR_UE_PDCCH *pdcch_vars = ue->pdcch_vars[proc->thread_id][0]; fapi_nr_config_request_t *cfg = &ue->nrUE_config; - uint8_t nb_symb_pdcch = pdcch_vars->nb_search_space > 0 ? pdcch_vars->pdcch_config[0].coreset.duration : 0; + uint8_t nb_symb_pdcch = phy_pdcch_config->nb_search_space > 0 ? phy_pdcch_config->pdcch_config[0].coreset.duration : 0; uint8_t dci_cnt = 0; NR_DL_FRAME_PARMS *fp = &ue->frame_parms; @@ -1614,8 +1625,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, int coreset_nb_rb=0; int coreset_start_rb=0; - if (pdcch_vars->nb_search_space > 0) - get_coreset_rballoc(pdcch_vars->pdcch_config[0].coreset.frequency_domain_resource,&coreset_nb_rb,&coreset_start_rb); + if (phy_pdcch_config->nb_search_space > 0) + get_coreset_rballoc(phy_pdcch_config->pdcch_config[0].coreset.frequency_domain_resource,&coreset_nb_rb,&coreset_start_rb); slot_pbch = is_pbch_in_slot(cfg, frame_rx, nr_slot_rx, fp); slot_ssb = is_ssb_in_slot(cfg, frame_rx, nr_slot_rx, fp); @@ -1642,7 +1653,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, if ((ue->decode_MIB == 1) && slot_pbch) { LOG_D(PHY," ------ Decode MIB: frame.slot %d.%d ------ \n", frame_rx%1024, nr_slot_rx); - nr_ue_pbch_procedures(gNB_id, ue, proc, 0); + nr_ue_pbch_procedures(gNB_id, ue, proc, 0, phy_pdcch_config); if (ue->no_timing_correction==0) { LOG_D(PHY,"start adjust sync slot = %d no timing %d\n", nr_slot_rx, ue->no_timing_correction); @@ -1681,13 +1692,17 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, nr_slot_rx); } + // Hold the channel estimates in frequency domain. + int32_t pdcch_est_size = fp->symbols_per_slot*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH); + int32_t pdcch_dl_ch_estimates[4*fp->nb_antennas_rx][pdcch_est_size]; + dci_cnt = 0; - for(int n_ss = 0; n_ssnb_search_space; n_ss++) { + for(int n_ss = 0; n_ssnb_search_space; n_ss++) { for (uint16_t l=0; lfirst_carrier_offset, pdcch_vars->pdcch_config[n_ss].BWPStart, coreset_start_rb, coreset_nb_rb); + fp->first_carrier_offset, phy_pdcch_config->pdcch_config[n_ss].BWPStart, coreset_start_rb, coreset_nb_rb); if (coreset_nb_rb > 0) nr_pdcch_channel_estimation(ue, @@ -1695,13 +1710,15 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, gNB_id, nr_slot_rx, l, - fp->first_carrier_offset+(pdcch_vars->pdcch_config[n_ss].BWPStart + coreset_start_rb)*12, - coreset_nb_rb); + fp->first_carrier_offset+(phy_pdcch_config->pdcch_config[n_ss].BWPStart + coreset_start_rb)*12, + coreset_nb_rb, + pdcch_est_size, + pdcch_dl_ch_estimates); stop_meas(&ue->ofdm_demod_stats); } - dci_cnt = dci_cnt + nr_ue_pdcch_procedures(gNB_id, ue, proc, n_ss); + dci_cnt = dci_cnt + nr_ue_pdcch_procedures(gNB_id, ue, proc, pdcch_est_size, pdcch_dl_ch_estimates, phy_pdcch_config, n_ss); } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_PDCCH, VCD_FUNCTION_OUT); diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index 4a0da8eade..637df5ccb0 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -962,6 +962,8 @@ int main(int argc, char **argv) nr_dcireq_t dcireq; nr_scheduled_response_t scheduled_response; + NR_UE_PDCCH_CONFIG phy_pdcch_config={0}; + memset((void*)&dcireq,0,sizeof(dcireq)); memset((void*)&scheduled_response,0,sizeof(scheduled_response)); dcireq.module_id = 0; @@ -976,6 +978,7 @@ int main(int argc, char **argv) scheduled_response.frame = frame; scheduled_response.slot = slot; scheduled_response.thread_id = 0; + scheduled_response.phy_data = &phy_pdcch_config; nr_ue_phy_config_request(&UE_mac->phy_config); //NR_COMMON_channels_t *cc = RC.nrmac[0]->common_channels; @@ -1218,6 +1221,7 @@ int main(int argc, char **argv) &UE_proc, 0, dlsch_threads, + &phy_pdcch_config, NULL); //printf("dlsim round %d ends\n",round); @@ -1365,8 +1369,6 @@ int main(int argc, char **argv) LOG_M("chestF0.m","chF0",&UE->pdsch_vars[0][0]->dl_ch_estimates_ext[0][0],g_rbSize*12*14,1,1); write_output("rxF_comp.m","rxFc",&UE->pdsch_vars[0][0]->rxdataF_comp0[0][0],N_RB_DL*12*14,1,1); LOG_M("rxF_llr.m","rxFllr",UE->pdsch_vars[UE_proc.thread_id][0]->llr[0],available_bits,1,0); - LOG_M("pdcch_rxFcomp.m","pdcch_rxFcomp",&UE->pdcch_vars[0][0]->rxdataF_comp[0][0],96*12,1,1); - LOG_M("pdcch_rxFllr.m","pdcch_rxFllr",UE->pdcch_vars[0][0]->llr,96*12,1,1); break; } diff --git a/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c b/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c index 7a47410129..a37b8473e8 100644 --- a/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c +++ b/openair1/SIMULATION/NR_PHY/nr_dummy_functions.c @@ -27,7 +27,8 @@ void nr_fill_dl_indication(nr_downlink_indication_t *dl_ind, fapi_nr_rx_indication_t *rx_ind, UE_nr_rxtx_proc_t *proc, PHY_VARS_NR_UE *ue, - uint8_t gNB_id) {} + uint8_t gNB_id, + void *phy_data) {} void nr_fill_rx_indication(fapi_nr_rx_indication_t *rx_ind, uint8_t pdu_type, uint8_t gNB_id, diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c index 2413a86912..f9bafd2032 100644 --- a/openair1/SIMULATION/NR_PHY/pbchsim.c +++ b/openair1/SIMULATION/NR_PHY/pbchsim.c @@ -74,7 +74,10 @@ void init_downlink_harq_status(NR_DL_UE_HARQ_t *dl_harq) {} int nr_ue_pdcch_procedures(uint8_t gNB_id, PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, - int n_ss) { + int32_t pdcch_est_size, + int32_t pdcch_dl_ch_estimates[][pdcch_est_size], + NR_UE_PDCCH_CONFIG *phy_pdcch_config, + int n_ss) { return 0; } @@ -720,6 +723,8 @@ int main(int argc, char **argv) } else { UE_nr_rxtx_proc_t proc={0}; + NR_UE_PDCCH_CONFIG phy_pdcch_config={0}; + UE->rx_offset=0; uint8_t ssb_index = 0; while (!((SSB_positions >> ssb_index) & 0x01)) ssb_index++; // to select the first transmitted ssb @@ -742,7 +747,8 @@ int main(int argc, char **argv) frame_parms, 0, ssb_index%8, - SISO); + SISO, + &phy_pdcch_config); if (ret==0) { //UE->rx_ind.rx_indication_body->mib_pdu.ssb_index; //not yet detected automatically diff --git a/openair2/LAYER2/NR_MAC_UE/mac_proto.h b/openair2/LAYER2/NR_MAC_UE/mac_proto.h index 288716ed85..8aa601f301 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_proto.h @@ -48,6 +48,7 @@ void nr_ue_init_mac(module_id_t module_idP); \param module_id module id \param cc_id component carrier id \param gNB_index gNB index + \param phy_data PHY structure to be filled in by the callee in the FAPI call (L1 caller -> indication to L2 -> FAPI call to L1 callee) \param extra_bits extra bits for frame calculation \param l_ssb_equal_64 check if ssb number of candicate is equal 64, 1=equal; 0=non equal. Reference 38.212 7.1.1 \param pduP pointer to pdu @@ -56,7 +57,8 @@ void nr_ue_init_mac(module_id_t module_idP); int8_t nr_ue_decode_mib( module_id_t module_id, int cc_id, - uint8_t gNB_index, + uint8_t gNB_index, + void *phy_data, uint8_t extra_bits, uint32_t ssb_length, uint32_t ssb_index, @@ -132,7 +134,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in @param int cc_id CC ID @param frame_t frame frame number @param int slot reference number - @param UE_nr_rxtx_proc_t *proc pointer to process context */ + @param void *phy_pata pointer to a PHY specific structure to be filled in the scheduler response (can be null) */ void fill_scheduled_response(nr_scheduled_response_t *scheduled_response, fapi_nr_dl_config_request_t *dl_config, fapi_nr_ul_config_request_t *ul_config, @@ -141,7 +143,8 @@ void fill_scheduled_response(nr_scheduled_response_t *scheduled_response, int cc_id, frame_t frame, int slot, - int thread_id); + int thread_id, + void *phy_data); /*! \fn int8_t nr_ue_get_SR(module_id_t module_idP, frame_t frameP, slot_t slotP); \brief Called by PHY to get sdu for PUSCH transmission. It performs the following operations: Checks BSR for DCCH, DCCH1 and DTCH corresponding to previous values computed either in SR or BSR procedures. It gets rlc status indications on DCCH,DCCH1 and DTCH and forms BSR elements and PHR in MAC header. CRNTI element is not supported yet. It computes transport block for up to 3 SDUs and generates header and forms the complete MAC SDU. @@ -369,7 +372,8 @@ void nr_ue_sib1_scheduler(module_id_t module_idP, uint8_t ssb_subcarrier_offset, uint32_t ssb_index, uint16_t ssb_start_subcarrier, - frequency_range_t frequency_range); + frequency_range_t frequency_range, + void *phy_data); /* \brief Function called by PHY to process the received RAR and check that the preamble matches what was sent by the gNB. It provides the timing advance and t-CRNTI. @param Mod_id Index of UE instance diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 85bb10290a..e0a0aa9ce4 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -288,6 +288,7 @@ int get_rnti_type(NR_UE_MAC_INST_t *mac, uint16_t rnti){ int8_t nr_ue_decode_mib(module_id_t module_id, int cc_id, uint8_t gNB_index, + void *phy_data, uint8_t extra_bits, // 8bits 38.212 c7.1.1 uint32_t ssb_length, uint32_t ssb_index, @@ -363,7 +364,8 @@ int8_t nr_ue_decode_mib(module_id_t module_id, ssb_subcarrier_offset, ssb_index, ssb_start_subcarrier, - mac->frequency_range); + mac->frequency_range, + phy_data); } else { NR_ServingCellConfigCommon_t *scc = mac->scc; diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 5284f7fc53..7f393cce6b 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -89,7 +89,8 @@ void fill_scheduled_response(nr_scheduled_response_t *scheduled_response, int cc_id, frame_t frame, int slot, - int thread_id){ + int thread_id, + void *phy_data){ scheduled_response->dl_config = dl_config; scheduled_response->ul_config = ul_config; @@ -99,6 +100,7 @@ void fill_scheduled_response(nr_scheduled_response_t *scheduled_response, scheduled_response->frame = frame; scheduled_response->slot = slot; scheduled_response->thread_id = thread_id; + scheduled_response->phy_data = phy_data; } @@ -922,7 +924,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in nr_ue_dcireq(&dcireq); //to be replaced with function pointer later mac->dl_config_request = dcireq.dl_config_req; - fill_scheduled_response(&scheduled_response, &dcireq.dl_config_req, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->thread_id); + fill_scheduled_response(&scheduled_response, &dcireq.dl_config_req, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->thread_id, dl_info->phy_data); if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) mac->if_module->scheduled_response(&scheduled_response); } @@ -938,7 +940,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in fill_dci_search_candidates(mac->ra.ss, rel15); dl_config->number_pdus = 1; LOG_D(MAC,"mac->cg %p: Calling fill_scheduled_response rnti %x, type0_pdcch, num_pdus %d\n",mac->cg,rel15->rnti,dl_config->number_pdus); - fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->thread_id); + fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, mod_id, cc_id, rx_frame, rx_slot, dl_info->thread_id, dl_info->phy_data); if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) mac->if_module->scheduled_response(&scheduled_response); } @@ -1037,7 +1039,7 @@ NR_UE_L2_STATE_t nr_ue_scheduler(nr_downlink_indication_t *dl_info, nr_uplink_in } pthread_mutex_unlock(&ul_config->mutex_ul_config); // avoid double lock - fill_scheduled_response(&scheduled_response, NULL, ul_config, &tx_req, mod_id, cc_id, frame_tx, slot_tx, ul_info->thread_id); + fill_scheduled_response(&scheduled_response, NULL, ul_config, &tx_req, mod_id, cc_id, frame_tx, slot_tx, ul_info->thread_id, NULL); if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL){ mac->if_module->scheduled_response(&scheduled_response); } @@ -2189,7 +2191,7 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in O_SR, O_ACK, O_CSI); LOG_D(NR_MAC,"Configuring pucch, is_common = %d\n",pucch->is_common); nr_scheduled_response_t scheduled_response; - fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, thread_id); + fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, thread_id, NULL); if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) mac->if_module->scheduled_response(&scheduled_response); } @@ -2339,7 +2341,7 @@ void nr_ue_prach_scheduler(module_id_t module_idP, frame_t frameP, sub_frame_t s } } // if format1 - fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, thread_id); + fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, thread_id, NULL); if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) mac->if_module->scheduled_response(&scheduled_response); } // is_nr_prach_slot @@ -2354,7 +2356,8 @@ void nr_ue_sib1_scheduler(module_id_t module_idP, uint8_t ssb_subcarrier_offset, uint32_t ssb_index, uint16_t ssb_start_subcarrier, - frequency_range_t frequency_range) { + frequency_range_t frequency_range, + void *phy_data) { NR_UE_MAC_INST_t *mac = get_mac_inst(module_idP); nr_scheduled_response_t scheduled_response; @@ -2402,7 +2405,7 @@ void nr_ue_sib1_scheduler(module_id_t module_idP, slot_s = mac->type0_PDCCH_CSS_config.n_c; } LOG_D(MAC,"Calling fill_scheduled_response, type0_pdcch, num_pdus %d\n",dl_config->number_pdus); - fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, module_idP, cc_id, frame_s, slot_s, 0); // TODO fix thread_id, for now assumed 0 + fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, module_idP, cc_id, frame_s, slot_s, 0, phy_data); // TODO fix thread_id, for now assumed 0 if (dl_config->number_pdus) { if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index c7b54950d7..d2a8032ace 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -1001,7 +1001,7 @@ void *nrue_standalone_pnf_task(void *context) // L2 Abstraction Layer int handle_bcch_bch(module_id_t module_id, int cc_id, - unsigned int gNB_index, uint8_t *pduP, + unsigned int gNB_index, void *phy_data, uint8_t *pduP, unsigned int additional_bits, uint32_t ssb_index, uint32_t ssb_length, uint16_t ssb_start_subcarrier, uint16_t cell_id){ @@ -1009,6 +1009,7 @@ int handle_bcch_bch(module_id_t module_id, int cc_id, return nr_ue_decode_mib(module_id, cc_id, gNB_index, + phy_data, additional_bits, ssb_length, // Lssb = 64 is not support ssb_index, @@ -1142,7 +1143,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ if (ret >= 0) { AssertFatal( nr_ue_if_module_inst[module_id] != NULL, "IF module is NULL!\n" ); AssertFatal( nr_ue_if_module_inst[module_id]->scheduled_response != NULL, "scheduled_response is NULL!\n" ); - fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, dl_info->module_id, dl_info->cc_id, dl_info->frame, dl_info->slot, dl_info->thread_id); + fill_scheduled_response(&scheduled_response, dl_config, NULL, NULL, dl_info->module_id, dl_info->cc_id, dl_info->frame, dl_info->slot, dl_info->thread_id, dl_info->phy_data); nr_ue_if_module_inst[module_id]->scheduled_response(&scheduled_response); } memset(def_dci_pdu_rel15, 0, sizeof(*def_dci_pdu_rel15)); @@ -1163,7 +1164,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ switch(dl_info->rx_ind->rx_indication_body[i].pdu_type){ case FAPI_NR_RX_PDU_TYPE_SSB: mac->ssb_rsrp_dBm = (dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.rsrp_dBm; - ret_mask |= (handle_bcch_bch(dl_info->module_id, dl_info->cc_id, dl_info->gNB_index, + ret_mask |= (handle_bcch_bch(dl_info->module_id, dl_info->cc_id, dl_info->gNB_index, dl_info->phy_data, (dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.pdu, (dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.additional_bits, (dl_info->rx_ind->rx_indication_body+i)->ssb_pdu.ssb_index, diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index 2a8a514769..fbc862eb8d 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -94,6 +94,9 @@ typedef struct { /// dci reception indication structure fapi_nr_dci_indication_t *dci_ind; + /// PHY specific data structure that can be passed on to L2 via nr_downlink_indication_t and + /// back to L1 via the nr_scheduled_response_t + void *phy_data; } nr_downlink_indication_t; @@ -147,6 +150,9 @@ typedef struct { /// data transmission request structure fapi_nr_tx_request_t *tx_request; + /// PHY data structure initially passed on to L2 via the nr_downlink_indication_t and + /// returned to L1 via nr_scheduled_response_t + void *phy_data; } nr_scheduled_response_t; typedef struct { @@ -255,6 +261,7 @@ int nr_ue_dcireq(nr_dcireq_t *dcireq); // TODO check /**\brief handle BCCH-BCH message from dl_indication + \param phy_data PHY structure to be filled in by the callee in the FAPI call (L1 caller -> indication to L2 -> FAPI call to L1 callee) \param pduP pointer to bch pdu \param additional_bits corresponding to 38.212 ch.7 \param ssb_index SSB index within 0 - (L_ssb-1) corresponding to 38.331 ch.13 parameter i @@ -263,6 +270,7 @@ int nr_ue_dcireq(nr_dcireq_t *dcireq); int handle_bcch_bch(module_id_t module_id, int cc_id, unsigned int gNB_index, + void *phy_data, uint8_t *pduP, unsigned int additional_bits, uint32_t ssb_index, From ce12e8270bb66d1419bc0d0d2ebe631814e39c56 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Thu, 24 Feb 2022 14:58:50 -0800 Subject: [PATCH 055/150] Code clean up --- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index f8b6033277..6ff4420639 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -1335,14 +1335,12 @@ void set_harq_status(NR_UE_MAC_INST_t *mac, current_harq->dl_frame = frame; current_harq->dl_slot = slot; if (get_softmodem_params()->emulate_l1) { - uint8_t scs = get_softmodem_params()->numerology; + int scs = get_softmodem_params()->numerology; int slots_per_frame = nr_slots_per_frame[scs]; - if (data_toul_fb + slot >= slots_per_frame) { + slot += data_toul_fb; + if (slot >= slots_per_frame) { frame = (frame + 1) % 1024; - slot = (data_toul_fb + slot) - slots_per_frame; - } - else { - slot = data_toul_fb + slot; + slot %= slots_per_frame; } } @@ -2031,7 +2029,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, sched_frame = current_harq->dl_frame; if (sched_slot>=slots_per_frame){ sched_slot %= slots_per_frame; - sched_frame = (sched_frame + 1) % 1024; + sched_frame = (sched_frame + 1) % 1024; } AssertFatal(sched_slot < slots_per_frame, "sched_slot was calculated incorrect %d\n", sched_slot); LOG_D(PHY,"HARQ pid %d is active for %d.%d (dl_slot %d, feedback_to_ul %d, is_common %d\n",dl_harq_pid, sched_frame,sched_slot,current_harq->dl_slot,current_harq->feedback_to_ul,current_harq->is_common); From 7aed0b6e76155e7a7aad19c04bc4e6fcb8a31e76 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Thu, 24 Feb 2022 16:01:51 -0800 Subject: [PATCH 056/150] These changes should not be checked in or merged to develop --- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c | 6 +++--- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c index e9f0a56b2c..a26bea0c92 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c @@ -1668,9 +1668,9 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra } } - while (rbStart > (BWPSize - rbSize)) { - LOG_E(NR_MAC, "%s(): cannot find free vrb_map for RNTI %04x so decrament rbStart %d!\n", __func__, ra->rnti, rbStart); - rbStart--; + if (rbStart > (BWPSize - rbSize)) { + LOG_E(NR_MAC, "%s(): cannot find free vrb_map for RNTI %04x!\n", __func__, ra->rnti); + return; } // Checking if the DCI allocation is feasible in current subframe diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c index 0304116253..92391ed1d5 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c @@ -444,7 +444,7 @@ int get_mcs_from_bler(module_id_t mod_id, int CC_id, frame_t frame, sub_frame_t if (bler_stats->rd2_bler > nrmac->dl_rd2_bler_threshold && old_mcs > 6) { new_mcs -= 2; } else if (bler_stats->rd2_bler < nrmac->dl_rd2_bler_threshold) {*/ - if (bler_stats->bler < nrmac->dl_bler_target_lower && old_mcs < nrmac->dl_max_mcs) // TODO: dtx > 9 needs to be updated to merge with OAI develop branch + if (bler_stats->bler < nrmac->dl_bler_target_lower && old_mcs < nrmac->dl_max_mcs && dtx > 9) new_mcs += 1; else if (bler_stats->bler > nrmac->dl_bler_target_upper && old_mcs > 6) new_mcs -= 1; From e96bb10289b9eed85eb8631ca0cc501ad097751d Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 25 Feb 2022 10:05:14 +0100 Subject: [PATCH 057/150] improving also pusch dmrs init --- openair1/PHY/INIT/nr_init.c | 7 +++--- .../NR_ESTIMATION/nr_ul_channel_estimation.c | 7 +++++- openair1/PHY/NR_REFSIG/nr_gold.c | 24 ++++++++----------- openair1/PHY/NR_REFSIG/nr_refsig.h | 2 +- openair1/PHY/defs_gNB.h | 1 + 5 files changed, 22 insertions(+), 19 deletions(-) diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index 95e7c011fb..e823267ce9 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -179,9 +179,10 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, } } - uint32_t Nid_pusch[2] = {cfg->cell_config.phy_cell_id.value,cfg->cell_config.phy_cell_id.value}; - LOG_D(PHY,"Initializing PUSCH DMRS Gold sequence with (%x,%x)\n",Nid_pusch[0],Nid_pusch[1]); - nr_gold_pusch(gNB, &Nid_pusch[0]); + for (int nscid=0; nscid<2; nscid++) { + gNB->pusch_gold_init[nscid] = cfg->cell_config.phy_cell_id.value; + nr_gold_pusch(gNB, nscid, gNB->pusch_gold_init[nscid]); + } //CSI RS init gNB->nr_gold_csi_rs = (uint32_t ***)malloc16(fp->slots_per_frame*sizeof(uint32_t **)); diff --git a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c index 9aaba7fb66..4a6f8ef9af 100644 --- a/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c +++ b/openair1/PHY/NR_ESTIMATION/nr_ul_channel_estimation.c @@ -165,6 +165,11 @@ int nr_pusch_channel_estimation(PHY_VARS_gNB *gNB, //------------------generate DMRS------------------// + if(pusch_pdu->ul_dmrs_scrambling_id != gNB->pusch_gold_init[pusch_pdu->scid]) { + gNB->pusch_gold_init[pusch_pdu->scid] = pusch_pdu->ul_dmrs_scrambling_id; + nr_gold_pusch(gNB, pusch_pdu->scid, pusch_pdu->ul_dmrs_scrambling_id); + } + // transform precoding = 1 means disabled if (pusch_pdu->transform_precoding == 1) { nr_pusch_dmrs_rx(gNB, Ns, gNB->nr_gold_pusch_dmrs[pusch_pdu->scid][Ns][symbol], &pilot[0], 1000, 0, nb_rb_pusch, @@ -1247,4 +1252,4 @@ int nr_srs_channel_estimation(PHY_VARS_gNB *gNB, #endif return 0; -} \ No newline at end of file +} diff --git a/openair1/PHY/NR_REFSIG/nr_gold.c b/openair1/PHY/NR_REFSIG/nr_gold.c index a844993689..dc1ceda5e5 100644 --- a/openair1/PHY/NR_REFSIG/nr_gold.c +++ b/openair1/PHY/NR_REFSIG/nr_gold.c @@ -100,27 +100,23 @@ void nr_init_pdsch_dmrs(PHY_VARS_gNB* gNB, uint8_t nscid, uint32_t Nid) } -void nr_gold_pusch(PHY_VARS_gNB* gNB, uint32_t *Nid) { +void nr_gold_pusch(PHY_VARS_gNB* gNB, int nscid, uint32_t nid) { unsigned char ns; unsigned int n,x1,x2; - int nscid, reset; - unsigned int nid; + int reset; NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; unsigned short l; - for (nscid=0; nscid<2; nscid++) { - nid = Nid[nscid]; - for (ns=0; nsslots_per_frame; ns++) { - for (l=0; lsymbols_per_slot; l++) { - reset = 1; - x2 = ((1<<17) * (fp->symbols_per_slot*ns+l+1) * ((nid<<1)+1) +((nid<<1)+nscid)); - LOG_D(PHY,"DMRS slot %d, symb %d x2 %x\n",ns,l,x2); + for (ns=0; nsslots_per_frame; ns++) { + for (l=0; lsymbols_per_slot; l++) { + reset = 1; + x2 = ((1<<17) * (fp->symbols_per_slot*ns+l+1) * ((nid<<1)+1) +((nid<<1)+nscid)); + LOG_D(PHY,"DMRS slot %d, symb %d x2 %x\n",ns,l,x2); - for (n=0; nnr_gold_pusch_dmrs[nscid][ns][l][n] = lte_gold_generic(&x1, &x2, reset); - reset = 0; - } + for (n=0; nnr_gold_pusch_dmrs[nscid][ns][l][n] = lte_gold_generic(&x1, &x2, reset); + reset = 0; } } } diff --git a/openair1/PHY/NR_REFSIG/nr_refsig.h b/openair1/PHY/NR_REFSIG/nr_refsig.h index a9efdb8ad0..df3dad1e59 100644 --- a/openair1/PHY/NR_REFSIG/nr_refsig.h +++ b/openair1/PHY/NR_REFSIG/nr_refsig.h @@ -40,7 +40,7 @@ void nr_init_pdcch_dmrs(PHY_VARS_gNB* gNB, uint32_t Nid); void nr_init_pdsch_dmrs(PHY_VARS_gNB* gNB, uint8_t nscid, uint32_t Nid); void nr_init_csi_rs(PHY_VARS_gNB* gNB, uint32_t Nid); -void nr_gold_pusch(PHY_VARS_gNB* gNB, uint32_t *Nid); +void nr_gold_pusch(PHY_VARS_gNB* gNB, int nscid, uint32_t nid); int nr_pusch_dmrs_rx(PHY_VARS_gNB *gNB, unsigned int Ns, diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index f549e9591b..d0f06174cf 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -850,6 +850,7 @@ typedef struct PHY_VARS_gNB_s { int csi_gold_init; int pdcch_gold_init; int pdsch_gold_init[2]; + int pusch_gold_init[2]; int pucch0_thres; int pusch_thres; From b9ae5db874bf591a9102ab6ff98acd277a2ffb35 Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 25 Feb 2022 12:09:42 +0100 Subject: [PATCH 058/150] gold init improvement at ue for dl channels --- .../nfapi/public_inc/fapi_nr_ue_interface.h | 3 +- openair1/PHY/NR_REFSIG/nr_gold_ue.c | 31 +++++------ openair1/PHY/NR_REFSIG/refsig_defs_ue.h | 3 +- .../nr_dl_channel_estimation.c | 22 ++++---- openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h | 3 ++ .../PHY/NR_UE_TRANSPORT/nr_initial_sync.c | 9 ++-- .../PHY/NR_UE_TRANSPORT/nr_transport_ue.h | 2 + openair1/PHY/defs_nr_UE.h | 2 +- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 2 + openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 3 ++ openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 51 ++++++++++++++----- 11 files changed, 82 insertions(+), 49 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h index 3b429a5e84..ce43e23c15 100644 --- a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h @@ -464,7 +464,8 @@ typedef struct { uint8_t nEpreRatioOfPDSCHToPTRS; /// MCS table for this DLSCH uint8_t mcs_table; - + uint8_t nscid; + uint16_t dlDmrsScramblingId; uint16_t pduBitmap; } fapi_nr_dl_config_dlsch_pdu_rel15_t; diff --git a/openair1/PHY/NR_REFSIG/nr_gold_ue.c b/openair1/PHY/NR_REFSIG/nr_gold_ue.c index 623b86edfb..6c48cf1b73 100644 --- a/openair1/PHY/NR_REFSIG/nr_gold_ue.c +++ b/openair1/PHY/NR_REFSIG/nr_gold_ue.c @@ -75,33 +75,28 @@ void nr_gold_pdcch(PHY_VARS_NR_UE* ue, } void nr_gold_pdsch(PHY_VARS_NR_UE* ue, - unsigned short *n_idDMRS) + int nscid, + uint32_t nid) { - unsigned char l; - unsigned int n,x1,x2,x2tmp0,ns; - int nscid; - unsigned int nid; + + unsigned int x1,x2,x2tmp0; uint8_t reset; /// to be updated from higher layer //unsigned short lbar = 0; - for (nscid=0; nscid<2; nscid++) { - for (ns=0; nsframe_parms.slots_per_frame; ns++) { + for (int ns=0; nsframe_parms.slots_per_frame; ns++) { - nid = n_idDMRS[nscid]; + for (int l=0; lframe_parms.symbols_per_slot; l++) { - for (l=0; lframe_parms.symbols_per_slot; l++) { + reset = 1; + x2tmp0 = ((ue->frame_parms.symbols_per_slot*ns+l+1)*((nid<<1)+1))<<17; + x2 = (x2tmp0+(nid<<1)+nscid)%(1<<31); //cinit + LOG_D(PHY,"UE DMRS slot %d, symb %d, x2 %x, nscid %d\n",ns,l,x2,nscid); - reset = 1; - x2tmp0 = ((ue->frame_parms.symbols_per_slot*ns+l+1)*((nid<<1)+1))<<17; - x2 = (x2tmp0+(nid<<1)+nscid)%(1<<31); //cinit - LOG_D(PHY,"UE DMRS slot %d, symb %d, x2 %x, nscid %d\n",ns,l,x2,nscid); - - for (n=0; nnr_gold_pdsch[0][ns][l][nscid][n] = lte_gold_generic(&x1, &x2, reset); - reset = 0; - } + for (int n=0; nnr_gold_pdsch[0][ns][l][nscid][n] = lte_gold_generic(&x1, &x2, reset); + reset = 0; } } } diff --git a/openair1/PHY/NR_REFSIG/refsig_defs_ue.h b/openair1/PHY/NR_REFSIG/refsig_defs_ue.h index 1fca2be2a1..db0cb674f7 100644 --- a/openair1/PHY/NR_REFSIG/refsig_defs_ue.h +++ b/openair1/PHY/NR_REFSIG/refsig_defs_ue.h @@ -61,7 +61,8 @@ void nr_gold_pdcch(PHY_VARS_NR_UE* ue, unsigned short n_idDMRS); void nr_gold_pdsch(PHY_VARS_NR_UE* ue, - unsigned short *n_idDMRS); + int nscid, + uint32_t nid); void nr_init_pusch_dmrs(PHY_VARS_NR_UE* ue, uint16_t *N_n_scid, diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c index 30eae2d30f..2387ae35ea 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c @@ -466,6 +466,7 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, uint8_t gNB_id, unsigned char Ns, unsigned char symbol, + unsigned short scrambling_id, unsigned short coreset_start_subcarrier, unsigned short nb_rb_coreset) { @@ -493,13 +494,11 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, fm = filt16a_m1; fr = filt16a_r1; - // checking if re-initialization of scrambling IDs is needed (should be done here but scrambling ID for PDCCH is not taken from RRC) -/* if (( != ue->scramblingID_pdcch){ - ue->scramblingID_pdcch=; - nr_gold_pdsch(ue,ue->scramblingID_pdcch); - }*/ - + if (scrambling_id != ue->scramblingID_pdcch){ + ue->scramblingID_pdcch = scrambling_id; + nr_gold_pdcch(ue,ue->scramblingID_pdcch); + } // generate pilot int pilot[nb_rb_coreset * 3] __attribute__((aligned(16))); @@ -641,6 +640,8 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, unsigned char Ns, unsigned short p, unsigned char symbol, + unsigned char nscid, + unsigned short scrambling_id, unsigned short BWPStart, unsigned short bwp_start_subcarrier, unsigned short nb_rb_pdsch) @@ -682,11 +683,10 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, int8_t delta = get_delta(p, config_type); // checking if re-initialization of scrambling IDs is needed - /*if ((XXX.scramblingID0 != ue->scramblingID[0]) || (XXX.scramblingID1 != ue->scramblingID[1])){ - ue->scramblingID[0] = XXX.scramblingID0; - ue->scramblingID[1] = XXX.scramblingID1; - nr_gold_pdsch(ue,ue->scramblingID); - }*/ + if (scrambling_id != ue->scramblingID_dlsch[nscid]){ + ue->scramblingID_dlsch[nscid] = scrambling_id; + nr_gold_pdsch(ue, nscid, scrambling_id); + } nr_pdsch_dmrs_rx(ue, Ns, ue->nr_gold_pdsch[gNB_id][Ns][symbol][0], &pilot[0], 1000+p, 0, nb_rb_pdsch+rb_offset, config_type); diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h index c5330ce2f2..06394eb029 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_estimation.h @@ -44,6 +44,7 @@ int nr_pdcch_channel_estimation(PHY_VARS_NR_UE *ue, uint8_t gNB_id, unsigned char Ns, unsigned char symbol, + unsigned short scrambling_id, unsigned short coreset_start_subcarrier, unsigned short nb_rb_coreset); @@ -71,6 +72,8 @@ int nr_pdsch_channel_estimation(PHY_VARS_NR_UE *ue, unsigned char Ns, unsigned short p, unsigned char symbol, + unsigned char nscid, + unsigned short scrambling_id, unsigned short BWPStart, unsigned short bwp_start_subcarrier, unsigned short nb_rb_pdsch); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c index 203be1bd24..dd7a2144e0 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c @@ -310,10 +310,10 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, nr_gold_pdcch(ue,fp->Nid_cell); // compute the scrambling IDs for PDSCH DMRS - for (int i=0; i<2; i++) - ue->scramblingID[i]=fp->Nid_cell; - - nr_gold_pdsch(ue,ue->scramblingID); + for (int i=0; i<2; i++) { + ue->scramblingID_dlsch[i]=fp->Nid_cell; + nr_gold_pdsch(ue, i, ue->scramblingID_dlsch[i]); + } // initialize the pusch dmrs uint16_t N_n_scid[2] = {fp->Nid_cell,fp->Nid_cell}; @@ -509,6 +509,7 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, 0, pdcch_vars->slot, l, + fp->Nid_cell, fp->first_carrier_offset+(pdcch_vars->pdcch_config[n_ss].BWPStart + coreset_start_rb)*12, coreset_nb_rb); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h index 9b9f1add6e..0cd2f33b0c 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h @@ -303,6 +303,8 @@ typedef struct { uint16_t ptrs_symbols; // PTRS symbol index, to be updated every PTRS symbol within a slot. uint8_t ptrs_symbol_index; + uint8_t nscid; + uint16_t dlDmrsScramblingId; /// PDU BITMAP uint16_t pduBitmap; } NR_DL_UE_HARQ_t; diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index bca956bf75..b0568ebff5 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -859,7 +859,7 @@ typedef struct { uint32_t ****nr_gold_pdsch[NUMBER_OF_CONNECTED_eNB_MAX]; // Scrambling IDs used in PDSCH DMRS - uint16_t scramblingID[2]; + uint16_t scramblingID_dlsch[2]; /// PDCCH DMRS uint32_t ***nr_gold_pdcch[NUMBER_OF_CONNECTED_eNB_MAX]; diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 4f4757ec5a..2326b3518a 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -286,6 +286,8 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ dlsch0_harq->n_dmrs_cdm_groups = dlsch_config_pdu->n_dmrs_cdm_groups; dlsch0_harq->mcs = dlsch_config_pdu->mcs; dlsch0_harq->rvidx = dlsch_config_pdu->rv; + dlsch0_harq->nscid = dlsch_config_pdu->nscid; + dlsch0_harq->dlDmrsScramblingId = dlsch_config_pdu->dlDmrsScramblingId; dlsch0->g_pucch = dlsch_config_pdu->accumulated_delta_PUCCH; //get nrOfLayers from DCI info uint8_t Nl = 0; diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index 97a7e2e489..d35fbf3b97 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -574,6 +574,8 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int gNB_ nr_slot_rx, aatx /*p*/, m, + dlsch0_harq->nscid, + dlsch0_harq->dlDmrsScramblingId, BWPStart, ue->frame_parms.first_carrier_offset+(BWPStart + pdsch_start_rb)*12, pdsch_nb_rb); @@ -1470,6 +1472,7 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, gNB_id, nr_slot_rx, l, + pdcch_vars->pdcch_config[n_ss].coreset.pdcch_dmrs_scrambling_id, fp->first_carrier_offset+(pdcch_vars->pdcch_config[n_ss].BWPStart + coreset_start_rb)*12, coreset_nb_rb); diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 85bb10290a..d0f5c38d66 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -281,7 +281,6 @@ int get_rnti_type(NR_UE_MAC_INST_t *mac, uint16_t rnti){ LOG_D(MAC, "In %s: returning rnti_type %s \n", __FUNCTION__, rnti_types[rnti_type]); return rnti_type; - } @@ -866,6 +865,16 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr } int mappingtype = pdsch_TimeDomainAllocationList ? pdsch_TimeDomainAllocationList->list.array[dci->time_domain_assignment.val]->mappingType : ((dlsch_config_pdu_1_0->start_symbol <= 3)? typeA: typeB); + struct NR_DMRS_DownlinkConfig *dl_dmrs_config = (mappingtype == typeA) ? + mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup : + mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup; + + dlsch_config_pdu_1_0->nscid = 0; + if(mac->DLbwp[0] && dl_dmrs_config->scramblingID0) + dlsch_config_pdu_1_0->dlDmrsScramblingId = *dl_dmrs_config->scramblingID0; + else + dlsch_config_pdu_1_0->dlDmrsScramblingId = mac->physCellId; + /* dmrs symbol positions*/ dlsch_config_pdu_1_0->dlDmrsSymbPos = fill_dmrs_mask(pdsch_config, (get_softmodem_params()->nsa) ? mac->scc->dmrs_TypeA_Position : mac->mib->dmrs_TypeA_Position, @@ -873,7 +882,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr dlsch_config_pdu_1_0->start_symbol, mappingtype); dlsch_config_pdu_1_0->dmrsConfigType = (mac->DLbwp[0] != NULL) ? - (mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type == NULL ? 0 : 1) : 0; + (dl_dmrs_config->dmrs_Type == NULL ? 0 : 1) : 0; /* number of DM-RS CDM groups without data according to subclause 5.1.6.2 of 3GPP TS 38.214 version 15.9.0 Release 15 */ if (dlsch_config_pdu_1_0->number_symbols == 2) dlsch_config_pdu_1_0->n_dmrs_cdm_groups = 1; @@ -1062,6 +1071,29 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr int mappingtype = pdsch_TimeDomainAllocationList ? pdsch_TimeDomainAllocationList->list.array[dci->time_domain_assignment.val]->mappingType : ((dlsch_config_pdu_1_1->start_symbol <= 3)? typeA: typeB); + struct NR_DMRS_DownlinkConfig *dl_dmrs_config = (mappingtype == typeA) ? + pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup : + pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup; + + switch (dci->dmrs_sequence_initialization.val) { + case 0: + dlsch_config_pdu_1_1->nscid = 0; + if(dl_dmrs_config->scramblingID0) + dlsch_config_pdu_1_1->dlDmrsScramblingId = *dl_dmrs_config->scramblingID0; + else + dlsch_config_pdu_1_1->dlDmrsScramblingId = mac->physCellId; + break; + case 1: + dlsch_config_pdu_1_1->nscid = 1; + if(dl_dmrs_config->scramblingID1) + dlsch_config_pdu_1_1->dlDmrsScramblingId = *dl_dmrs_config->scramblingID1; + else + dlsch_config_pdu_1_1->dlDmrsScramblingId = mac->physCellId; + break; + default: + AssertFatal(1==0,"Invalid dmrs sequence initialization value\n"); + } + /* dmrs symbol positions*/ dlsch_config_pdu_1_1->dlDmrsSymbPos = fill_dmrs_mask(pdsch_Config, mac->scc? mac->scc->dmrs_TypeA_Position:mac->mib->dmrs_TypeA_Position, @@ -1069,7 +1101,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr dlsch_config_pdu_1_1->start_symbol, mappingtype); - dlsch_config_pdu_1_1->dmrsConfigType = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type == NULL ? NFAPI_NR_DMRS_TYPE1 : NFAPI_NR_DMRS_TYPE2; + dlsch_config_pdu_1_1->dmrsConfigType = dl_dmrs_config->dmrs_Type == NULL ? NFAPI_NR_DMRS_TYPE1 : NFAPI_NR_DMRS_TYPE2; /* TODO: fix number of DM-RS CDM groups without data according to subclause 5.1.6.2 of 3GPP TS 38.214, using tables 7.3.1.2.2-1, 7.3.1.2.2-2, 7.3.1.2.2-3, 7.3.1.2.2-4 of 3GPP TS 38.212 */ @@ -1130,16 +1162,9 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr /* ANTENNA_PORTS */ uint8_t n_codewords = 1; // FIXME!!! - long *max_length = NULL; - long *dmrs_type = NULL; - if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA) { - max_length = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->maxLength; - dmrs_type = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_Type; - } - if (pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB) { - max_length = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->maxLength; - dmrs_type = pdsch_Config->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup->dmrs_Type; - } + long *max_length = dl_dmrs_config->maxLength; + long *dmrs_type = dl_dmrs_config->dmrs_Type; + if ((dmrs_type == NULL) && (max_length == NULL)){ // Table 7.3.1.2.2-1: Antenna port(s) (1000 + DMRS port), dmrs-Type=1, maxLength=1 dlsch_config_pdu_1_1->n_dmrs_cdm_groups = table_7_3_2_3_3_1[dci->antenna_ports.val][0]; From 34ab52b6c3227026dadbc14dd63fddd663887939 Mon Sep 17 00:00:00 2001 From: Thomas Schlichter Date: Fri, 25 Feb 2022 12:57:17 +0100 Subject: [PATCH 059/150] fix scrambling initialization in nr_dlsim and nr_ulsim --- openair1/SIMULATION/NR_PHY/dlsim.c | 11 ++++++++++- openair1/SIMULATION/NR_PHY/ulsim.c | 19 ++++--------------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index b8f51f8e95..fb99c50400 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -924,7 +924,16 @@ int main(int argc, char **argv) init_nr_ue_transport(UE,0); nr_gold_pbch(UE); - nr_gold_pdcch(UE,0); + + // compute the scramblingID_pdcch and the gold pdcch + UE->scramblingID_pdcch = frame_parms->Nid_cell; + nr_gold_pdcch(UE, frame_parms->Nid_cell); + + // compute the scrambling IDs for PDSCH DMRS + for (int i = 0; i < 2; i++) + UE->scramblingID[i] = frame_parms->Nid_cell; + + nr_gold_pdsch(UE, UE->scramblingID); nr_l2_init_ue(NULL); UE_mac = get_mac_inst(0); diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index c71f52c41a..56f5d2dd71 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -755,28 +755,17 @@ int main(int argc, char **argv) PHY_vars_UE_g[0][0] = UE; memcpy(&UE->frame_parms, frame_parms, sizeof(NR_DL_FRAME_PARMS)); - //phy_init_nr_top(frame_parms); if (init_nr_ue_signal(UE, 1, 0) != 0) { printf("Error at UE NR initialisation\n"); exit(-1); } - //nr_init_frame_parms_ue(&UE->frame_parms); init_nr_ue_transport(UE, 0); - /* - for (int sf = 0; sf < 2; sf++) { - for (i = 0; i < 2; i++) { - - UE->ulsch[sf][0][i] = new_nr_ue_ulsch(N_RB_UL, 8, 0); - - if (!UE->ulsch[sf][0][i]) { - printf("Can't get ue ulsch structures\n"); - exit(-1); - } - } - } - */ + // initialize the pusch dmrs + uint16_t N_n_scid[2] = {frame_parms->Nid_cell,frame_parms->Nid_cell}; + int n_scid = 0; // This quantity is indicated by higher layer parameter dmrs-SeqInitialization + nr_init_pusch_dmrs(UE, N_n_scid, n_scid); //Configure UE NR_UE_RRC_INST_t rrcue; From 15565c965976b78f1d4dd655688d78ec1636016b Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 25 Feb 2022 14:49:31 +0100 Subject: [PATCH 060/150] gold init improvement at ue for pusch --- openair1/PHY/NR_REFSIG/nr_gold_ue.c | 4 ++-- openair1/PHY/NR_REFSIG/refsig_defs_ue.h | 2 +- openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c | 8 +++++--- openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c | 6 ++++++ openair1/PHY/defs_nr_UE.h | 3 +++ openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 13 +++++++++++++ 6 files changed, 30 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/NR_REFSIG/nr_gold_ue.c b/openair1/PHY/NR_REFSIG/nr_gold_ue.c index 6c48cf1b73..abcdae5a33 100644 --- a/openair1/PHY/NR_REFSIG/nr_gold_ue.c +++ b/openair1/PHY/NR_REFSIG/nr_gold_ue.c @@ -103,7 +103,7 @@ void nr_gold_pdsch(PHY_VARS_NR_UE* ue, } void nr_init_pusch_dmrs(PHY_VARS_NR_UE* ue, - uint16_t *N_n_scid, + uint16_t N_n_scid, uint8_t n_scid) { uint32_t x1, x2, n; @@ -116,7 +116,7 @@ void nr_init_pusch_dmrs(PHY_VARS_NR_UE* ue, for (symb=0; symbsymbols_per_slot; symb++) { reset = 1; - x2 = ((1<<17) * (fp->symbols_per_slot*slot+symb+1) * ((N_n_scid[n_scid]<<1)+1) +((N_n_scid[n_scid]<<1)+n_scid)); + x2 = ((1<<17) * (fp->symbols_per_slot*slot+symb+1) * ((N_n_scid<<1)+1) +((N_n_scid<<1)+n_scid)); for (n=0; nNid_cell,fp->Nid_cell}; - int n_scid = 0; // This quantity is indicated by higher layer parameter dmrs-SeqInitialization - nr_init_pusch_dmrs(ue, N_n_scid, n_scid); + for (int i=0; i<2; i++) { + ue->scramblingID_ulsch[i]=fp->Nid_cell; + nr_init_pusch_dmrs(ue, ue->scramblingID_ulsch[i], i); + } + // we also need to take into account the shift by samples_per_frame in case the if is true if (ue->ssb_offset < sync_pos_frame){ diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c index 41cf9c2ffa..e019077efd 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c @@ -32,6 +32,7 @@ #include #include "PHY/NR_REFSIG/dmrs_nr.h" #include "PHY/NR_REFSIG/ptrs_nr.h" +#include "PHY/NR_REFSIG/refsig_defs_ue.h" #include "PHY/NR_UE_TRANSPORT/nr_transport_ue.h" #include "PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h" #include "PHY/MODULATION/nr_modulation.h" @@ -220,6 +221,11 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, /////////////////////////DMRS Modulation///////////////////////// /////////// + if(pusch_pdu->ul_dmrs_scrambling_id != UE->scramblingID_ulsch[pusch_pdu->scid]) { + UE->scramblingID_ulsch[pusch_pdu->scid] = pusch_pdu->ul_dmrs_scrambling_id; + nr_init_pusch_dmrs(UE, pusch_pdu->scid, pusch_pdu->ul_dmrs_scrambling_id); + } + uint32_t ***pusch_dmrs = UE->nr_gold_pusch_dmrs[slot]; uint16_t n_dmrs = (pusch_pdu->bwp_start + start_rb + nb_rb)*((dmrs_type == pusch_dmrs_type1) ? 6:4); int16_t mod_dmrs[n_dmrs<<1] __attribute((aligned(16))); diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index b0568ebff5..e2777cfd4b 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -861,6 +861,9 @@ typedef struct { // Scrambling IDs used in PDSCH DMRS uint16_t scramblingID_dlsch[2]; + // Scrambling IDs used in PUSCH DMRS + uint16_t scramblingID_ulsch[2]; + /// PDCCH DMRS uint32_t ***nr_gold_pdcch[NUMBER_OF_CONNECTED_eNB_MAX]; diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 44bd8f0ce3..eaafbebbbf 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -732,6 +732,11 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, ? pusch_Config->dmrs_UplinkForPUSCH_MappingTypeA->choice.setup : pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup; } + pusch_config_pdu->scid = 0; + pusch_config_pdu->ul_dmrs_scrambling_id = mac->physCellId; + if(*dci_format == NR_UL_DCI_FORMAT_0_1) + pusch_config_pdu->scid = dci->dmrs_sequence_initialization.val; + /* TRANSFORM PRECODING ------------------------------------------------------------------------------------------*/ if (pusch_config_pdu->transform_precoding == NR_PUSCH_Config__transformPrecoder_enabled) { @@ -757,6 +762,14 @@ int nr_config_pusch_pdu(NR_UE_MAC_INST_t *mac, LOG_D(NR_MAC,"TRANSFORM PRECODING IS ENABLED. CDM groups: %d, U: %d \n", pusch_config_pdu->num_dmrs_cdm_grps_no_data, pusch_config_pdu->dfts_ofdm.low_papr_group_number); } + else { + if (pusch_config_pdu->scid == 0 && + NR_DMRS_ulconfig->transformPrecodingDisabled->scramblingID0) + pusch_config_pdu->ul_dmrs_scrambling_id = *NR_DMRS_ulconfig->transformPrecodingDisabled->scramblingID0; + if (pusch_config_pdu->scid == 1 && + NR_DMRS_ulconfig->transformPrecodingDisabled->scramblingID1) + pusch_config_pdu->ul_dmrs_scrambling_id = *NR_DMRS_ulconfig->transformPrecodingDisabled->scramblingID1; + } /* TRANSFORM PRECODING --------------------------------------------------------------------------------------------------------*/ From 588e013d2ddd525b365ff091dbc1ca7fbe95417d Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 25 Feb 2022 18:23:39 +0100 Subject: [PATCH 061/150] fix physim compilation --- openair1/SIMULATION/NR_PHY/dlsim.c | 8 ++++---- openair1/SIMULATION/NR_PHY/ulsim.c | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index fb99c50400..4b6045b93b 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -930,10 +930,10 @@ int main(int argc, char **argv) nr_gold_pdcch(UE, frame_parms->Nid_cell); // compute the scrambling IDs for PDSCH DMRS - for (int i = 0; i < 2; i++) - UE->scramblingID[i] = frame_parms->Nid_cell; - - nr_gold_pdsch(UE, UE->scramblingID); + for (int i = 0; i < 2; i++) { + UE->scramblingID_dlsch[i] = frame_parms->Nid_cell; + nr_gold_pdsch(UE, i, UE->scramblingID_dlsch[i]); + } nr_l2_init_ue(NULL); UE_mac = get_mac_inst(0); diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index 56f5d2dd71..7e192ec8d8 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -762,10 +762,10 @@ int main(int argc, char **argv) init_nr_ue_transport(UE, 0); - // initialize the pusch dmrs - uint16_t N_n_scid[2] = {frame_parms->Nid_cell,frame_parms->Nid_cell}; - int n_scid = 0; // This quantity is indicated by higher layer parameter dmrs-SeqInitialization - nr_init_pusch_dmrs(UE, N_n_scid, n_scid); + for(int n_scid = 0; n_scid<2; n_scid++) { + UE->scramblingID_ulsch[n_scid] = frame_parms->Nid_cell; + nr_init_pusch_dmrs(UE, frame_parms->Nid_cell, n_scid); + } //Configure UE NR_UE_RRC_INST_t rrcue; From 7681feee071b49949c638fa4fb2efae1bd9965f0 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 1 Mar 2022 07:23:14 -0800 Subject: [PATCH 062/150] Removing "included fixes" from root dir README --- README.md | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/README.md b/README.md index 4f38f77e4e..dba0bbfb73 100644 --- a/README.md +++ b/README.md @@ -21,29 +21,6 @@ # OpenAirInterface License # -### Included Fixes: ### -- Ease of use of gprof and address sanitizer for debugging purposes -- Updated json files to allow for GDB, real-time debugging capabilities -- Updated logging features to minimally log only key connection milestones. This imroves scalability of multiple UEs. -- Updated logging to include time stamp for timing analysis -- Updated memory allocation procedures to correct size requirements -- Added debugging features to handle signal terminations -- nfapi.c pullarray8 fix invalid pointer math -- Overlapping destination and source memory in memcpy, so updated to memmove to check for this bug -- Advanced error checking mechanisms in critical pack and unpack functions -- Created option for CPU assignment to UE to improve scalability -- Added EPC integration to allow multiple individual UE entities to each have their USIM information parced by the executables -- Updated random value seeds to minimize probability of error in generation of random values -- Enables capability round robin scheduler if desired -- Enables capability real time scheduler if desired -- Added new standalone functions to the UE phy-layer (phy_stub_ue.c) to incorporate individual UE entities -- Updated sending and packing functions in UE (lte_ue.c) to incorporate new standalone changes -- Incorporated semaphores to control timing of incoming downlink packets -- Implemented new queuing system to handle message exchange from UE to eNB and vice versa -- Updated global value in nFAPI for size of subframe -- Updated global value to increase scalability in system - - # Where to Start # * [The implemented features](./doc/FEATURE_SET.md) From 241f00d17001b9590703f312cfdb8d13b1331943 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 1 Mar 2022 08:29:27 -0800 Subject: [PATCH 063/150] Adding min_rxtxtime = 6; to NSA gNB conf file --- .../conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf b/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf index 9b3f205a0f..d8485483d8 100644 --- a/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf +++ b/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf @@ -24,7 +24,7 @@ gNBs = ssb_SubcarrierOffset = 31; //0; pdsch_AntennaPorts = 1; pusch_AntennaPorts = 1; - + min_rxtxtime = 6; servingCellConfigCommon = ( { #spCellConfigCommon From 7683014c8035888f3fbcf7f78da96d6fdaac2421 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 1 Mar 2022 18:24:57 +0100 Subject: [PATCH 064/150] Fix nr_dlsim --- openair1/SIMULATION/NR_PHY/dlsim.c | 5 +++++ openair1/SIMULATION/NR_PHY/ulsim.c | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index cfc7cb00b0..6b50daac2a 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -87,6 +87,9 @@ PHY_VARS_NR_UE *UE; RAN_CONTEXT_t RC; int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; +/* dummy constant */ +NR_UE_RRC_INST_t *NR_UE_rrc_inst; + double cpuf; char *uecap_file; @@ -239,6 +242,8 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, return 0; } +nr_bler_struct nr_bler_data[NR_NUM_MCS]; + void processSlotTX(void *arg) {} //nFAPI P7 dummy functions to avoid linking errors diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index aebaf42483..a685ef3dc9 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -93,6 +93,9 @@ THREAD_STRUCT thread_struct; nfapi_ue_release_request_body_t release_rntis; uint32_t N_RB_DL = 106; +/* dummy constant */ +NR_UE_RRC_INST_t *NR_UE_rrc_inst; + //Fixme: Uniq dirty DU instance, by global var, datamodel need better management instance_t DUuniqInstance=0; instance_t CUuniqInstance=0; @@ -221,6 +224,8 @@ int DU_send_INITIAL_UL_RRC_MESSAGE_TRANSFER(module_id_t module_idP, return 0; } +nr_bler_struct nr_bler_data[NR_NUM_MCS]; + //nFAPI P7 dummy functions int oai_nfapi_dl_tti_req(nfapi_nr_dl_tti_request_t *dl_config_req) { return(0); } From f2314ff6a746ebad97b385ccc06bdc0ea810b972 Mon Sep 17 00:00:00 2001 From: francescomani Date: Thu, 3 Mar 2022 11:29:06 +0100 Subject: [PATCH 065/150] logs --- openair1/PHY/NR_REFSIG/nr_gold_ue.c | 2 +- openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/NR_REFSIG/nr_gold_ue.c b/openair1/PHY/NR_REFSIG/nr_gold_ue.c index abcdae5a33..beee2ed862 100644 --- a/openair1/PHY/NR_REFSIG/nr_gold_ue.c +++ b/openair1/PHY/NR_REFSIG/nr_gold_ue.c @@ -117,7 +117,7 @@ void nr_init_pusch_dmrs(PHY_VARS_NR_UE* ue, reset = 1; x2 = ((1<<17) * (fp->symbols_per_slot*slot+symb+1) * ((N_n_scid<<1)+1) +((N_n_scid<<1)+n_scid)); - + LOG_D(PHY,"DMRS slot %d, symb %d x2 %x\n",slot,symb,x2); for (n=0; n Date: Thu, 3 Mar 2022 13:55:02 +0100 Subject: [PATCH 066/150] bugfix for pusch --- openair1/PHY/INIT/nr_init_ue.c | 4 ++-- openair1/PHY/NR_REFSIG/nr_gold_ue.c | 8 +++----- openair1/PHY/NR_UE_TRANSPORT/nr_ulsch_ue.c | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index a27c541c80..af06935e52 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -242,10 +242,10 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) AssertFatal(pusch_dmrs[slot]!=NULL, "init_nr_ue_signal: pusch_dmrs for slot %d - malloc failed\n", slot); for (symb=0; symbsymbols_per_slot; symb++) { - pusch_dmrs[slot][symb] = (uint32_t **)malloc16(NR_MAX_NB_CODEWORDS*sizeof(uint32_t *)); + pusch_dmrs[slot][symb] = (uint32_t **)malloc16(2*sizeof(uint32_t *)); AssertFatal(pusch_dmrs[slot][symb]!=NULL, "init_nr_ue_signal: pusch_dmrs for slot %d symbol %d - malloc failed\n", slot, symb); - for (q=0; qframe_parms; uint32_t ****pusch_dmrs = ue->nr_gold_pusch_dmrs; @@ -119,12 +119,10 @@ void nr_init_pusch_dmrs(PHY_VARS_NR_UE* ue, x2 = ((1<<17) * (fp->symbols_per_slot*slot+symb+1) * ((N_n_scid<<1)+1) +((N_n_scid<<1)+n_scid)); LOG_D(PHY,"DMRS slot %d, symb %d x2 %x\n",slot,symb,x2); for (n=0; nscid], n_dmrs*2, DMRS_MOD_ORDER, mod_dmrs); // currently only codeword 0 is modulated. Qm = 2 as DMRS is QPSK modulated } else { dmrs_idx = 0; @@ -408,7 +408,7 @@ void nr_ue_ulsch_procedures(PHY_VARS_NR_UE *UE, if(is_ptrs_symbol(l, ulsch_ue->ptrs_symbols)) { is_ptrs_sym = 1; - nr_modulation(pusch_dmrs[l][0], nb_rb, DMRS_MOD_ORDER, mod_ptrs); + nr_modulation(pusch_dmrs[l][pusch_pdu->scid], nb_rb, DMRS_MOD_ORDER, mod_ptrs); } } From f9cebbdebbb48e7c8f0caf42fc2ba694dc68b31c Mon Sep 17 00:00:00 2001 From: francescomani Date: Thu, 3 Mar 2022 18:34:09 +0100 Subject: [PATCH 067/150] bugfix for dl_dmrs_config in SA --- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 8a9ea85f15..d2fd64667a 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -865,12 +865,14 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr } int mappingtype = pdsch_TimeDomainAllocationList ? pdsch_TimeDomainAllocationList->list.array[dci->time_domain_assignment.val]->mappingType : ((dlsch_config_pdu_1_0->start_symbol <= 3)? typeA: typeB); - struct NR_DMRS_DownlinkConfig *dl_dmrs_config = (mappingtype == typeA) ? - mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup : - mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup; + struct NR_DMRS_DownlinkConfig *dl_dmrs_config = NULL; + if(mac->DLbwp[0]) + dl_dmrs_config = (mappingtype == typeA) ? + mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup : + mac->DLbwp[0]->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeB->choice.setup; dlsch_config_pdu_1_0->nscid = 0; - if(mac->DLbwp[0] && dl_dmrs_config->scramblingID0) + if(dl_dmrs_config && dl_dmrs_config->scramblingID0) dlsch_config_pdu_1_0->dlDmrsScramblingId = *dl_dmrs_config->scramblingID0; else dlsch_config_pdu_1_0->dlDmrsScramblingId = mac->physCellId; @@ -881,7 +883,7 @@ int8_t nr_ue_process_dci(module_id_t module_id, int cc_id, uint8_t gNB_index, fr dlsch_config_pdu_1_0->number_symbols, dlsch_config_pdu_1_0->start_symbol, mappingtype, 1); - dlsch_config_pdu_1_0->dmrsConfigType = (mac->DLbwp[0] != NULL) ? + dlsch_config_pdu_1_0->dmrsConfigType = (dl_dmrs_config != NULL) ? (dl_dmrs_config->dmrs_Type == NULL ? 0 : 1) : 0; /* number of DM-RS CDM groups without data according to subclause 5.1.6.2 of 3GPP TS 38.214 version 15.9.0 Release 15 */ From 7e0757fb488ebad535ae350acf7ab827194deec7 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Thu, 3 Mar 2022 15:46:54 -0800 Subject: [PATCH 068/150] Addressing MR review comments - OPENAIR_DIR replaced with AWGN_RESULTS_DIR - Copying UCI_2_3_4 PDU with rx'd PDU from proxy - Reverting hacks/whitespace changes --- executables/nr-uesoftmodem.c | 47 ++++++++----------- nfapi/oai_integration/nfapi_vnf.c | 3 +- oaienv | 1 + .../bler_tx1_chan18_nrx1_mcs28.csv | 21 +++++++++ .../LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c | 6 +-- 5 files changed, 45 insertions(+), 33 deletions(-) create mode 100644 openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/bler_tx1_chan18_nrx1_mcs28.csv diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index c1c64ef913..bbe10b3d6d 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -156,7 +156,7 @@ uint32_t N_RB_DL = 106; /* see file openair2/LAYER2/MAC/main.c for why abstraction_flag is needed * this is very hackish - find a proper solution */ -uint8_t abstraction_flag = 0; +uint8_t abstraction_flag=0; nr_bler_struct nr_bler_data[NR_NUM_MCS]; @@ -552,50 +552,43 @@ int main( int argc, char **argv ) { } // Read in each MCS file and build BLER-SINR-TB table -static void init_bler_table(void) -{ - const char *openair_dir = getenv("OPENAIR_DIR"); - if (!openair_dir) - { - LOG_E(MAC, "No $OPENAIR_DIR\n"); - abort(); +static void init_bler_table(void) { + memset(nr_bler_data, 0, sizeof(nr_bler_data)); + + const char *awgn_results_dir = getenv("AWGN_RESULTS_DIR"); + if (!awgn_results_dir) { + LOG_W(NR_MAC, "No $AWGN_RESULTS_DIR\n"); + return; } - for (unsigned int i = 0; i < NR_NUM_MCS; i++) - { + for (unsigned int i = 0; i < NR_NUM_MCS; i++) { char fName[1024]; - snprintf(fName, sizeof(fName), "%s/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/mcs%d_awgn_5G.csv", openair_dir, i); + snprintf(fName, sizeof(fName), "%s/mcs%d_awgn_5G.csv", awgn_results_dir, i); FILE *pFile = fopen(fName, "r"); - if (!pFile) - { - LOG_E(MAC, "Bler File ERROR! - fopen(), file: %s\n", fName); - abort(); + if (!pFile) { + LOG_E(NR_MAC, "%s: open %s: %s\n", __func__, fName, strerror(errno)); + continue; } size_t bufSize = 1024; char * line = NULL; char * token; char * temp = NULL; int nlines = 0; - while (getline(&line, &bufSize, pFile) > 0) - { - if (!strncmp(line, "SNR", 3)) - { + while (getline(&line, &bufSize, pFile) > 0) { + if (!strncmp(line, "SNR", 3)) { continue; } - if (nlines > NUM_SINR) - { - LOG_E(MAC, "BLER FILE ERROR - num lines greater than expected - file: %s\n", fName); + if (nlines > NUM_SINR) { + LOG_E(NR_MAC, "BLER FILE ERROR - num lines greater than expected - file: %s\n", fName); abort(); } token = strtok_r(line, ";", &temp); int ncols = 0; - while (token != NULL) - { - if (ncols > NUM_BLER_COL) - { - LOG_E(MAC, "BLER FILE ERROR - num of cols greater than expected\n"); + while (token != NULL) { + if (ncols > NUM_BLER_COL) { + LOG_E(NR_MAC, "BLER FILE ERROR - num of cols greater than expected\n"); abort(); } diff --git a/nfapi/oai_integration/nfapi_vnf.c b/nfapi/oai_integration/nfapi_vnf.c index 56ad438e0e..d19d2db597 100644 --- a/nfapi/oai_integration/nfapi_vnf.c +++ b/nfapi/oai_integration/nfapi_vnf.c @@ -787,8 +787,8 @@ int phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) if (ind_pdu->harq) { uci_ind_pdu->harq = CALLOC(1, sizeof(*uci_ind_pdu->harq)); AssertFatal(uci_ind_pdu->harq != NULL, "Memory not allocated for uci_ind_pdu->harq in phy_nr_uci_indication."); - *uci_ind_pdu->harq = *ind_pdu->harq; + uci_ind_pdu->harq->harq_list = CALLOC(uci_ind_pdu->harq->num_harq, sizeof(*uci_ind_pdu->harq->harq_list)); AssertFatal(uci_ind_pdu->harq->harq_list != NULL, "Memory not allocated for uci_ind_pdu->harq->harq_list in phy_nr_uci_indication."); for (int j = 0; j < uci_ind_pdu->harq->num_harq; j++) @@ -800,6 +800,7 @@ int phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) case NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE: { nfapi_nr_uci_pucch_pdu_format_2_3_4_t *uci_ind_pdu = &uci_ind->uci_list[i].pucch_pdu_format_2_3_4; nfapi_nr_uci_pucch_pdu_format_2_3_4_t *ind_pdu = &ind->uci_list[i].pucch_pdu_format_2_3_4; + *uci_ind_pdu = *ind_pdu; if (ind_pdu->harq.harq_payload) { uci_ind_pdu->harq.harq_payload = CALLOC(1, sizeof(*uci_ind_pdu->harq.harq_payload)); AssertFatal(uci_ind_pdu->harq.harq_payload != NULL, "Memory not allocated for uci_ind_pdu->harq.harq_payload in phy_nr_uci_indication."); diff --git a/oaienv b/oaienv index f8ef707c12..bb24469703 100644 --- a/oaienv +++ b/oaienv @@ -1,6 +1,7 @@ export OPENAIR_HOME=$(pwd) export OPENAIR_DIR=$(pwd) +export AWGN_RESULTS_DIR=$OPENAIR_DIR/openair1/SIMULATION/NR_PHY/BLER_SIMULATIONS/AWGN/AWGN_results export OPENAIR1_DIR=$OPENAIR_HOME/openair1 export OPENAIR2_DIR=$OPENAIR_HOME/openair2 export OPENAIR3_DIR=$OPENAIR_HOME/openair3 diff --git a/openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/bler_tx1_chan18_nrx1_mcs28.csv b/openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/bler_tx1_chan18_nrx1_mcs28.csv new file mode 100644 index 0000000000..11771acc87 --- /dev/null +++ b/openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results/bler_tx1_chan18_nrx1_mcs28.csv @@ -0,0 +1,21 @@ +SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err +16.000000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0 +16.100000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0 +16.200000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0 +16.300000;27;15840;0.704000;5002;5002;0;0;0;0;0;0;0 +16.400000;27;15840;0.704000;4999;5002;0;0;0;0;0;0;0 +16.500000;27;15840;0.704000;4981;5002;0;0;0;0;0;0;0 +16.600000;27;15840;0.704000;4887;5002;0;0;0;0;0;0;0 +16.700000;27;15840;0.704000;4688;5002;0;0;0;0;0;0;0 +16.800000;27;15840;0.704000;4176;5002;0;0;0;0;0;0;0 +16.900000;27;15840;0.704000;3340;5002;0;0;0;0;0;0;0 +17.000000;27;15840;0.704000;2386;5002;0;0;0;0;0;0;0 +17.100000;27;15840;0.704000;1510;5002;0;0;0;0;0;0;0 +17.200000;27;15840;0.704000;1000;5552;0;0;0;0;0;0;0 +17.300000;27;15840;0.704000;926;10000;0;0;0;0;0;0;0 +17.400000;27;15840;0.704000;516;10000;0;0;0;0;0;0;0 +17.500000;27;15840;0.704000;287;10000;0;0;0;0;0;0;0 +17.600000;27;15840;0.704000;198;10000;0;0;0;0;0;0;0 +17.700000;27;15840;0.704000;135;10000;0;0;0;0;0;0;0 +17.800000;27;15840;0.704000;102;10000;0;0;0;0;0;0;0 +17.900000;27;15840;0.704000;94;10000;0;0;0;0;0;0;0 diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c index 94b8aadcfb..cfff41a6ad 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c @@ -1650,13 +1650,9 @@ int nr_acknack_scheduling(int mod_id, /* we need to find a new PUCCH occasion */ /*(Re)Inizialization of timing information*/ - /* TODO: This is something of a hack. The last condition in the - if statement below was added. OAI is looking into this and is - expected to provide a solution. Without the hack, the gNB will - incorrectly schedule more than 2 ACK/nACKs in a single SFN/Slot. */ if ((pucch->frame == 0 && pucch->ul_slot == 0) || ((pucch->frame*n_slots_frame + pucch->ul_slot) < - (frame * n_slots_frame + slot)) && (frame != 1023)) { + (frame*n_slots_frame + slot))) { AssertFatal(pucch->sr_flag + pucch->dai_c == 0, "expected no SR/AckNack for UE %d in %4d.%2d, but has %d/%d for %4d.%2d\n", UE_id, frame, slot, pucch->sr_flag, pucch->dai_c, pucch->frame, pucch->ul_slot); From ea984f8c4cd4ec467e18f551c596e78c1732ee3d Mon Sep 17 00:00:00 2001 From: francescomani Date: Mon, 7 Mar 2022 15:51:33 +0100 Subject: [PATCH 069/150] using a global definition for the number of nscid for dmrs --- openair1/PHY/INIT/nr_init.c | 12 ++++++------ openair1/PHY/INIT/nr_init_ue.c | 10 +++++----- openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c | 4 ++-- openair1/PHY/defs_nr_common.h | 2 ++ 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index f8d9b74b80..58347a800c 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -142,10 +142,10 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, AssertFatal(pdsch_dmrs[slot]!=NULL, "NR init: pdsch_dmrs for slot %d - malloc failed\n", slot); for (int symb=0; symbsymbols_per_slot; symb++) { - pdsch_dmrs[slot][symb] = (uint32_t **)malloc16(2*sizeof(uint32_t *)); + pdsch_dmrs[slot][symb] = (uint32_t **)malloc16(NR_NB_NSCID*sizeof(uint32_t *)); AssertFatal(pdsch_dmrs[slot][symb]!=NULL, "NR init: pdsch_dmrs for slot %d symbol %d - malloc failed\n", slot, symb); - for (int q=0; q<2; q++) { + for (int q=0; qpdsch_gold_init[nscid] = cfg->cell_config.phy_cell_id.value; nr_init_pdsch_dmrs(gNB, nscid, cfg->cell_config.phy_cell_id.value); } //PUSCH DMRS init - gNB->nr_gold_pusch_dmrs = (uint32_t ****)malloc16(2*sizeof(uint32_t ***)); + gNB->nr_gold_pusch_dmrs = (uint32_t ****)malloc16(NR_NB_NSCID*sizeof(uint32_t ***)); uint32_t ****pusch_dmrs = gNB->nr_gold_pusch_dmrs; - for(int nscid=0; nscid<2; nscid++) { + for(int nscid=0; nscidslots_per_frame*sizeof(uint32_t **)); AssertFatal(pusch_dmrs[nscid]!=NULL, "NR init: pusch_dmrs for nscid %d - malloc failed\n", nscid); @@ -178,7 +178,7 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, } } - for (int nscid=0; nscid<2; nscid++) { + for (int nscid=0; nscidpusch_gold_init[nscid] = cfg->cell_config.phy_cell_id.value; nr_gold_pusch(gNB, nscid, gNB->pusch_gold_init[nscid]); } diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index af06935e52..034c3e97e2 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -242,11 +242,11 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) AssertFatal(pusch_dmrs[slot]!=NULL, "init_nr_ue_signal: pusch_dmrs for slot %d - malloc failed\n", slot); for (symb=0; symbsymbols_per_slot; symb++) { - pusch_dmrs[slot][symb] = (uint32_t **)malloc16(2*sizeof(uint32_t *)); + pusch_dmrs[slot][symb] = (uint32_t **)malloc16(NR_NB_NSCID*sizeof(uint32_t *)); AssertFatal(pusch_dmrs[slot][symb]!=NULL, "init_nr_ue_signal: pusch_dmrs for slot %d symbol %d - malloc failed\n", slot, symb); - for (q=0; q<2; q++) { - pusch_dmrs[slot][symb][q] = (uint32_t *)malloc16(NR_MAX_PDSCH_DMRS_INIT_LENGTH_DWORD*sizeof(uint32_t)); + for (q=0; qsymbols_per_slot; symb++) { - pdsch_dmrs[slot][symb] = (uint32_t **)malloc16(NR_MAX_NB_CODEWORDS*sizeof(uint32_t *)); + pdsch_dmrs[slot][symb] = (uint32_t **)malloc16(NR_NB_NSCID*sizeof(uint32_t *)); AssertFatal(pdsch_dmrs[slot][symb]!=NULL, "NR init: pdsch_dmrs for slot %d symbol %d - malloc failed\n", slot, symb); - for (int q=0; qNid_cell); // compute the scrambling IDs for PDSCH DMRS - for (int i=0; i<2; i++) { + for (int i=0; iscramblingID_dlsch[i]=fp->Nid_cell; nr_gold_pdsch(ue, i, ue->scramblingID_dlsch[i]); } // initialize the pusch dmrs - for (int i=0; i<2; i++) { + for (int i=0; iscramblingID_ulsch[i]=fp->Nid_cell; nr_init_pusch_dmrs(ue, ue->scramblingID_ulsch[i], i); } diff --git a/openair1/PHY/defs_nr_common.h b/openair1/PHY/defs_nr_common.h index d3352fb520..f38df302c6 100644 --- a/openair1/PHY/defs_nr_common.h +++ b/openair1/PHY/defs_nr_common.h @@ -114,6 +114,8 @@ #define NR_RX_NB_TH 1 #define NR_NB_TH_SLOT 2 +#define NR_NB_NSCID 2 + extern const uint8_t nr_rv_round_map[4]; static inline From a6049bcddf06e4bdedea9738ff096fedba34b281 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 7 Mar 2022 11:59:23 -0800 Subject: [PATCH 070/150] Relying on mac->ra.ra_state instead of RRC state. --- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index d6abb15c02..2dd7e0cb27 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -1494,8 +1494,8 @@ static inline bool is_channel_modeling(void) Replace with a command line option to enable/disable channel modeling. The LTE UE will crash when channel modeling is conducted for NSA mode. It does not crash for LTE mode. We have not implemented channel - modeling for NSA mode yet. For now, we ensure only do do chanel modeling - in LTE mode. */ + modeling for NSA mode yet. For now, we ensure only do do channel modeling + in LTE/NR mode. */ return get_softmodem_params()->node_number == 0 && !get_softmodem_params()->nsa; } @@ -1506,13 +1506,11 @@ static bool should_drop_transport_block(int slot, uint16_t rnti) return false; } - /* We want to avoid dropping setup messages because this would be pathological. - This assumes were in standalone_pnf mode where - UE_rrc_inst[0] is module_id = 0 and Info[0] is eNB_index = 0. */ - NR_UE_STATE_t state = NR_UE_rrc_inst[0].Info[0].State; - if (state < NR_RRC_CONNECTED) + /* We want to avoid dropping setup messages because this would be pathological. */ + NR_UE_MAC_INST_t *mac = get_mac_inst(0); + if (mac->ra.ra_state < RA_SUCCEEDED) { - LOG_I(NR_MAC, "Not dropping because state: %d", state); + LOG_I(NR_MAC, "Not dropping because MAC state: %d", mac->ra.ra_state); return false; } @@ -1522,7 +1520,7 @@ static bool should_drop_transport_block(int slot, uint16_t rnti) int num_pdus = slot_rnti_mcs[slot].num_pdus; assert(slot < 20 && slot >= 0); LOG_I(NR_MAC, "rnti: %x num_pdus %d state %d slot %u sinr %f\n", - rnti, num_pdus, state, slot, slot_rnti_mcs[slot].sinr); + rnti, num_pdus, mac->ra.ra_state, slot, slot_rnti_mcs[slot].sinr); assert(num_pdus > 0); CHECK_INDEX(slot_rnti_mcs[slot].rnti, num_pdus); CHECK_INDEX(slot_rnti_mcs[slot].mcs, num_pdus); From b66d18747770e09c7bd5fc224820a76986af560f Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Mon, 7 Mar 2022 12:00:10 -0800 Subject: [PATCH 071/150] Including more UE conf files for multi-UE tests --- .../episci/episci_nr-ue4.nfapi.conf | 45 +++++++++++++++++++ .../episci/episci_nr-ue5.nfapi.conf | 45 +++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 ci-scripts/conf_files/episci/episci_nr-ue4.nfapi.conf create mode 100644 ci-scripts/conf_files/episci/episci_nr-ue5.nfapi.conf diff --git a/ci-scripts/conf_files/episci/episci_nr-ue4.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue4.nfapi.conf new file mode 100644 index 0000000000..3d1d53463d --- /dev/null +++ b/ci-scripts/conf_files/episci/episci_nr-ue4.nfapi.conf @@ -0,0 +1,45 @@ +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"; +}; + +uicc0 = { +imsi = "208950000000035"; +key = "0c0a34601d4f07677303652c0462535b"; +opc= "63bfa50ee6523365ff14c1f45f88737d"; +dnn= "oai"; +nssai_sst=222; +nssai_sd=123; +} + +L1s = ( + { + num_cc = 1; + tr_n_preference = "nfapi"; + local_n_if_name = "ens3"; + remote_n_address = "127.0.0.1"; //Proxy IP + local_n_address = "127.0.0.1"; + local_n_portc = 50600; + remote_n_portc = 50601; + local_n_portd = 50610; + remote_n_portd = 50611; + } +); + +RUs = ( + { + local_rf = "yes" + nb_tx = 1 + nb_rx = 1 + att_tx = 90 + att_rx = 0; + bands = [7,38,42,43]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 125; + } +); diff --git a/ci-scripts/conf_files/episci/episci_nr-ue5.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue5.nfapi.conf new file mode 100644 index 0000000000..98b4c341ca --- /dev/null +++ b/ci-scripts/conf_files/episci/episci_nr-ue5.nfapi.conf @@ -0,0 +1,45 @@ +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"; +}; + +uicc0 = { +imsi = "208950000000036"; +key = "0c0a34601d4f07677303652c0462535b"; +opc= "63bfa50ee6523365ff14c1f45f88737d"; +dnn= "oai"; +nssai_sst=222; +nssai_sd=123; +} + +L1s = ( + { + num_cc = 1; + tr_n_preference = "nfapi"; + local_n_if_name = "ens3"; + remote_n_address = "127.0.0.1"; //Proxy IP + local_n_address = "127.0.0.1"; + local_n_portc = 50600; + remote_n_portc = 50601; + local_n_portd = 50610; + remote_n_portd = 50611; + } +); + +RUs = ( + { + local_rf = "yes" + nb_tx = 1 + nb_rx = 1 + att_tx = 90 + att_rx = 0; + bands = [7,38,42,43]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 125; + } +); From d1cd5b771b9b8aebe036904d7a2e6e986db0f8aa Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 8 Mar 2022 07:47:44 -0800 Subject: [PATCH 072/150] Clean up to nFAPI and error checking UL_TTI_REQ n_pdus We seprarated out the large if block in the push/pull of the UL_TTI_REQ fields to make it easier to read and debug. Furthermore, we add in AsserFatals before indexing in UL_TTI_REQ PDU list to ensure we are not indexing past the end of the array. --- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 42 ++++++++++++------- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c | 5 +++ .../LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c | 4 +- .../LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c | 3 ++ .../LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 3 ++ 5 files changed, 41 insertions(+), 16 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index cfd4cf64f4..ba30d8f469 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -1583,14 +1583,21 @@ static uint8_t pack_ul_config_request_body_value(void *tlv, uint8_t **ppWritePac static uint8_t pack_ul_tti_request(void *msg, uint8_t **ppWritePackedMsg, uint8_t *end, nfapi_p7_codec_config_t *config) { nfapi_nr_ul_tti_request_t *pNfapiMsg = (nfapi_nr_ul_tti_request_t *)msg; - if (!(push16(pNfapiMsg->SFN, ppWritePackedMsg, end) && - push16(pNfapiMsg->Slot, ppWritePackedMsg, end) && - push8(pNfapiMsg->n_pdus, ppWritePackedMsg, end) && - push8(pNfapiMsg->rach_present, ppWritePackedMsg, end) && - push8(pNfapiMsg->n_ulsch, ppWritePackedMsg, end) && - push8(pNfapiMsg->n_ulcch, ppWritePackedMsg, end) && - push8(pNfapiMsg->n_group, ppWritePackedMsg, end) )) + if (!push16(pNfapiMsg->SFN, ppWritePackedMsg, end)) return 0; + if (!push16(pNfapiMsg->Slot, ppWritePackedMsg, end)) + return 0; + if (!push8(pNfapiMsg->n_pdus, ppWritePackedMsg, end)) + return 0; + if (!push8(pNfapiMsg->n_group, ppWritePackedMsg, end)) + return 0; + if (!push8(pNfapiMsg->rach_present, ppWritePackedMsg, end)) + return 0; + if (!push8(pNfapiMsg->n_ulsch, ppWritePackedMsg, end)) + return 0; + if (!push8(pNfapiMsg->n_ulcch, ppWritePackedMsg, end)) + return 0; + for(int i=0; in_pdus; i++) { if(!pack_ul_tti_pdu_list_value(&pNfapiMsg->pdus_list[i], ppWritePackedMsg, end)) @@ -4655,14 +4662,19 @@ static uint8_t unpack_ul_tti_groups_list_value(uint8_t **ppReadPackedMsg, uint8_ static uint8_t unpack_ul_tti_request(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t *config) { nfapi_nr_ul_tti_request_t *pNfapiMsg = (nfapi_nr_ul_tti_request_t *)msg; - if (!( - pull16(ppReadPackedMsg, &pNfapiMsg->SFN, end) && - pull16(ppReadPackedMsg, &pNfapiMsg->Slot, end) && - pull8(ppReadPackedMsg, &pNfapiMsg->n_pdus, end) && - pull8(ppReadPackedMsg, &pNfapiMsg->n_group, end) && - pull8(ppReadPackedMsg, &pNfapiMsg->rach_present, end) && - pull8(ppReadPackedMsg, &pNfapiMsg->n_ulcch, end) && - pull8(ppReadPackedMsg, &pNfapiMsg->n_ulsch, end) )) + if (!pull16(ppReadPackedMsg, &pNfapiMsg->SFN, end)) + return 0; + if (!pull16(ppReadPackedMsg, &pNfapiMsg->Slot, end)) + return 0; + if (!pull8(ppReadPackedMsg, &pNfapiMsg->n_pdus, end)) + return 0; + if (!pull8(ppReadPackedMsg, &pNfapiMsg->n_group, end)) + return 0; + if (!pull8(ppReadPackedMsg, &pNfapiMsg->rach_present, end)) + return 0; + if (!pull8(ppReadPackedMsg, &pNfapiMsg->n_ulcch, end)) + return 0; + if (!pull8(ppReadPackedMsg, &pNfapiMsg->n_ulsch, end)) return 0; for(int i=0; i< pNfapiMsg->n_pdus; i++) { diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c index a10845a6ab..1d28fe8ed2 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c @@ -300,6 +300,8 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP (RA_sfn_index + slot_index) * N_t_slot * fdm + td_index * fdm + fdm_index; if((prach_occasion_id < cc->total_prach_occasions) && (td_index == 0)){ + AssertFatal(UL_tti_req->n_pdus < sizeof(UL_tti_req->pdus_list) / sizeof(UL_tti_req->pdus_list[0]), + "Invalid UL_tti_req->n_pdus %d\n", UL_tti_req->n_pdus); UL_tti_req->pdus_list[UL_tti_req->n_pdus].pdu_type = NFAPI_NR_UL_CONFIG_PRACH_PDU_TYPE; UL_tti_req->pdus_list[UL_tti_req->n_pdus].pdu_size = sizeof(nfapi_nr_prach_pdu_t); @@ -801,6 +803,9 @@ void nr_generate_Msg3_retransmission(module_id_t module_idP, int CC_id, frame_t future_ul_tti_req->Slot, sched_frame, sched_slot); + AssertFatal(future_ul_tti_req->n_pdus < + sizeof(future_ul_tti_req->pdus_list) / sizeof(future_ul_tti_req->pdus_list[0]), + "Invalid future_ul_tti_req->n_pdus %d\n", future_ul_tti_req->n_pdus); future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pdu_type = NFAPI_NR_UL_CONFIG_PUSCH_PDU_TYPE; future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pdu_size = sizeof(nfapi_nr_pusch_pdu_t); nfapi_nr_pusch_pdu_t *pusch_pdu = &future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pusch_pdu; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c index a2b27357dd..bf2af3b388 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_srs.c @@ -85,7 +85,9 @@ void nr_configure_srs(nfapi_nr_srs_pdu_t *srs_pdu, int module_id, int CC_id, int void nr_fill_nfapi_srs(int module_id, int CC_id, int UE_id, sub_frame_t slot, NR_SRS_Resource_t *srs_resource) { nfapi_nr_ul_tti_request_t *future_ul_tti_req = &RC.nrmac[module_id]->UL_tti_req_ahead[0][slot]; - + AssertFatal(future_ul_tti_req->n_pdus < + sizeof(future_ul_tti_req->pdus_list) / sizeof(future_ul_tti_req->pdus_list[0]), + "Invalid future_ul_tti_req->n_pdus %d\n", future_ul_tti_req->n_pdus); future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pdu_type = NFAPI_NR_UL_CONFIG_SRS_PDU_TYPE; future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pdu_size = sizeof(nfapi_nr_srs_pdu_t); nfapi_nr_srs_pdu_t *srs_pdu = &future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].srs_pdu; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c index cfff41a6ad..a7cf8993b7 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c @@ -55,6 +55,9 @@ void nr_fill_nfapi_pucch(module_id_t mod_id, future_ul_tti_req->Slot, pucch->frame, pucch->ul_slot); + AssertFatal(future_ul_tti_req->n_pdus < + sizeof(future_ul_tti_req->pdus_list) / sizeof(future_ul_tti_req->pdus_list[0]), + "Invalid future_ul_tti_req->n_pdus %d\n", future_ul_tti_req->n_pdus); future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pdu_type = NFAPI_NR_UL_CONFIG_PUCCH_PDU_TYPE; future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pdu_size = sizeof(nfapi_nr_pucch_pdu_t); nfapi_nr_pucch_pdu_t *pucch_pdu = &future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pucch_pdu; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 7e092784dc..c9ede37785 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -1704,6 +1704,9 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot) future_ul_tti_req->Slot, sched_pusch->frame, sched_pusch->slot); + AssertFatal(future_ul_tti_req->n_pdus < + sizeof(future_ul_tti_req->pdus_list) / sizeof(future_ul_tti_req->pdus_list[0]), + "Invalid future_ul_tti_req->n_pdus %d\n", future_ul_tti_req->n_pdus); future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pdu_type = NFAPI_NR_UL_CONFIG_PUSCH_PDU_TYPE; future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pdu_size = sizeof(nfapi_nr_pusch_pdu_t); nfapi_nr_pusch_pdu_t *pusch_pdu = &future_ul_tti_req->pdus_list[future_ul_tti_req->n_pdus].pusch_pdu; From 0c28328986a2b3a6fdb0d7fed4412a26aef1783b Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Thu, 10 Mar 2022 15:19:42 +0530 Subject: [PATCH 073/150] Fixed merge errors --- openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c index d79f2821b3..94aa6f73eb 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c @@ -113,8 +113,8 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint a_segments = a_segments/273 +1; } - uint16_t ulsch_bytes = a_segments*1056; // allocated bytes per segment - ulsch = (NR_gNB_ULSCH_t *)malloc16(sizeof(NR_gNB_ULSCH_t)); + uint32_t ulsch_bytes = a_segments*1056; // allocated bytes per segment + ulsch = (NR_gNB_ULSCH_t *)malloc16_clear(sizeof(NR_gNB_ULSCH_t)); ulsch->max_ldpc_iterations = max_ldpc_iterations; ulsch->Mlimit = 4; @@ -132,7 +132,7 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations,uint16_t N_RB_UL, uint } } - return(NULL); + return(ulsch); } void clean_gNB_ulsch(NR_gNB_ULSCH_t *ulsch) From 2e0d8fd7537e5b5fa76a43e863e18cf1d53dd851 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 15 Mar 2022 08:56:21 -0700 Subject: [PATCH 074/150] Removing TimeDomainAllocationList from conf file Also updating pdcch_config for SIB1 --- ...sci_gnb.band78.sa.fr1.106PRB.usrpn310.conf | 9 -------- .../episci_rcc.band78.tm1.106PRB.nfapi.conf | 17 +++++++------- ...oxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf | 9 -------- .../proxy_rcc.band78.tm1.106PRB.nfapi.conf | 23 ------------------- 4 files changed, 8 insertions(+), 50 deletions(-) diff --git a/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf index a98179197f..e498e2a5c8 100644 --- a/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf +++ b/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf @@ -73,15 +73,6 @@ gNBs = #pdcch-ConfigCommon initialDLBWPcontrolResourceSetZero = 12; initialDLBWPsearchSpaceZero = 0; - #pdsch-ConfigCommon - #pdschTimeDomainAllocationList (up to 16 entries) - initialDLBWPk0_0 = 0; #for DL slot - initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB - initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13 - - initialDLBWPk0_1 = 0; #for mixed slot - initialDLBWPmappingType_1 = 0; - initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5 #uplinkConfigCommon #frequencyInfoUL diff --git a/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf b/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf index d8485483d8..f7e14591a0 100644 --- a/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf +++ b/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf @@ -25,6 +25,14 @@ gNBs = pdsch_AntennaPorts = 1; pusch_AntennaPorts = 1; min_rxtxtime = 6; + sib1_tda = 0; + + pdcch_ConfigSIB1 = ( + { + controlResourceSetZero = 12; + searchSpaceZero = 0; + } + ); servingCellConfigCommon = ( { #spCellConfigCommon @@ -54,15 +62,6 @@ gNBs = #pdcch-ConfigCommon initialDLBWPcontrolResourceSetZero = 0; initialDLBWPsearchSpaceZero = 0; - #pdsch-ConfigCommon - #pdschTimeDomainAllocationList (up to 16 entries) - initialDLBWPk0_0 = 0; #for DL slot - initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB - initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13 - - initialDLBWPk0_1 = 0; #for mixed slot - initialDLBWPmappingType_1 = 0; - initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5 #uplinkConfigCommon #frequencyInfoUL diff --git a/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf index 0597e96245..93835f6a1c 100644 --- a/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf +++ b/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf @@ -74,15 +74,6 @@ gNBs = #pdcch-ConfigCommon initialDLBWPcontrolResourceSetZero = 12; initialDLBWPsearchSpaceZero = 0; - #pdsch-ConfigCommon - #pdschTimeDomainAllocationList (up to 16 entries) - initialDLBWPk0_0 = 0; #for DL slot - initialDLBWPmappingType_0 = 0; #0=typeA,1=typeB - initialDLBWPstartSymbolAndLength_0 = 40; #this is SS=1,L=13 - - initialDLBWPk0_1 = 0; #for mixed slot - initialDLBWPmappingType_1 = 0; - initialDLBWPstartSymbolAndLength_1 = 57; #this is SS=1,L=5 #uplinkConfigCommon #frequencyInfoUL diff --git a/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf b/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf index 9d74803161..32248559ce 100644 --- a/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf +++ b/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf @@ -54,29 +54,6 @@ gNBs = #pdcch-ConfigCommon initialDLBWPcontrolResourceSetZero = 12; initialDLBWPsearchSpaceZero = 0; - #pdsch-ConfigCommon - #pdschTimeDomainAllocationList (up to 16 entries) - initialDLBWPk0_0 = 0; - #initialULBWPmappingType - #0=typeA,1=typeB - initialDLBWPmappingType_0 = 0; - #this is SS=1,L=13 - initialDLBWPstartSymbolAndLength_0 = 40; - - initialDLBWPk0_1 = 0; - initialDLBWPmappingType_1 = 0; - #this is SS=2,L=12 - initialDLBWPstartSymbolAndLength_1 = 53; - - initialDLBWPk0_2 = 0; - initialDLBWPmappingType_2 = 0; - #this is SS=1,L=12 - initialDLBWPstartSymbolAndLength_2 = 54; - - initialDLBWPk0_3 = 0; - initialDLBWPmappingType_3 = 0; - #this is SS=1,L=5 - initialDLBWPstartSymbolAndLength_3 = 57; #uplinkConfigCommon #frequencyInfoUL From 5a8b235ab4872c1f88391cee7f7d37db5baa8422 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 16 Mar 2022 09:59:21 +0100 Subject: [PATCH 075/150] Fix: make simulators compile --- nfapi/oai_integration/nfapi_vnf.c | 22 ++-- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 8 +- openair1/SIMULATION/NR_PHY/dlsim.c | 3 - openair1/SIMULATION/NR_PHY/prachsim.c | 2 + openair1/SIMULATION/NR_PHY/ulsim.c | 3 - openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 134 ++++++++++---------- 6 files changed, 84 insertions(+), 88 deletions(-) diff --git a/nfapi/oai_integration/nfapi_vnf.c b/nfapi/oai_integration/nfapi_vnf.c index d19d2db597..6bc5a736de 100644 --- a/nfapi/oai_integration/nfapi_vnf.c +++ b/nfapi/oai_integration/nfapi_vnf.c @@ -244,13 +244,13 @@ void oai_create_gnb(void) { if (RC.gNB == NULL) { RC.gNB = (PHY_VARS_gNB **) calloc(1, sizeof(PHY_VARS_gNB *)); - LOG_I(PHY,"gNB L1 structure RC.gNB allocated @ %p\n",RC.gNB); + LOG_D(PHY,"gNB L1 structure RC.gNB allocated @ %p\n",RC.gNB); } if (RC.gNB[0] == NULL) { RC.gNB[0] = (PHY_VARS_gNB *) calloc(1, sizeof(PHY_VARS_gNB)); - LOG_I(PHY,"[nr-gnb.c] gNB structure RC.gNB[%d] allocated @ %p\n",0,RC.gNB[0]); + LOG_D(PHY,"[nr-gnb.c] gNB structure RC.gNB[%d] allocated @ %p\n",0,RC.gNB[0]); } PHY_VARS_gNB *gNB = RC.gNB[0]; @@ -491,7 +491,7 @@ int wake_gNB_rxtx(PHY_VARS_gNB *gNB, uint16_t sfn, uint16_t slot) { L1_proc->frame_tx = (L1_proc->slot_rx > (19-slot_ahead)) ? (L1_proc->frame_rx+1)&1023 : L1_proc->frame_rx; L1_proc->slot_tx = (L1_proc->slot_rx + slot_ahead)%20; - //LOG_I(PHY, "sfn/sf:%d%d proc[rx:%d%d] rx:%d%d] About to wake rxtx thread\n\n", sfn, slot, proc->frame_rx, proc->slot_rx, L1_proc->frame_rx, L1_proc->slot_rx); + //LOG_D(PHY, "sfn/sf:%d%d proc[rx:%d%d] rx:%d%d] About to wake rxtx thread\n\n", sfn, slot, proc->frame_rx, proc->slot_rx, L1_proc->frame_rx, L1_proc->slot_rx); //NFAPI_TRACE(NFAPI_TRACE_INFO, "\nEntering wake_gNB_rxtx sfn %d slot %d\n",L1_proc->frame_rx,L1_proc->slot_rx); // the thread can now be woken up if (pthread_cond_signal(&L1_proc->cond) != 0) { @@ -757,7 +757,7 @@ int phy_nr_rach_indication(nfapi_nr_rach_indication_t *ind) int phy_nr_uci_indication(nfapi_nr_uci_indication_t *ind) { - LOG_I(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u\n", + LOG_D(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u\n", __FUNCTION__,ind->sfn, ind->slot, ind->num_ucis); if(NFAPI_MODE == NFAPI_MODE_VNF) { @@ -950,7 +950,7 @@ int phy_crc_indication(struct nfapi_vnf_p7_config *config, nfapi_crc_indication_ int phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind) { - LOG_I(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u\n", + LOG_D(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u\n", __FUNCTION__,ind->sfn, ind->slot, ind->number_crcs); if(NFAPI_MODE == NFAPI_MODE_VNF) @@ -973,7 +973,7 @@ int phy_nr_crc_indication(nfapi_nr_crc_indication_t *ind) { crc_ind->crc_list[j].tb_crc_status = ind->crc_list[j].tb_crc_status; crc_ind->crc_list[j].timing_advance = ind->crc_list[j].timing_advance; crc_ind->crc_list[j].ul_cqi = ind->crc_list[j].ul_cqi; - LOG_I(NR_MAC, "Received crc_ind.harq_id = %d for %d index SFN SLot %u %u with rnti %x\n", + LOG_D(NR_MAC, "Received crc_ind.harq_id = %d for %d index SFN SLot %u %u with rnti %x\n", ind->crc_list[j].harq_id, j, ind->sfn, ind->slot, ind->crc_list[j].rnti); } if (!put_queue(&gnb_crc_ind_queue, crc_ind)) @@ -1069,7 +1069,7 @@ int phy_rx_indication(struct nfapi_vnf_p7_config *config, nfapi_rx_indication_t int phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind) { - LOG_I(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u, and pdu %p\n", + LOG_D(NR_MAC, "In %s() NFAPI SFN/SF: %d/%d number_of_pdus :%u, and pdu %p\n", __FUNCTION__,ind->sfn, ind->slot, ind->number_of_pdus, ind->pdu_list[0].pdu); if(NFAPI_MODE == NFAPI_MODE_VNF) @@ -1171,7 +1171,7 @@ static void analyze_cqi_pdus_for_duplicates(nfapi_cqi_indication_t *ind) { nfapi_cqi_indication_pdu_t *src_pdu = &ind->cqi_indication_body.cqi_pdu_list[i]; - LOG_I(MAC, "CQI_IND[PDU:%d][rnti:%x cqi:%d channel:%d]\n", i, src_pdu->rx_ue_information.rnti, + LOG_D(MAC, "CQI_IND[PDU:%d][rnti:%x cqi:%d channel:%d]\n", i, src_pdu->rx_ue_information.rnti, src_pdu->ul_cqi_information.ul_cqi, src_pdu->ul_cqi_information.channel); for (int j = i + 1; j < num_cqis; j++) @@ -1893,7 +1893,7 @@ int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req) { nfapi_vnf_p7_config_t *p7_config = vnf.p7_vnfs[0].config; dl_config_req->header.phy_id = 1; // DJP HACK TODO FIXME - need to pass this around!!!! dl_config_req->header.message_id = NFAPI_DL_CONFIG_REQUEST; - LOG_I(PHY, "[VNF] %s() DL_CONFIG_REQ sfn_sf:%d_%d number_of_pdus:%d\n", __FUNCTION__, + LOG_D(PHY, "[VNF] %s() DL_CONFIG_REQ sfn_sf:%d_%d number_of_pdus:%d\n", __FUNCTION__, NFAPI_SFNSF2SFN(dl_config_req->sfn_sf),NFAPI_SFNSF2SF(dl_config_req->sfn_sf), dl_config_req->dl_config_request_body.number_pdu); if (dl_config_req->dl_config_request_body.number_pdu > 0) { @@ -1904,7 +1904,7 @@ int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req) { { uint16_t dl_rnti = dl_config_req->dl_config_request_body.dl_config_pdu_list[i].dlsch_pdu.dlsch_pdu_rel8.rnti; uint16_t numPDUs = dl_config_req->dl_config_request_body.number_pdu; - LOG_I(MAC, "(OAI eNB) Sending dl_config_req at VNF during Frame: %d and Subframe: %d," + LOG_D(MAC, "(OAI eNB) Sending dl_config_req at VNF during Frame: %d and Subframe: %d," " with a RNTI value of: %x and with number of PDUs: %u\n", NFAPI_SFNSF2SFN(dl_config_req->sfn_sf),NFAPI_SFNSF2SF(dl_config_req->sfn_sf), dl_rnti, numPDUs); } @@ -2062,7 +2062,7 @@ int oai_nfapi_ul_config_req(nfapi_ul_config_request_t *ul_config_req) { { uint8_t pdu_type = pdu_list[i].pdu_type; - LOG_I(MAC, "ul_config_req num_pdus: %u pdu_number: %d pdu_type: %u SFN.SF: %d.%d\n", + LOG_D(MAC, "ul_config_req num_pdus: %u pdu_number: %d pdu_type: %u SFN.SF: %d.%d\n", num_pdus, i, pdu_type, ul_config_req->sfn_sf >> 4, ul_config_req->sfn_sf & 15); if (pdu_type != NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE) diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 5f2f0e88ca..9bdaabd00b 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -117,7 +117,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response "Too many ul_config pdus %d", ul_config->number_pdus); for (int i = 0; i < ul_config->number_pdus; ++i) { - LOG_I(NR_PHY, "In %s: processing type %d PDU of %d total UL PDUs (ul_config %p) \n", + LOG_D(NR_PHY, "In %s: processing type %d PDU of %d total UL PDUs (ul_config %p) \n", __FUNCTION__, ul_config->ul_config_list[i].pdu_type, ul_config->number_pdus, ul_config); uint8_t pdu_type = ul_config->ul_config_list[i].pdu_type; @@ -218,7 +218,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response uci_ind->uci_list = CALLOC(uci_ind->num_ucis, sizeof(*uci_ind->uci_list)); for (int j = 0; j < uci_ind->num_ucis; j++) { - LOG_I(NR_MAC, "ul_config->ul_config_list[%d].pucch_config_pdu.n_bit = %d\n", i, ul_config->ul_config_list[i].pucch_config_pdu.n_bit); + LOG_D(NR_MAC, "ul_config->ul_config_list[%d].pucch_config_pdu.n_bit = %d\n", i, ul_config->ul_config_list[i].pucch_config_pdu.n_bit); if (ul_config->ul_config_list[i].pucch_config_pdu.n_bit > 3 && mac->nr_ue_emul_l1.num_csi_reports > 0) { uci_ind->uci_list[j].pdu_type = NFAPI_NR_UCI_FORMAT_2_3_4_PDU_TYPE; @@ -265,7 +265,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response } } - LOG_I(NR_PHY, "Sending UCI with %d PDUs in sfn.slot %d/%d\n", + LOG_D(NR_PHY, "Sending UCI with %d PDUs in sfn.slot %d/%d\n", uci_ind->num_ucis, uci_ind->sfn, uci_ind->slot); NR_UL_IND_t ul_info = { .uci_ind = *uci_ind, @@ -276,7 +276,7 @@ int8_t nr_ue_scheduled_response_stub(nr_scheduled_response_t *scheduled_response } default: - LOG_I(NR_MAC, "Unknown ul_config->pdu_type %d\n", pdu_type); + LOG_W(NR_MAC, "Unknown ul_config->pdu_type %d\n", pdu_type); break; } } diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index 780fd42989..e998125e04 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -87,9 +87,6 @@ PHY_VARS_NR_UE *UE; RAN_CONTEXT_t RC; int32_t uplink_frequency_offset[MAX_NUM_CCs][4]; -/* dummy constant */ -NR_UE_RRC_INST_t *NR_UE_rrc_inst; - double cpuf; char *uecap_file; diff --git a/openair1/SIMULATION/NR_PHY/prachsim.c b/openair1/SIMULATION/NR_PHY/prachsim.c index bc4f4a0b60..f255ab5337 100644 --- a/openair1/SIMULATION/NR_PHY/prachsim.c +++ b/openair1/SIMULATION/NR_PHY/prachsim.c @@ -223,6 +223,8 @@ nrUE_params_t *get_nrUE_params(void) { return &nrUE_params; } +nr_bler_struct nr_bler_data[NR_NUM_MCS]; + void processSlotTX(void *arg) {} int main(int argc, char **argv){ diff --git a/openair1/SIMULATION/NR_PHY/ulsim.c b/openair1/SIMULATION/NR_PHY/ulsim.c index 6efd423419..0144d0c0d3 100644 --- a/openair1/SIMULATION/NR_PHY/ulsim.c +++ b/openair1/SIMULATION/NR_PHY/ulsim.c @@ -93,9 +93,6 @@ THREAD_STRUCT thread_struct; nfapi_ue_release_request_body_t release_rntis; uint32_t N_RB_DL = 106; -/* dummy constant */ -NR_UE_RRC_INST_t *NR_UE_rrc_inst; - //Fixme: Uniq dirty DU instance, by global var, datamodel need better management instance_t DUuniqInstance=0; instance_t CUuniqInstance=0; diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 2dd7e0cb27..3db2770af8 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -109,7 +109,7 @@ void nrue_init_standalone_socket(int tx_port, int rx_port) } assert(ue_tx_sock_descriptor == -1); ue_tx_sock_descriptor = sd; - LOG_D(NR_RRC, "Successfully set up tx_socket in %s.\n", __FUNCTION__); + LOG_T(NR_RRC, "Successfully set up tx_socket in %s.\n", __FUNCTION__); } { @@ -135,9 +135,9 @@ void nrue_init_standalone_socket(int tx_port, int rx_port) } assert(ue_rx_sock_descriptor == -1); ue_rx_sock_descriptor = sd; - LOG_D(NR_RRC, "Successfully set up rx_socket in %s.\n", __FUNCTION__); + LOG_T(NR_RRC, "Successfully set up rx_socket in %s.\n", __FUNCTION__); } - LOG_I(NR_RRC, "NRUE standalone socket info: tx_port %d rx_port %d on %s.\n", + LOG_D(NR_RRC, "NRUE standalone socket info: tx_port %d rx_port %d on %s.\n", tx_port, rx_port, stub_eth_params.remote_addr); } @@ -148,7 +148,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) case NFAPI_NR_PHY_MSG_TYPE_RACH_INDICATION: { char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE]; - LOG_D(NR_MAC, "RACH header id :%d\n", UL_INFO->rach_ind.header.message_id); + LOG_T(NR_MAC, "RACH header id :%d\n", UL_INFO->rach_ind.header.message_id); int encoded_size = nfapi_nr_p7_message_pack(&UL_INFO->rach_ind, buffer, sizeof(buffer), NULL); if (encoded_size <= 0) { @@ -156,7 +156,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) return; } - LOG_I(NR_MAC, "NR_RACH_IND sent to Proxy, Size: %d Frame %d Slot %d Num PDUS %d\n", encoded_size, + LOG_D(NR_MAC, "NR_RACH_IND sent to Proxy, Size: %d Frame %d Slot %d Num PDUS %d\n", encoded_size, UL_INFO->rach_ind.sfn, UL_INFO->rach_ind.slot, UL_INFO->rach_ind.number_of_pdus); if (send(ue_tx_sock_descriptor, buffer, encoded_size, 0) < 0) { @@ -168,7 +168,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) case NFAPI_NR_PHY_MSG_TYPE_RX_DATA_INDICATION: { char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE]; - LOG_D(NR_MAC, "RX header id :%d\n", UL_INFO->rx_ind.header.message_id); + LOG_T(NR_MAC, "RX header id :%d\n", UL_INFO->rx_ind.header.message_id); int encoded_size = nfapi_nr_p7_message_pack(&UL_INFO->rx_ind, buffer, sizeof(buffer), NULL); if (encoded_size <= 0) { @@ -176,7 +176,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) return; } - LOG_I(NR_MAC, "NR_RX_IND sent to Proxy, Size: %d Frame %d Slot %d Num PDUS %d\n", encoded_size, + LOG_D(NR_MAC, "NR_RX_IND sent to Proxy, Size: %d Frame %d Slot %d Num PDUS %d\n", encoded_size, UL_INFO->rx_ind.sfn, UL_INFO->rx_ind.slot, UL_INFO->rx_ind.number_of_pdus); if (send(ue_tx_sock_descriptor, buffer, encoded_size, 0) < 0) { @@ -188,7 +188,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) case NFAPI_NR_PHY_MSG_TYPE_CRC_INDICATION: { char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE]; - LOG_D(NR_MAC, "CRC header id :%d\n", UL_INFO->crc_ind.header.message_id); + LOG_T(NR_MAC, "CRC header id :%d\n", UL_INFO->crc_ind.header.message_id); int encoded_size = nfapi_nr_p7_message_pack(&UL_INFO->crc_ind, buffer, sizeof(buffer), NULL); if (encoded_size <= 0) { @@ -196,7 +196,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) return; } - LOG_I(NR_MAC, "NR_CRC_IND sent to Proxy, Size: %d Frame %d Slot %d Num PDUS %d\n", encoded_size, + LOG_D(NR_MAC, "NR_CRC_IND sent to Proxy, Size: %d Frame %d Slot %d Num PDUS %d\n", encoded_size, UL_INFO->crc_ind.sfn, UL_INFO->crc_ind.slot, UL_INFO->crc_ind.number_crcs); if (send(ue_tx_sock_descriptor, buffer, encoded_size, 0) < 0) { @@ -208,7 +208,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) case NFAPI_NR_PHY_MSG_TYPE_UCI_INDICATION: { char buffer[NFAPI_MAX_PACKED_MESSAGE_SIZE]; - LOG_I(NR_MAC, "UCI header id :%d\n", UL_INFO->uci_ind.header.message_id); + LOG_D(NR_MAC, "UCI header id :%d\n", UL_INFO->uci_ind.header.message_id); int encoded_size = nfapi_nr_p7_message_pack(&UL_INFO->uci_ind, buffer, sizeof(buffer), NULL); if (encoded_size <= 0) { @@ -216,7 +216,7 @@ void send_nsa_standalone_msg(NR_UL_IND_t *UL_INFO, uint16_t msg_id) return; } - LOG_I(NR_MAC, "NR_UCI_IND sent to Proxy, Size: %d Frame %d Slot %d Num PDUS %d\n", encoded_size, + LOG_D(NR_MAC, "NR_UCI_IND sent to Proxy, Size: %d Frame %d Slot %d Num PDUS %d\n", encoded_size, UL_INFO->uci_ind.sfn, UL_INFO->uci_ind.slot, UL_INFO->uci_ind.num_ucis); if (send(ue_tx_sock_descriptor, buffer, encoded_size, 0) < 0) { @@ -298,11 +298,11 @@ bool sfn_slot_matcher(void *wanted, void *candidate) static void fill_dl_info_with_pdcch(fapi_nr_dci_indication_t *dci, nfapi_nr_dl_dci_pdu_t *rx_dci, int idx) { int num_bytes = (rx_dci->PayloadSizeBits + 7) / 8; - LOG_I(NR_PHY, "[%d, %d] PDCCH DCI (Payload) for rnti %x with PayloadSizeBits %d, num_bytes %d\n", + LOG_D(NR_PHY, "[%d, %d] PDCCH DCI (Payload) for rnti %x with PayloadSizeBits %d, num_bytes %d\n", dci->SFN, dci->slot, rx_dci->RNTI, rx_dci->PayloadSizeBits, num_bytes); for (int k = 0; k < num_bytes; k++) { - LOG_I(NR_MAC, "PDCCH DCI PDU payload[%d] = %d\n", k, rx_dci->Payload[k]); + LOG_D(NR_MAC, "PDCCH DCI PDU payload[%d] = %d\n", k, rx_dci->Payload[k]); dci->dci_list[idx].payloadBits[k] = rx_dci->Payload[k]; } dci->dci_list[idx].payloadSize = rx_dci->PayloadSizeBits; @@ -318,7 +318,7 @@ static void fill_mib_in_rx_ind(nfapi_nr_dl_tti_request_pdu_t *pdu_list, fapi_nr_ "pdu_index (%d) is greater than rx_indication_body size!\n", pdu_idx); AssertFatal(pdu_idx == rx_ind->number_pdus, "Invalid pdu_idx %d!\n", pdu_idx); - LOG_D(NR_MAC, "Recevied an SSB and are filling rx_ind with the MIB!\n"); + LOG_T(NR_MAC, "Recevied an SSB and are filling rx_ind with the MIB!\n"); nfapi_nr_dl_tti_ssb_pdu_rel15_t *ssb_pdu = &pdu_list->ssb_pdu.ssb_pdu_rel15; rx_ind->rx_indication_body[pdu_idx].ssb_pdu.cell_id = ssb_pdu->PhysCellId; @@ -387,13 +387,13 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ nfapi_nr_dl_tti_request_pdu_t *pdu_list = &dl_tti_request->dl_tti_request_body.dl_tti_pdu_list[i]; if (pdu_list->PDUType == NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE) { - LOG_I(NR_PHY, "[%d, %d] PDSCH PDU for rnti %x\n", + LOG_D(NR_PHY, "[%d, %d] PDSCH PDU for rnti %x\n", dl_tti_request->SFN, dl_tti_request->Slot, pdu_list->pdsch_pdu.pdsch_pdu_rel15.rnti); } if (pdu_list->PDUType == NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE) { - LOG_I(NR_PHY, "[%d, %d] PDCCH DCI PDU (Format for incoming PDSCH PDU)\n", + LOG_D(NR_PHY, "[%d, %d] PDCCH DCI PDU (Format for incoming PDSCH PDU)\n", dl_tti_request->SFN, dl_tti_request->Slot); uint16_t num_dcis = pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci; if (num_dcis > 0) @@ -418,19 +418,19 @@ static void copy_dl_tti_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi_ { mac->nr_ue_emul_l1.expected_sib = true; mac->nr_ue_emul_l1.index_has_sib[j] = true; - LOG_D(NR_MAC, "Setting index_has_sib[%d] = true\n", j); + LOG_T(NR_MAC, "Setting index_has_sib[%d] = true\n", j); } else if (dci_pdu_list->RNTI == mac->ra.ra_rnti) { mac->nr_ue_emul_l1.expected_rar = true; mac->nr_ue_emul_l1.index_has_rar[j] = true; - LOG_D(NR_MAC, "Setting index_has_rar[%d] = true\n", j); + LOG_T(NR_MAC, "Setting index_has_rar[%d] = true\n", j); } else { mac->nr_ue_emul_l1.expected_dci = true; mac->nr_ue_emul_l1.index_has_dci[j] = true; - LOG_D(NR_MAC, "Setting index_has_dci[%d] = true\n", j); + LOG_T(NR_MAC, "Setting index_has_dci[%d] = true\n", j); } pdu_idx++; } @@ -471,7 +471,7 @@ static void fill_rx_ind(nfapi_nr_pdu_t *pdu_list, fapi_nr_rx_indication_t *rx_in { length += pdu_list->TLVs[j].length; } - LOG_I(NR_PHY, "%s: num_tlv %d and length %d, pdu index %d\n", + LOG_D(NR_PHY, "%s: num_tlv %d and length %d, pdu index %d\n", __FUNCTION__, pdu_list->num_TLV, length, pdu_idx); uint8_t *pdu = malloc(length); AssertFatal(pdu != NULL, "%s: Out of memory in malloc", __FUNCTION__); @@ -537,7 +537,7 @@ static void copy_tx_data_req_to_dl_info(nr_downlink_indication_t *dl_info, nfapi } else { - LOG_D(NR_MAC, "mac->nr_ue_emul_l1.index_has_dci[%d] = 0, so this index contained a DCI for a different UE\n", i); + LOG_T(NR_MAC, "mac->nr_ue_emul_l1.index_has_dci[%d] = 0, so this index contained a DCI for a different UE\n", i); } } @@ -558,7 +558,7 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n { nfapi_nr_ul_dci_request_pdus_t *pdu_list = &ul_dci_req->ul_dci_pdu_list[i]; AssertFatal(pdu_list->PDUType == 0, "ul_dci_req pdu type != PUCCH"); - LOG_I(NR_PHY, "[%d %d] PUCCH PDU in ul_dci for rnti %x and numDLDCI = %d\n", + LOG_D(NR_PHY, "[%d %d] PUCCH PDU in ul_dci for rnti %x and numDLDCI = %d\n", ul_dci_req->SFN, ul_dci_req->Slot, pdu_list->pdcch_pdu.pdcch_pdu_rel15.dci_pdu->RNTI, pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci); uint16_t num_dci = pdu_list->pdcch_pdu.pdcch_pdu_rel15.numDlDci; @@ -577,7 +577,7 @@ static void copy_ul_dci_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n nfapi_nr_dl_dci_pdu_t *dci_pdu_list = &pdu_list->pdcch_pdu.pdcch_pdu_rel15.dci_pdu[j]; if (dci_pdu_list->RNTI != mac->crnti) { - LOG_D(NR_MAC, "dci_pdu_list->RNTI (%x) != mac->crnti (%x)\n", dci_pdu_list->RNTI, mac->crnti); + LOG_T(NR_MAC, "dci_pdu_list->RNTI (%x) != mac->crnti (%x)\n", dci_pdu_list->RNTI, mac->crnti); continue; } fill_dl_info_with_pdcch(dl_info->dci_ind, dci_pdu_list, pdu_idx); @@ -601,7 +601,7 @@ static bool send_crc_ind_and_rx_ind(int sfn_slot) NR_UE_MAC_INST_t *mac = get_mac_inst(0); for (int i = 0; i < crc_ind->number_crcs; i++) { int harq_pid = crc_ind->crc_list[i].harq_id; - LOG_D(NR_MAC, "Resetting harq_pid %d active_ul_harq_sfn_slot\n", harq_pid); + LOG_T(NR_MAC, "Resetting harq_pid %d active_ul_harq_sfn_slot\n", harq_pid); mac->nr_ue_emul_l1.harq[harq_pid].active_ul_harq_sfn_slot = -1; } NR_UL_IND_t UL_INFO = { @@ -636,7 +636,7 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n "Too many pdus %d in ul_tti_req\n", num_pdus); if (!send_crc_ind_and_rx_ind(sfn_slot)) { - LOG_D(NR_MAC, "CRC_RX ind not sent\n"); + LOG_T(NR_MAC, "CRC_RX ind not sent\n"); if (!put_queue(&nr_ul_tti_req_queue, ul_tti_req)) { LOG_E(NR_PHY, "put_queue failed for ul_tti_req.\n"); @@ -659,13 +659,13 @@ static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_ "Too many dl_config pdus %d", dl_config->number_pdus); for (int i = 0; i < dl_config->number_pdus; i++) { - LOG_I(PHY, "In %s: filling DCI with a total of %d total DL PDUs (dl_config %p) \n", + LOG_D(PHY, "In %s: filling DCI with a total of %d total DL PDUs (dl_config %p) \n", __FUNCTION__, dl_config->number_pdus, dl_config); fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15_dci = &dl_config->dl_config_list[i].dci_config_pdu.dci_config_rel15; int num_dci_options = rel15_dci->num_dci_options; if (num_dci_options <= 0) { - LOG_I(NR_MAC, "num_dci_opts = %d for pdu[%d] in dl_config_list\n", rel15_dci->num_dci_options, i); + LOG_D(NR_MAC, "num_dci_opts = %d for pdu[%d] in dl_config_list\n", rel15_dci->num_dci_options, i); } AssertFatal(num_dci_options <= sizeof(rel15_dci->dci_length_options) / sizeof(rel15_dci->dci_length_options[0]), "num_dci_options %d > dci_length_options array\n", num_dci_options); @@ -679,13 +679,13 @@ static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_ "dl_config->number_pdus %d > dci_ind->dci_list array\n", num_dcis); for (int k = 0; k < num_dcis; k++) { - LOG_D(NR_PHY, "Received len %d, length options[%d] %d, format assigned %d, format options[%d] %d\n", + LOG_T(NR_PHY, "Received len %d, length options[%d] %d, format assigned %d, format options[%d] %d\n", dl_ind->dci_ind->dci_list[k].payloadSize, j, rel15_dci->dci_length_options[j], dl_ind->dci_ind->dci_list[k].dci_format, j, rel15_dci->dci_format_options[j]); if (rel15_dci->dci_length_options[j] == dl_ind->dci_ind->dci_list[k].payloadSize) { dl_ind->dci_ind->dci_list[k].dci_format = rel15_dci->dci_format_options[j]; - LOG_I(NR_PHY, "format assigned dl_ind->dci_ind->dci_list[k].dci_format %d\n", + LOG_D(NR_PHY, "format assigned dl_ind->dci_ind->dci_list[k].dci_format %d\n", dl_ind->dci_ind->dci_list[k].dci_format); } } @@ -708,7 +708,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, { frame = dl_tti_request->SFN; slot = dl_tti_request->Slot; - LOG_I(NR_PHY, "[%d, %d] dl_tti_request\n", frame, slot); + LOG_D(NR_PHY, "[%d, %d] dl_tti_request\n", frame, slot); copy_dl_tti_req_to_dl_info(&mac->dl_info, dl_tti_request); } /* This checks if the previously recevied DCI matches our current RNTI @@ -722,27 +722,27 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, { frame = tx_data_request->SFN; slot = tx_data_request->Slot; - LOG_I(NR_PHY, "[%d, %d] PDSCH in tx_request\n", frame, slot); + LOG_D(NR_PHY, "[%d, %d] PDSCH in tx_request\n", frame, slot); copy_tx_data_req_to_dl_info(&mac->dl_info, tx_data_request); } else if (ul_dci_request) { frame = ul_dci_request->SFN; slot = ul_dci_request->Slot; - LOG_I(NR_PHY, "[%d, %d] ul_dci_request\n", frame, slot); + LOG_D(NR_PHY, "[%d, %d] ul_dci_request\n", frame, slot); copy_ul_dci_data_req_to_dl_info(&mac->dl_info, ul_dci_request); } else if (ul_tti_request) { frame = ul_tti_request->SFN; slot = ul_tti_request->Slot; - LOG_D(NR_PHY, "[%d, %d] ul_tti_request\n", frame, slot); + LOG_T(NR_PHY, "[%d, %d] ul_tti_request\n", frame, slot); copy_ul_tti_data_req_to_dl_info(&mac->dl_info, ul_tti_request); } else { if (pthread_mutex_unlock(&mac->mutex_dl_info)) abort(); - LOG_D(NR_MAC, "All indications were NULL in %s\n", __FUNCTION__); + LOG_T(NR_MAC, "All indications were NULL in %s\n", __FUNCTION__); return; } @@ -788,19 +788,19 @@ void save_nr_measurement_info(nfapi_nr_dl_tti_request_t *dl_tti_request) LOG_E(NR_PHY, "%s: dl_tti_request number of PDUS <= 0\n", __FUNCTION__); abort(); } - LOG_D(NR_PHY, "%s: dl_tti_request number of PDUS: %d\n", __FUNCTION__, num_pdus); + LOG_T(NR_PHY, "%s: dl_tti_request number of PDUS: %d\n", __FUNCTION__, num_pdus); for (int i = 0; i < num_pdus; i++) { nfapi_nr_dl_tti_request_pdu_t *pdu_list = &dl_tti_request->dl_tti_request_body.dl_tti_pdu_list[i]; if (pdu_list->PDUType == NFAPI_NR_DL_TTI_SSB_PDU_TYPE) { - LOG_D(NR_PHY, "Cell_id: %d, the ssb_block_idx %d, sc_offset: %d and payload %d\n", + LOG_T(NR_PHY, "Cell_id: %d, the ssb_block_idx %d, sc_offset: %d and payload %d\n", pdu_list->ssb_pdu.ssb_pdu_rel15.PhysCellId, pdu_list->ssb_pdu.ssb_pdu_rel15.SsbBlockIndex, pdu_list->ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset, pdu_list->ssb_pdu.ssb_pdu_rel15.bchPayload); pdu_list->ssb_pdu.ssb_pdu_rel15.ssbRsrp = 60; - LOG_D(NR_RRC, "Setting pdulist[%d].ssbRsrp to %d\n", i, pdu_list->ssb_pdu.ssb_pdu_rel15.ssbRsrp); + LOG_T(NR_RRC, "Setting pdulist[%d].ssbRsrp to %d\n", i, pdu_list->ssb_pdu.ssb_pdu_rel15.ssbRsrp); } } @@ -830,7 +830,7 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea LOG_E(NR_PHY, "Message dl_tti_request failed to unpack\n"); break; } - LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST message in sfn/slot %d %d. \n", + LOG_D(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_DL_TTI_REQUEST message in sfn/slot %d %d. \n", dl_tti_request->SFN, dl_tti_request->Slot); if (is_channel_modeling()) @@ -854,7 +854,7 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea LOG_E(NR_PHY, "Message tx_data_request failed to unpack\n"); break; } - LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST message in SFN/slot %d %d. \n", + LOG_D(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_TX_DATA_REQUEST message in SFN/slot %d %d. \n", tx_data_request->SFN, tx_data_request->Slot); if (!put_queue(&nr_tx_req_queue, tx_data_request)) { @@ -874,7 +874,7 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea LOG_E(NR_PHY, "Message ul_dci_request failed to unpack\n"); break; } - LOG_I(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST message in SFN/slot %d %d. \n", + LOG_D(NR_PHY, "Received an NFAPI_NR_PHY_MSG_TYPE_UL_DCI_REQUEST message in SFN/slot %d %d. \n", ul_dci_request->SFN, ul_dci_request->Slot); if (!put_queue(&nr_ul_dci_req_queue, ul_dci_request)) { @@ -903,7 +903,7 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea mac->ra.ra_state >= RA_SUCCEEDED) { if (!put_queue(&nr_ul_tti_req_queue, ul_tti_request)) { - LOG_I(NR_PHY, "put_queue failed for ul_tti_request, calling put_queue_replace.\n"); + LOG_D(NR_PHY, "put_queue failed for ul_tti_request, calling put_queue_replace.\n"); nfapi_nr_ul_tti_request_t *evicted_ul_tti_req = put_queue_replace(&nr_ul_tti_req_queue, ul_tti_request); free(evicted_ul_tti_req); } @@ -912,7 +912,7 @@ static void enqueue_nr_nfapi_msg(void *buffer, ssize_t len, nfapi_p7_message_hea else if (mac->ra.ra_state < RA_SUCCEEDED) { if (!put_queue(&nr_ul_tti_req_queue, ul_tti_request)) { - LOG_I(NR_PHY, "put_queue failed for ul_tti_request, calling put_queue_replace.\n"); + LOG_D(NR_PHY, "put_queue failed for ul_tti_request, calling put_queue_replace.\n"); nfapi_nr_ul_tti_request_t *evicted_ul_tti_req = put_queue_replace(&nr_ul_tti_req_queue, ul_tti_request); free(evicted_ul_tti_req); } @@ -952,7 +952,7 @@ static void save_pdsch_pdu_for_crnti(nfapi_nr_dl_tti_request_t *dl_tti_request) { read_channel_param(pdsch_pdu, dl_tti_request->Slot, count_sent); count_sent++; - LOG_D(NR_MAC, "pdsch_pdu->rnti %x mac->crnti %x mac->ra.ra_state %d count_sent %d\n", + LOG_T(NR_MAC, "pdsch_pdu->rnti %x mac->crnti %x mac->ra.ra_state %d count_sent %d\n", pdsch_pdu->rnti, mac->crnti, mac->ra.ra_state, count_sent); } } @@ -999,7 +999,7 @@ void *nrue_standalone_pnf_task(void *context) uint16_t *sfn_slot = CALLOC(1, sizeof(*sfn_slot)); memcpy(sfn_slot, buffer, sizeof(*sfn_slot)); - LOG_I(NR_PHY, "Received from proxy sfn %d slot %d\n", + LOG_D(NR_PHY, "Received from proxy sfn %d slot %d\n", NFAPI_SFNSLOT2SFN(*sfn_slot), NFAPI_SFNSLOT2SLOT(*sfn_slot)); if (!put_queue(&nr_sfn_slot_queue, sfn_slot)) @@ -1026,7 +1026,7 @@ void *nrue_standalone_pnf_task(void *context) { slot_rnti_mcs[NFAPI_SFNSLOT2SLOT(ch_info->sfn_slot)].sinr = ch_info->sinr[i]; - LOG_D(NR_PHY, "Received_SINR[%d] = %f, sfn:slot %d:%d\n", + LOG_T(NR_PHY, "Received_SINR[%d] = %f, sfn:slot %d:%d\n", i, ch_info->sinr[i], NFAPI_SFNSLOT2SFN(ch_info->sfn_slot), NFAPI_SFNSLOT2SLOT(ch_info->sfn_slot)); } @@ -1112,7 +1112,7 @@ void update_harq_status(module_id_t module_id, uint8_t harq_pid, uint8_t ack_nac if (current_harq->active) { current_harq->ack = ack_nack; current_harq->ack_received = true; - LOG_D(PHY,"Updating harq_status for harq_id %d,ack/nak %d\n",harq_pid,current_harq->ack); + LOG_T(PHY,"Updating harq_status for harq_id %d,ack/nak %d\n",harq_pid,current_harq->ack); } else { //shouldn't get here @@ -1134,7 +1134,7 @@ int nr_ue_ul_indication(nr_uplink_indication_t *ul_info){ ret = nr_ue_scheduler(NULL, ul_info); } else - LOG_D(NR_MAC, "In %s():%d not calling scheduler. sched mode = %d and mac->ra.ra_state = %d\n", + LOG_T(NR_MAC, "In %s():%d not calling scheduler. sched mode = %d and mac->ra.ra_state = %d\n", __FUNCTION__, __LINE__, ul_info->ue_sched_mode, mac->ra.ra_state); NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon = mac->scc != NULL ? mac->scc->tdd_UL_DL_ConfigurationCommon : mac->scc_SIB->tdd_UL_DL_ConfigurationCommon; @@ -1174,9 +1174,9 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ } else { // UL indication after reception of DCI or DL PDU if (dl_info && dl_info->dci_ind && dl_info->dci_ind->number_of_dcis) { - LOG_D(MAC,"[L2][IF MODULE][DL INDICATION][DCI_IND]\n"); + LOG_T(MAC,"[L2][IF MODULE][DL INDICATION][DCI_IND]\n"); for (int i = 0; i < dl_info->dci_ind->number_of_dcis; i++) { - LOG_D(MAC,">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d\n",i,dl_info->dci_ind->number_of_dcis); + LOG_T(MAC,">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d\n",i,dl_info->dci_ind->number_of_dcis); nr_scheduled_response_t scheduled_response; int8_t ret = handle_dci(dl_info->module_id, dl_info->cc_id, @@ -1189,12 +1189,12 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ /* The check below filters out UL_DCIs (format 7) which are being processed as DL_DCIs. */ if (dci_index->dci_format == 7 && mac->ra.ra_state == RA_SUCCEEDED) { - LOG_D(NR_MAC, "We are filtering a UL_DCI to prevent it from being treated like a DL_DCI\n"); + LOG_T(NR_MAC, "We are filtering a UL_DCI to prevent it from being treated like a DL_DCI\n"); break; } dci_pdu_rel15_t *def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dci_index->dci_format]; g_harq_pid = def_dci_pdu_rel15->harq_pid; - LOG_D(NR_MAC, "Setting harq_pid = %d and dci_index = %d (based on format)\n", g_harq_pid, dci_index->dci_format); + LOG_T(NR_MAC, "Setting harq_pid = %d and dci_index = %d (based on format)\n", g_harq_pid, dci_index->dci_format); ret_mask |= (ret << FAPI_NR_DCI_IND); if (ret >= 0) { @@ -1213,7 +1213,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ for (int i=0; irx_ind->number_pdus; ++i) { - LOG_D(MAC, "In %s sending DL indication to MAC. 1 PDU type %d of %d total number of PDUs \n", + LOG_T(MAC, "In %s sending DL indication to MAC. 1 PDU type %d of %d total number of PDUs \n", __FUNCTION__, dl_info->rx_ind->rx_indication_body[i].pdu_type, dl_info->rx_ind->number_pdus); @@ -1297,7 +1297,7 @@ int nr_ue_dcireq(nr_dcireq_t *dcireq) { dl_config->sfn = UE_mac->dl_config_request.sfn; dl_config->slot = UE_mac->dl_config_request.slot; - LOG_D(PHY, "Entering UE DCI configuration frame %d slot %d \n", dcireq->frame, dcireq->slot); + LOG_T(PHY, "Entering UE DCI configuration frame %d slot %d \n", dcireq->frame, dcireq->slot); ue_dci_configuration(UE_mac, dl_config, dcireq->frame, dcireq->slot); @@ -1337,13 +1337,13 @@ static int get_mcs_from_sinr(float sinr) { if (sinr < (nr_bler_data[0].bler_table[0][0])) { - LOG_I(NR_MAC, "The SINR found is smaller than first MCS table\n"); + LOG_D(NR_MAC, "The SINR found is smaller than first MCS table\n"); return 0; } if (sinr > (nr_bler_data[NR_NUM_MCS-1].bler_table[nr_bler_data[NR_NUM_MCS-1].length - 1][0])) { - LOG_I(NR_MAC, "The SINR found is larger than last MCS table\n"); + LOG_D(NR_MAC, "The SINR found is larger than last MCS table\n"); return NR_NUM_MCS-1; } @@ -1354,7 +1354,7 @@ static int get_mcs_from_sinr(float sinr) float smallest_sinr = (nr_bler_data[n].bler_table[0][0]); if (sinr < largest_sinr && sinr > smallest_sinr) { - LOG_I(NR_MAC, "The SINR found in MCS %d table\n", n); + LOG_D(NR_MAC, "The SINR found in MCS %d table\n", n); return n; } } @@ -1383,7 +1383,7 @@ static int get_cqi_from_mcs(void) int mcs = get_mcs_from_sinr(slot_rnti_mcs[slot].sinr); CHECK_INDEX(mcs_to_cqi, mcs); int cqi = mcs_to_cqi[mcs]; - LOG_I(NR_MAC, "SINR: %f -> MCS: %d -> CQI: %d\n", slot_rnti_mcs[slot].sinr, mcs, cqi); + LOG_D(NR_MAC, "SINR: %f -> MCS: %d -> CQI: %d\n", slot_rnti_mcs[slot].sinr, mcs, cqi); return cqi; } slot++; @@ -1418,7 +1418,7 @@ static void read_channel_param(const nfapi_nr_dl_tti_pdsch_pdu_rel15_t * pdu, in slot_rnti_mcs[slot].drop_flag[index] = false; slot_rnti_mcs[slot].num_pdus = index+1; //index starts at 0 so we incrament to get num of pdus slot_rnti_mcs[slot].latest = true; - LOG_I(NR_MAC, "Adding MCS %d and RNTI %x for slot_rnti_mcs[%d]\n", slot_rnti_mcs[slot].mcs[index], slot_rnti_mcs[slot].rnti[index], slot); + LOG_D(NR_MAC, "Adding MCS %d and RNTI %x for slot_rnti_mcs[%d]\n", slot_rnti_mcs[slot].mcs[index], slot_rnti_mcs[slot].rnti[index], slot); return; } @@ -1448,20 +1448,20 @@ static float get_bler_val(uint8_t mcs, int sinr) // 4th col = dropped packets, 5th col = total packets float bler_val = 0.0; CHECK_INDEX(nr_bler_data, mcs); - LOG_I(NR_MAC, "sinr %d min %d max %d\n", sinr, + LOG_D(NR_MAC, "sinr %d min %d max %d\n", sinr, (int)(nr_bler_data[mcs].bler_table[0][0] * 10), (int)(nr_bler_data[mcs].bler_table[nr_bler_data[mcs].length - 1][0] * 10) ); if (sinr < (int)(nr_bler_data[mcs].bler_table[0][0] * 10)) { - LOG_I(NR_MAC, "MCS %d table. SINR is smaller than lowest SINR, bler_val is set based on lowest SINR in table\n", mcs); + LOG_D(NR_MAC, "MCS %d table. SINR is smaller than lowest SINR, bler_val is set based on lowest SINR in table\n", mcs); bler_val = nr_bler_data[mcs].bler_table[0][4] / nr_bler_data[mcs].bler_table[0][5]; return bler_val; } if (sinr > (int)(nr_bler_data[mcs].bler_table[nr_bler_data[mcs].length - 1][0] * 10)) { - LOG_I(NR_MAC, "MCS %d table. SINR is greater than largest SINR. bler_val is set based on largest SINR in table\n", mcs); + LOG_D(NR_MAC, "MCS %d table. SINR is greater than largest SINR. bler_val is set based on largest SINR in table\n", mcs); bler_val = nr_bler_data[mcs].bler_table[(nr_bler_data[mcs].length - 1)][4] / nr_bler_data[mcs].bler_table[(nr_bler_data[mcs].length - 1)][5]; return bler_val; } @@ -1479,7 +1479,7 @@ static float get_bler_val(uint8_t mcs, int sinr) { float bler_val1 = nr_bler_data[mcs].bler_table[i - 1][4] / nr_bler_data[mcs].bler_table[i - 1][5]; float bler_val2 = nr_bler_data[mcs].bler_table[i][4] / nr_bler_data[mcs].bler_table[i][5]; - LOG_I(NR_MAC, "sinr %d min %f max %f\n", sinr, bler_val1, bler_val2); + LOG_D(NR_MAC, "sinr %d min %f max %f\n", sinr, bler_val1, bler_val2); return ((bler_val1 + bler_val2) / 2); } } @@ -1510,7 +1510,7 @@ static bool should_drop_transport_block(int slot, uint16_t rnti) NR_UE_MAC_INST_t *mac = get_mac_inst(0); if (mac->ra.ra_state < RA_SUCCEEDED) { - LOG_I(NR_MAC, "Not dropping because MAC state: %d", mac->ra.ra_state); + LOG_D(NR_MAC, "Not dropping because MAC state: %d", mac->ra.ra_state); return false; } @@ -1519,7 +1519,7 @@ static bool should_drop_transport_block(int slot, uint16_t rnti) Generate random uniform vairable to compare against bler_val. */ int num_pdus = slot_rnti_mcs[slot].num_pdus; assert(slot < 20 && slot >= 0); - LOG_I(NR_MAC, "rnti: %x num_pdus %d state %d slot %u sinr %f\n", + LOG_D(NR_MAC, "rnti: %x num_pdus %d state %d slot %u sinr %f\n", rnti, num_pdus, mac->ra.ra_state, slot, slot_rnti_mcs[slot].sinr); assert(num_pdus > 0); CHECK_INDEX(slot_rnti_mcs[slot].rnti, num_pdus); @@ -1540,7 +1540,7 @@ static bool should_drop_transport_block(int slot, uint16_t rnti) flagged for drop before returning. If even one is flagged for drop we return immediately because we drop the entire packet. */ - LOG_I(NR_MAC, "rnti: %x mcs %u slot %u sinr %f\n", + LOG_D(NR_MAC, "rnti: %x mcs %u slot %u sinr %f\n", slot_rnti_mcs[slot].rnti[n], mcs, slot, slot_rnti_mcs[slot].sinr); float bler_val; @@ -1550,11 +1550,11 @@ static bool should_drop_transport_block(int slot, uint16_t rnti) bler_val = get_bler_val(mcs, ((int)(slot_rnti_mcs[slot].sinr * 10))); double drop_cutoff = ((double) rand() / (RAND_MAX)); assert(drop_cutoff <= 1); - LOG_I(NR_MAC, "SINR = %f, Bler_val = %f, MCS = %"PRIu8"\n", slot_rnti_mcs[slot].sinr, bler_val, slot_rnti_mcs[slot].mcs[n]); + LOG_D(NR_MAC, "SINR = %f, Bler_val = %f, MCS = %"PRIu8"\n", slot_rnti_mcs[slot].sinr, bler_val, slot_rnti_mcs[slot].mcs[n]); if (drop_cutoff <= bler_val) { slot_rnti_mcs[slot].drop_flag[n] = true; - LOG_D(NR_MAC, "We are dropping this packet. Bler_val = %f, MCS = %"PRIu8", slot = %d\n", bler_val, slot_rnti_mcs[slot].mcs[n], slot); + LOG_T(NR_MAC, "We are dropping this packet. Bler_val = %f, MCS = %"PRIu8", slot = %d\n", bler_val, slot_rnti_mcs[slot].mcs[n], slot); return slot_rnti_mcs[slot].drop_flag[n]; } } From 91d42fd5ec9062c47eae149dde88d2758eb7c941 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Thu, 17 Mar 2022 12:44:30 -0700 Subject: [PATCH 076/150] Fixing memory leaks and hoping to fix num_dci_option bug --- executables/nr-ue.c | 6 ++-- openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 31 +++++++++++---------- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 30 ++++++++++++-------- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index c13adb70b3..66b08522f6 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -380,9 +380,11 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) } if (slot_ind) { sfn_slot = *slot_ind; + free_and_zero(slot_ind); } else if (ch_info) { sfn_slot = ch_info->sfn_slot; + free_and_zero(ch_info); } frame_t frame = NFAPI_SFNSLOT2SFN(sfn_slot); @@ -465,10 +467,6 @@ static void *NRUE_phy_stub_standalone_pnf_task(void *arg) pdcp_run(&ctxt); } process_queued_nr_nfapi_msgs(mac, sfn_slot); - free(slot_ind); - slot_ind = NULL; - free(ch_info); - ch_info = NULL; } return NULL; } diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 31e8231465..a68cd469fd 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -2255,26 +2255,29 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in int O_CSI = 0; int N_UCI = 0; - PUCCH_sched_t *pucch = calloc(1,sizeof(*pucch)); - pucch->resource_indicator = -1; - pucch->initial_pucch_id = -1; + PUCCH_sched_t pucch = { + .resource_indicator = -1, + .initial_pucch_id = -1 + }; + pucch.resource_indicator = -1; + pucch.initial_pucch_id = -1; uint16_t rnti = mac->crnti; //FIXME not sure this is valid for all pucch instances // SR - if(trigger_periodic_scheduling_request(mac, pucch, frameP, slotP)) { + if (trigger_periodic_scheduling_request(mac, &pucch, frameP, slotP)) { O_SR = 1; /* sr_payload = 1 means that this is a positive SR, sr_payload = 0 means that it is a negative SR */ - pucch->sr_payload = nr_ue_get_SR(module_idP, + pucch.sr_payload = nr_ue_get_SR(module_idP, frameP, slotP); } // CSI if (mac->ra.ra_state == RA_SUCCEEDED || get_softmodem_params()->phy_test == 1) - O_CSI = nr_get_csi_measurements(mac, frameP, slotP, pucch); + O_CSI = nr_get_csi_measurements(mac, frameP, slotP, &pucch); // ACKNACK - O_ACK = get_downlink_ack(mac, frameP, slotP, pucch); + O_ACK = get_downlink_ack(mac, frameP, slotP, &pucch); NR_BWP_Id_t bwp_id = mac->UL_BWP_Id; NR_PUCCH_Config_t *pucch_Config = NULL; @@ -2304,8 +2307,8 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in pucch_Config->format2 && (pucch_Config->format2->choice.setup->simultaneousHARQ_ACK_CSI == NULL)) { O_CSI = 0; - pucch->csi_part1_payload = 0; - pucch->csi_part2_payload = 0; + pucch.csi_part1_payload = 0; + pucch.csi_part2_payload = 0; } N_UCI = O_SR + O_ACK + O_CSI; @@ -2314,13 +2317,13 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in mac->nr_ue_emul_l1.num_csi_reports = O_CSI; // do no transmit pucch if only SR scheduled and it is negative - if ((O_ACK + O_CSI) == 0 && pucch->sr_payload == 0) + if ((O_ACK + O_CSI) == 0 && pucch.sr_payload == 0) return; if (N_UCI > 0) { LOG_D(NR_MAC,"%d.%d configure pucch, O_SR %d, O_ACK %d, O_CSI %d\n",frameP,slotP,O_SR,O_ACK,O_CSI); - pucch->resource_set_id = find_pucch_resource_set(mac, O_ACK + O_CSI); - select_pucch_resource(mac, pucch); + pucch.resource_set_id = find_pucch_resource_set(mac, O_ACK + O_CSI); + select_pucch_resource(mac, &pucch); fapi_nr_ul_config_request_t *ul_config = get_ul_config_request(mac, slotP); pthread_mutex_lock(&ul_config->mutex_ul_config); AssertFatal(ul_config->number_pdusnumber_pdus %d out of bounds\n",ul_config->number_pdus); @@ -2333,10 +2336,10 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in nr_ue_configure_pucch(mac, slotP, rnti, - pucch, + &pucch, pucch_pdu, O_SR, O_ACK, O_CSI); - LOG_D(NR_MAC,"Configuring pucch, is_common = %d\n",pucch->is_common); + LOG_D(NR_MAC, "Configuring pucch, is_common = %d\n", pucch.is_common); nr_scheduled_response_t scheduled_response; fill_scheduled_response(&scheduled_response, NULL, ul_config, NULL, module_idP, 0 /*TBR fix*/, frameP, slotP, thread_id); if(mac->if_module != NULL && mac->if_module->scheduled_response != NULL) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 2dd7e0cb27..a402e36222 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -640,12 +640,9 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n if (!put_queue(&nr_ul_tti_req_queue, ul_tti_req)) { LOG_E(NR_PHY, "put_queue failed for ul_tti_req.\n"); - free(ul_tti_req); - ul_tti_req = NULL; } return; } - free(ul_tti_req); } static void fill_dci_from_dl_config(nr_downlink_indication_t*dl_ind, fapi_nr_dl_config_request_t *dl_config) @@ -710,20 +707,29 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, slot = dl_tti_request->Slot; LOG_I(NR_PHY, "[%d, %d] dl_tti_request\n", frame, slot); copy_dl_tti_req_to_dl_info(&mac->dl_info, dl_tti_request); + free_and_zero(dl_tti_request); } /* This checks if the previously recevied DCI matches our current RNTI value. The assumption is that if the DCI matches our RNTI, then the incoming tx_data_request is also destined for the current UE. If the RAR hasn't been processed yet, we do not want to be filtering the tx_data_requests. */ - if (tx_data_request && (mac->nr_ue_emul_l1.expected_sib || - mac->nr_ue_emul_l1.expected_rar || - mac->nr_ue_emul_l1.expected_dci)) + if (tx_data_request) { - frame = tx_data_request->SFN; - slot = tx_data_request->Slot; - LOG_I(NR_PHY, "[%d, %d] PDSCH in tx_request\n", frame, slot); - copy_tx_data_req_to_dl_info(&mac->dl_info, tx_data_request); + if (mac->nr_ue_emul_l1.expected_sib || + mac->nr_ue_emul_l1.expected_rar || + mac->nr_ue_emul_l1.expected_dci) + { + frame = tx_data_request->SFN; + slot = tx_data_request->Slot; + LOG_I(NR_PHY, "[%d, %d] PDSCH in tx_request\n", frame, slot); + copy_tx_data_req_to_dl_info(&mac->dl_info, tx_data_request); + } + else + { + LOG_D(NR_MAC, "Unexpected tx_data_req\n"); + } + free_and_zero(tx_data_request); } else if (ul_dci_request) { @@ -731,6 +737,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, slot = ul_dci_request->Slot; LOG_I(NR_PHY, "[%d, %d] ul_dci_request\n", frame, slot); copy_ul_dci_data_req_to_dl_info(&mac->dl_info, ul_dci_request); + free_and_zero(ul_dci_request); } else if (ul_tti_request) { @@ -738,6 +745,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, slot = ul_tti_request->Slot; LOG_D(NR_PHY, "[%d, %d] ul_tti_request\n", frame, slot); copy_ul_tti_data_req_to_dl_info(&mac->dl_info, ul_tti_request); + free_and_zero(ul_tti_request); } else { @@ -771,7 +779,7 @@ void check_and_process_dci(nfapi_nr_dl_tti_request_t *dl_tti_request, mac->scc->tdd_UL_DL_ConfigurationCommon : mac->scc_SIB->tdd_UL_DL_ConfigurationCommon, ul_info.slot_tx, - mac->frame_type)) + mac->frame_type) && mac->ra.ra_state != RA_SUCCEEDED) { nr_ue_scheduler(NULL, &ul_info); nr_ue_prach_scheduler(ul_info.module_id, ul_info.frame_tx, ul_info.slot_tx, ul_info.thread_id); From 85e879b1ea47304e42a0b6c5d1497b7d814451b5 Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 18 Mar 2022 10:30:12 +0100 Subject: [PATCH 077/150] remove call to csirs configuration in SA (not working yet, asn1 encoding fails) --- openair2/RRC/NR/MESSAGES/asn1_msg.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c index c25060208e..02471b2f11 100755 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.c +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c @@ -1462,17 +1462,6 @@ void update_cellGroupConfig(NR_CellGroupConfig_t *cellGroupConfig, NR_ServingCellConfigCommon_t *scc = carrier->servingcellconfigcommon; - NR_CSI_MeasConfig_t *csi_MeasConfig; - if(!SpCellConfig->spCellConfigDedicated->csi_MeasConfig) { - csi_MeasConfig = calloc(1,sizeof(*csi_MeasConfig)); - SpCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup = csi_MeasConfig; - } - else - csi_MeasConfig = SpCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup; - - int curr_bwp = NRRIV2BW(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth,MAX_BWP_SIZE); - config_csirs(scc, csi_MeasConfig, uid, carrier->pdsch_AntennaPorts, curr_bwp, carrier->do_CSIRS); - NR_BWP_DownlinkDedicated_t *bwp_Dedicated = SpCellConfig->spCellConfigDedicated->initialDownlinkBWP; set_dl_mcs_table(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.subcarrierSpacing, uecap, bwp_Dedicated, scc); From 256a00af7744fcdfd409267627339d9e08e4036e Mon Sep 17 00:00:00 2001 From: francescomani Date: Fri, 18 Mar 2022 11:10:21 +0100 Subject: [PATCH 078/150] default SIB TDA = 1 (and chech to avoid csi-rs overlapping) --- openair2/GNB_APP/gnb_paramdef.h | 2 +- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c | 2 ++ openair2/RRC/NR/nr_rrc_config.c | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/openair2/GNB_APP/gnb_paramdef.h b/openair2/GNB_APP/gnb_paramdef.h index cde7819e25..10e99ea921 100644 --- a/openair2/GNB_APP/gnb_paramdef.h +++ b/openair2/GNB_APP/gnb_paramdef.h @@ -146,7 +146,7 @@ typedef enum { {GNB_CONFIG_STRING_SSBSUBCARRIEROFFSET, NULL, 0, iptr:NULL, defintval:31, TYPE_INT, 0}, \ {GNB_CONFIG_STRING_PDSCHANTENNAPORTS, NULL, 0, iptr:NULL, defintval:1, TYPE_INT, 0}, \ {GNB_CONFIG_STRING_PUSCHANTENNAPORTS, NULL, 0, iptr:NULL, defintval:1, TYPE_INT, 0}, \ -{GNB_CONFIG_STRING_SIB1TDA, NULL, 0, iptr:NULL, defintval:0, TYPE_INT, 0}, \ +{GNB_CONFIG_STRING_SIB1TDA, NULL, 0, iptr:NULL, defintval:1, TYPE_INT, 0}, \ {GNB_CONFIG_STRING_DOCSIRS, NULL, 0, iptr:NULL, defintval:0, TYPE_INT, 0}, \ {GNB_CONFIG_STRING_DOSRS, NULL, 0, iptr:NULL, defintval:0, TYPE_INT, 0}, \ {GNB_CONFIG_STRING_NRCELLID, NULL, 0, u64ptr:NULL, defint64val:1, TYPE_UINT64, 0}, \ diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c index 7d16a4ee01..b8f03e7f3a 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_bch.c @@ -620,6 +620,8 @@ void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t slotP) 1, &is_typeA, &startSymbolIndex, &nrOfSymbols); + AssertFatal((startSymbolIndex+nrOfSymbols)<14,"SIB1 TDA %d would cause overlap with CSI-RS. Please select a different SIB1 TDA.\n",time_domain_allocation); + int mappingtype = is_typeA? typeA: typeB; uint16_t dlDmrsSymbPos = fill_dmrs_mask(NULL, gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position, nrOfSymbols, startSymbolIndex, mappingtype, 1); diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c index e52ead6980..bb2a180146 100644 --- a/openair2/RRC/NR/nr_rrc_config.c +++ b/openair2/RRC/NR/nr_rrc_config.c @@ -38,6 +38,7 @@ void set_csirs_periodicity(NR_NZP_CSI_RS_Resource_t *nzpcsi0, int uid, int nb_sl nzpcsi0->periodicityAndOffset = calloc(1,sizeof(*nzpcsi0->periodicityAndOffset)); int ideal_period = nb_slots_per_period*MAX_MOBILES_PER_GNB; + if (ideal_period<5) { nzpcsi0->periodicityAndOffset->present = NR_CSI_ResourcePeriodicityAndOffset_PR_slots4; nzpcsi0->periodicityAndOffset->choice.slots4 = nb_slots_per_period*uid; From f5e143ec78aa34e6051692a8c4700ae0d8c3619a Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 22 Mar 2022 14:49:23 -0700 Subject: [PATCH 079/150] Removing multiple conf files when running multiple NRUEs --- .../episci/episci_nr-ue0.nfapi.conf | 45 ------------------- .../episci/episci_nr-ue1.nfapi.conf | 45 ------------------- .../episci/episci_nr-ue2.nfapi.conf | 45 ------------------- .../episci/episci_nr-ue3.nfapi.conf | 45 ------------------- .../episci/episci_nr-ue4.nfapi.conf | 45 ------------------- .../episci/episci_nr-ue5.nfapi.conf | 45 ------------------- 6 files changed, 270 deletions(-) delete mode 100644 ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf delete mode 100644 ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf delete mode 100644 ci-scripts/conf_files/episci/episci_nr-ue2.nfapi.conf delete mode 100644 ci-scripts/conf_files/episci/episci_nr-ue3.nfapi.conf delete mode 100644 ci-scripts/conf_files/episci/episci_nr-ue4.nfapi.conf delete mode 100644 ci-scripts/conf_files/episci/episci_nr-ue5.nfapi.conf diff --git a/ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf deleted file mode 100644 index 22ffb4cd3d..0000000000 --- a/ci-scripts/conf_files/episci/episci_nr-ue0.nfapi.conf +++ /dev/null @@ -1,45 +0,0 @@ -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"; -}; - -uicc0 = { -imsi = "208950000000031"; -key = "0c0a34601d4f07677303652c0462535b"; -opc= "63bfa50ee6523365ff14c1f45f88737d"; -dnn= "oai"; -nssai_sst=222; -nssai_sd=123; -} - -L1s = ( - { - num_cc = 1; - tr_n_preference = "nfapi"; - local_n_if_name = "ens3"; - remote_n_address = "127.0.0.1"; //Proxy IP - local_n_address = "127.0.0.1"; - local_n_portc = 50600; - remote_n_portc = 50601; - local_n_portd = 50610; - remote_n_portd = 50611; - } -); - -RUs = ( - { - local_rf = "yes" - nb_tx = 1 - nb_rx = 1 - att_tx = 90 - att_rx = 0; - bands = [7,38,42,43]; - max_pdschReferenceSignalPower = -27; - max_rxgain = 125; - } -); diff --git a/ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf deleted file mode 100644 index 3d1c008f23..0000000000 --- a/ci-scripts/conf_files/episci/episci_nr-ue1.nfapi.conf +++ /dev/null @@ -1,45 +0,0 @@ -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"; -}; - -uicc0 = { -imsi = "208950000000032"; -key = "0c0a34601d4f07677303652c0462535b"; -opc= "63bfa50ee6523365ff14c1f45f88737d"; -dnn= "oai"; -nssai_sst=222; -nssai_sd=123; -} - -L1s = ( - { - num_cc = 1; - tr_n_preference = "nfapi"; - local_n_if_name = "ens3"; - remote_n_address = "127.0.0.1"; //Proxy IP - local_n_address = "127.0.0.1"; - local_n_portc = 50600; - remote_n_portc = 50601; - local_n_portd = 50610; - remote_n_portd = 50611; - } -); - -RUs = ( - { - local_rf = "yes" - nb_tx = 1 - nb_rx = 1 - att_tx = 90 - att_rx = 0; - bands = [7,38,42,43]; - max_pdschReferenceSignalPower = -27; - max_rxgain = 125; - } -); diff --git a/ci-scripts/conf_files/episci/episci_nr-ue2.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue2.nfapi.conf deleted file mode 100644 index 73c3292809..0000000000 --- a/ci-scripts/conf_files/episci/episci_nr-ue2.nfapi.conf +++ /dev/null @@ -1,45 +0,0 @@ -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"; -}; - -uicc0 = { -imsi = "208950000000033"; -key = "0c0a34601d4f07677303652c0462535b"; -opc= "63bfa50ee6523365ff14c1f45f88737d"; -dnn= "oai"; -nssai_sst=222; -nssai_sd=123; -} - -L1s = ( - { - num_cc = 1; - tr_n_preference = "nfapi"; - local_n_if_name = "ens3"; - remote_n_address = "127.0.0.1"; //Proxy IP - local_n_address = "127.0.0.1"; - local_n_portc = 50600; - remote_n_portc = 50601; - local_n_portd = 50610; - remote_n_portd = 50611; - } -); - -RUs = ( - { - local_rf = "yes" - nb_tx = 1 - nb_rx = 1 - att_tx = 90 - att_rx = 0; - bands = [7,38,42,43]; - max_pdschReferenceSignalPower = -27; - max_rxgain = 125; - } -); diff --git a/ci-scripts/conf_files/episci/episci_nr-ue3.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue3.nfapi.conf deleted file mode 100644 index 1f8f7306c6..0000000000 --- a/ci-scripts/conf_files/episci/episci_nr-ue3.nfapi.conf +++ /dev/null @@ -1,45 +0,0 @@ -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"; -}; - -uicc0 = { -imsi = "208950000000034"; -key = "0c0a34601d4f07677303652c0462535b"; -opc= "63bfa50ee6523365ff14c1f45f88737d"; -dnn= "oai"; -nssai_sst=222; -nssai_sd=123; -} - -L1s = ( - { - num_cc = 1; - tr_n_preference = "nfapi"; - local_n_if_name = "ens3"; - remote_n_address = "127.0.0.1"; //Proxy IP - local_n_address = "127.0.0.1"; - local_n_portc = 50600; - remote_n_portc = 50601; - local_n_portd = 50610; - remote_n_portd = 50611; - } -); - -RUs = ( - { - local_rf = "yes" - nb_tx = 1 - nb_rx = 1 - att_tx = 90 - att_rx = 0; - bands = [7,38,42,43]; - max_pdschReferenceSignalPower = -27; - max_rxgain = 125; - } -); diff --git a/ci-scripts/conf_files/episci/episci_nr-ue4.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue4.nfapi.conf deleted file mode 100644 index 3d1d53463d..0000000000 --- a/ci-scripts/conf_files/episci/episci_nr-ue4.nfapi.conf +++ /dev/null @@ -1,45 +0,0 @@ -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"; -}; - -uicc0 = { -imsi = "208950000000035"; -key = "0c0a34601d4f07677303652c0462535b"; -opc= "63bfa50ee6523365ff14c1f45f88737d"; -dnn= "oai"; -nssai_sst=222; -nssai_sd=123; -} - -L1s = ( - { - num_cc = 1; - tr_n_preference = "nfapi"; - local_n_if_name = "ens3"; - remote_n_address = "127.0.0.1"; //Proxy IP - local_n_address = "127.0.0.1"; - local_n_portc = 50600; - remote_n_portc = 50601; - local_n_portd = 50610; - remote_n_portd = 50611; - } -); - -RUs = ( - { - local_rf = "yes" - nb_tx = 1 - nb_rx = 1 - att_tx = 90 - att_rx = 0; - bands = [7,38,42,43]; - max_pdschReferenceSignalPower = -27; - max_rxgain = 125; - } -); diff --git a/ci-scripts/conf_files/episci/episci_nr-ue5.nfapi.conf b/ci-scripts/conf_files/episci/episci_nr-ue5.nfapi.conf deleted file mode 100644 index 98b4c341ca..0000000000 --- a/ci-scripts/conf_files/episci/episci_nr-ue5.nfapi.conf +++ /dev/null @@ -1,45 +0,0 @@ -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"; -}; - -uicc0 = { -imsi = "208950000000036"; -key = "0c0a34601d4f07677303652c0462535b"; -opc= "63bfa50ee6523365ff14c1f45f88737d"; -dnn= "oai"; -nssai_sst=222; -nssai_sd=123; -} - -L1s = ( - { - num_cc = 1; - tr_n_preference = "nfapi"; - local_n_if_name = "ens3"; - remote_n_address = "127.0.0.1"; //Proxy IP - local_n_address = "127.0.0.1"; - local_n_portc = 50600; - remote_n_portc = 50601; - local_n_portd = 50610; - remote_n_portd = 50611; - } -); - -RUs = ( - { - local_rf = "yes" - nb_tx = 1 - nb_rx = 1 - att_tx = 90 - att_rx = 0; - bands = [7,38,42,43]; - max_pdschReferenceSignalPower = -27; - max_rxgain = 125; - } -); From 548315ff64a9915d3c12877a9c50d527d9390a01 Mon Sep 17 00:00:00 2001 From: francescomani Date: Wed, 23 Mar 2022 16:22:51 +0100 Subject: [PATCH 080/150] fix memory leaks after merge --- openair1/PHY/INIT/nr_init.c | 3 +-- openair1/PHY/INIT/nr_init_ue.c | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index 9c80782ccf..85d1b55912 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -331,10 +331,9 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB) free_and_zero(pdcch_dmrs); uint32_t ****pdsch_dmrs = gNB->nr_gold_pdsch_dmrs; - int nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1; for (int slot = 0; slot < fp->slots_per_frame; slot++) { for (int symb = 0; symb < fp->symbols_per_slot; symb++) { - for (int q = 0; q < nb_codewords; q++) + for (int q = 0; q < NR_NB_NSCID; q++) free_and_zero(pdsch_dmrs[slot][symb][q]); free_and_zero(pdsch_dmrs[slot][symb]); } diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index 9e41d00b3e..c5b611c7b6 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -216,7 +216,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) // ceil(((NB_RB*6(k)*2(QPSK)/32) // 3 RE *2(QPSK) int pusch_dmrs_init_length = ((fp->N_RB_UL*12)>>5)+1; - ue->nr_gold_pusch_dmrs = (uint32_t ****)malloc16(fp->slots_per_frame*sizeof(uint32_t ***)); uint32_t ****pusch_dmrs = ue->nr_gold_pusch_dmrs; @@ -230,7 +229,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) for (int q=0; qslots_per_frame; slot++) { for (int symb = 0; symb < fp->symbols_per_slot; symb++) { + for (int q=0; qnr_gold_pusch_dmrs[slot][symb][q]); free_and_zero(ue->nr_gold_pusch_dmrs[slot][symb]); } free_and_zero(ue->nr_gold_pusch_dmrs[slot]); @@ -511,10 +512,9 @@ void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) } free_and_zero(ue->nr_gold_pdcch[0]); - int nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1; for (int slot=0; slotslots_per_frame; slot++) { for (int symb=0; symbsymbols_per_slot; symb++) { - for (int q=0; qnr_gold_pdsch[0][slot][symb][q]); free_and_zero(ue->nr_gold_pdsch[0][slot][symb]); } From 3e6f957a63ace3cabae6142ca41172faf8ac4157 Mon Sep 17 00:00:00 2001 From: Melissa Elkadi Date: Tue, 22 Mar 2022 14:50:03 -0700 Subject: [PATCH 081/150] Several nfapi bug fixes for RX ind and SR ind The SR ind was not properly being packed and unpacked. The RX inidcation was not properly being allocated prior to unpacking. The freq_shift field was declared as a uint16_t but push/pulled as a uint8_t. Added MSG_TRUNC in the nfapi VNF recvfrom. --- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 31 +++++++++------------------ nfapi/open-nFAPI/vnf/src/vnf_p7.c | 30 +++++++++++--------------- 2 files changed, 23 insertions(+), 38 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index ba30d8f469..3adde23e7d 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -1048,7 +1048,7 @@ static uint8_t pack_ul_tti_request_srs_pdu(nfapi_nr_srs_pdu_t *srs_pdu, uint8_t push8(srs_pdu->comb_offset, ppWritePackedMsg, end) && push8(srs_pdu->cyclic_shift, ppWritePackedMsg, end) && push8(srs_pdu->frequency_position, ppWritePackedMsg, end) && - push8(srs_pdu->frequency_shift, ppWritePackedMsg, end) && + push16(srs_pdu->frequency_shift, ppWritePackedMsg, end) && push8(srs_pdu->frequency_hopping, ppWritePackedMsg, end) && push8(srs_pdu->group_or_sequence_hopping, ppWritePackedMsg, end) && push8(srs_pdu->resource_type, ppWritePackedMsg, end) && @@ -1598,7 +1598,6 @@ static uint8_t pack_ul_tti_request(void *msg, uint8_t **ppWritePackedMsg, uint8_ if (!push8(pNfapiMsg->n_ulcch, ppWritePackedMsg, end)) return 0; - for(int i=0; in_pdus; i++) { if(!pack_ul_tti_pdu_list_value(&pNfapiMsg->pdus_list[i], ppWritePackedMsg, end)) return 0; @@ -3023,10 +3022,8 @@ return 1; //RX DATA INDICATION -static uint8_t pack_nr_rx_data_indication_body(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end) +static uint8_t pack_nr_rx_data_indication_body(nfapi_nr_rx_data_pdu_t *value, uint8_t **ppWritePackedMsg, uint8_t *end) { - nfapi_nr_rx_data_pdu_t* value = (nfapi_nr_rx_data_pdu_t*)tlv; - if(!(push32(value->handle, ppWritePackedMsg, end) && push16(value->rnti, ppWritePackedMsg, end) && push8(value->harq_id, ppWritePackedMsg, end) && @@ -3056,7 +3053,7 @@ static uint8_t pack_nr_rx_data_indication(void *msg, uint8_t **ppWritePackedMsg, for (int i = 0; i < pNfapiMsg->number_of_pdus; i++) { - if(!pack_nr_rx_data_indication_body(&(pNfapiMsg->pdu_list[i]), ppWritePackedMsg, end)) + if(!pack_nr_rx_data_indication_body(&(pNfapiMsg->pdu_list[i]), ppWritePackedMsg, end)) return 0; } @@ -3104,10 +3101,8 @@ return 1; //SRS INDICATION -static uint8_t pack_nr_srs_indication_body(void* tlv, uint8_t **ppWritePackedMsg, uint8_t *end) +static uint8_t pack_nr_srs_indication_body(nfapi_nr_srs_indication_pdu_t *value, uint8_t **ppWritePackedMsg, uint8_t *end) { - nfapi_nr_srs_indication_pdu_t* value = (nfapi_nr_srs_indication_pdu_t*)tlv; - if(!(push32(value->handle, ppWritePackedMsg, end) && push16(value->rnti, ppWritePackedMsg, end) && push16(value->timing_advance, ppWritePackedMsg, end) && @@ -3119,8 +3114,7 @@ static uint8_t pack_nr_srs_indication_body(void* tlv, uint8_t **ppWritePackedMsg return 0; for(int i = 0; i < value->reported_symbol_list->num_rbs; i++) { - if(!(push8(value->reported_symbol_list->rb_list->rb_snr, ppWritePackedMsg, end) - )) + if (!push8(value->reported_symbol_list->rb_list[i].rb_snr, ppWritePackedMsg, end)) return 0; } return 1; @@ -5722,7 +5716,7 @@ static uint8_t unpack_nr_rx_data_indication_body(nfapi_nr_rx_data_pdu_t* value, return 0; uint16_t length = value->pdu_length; - value->pdu = nfapi_p7_allocate(length, config); + value->pdu = nfapi_p7_allocate(sizeof(*value->pdu) * length, config); if (pullarray8(ppReadPackedMsg, value->pdu, length, length, end) == 0) { @@ -5803,10 +5797,8 @@ return 1; //SRS INDICATION -static uint8_t unpack_nr_srs_indication_body(void* tlv, uint8_t **ppReadPackedMsg, uint8_t *end) +static uint8_t unpack_nr_srs_indication_body(nfapi_nr_srs_indication_pdu_t* value, uint8_t **ppReadPackedMsg, uint8_t *end) { - nfapi_nr_srs_indication_pdu_t* value = (nfapi_nr_srs_indication_pdu_t*)tlv; - if(!(pull32(ppReadPackedMsg, &value->handle, end) && pull16(ppReadPackedMsg, &value->rnti, end) && pull16(ppReadPackedMsg, &value->timing_advance, end) && @@ -5818,17 +5810,14 @@ static uint8_t unpack_nr_srs_indication_body(void* tlv, uint8_t **ppReadPackedMs return 0; for(int i = 0; i < value->reported_symbol_list->num_rbs; i++) { - if(!(pull8(ppReadPackedMsg, &value->reported_symbol_list->rb_list->rb_snr, end) - )) + if (!pull8(ppReadPackedMsg, &value->reported_symbol_list->rb_list[i].rb_snr, end)) return 0; } return 1; } -static uint8_t unpack_nr_srs_indication(uint8_t **ppReadPackedMsg, uint8_t *end, void *msg, nfapi_p7_codec_config_t* config) +static uint8_t unpack_nr_srs_indication(uint8_t **ppReadPackedMsg, uint8_t *end, nfapi_nr_srs_indication_t *pNfapiMsg, nfapi_p7_codec_config_t* config) { - nfapi_nr_srs_indication_t *pNfapiMsg = (nfapi_nr_srs_indication_t*)msg; - if (!(pull16(ppReadPackedMsg,&pNfapiMsg->sfn , end) && pull16(ppReadPackedMsg,&pNfapiMsg->slot , end) && pull8(ppReadPackedMsg,&pNfapiMsg->number_of_pdus, end) @@ -5837,7 +5826,7 @@ static uint8_t unpack_nr_srs_indication(uint8_t **ppReadPackedMsg, uint8_t *end, for(int i=0; inumber_of_pdus;i++) { - if(!unpack_nr_srs_indication_body(&pNfapiMsg->pdu_list,ppReadPackedMsg,end)) + if (!unpack_nr_srs_indication_body(&pNfapiMsg->pdu_list[i], ppReadPackedMsg, end)) return 0; } diff --git a/nfapi/open-nFAPI/vnf/src/vnf_p7.c b/nfapi/open-nFAPI/vnf/src/vnf_p7.c index 2ac59dd7be..e4b4bef848 100644 --- a/nfapi/open-nFAPI/vnf/src/vnf_p7.c +++ b/nfapi/open-nFAPI/vnf/src/vnf_p7.c @@ -1473,7 +1473,7 @@ void vnf_handle_nr_slot_indication(void *pRecvMsg, int recvMsgLen, vnf_p7_t* vnf } else { - NFAPI_TRACE(NFAPI_TRACE_INFO, "%s: Handling NR SLOT Indication\n", __FUNCTION__); + NFAPI_TRACE(NFAPI_TRACE_DEBUG, "%s: Handling NR SLOT Indication\n", __FUNCTION__); if(vnf_p7->_public.nr_slot_indication) { (vnf_p7->_public.nr_slot_indication)(&ind); @@ -2574,32 +2574,28 @@ int vnf_p7_read_dispatch_message(vnf_p7_t* vnf_p7) // resize the buffer if we have a large segment if(header.message_length > vnf_p7->rx_message_buffer_size) { - NFAPI_TRACE(NFAPI_TRACE_NOTE, "reallocing rx buffer %d\n", header.message_length); + NFAPI_TRACE(NFAPI_TRACE_NOTE, "reallocing rx buffer %d\n", header.message_length); vnf_p7->rx_message_buffer = realloc(vnf_p7->rx_message_buffer, header.message_length); vnf_p7->rx_message_buffer_size = header.message_length; } // read the segment - recvfrom_result = recvfrom(vnf_p7->socket, vnf_p7->rx_message_buffer, header.message_length, MSG_WAITALL, (struct sockaddr*)&remote_addr, &remote_addr_size); + recvfrom_result = recvfrom(vnf_p7->socket, vnf_p7->rx_message_buffer, header.message_length, MSG_WAITALL | MSG_TRUNC, (struct sockaddr*)&remote_addr, &remote_addr_size); + NFAPI_TRACE(NFAPI_TRACE_INFO, "recvfrom_result = %d from %s():%d\n", recvfrom_result, __FUNCTION__, __LINE__); // todo : how to handle incomplete readfroms, need some sort of buffer/select - if(recvfrom_result == 0) - { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "recvfrom returned 0\n"); - } - else if(recvfrom_result != -1 && recvfrom_result != header.message_length) - { - NFAPI_TRACE(NFAPI_TRACE_ERROR, "Received unexpected number of bytes %d %d\n", recvfrom_result, header.message_length); - - recvfrom_result += recvfrom(vnf_p7->socket, &vnf_p7->rx_message_buffer[recvfrom_result], header.message_length - recvfrom_result, MSG_WAITALL, (struct sockaddr*)&remote_addr, &remote_addr_size); - - } - - - if(recvfrom_result > 0) + if (recvfrom_result > 0) { + if (recvfrom_result != header.message_length) + { + NFAPI_TRACE(NFAPI_TRACE_ERROR, "(%d) Received unexpected number of bytes. %d != %d", + __LINE__, recvfrom_result, header.message_length); + break; + } + NFAPI_TRACE(NFAPI_TRACE_INFO, "Calling vnf_nr_handle_p7_message from %d\n", __LINE__); vnf_handle_p7_message(vnf_p7->rx_message_buffer, recvfrom_result, vnf_p7); + return 0; } else { From 4a00c99ab0af31c538ce135af0797550564c6685 Mon Sep 17 00:00:00 2001 From: Mario Hudon Date: Wed, 23 Mar 2022 17:11:02 -0400 Subject: [PATCH 082/150] Fixed rebaseline to develop --- openair1/PHY/INIT/nr_init_ue.c | 34 +++------------------ openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c | 6 +--- openair1/SCHED_NR_UE/fapi_nr_ue_l1.c | 3 +- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 2 +- 4 files changed, 9 insertions(+), 36 deletions(-) diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index cab4583efd..94f3564baa 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -410,9 +410,13 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) ue->pdsch_vars[th_id][gNB_id]->dl_ch_magb1[k][l][idx] = (int32_t *)malloc16_clear(7*2*sizeof(int32_t)*(fp->N_RB_DL*12)); } } - } } } + + // RACH + prach_vars[gNB_id]->prachF = (int16_t *)malloc16_clear( sizeof(int)*(7*2*sizeof(int)*(fp->ofdm_symbol_size*12)) ); + prach_vars[gNB_id]->prach = (int16_t *)malloc16_clear( sizeof(int)*(7*2*sizeof(int)*(fp->ofdm_symbol_size*12)) ); + } // initialization for the last instance of pdsch_vars (used for MU-MIMO) @@ -539,34 +543,6 @@ void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) free_and_zero(ue->pdsch_vars[th_id][gNB_id]); } - for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++) { - for (int i = 0; i < fp->nb_antennas_rx; i++) { - for (int j = 0; j < 4; j++) { - int idx = j * fp->nb_antennas_rx + i; - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates[idx]); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_time[idx]); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp[idx]); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext[idx]); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext[idx]); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext[idx]); - } - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rho[i]); - } - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->llr); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->llr16); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->wbar); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->e_rx); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rho); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rxdataF_ext); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_ext); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_estimates_time); - - free_and_zero(ue->pdcch_vars[th_id][gNB_id]); - } - for (int i = 0; i < fp->nb_antennas_rx; i++) { free_and_zero(ue->nr_srs_info->srs_received_signal[i]); free_and_zero(ue->nr_srs_info->srs_ls_estimated_channel[i]); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c index dcb373e057..48b08d761e 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_pbch.c @@ -391,12 +391,8 @@ int nr_rx_pbch( PHY_VARS_NR_UE *ue, uint8_t gNB_id, uint8_t i_ssb, MIMO_mode_t mimo_mode, -<<<<<<< HEAD - NR_UE_PDCCH_CONFIG *phy_pdcch_config) { - -======= + NR_UE_PDCCH_CONFIG *phy_pdcch_config, fapiPbch_t *result) { ->>>>>>> oai-eurecom/develop NR_UE_COMMON *nr_ue_common_vars = &ue->common_vars; int max_h=0; int symbol; diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 4aa0c5d4b3..279a0d8ce5 100644 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -286,6 +286,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ if(scheduled_response->dl_config != NULL){ fapi_nr_dl_config_request_t *dl_config = scheduled_response->dl_config; fapi_nr_dl_config_dlsch_pdu_rel15_t *dlsch_config_pdu; + fapi_nr_dl_config_dci_dl_pdu_rel15_t *pdcch_config; for (int i = 0; i < dl_config->number_pdus; ++i){ AssertFatal(dl_config->number_pdus < FAPI_NR_DL_CONFIG_LIST_NUM,"dl_config->number_pdus %d out of bounds\n",dl_config->number_pdus); @@ -299,7 +300,7 @@ int8_t nr_ue_scheduled_response(nr_scheduled_response_t *scheduled_response){ phy_pdcch_config = (NR_UE_PDCCH_CONFIG *)scheduled_response->phy_data; phy_pdcch_config->nb_search_space = 0; } - fapi_nr_dl_config_dci_dl_pdu_rel15_t *pdcch_config = &dl_config->dl_config_list[i].dci_config_pdu.dci_config_rel15; + pdcch_config = &dl_config->dl_config_list[i].dci_config_pdu.dci_config_rel15; memcpy((void*)&phy_pdcch_config->pdcch_config[phy_pdcch_config->nb_search_space],(void*)pdcch_config,sizeof(*pdcch_config)); phy_pdcch_config->nb_search_space = phy_pdcch_config->nb_search_space + 1; phy_pdcch_config->sfn = scheduled_response->frame; diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 7ae66ec448..6ba740eeaf 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -1013,7 +1013,7 @@ int handle_bcch_bch(module_id_t module_id, int cc_id, return nr_ue_decode_mib(module_id, cc_id, gNB_index, - phy_data, + phy_data, additional_bits, ssb_length, // Lssb = 64 is not support ssb_index, From ed1c87b59816b3979146f5d33bd33f0f6d597a1f Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Mon, 14 Mar 2022 17:53:57 +0100 Subject: [PATCH 083/150] commit before rebase --- cmake_targets/phy_simulators | 1 - common/utils/lte/ue_power.c | 6 +- executables/nr-uesoftmodem.c | 9 +- .../PHY/NR_ESTIMATION/nr_measurements_gNB.c | 23 ++--- openair1/PHY/NR_TRANSPORT/nr_dci.c | 2 +- openair1/PHY/NR_TRANSPORT/pucch_rx.c | 92 +++++++++++-------- openair1/PHY/NR_UE_TRANSPORT/dci_nr.c | 9 +- .../PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c | 8 +- openair1/PHY/TOOLS/dB_routines.h | 35 ------- openair1/PHY/TOOLS/tools_defs.h | 22 +++-- openair1/SCHED/sched_common_vars.h | 1 + openair1/SCHED_NR_UE/harq_nr.c | 64 ++++--------- openair2/LAYER2/MAC/config.c | 5 - openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 1 + .../LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c | 3 +- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 24 ++--- targets/RT/USER/lte-ue.c | 12 +-- 17 files changed, 125 insertions(+), 192 deletions(-) delete mode 120000 cmake_targets/phy_simulators delete mode 100644 openair1/PHY/TOOLS/dB_routines.h diff --git a/cmake_targets/phy_simulators b/cmake_targets/phy_simulators deleted file mode 120000 index 2a12e92f3e..0000000000 --- a/cmake_targets/phy_simulators +++ /dev/null @@ -1 +0,0 @@ -ran_build/ \ No newline at end of file diff --git a/common/utils/lte/ue_power.c b/common/utils/lte/ue_power.c index b377abf2ff..aaa2826275 100644 --- a/common/utils/lte/ue_power.c +++ b/common/utils/lte/ue_power.c @@ -33,10 +33,8 @@ #include #include #include "PHY/defs_eNB.h" -#include "PHY/TOOLS/dB_routines.h" - -extern int16_t hundred_times_delta_TF[100]; -extern uint16_t hundred_times_log10_NPRB[100]; +#include +#include int16_t estimate_ue_tx_power(int norm,uint32_t tbs, uint32_t nb_rb, uint8_t control_only, int ncp, uint8_t use_srs) { diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index 76c21bb422..649b68631b 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -241,14 +241,17 @@ nrUE_params_t *get_nrUE_params(void) { } /* initialie thread pools used for NRUE processing paralleliation */ void init_tpools(uint8_t nun_dlsch_threads) { - char *params = NULL; - params = calloc(1,(NR_RX_NB_TH*NR_NB_TH_SLOT*3)+1); + char params[NR_RX_NB_TH*NR_NB_TH_SLOT*3+1]; for (int i=0; iframe_parms; NR_gNB_COMMON *common_vars = &gNB->common_vars; PHY_MEASUREMENTS_gNB *measurements = &gNB->measurements; - int rb, offset, offset0, nb_symb[275], len; - int32_t *ul_ch; - - LOG_D(PHY,"slot %d Doing I0 for first_symb %d, num_symb %d\n",slot,first_symb,num_symb); + int rb, nb_symb[275]={0}; + + memset(measurements->n0_subband_power, 0, sizeof(measurements->n0_subband_power)); + for (int s=first_symb;s<(first_symb+num_symb);s++) { for (rb=0; rbN_RB_UL; rb++) { - - if (s==first_symb) { - nb_symb[rb]=0; - for (int aarx=0; aarxnb_antennas_rx;aarx++) - measurements->n0_subband_power[aarx][rb]=0; - } - offset0 = (slot&3)*(frame_parms->symbols_per_slot * frame_parms->ofdm_symbol_size) + (frame_parms->first_carrier_offset + (rb*12))%frame_parms->ofdm_symbol_size; + int offset0 = (slot&3)*(frame_parms->symbols_per_slot * frame_parms->ofdm_symbol_size) + + (frame_parms->first_carrier_offset + (rb*12))%frame_parms->ofdm_symbol_size; if ((gNB->rb_mask_ul[s][rb>>5]&(1<<(rb&31))) == 0) { // check that rb was not used in this subframe nb_symb[rb]++; for (int aarx=0; aarxnb_antennas_rx; aarx++) { - offset = offset0 + (s*frame_parms->ofdm_symbol_size); - ul_ch = &common_vars->rxdataF[aarx][offset]; - len = 12; + int offset = offset0 + (s*frame_parms->ofdm_symbol_size); + int32_t *ul_ch = &common_vars->rxdataF[aarx][offset]; + int len = 12; if (((frame_parms->N_RB_UL&1) == 1) && (rb==(frame_parms->N_RB_UL>>1))) { len=6; diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index 0af56ba706..ae96eb26bc 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -132,7 +132,7 @@ void nr_generate_dci(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15, polar_encoder_fast((uint64_t*)dci_pdu->Payload, (void*)encoder_output, n_RNTI, 1, NR_POLAR_DCI_MESSAGE_TYPE, dci_pdu->PayloadSizeBits, dci_pdu->AggregationLevel); -#ifdef DEBUG_CHANNEL_CODING +#if 1 printf("polar rnti %x,length %d, L %d\n",n_RNTI, dci_pdu->PayloadSizeBits,pdcch_pdu_rel15->dci_pdu->AggregationLevel); printf("DCI PDU: [0]->0x%lx \t [1]->0x%lx\n", ((uint64_t*)dci_pdu->Payload)[0], ((uint64_t*)dci_pdu->Payload)[1]); diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c index 50c3b62f50..17f145b98a 100644 --- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c +++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c @@ -243,7 +243,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, * x(l*12+n) = r_u_v_alpha_delta(n) */ // the value of u,v (delta always 0 for PUCCH) has to be calculated according to TS 38.211 Subclause 6.3.2.2.1 - uint8_t u[2]={0,0},v[2]={0,0}; + uint8_t u[2]={0},v[2]={0}; // x_n contains the sequence r_u_v_alpha_delta(n) @@ -262,7 +262,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, AssertFatal(pucch_pdu->nr_of_symbols < 3,"nr_of_symbols %d not allowed\n",pucch_pdu->nr_of_symbols); - uint32_t re_offset[2]={0,0}; + uint32_t re_offset[2]={0}; uint8_t l2; const int16_t *x_re[2],*x_im[2]; @@ -271,16 +271,11 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, x_re[1] = table_5_2_2_2_2_Re[u[1]]; x_im[1] = table_5_2_2_2_2_Im[u[1]]; - int16_t xr[1+frame_parms->nb_antennas_rx][1+pucch_pdu->nr_of_symbols][24] __attribute__((aligned(32))); + c64_t xr[frame_parms->nb_antennas_rx][pucch_pdu->nr_of_symbols][12] __attribute__((aligned(32))); + memset(xr, 0, sizeof(xr)); int64_t xrtmag=0,xrtmag_next=0; uint8_t maxpos=0; uint8_t index=0; - for (int l=0; lnr_of_symbols; l++) { - for (int aarx=0;aarxnb_antennas_rx;aarx++) { - memset((void*)xr[aarx][l],0,24*sizeof(int16_t)); - } - } - int n2; for (int l=0; lnr_of_symbols; l++) { l2 = l+pucch_pdu->start_symbol_index; @@ -289,23 +284,23 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, re_offset[l]-=frame_parms->ofdm_symbol_size; AssertFatal(re_offset[l]+12 < frame_parms->ofdm_symbol_size,"pucch straddles DC carrier, handle this!\n"); - int16_t *r; for (int aa=0;aanb_antennas_rx;aa++) { - r=(int16_t*)&rxdataF[aa][soffset+(l2*frame_parms->ofdm_symbol_size)+re_offset[l]]; - n2=0; - for (n=0;n<12;n++,n2+=2) { - xr[aa][l][n2] +=(int16_t)(((int32_t)x_re[l][n]*r[n2]+(int32_t)x_im[l][n]*r[n2+1])>>15); - xr[aa][l][n2+1]+=(int16_t)(((int32_t)x_re[l][n]*r[n2+1]-(int32_t)x_im[l][n]*r[n2])>>15); + c16_t *r=(c16_t*)&rxdataF[aa][soffset+(l2*frame_parms->ofdm_symbol_size)+re_offset[l]]; + for (n=0;n<12;n++) { + xr[aa][l][n].r +=(int32_t)x_re[l][n]*r[n].r+(int32_t)x_im[l][n]*r[n].i; + xr[aa][l][n].i +=(int32_t)x_re[l][n]*r[n].i-(int32_t)x_im[l][n]*r[n].r; #ifdef DEBUG_NR_PUCCH_RX - printf("x (%d,%d), r%d.%d (%d,%d), xr (%d,%d)\n", - x_re[l][n],x_im[l][n],l2,re_offset[l],r[n2],r[n2+1],xr[aa][l][n2],xr[aa][l][n2+1]); + printf("x (%d,%d), r%d.%d (%d,%d), xr (%lld,%lld)\n", + x_re[l][n],x_im[l][n],l2,re_offset[l],r[n].r,r[n].i,xr[aa][l][n].r,xr[aa][l][n].i); #endif } + xr[aa][l][n].r>>=15; + xr[aa][l][n].i>>=15; } } - int32_t corr_re[1+frame_parms->nb_antennas_rx][2]; - int32_t corr_im[1+frame_parms->nb_antennas_rx][2]; + int64_t corr_re[frame_parms->nb_antennas_rx][2]; + int64_t corr_im[frame_parms->nb_antennas_rx][2]; //int32_t no_corr = 0; int seq_index = 0; int64_t temp; @@ -322,19 +317,19 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, for (int aa=0;aanb_antennas_rx;aa++) { corr_re[aa][l]=0; corr_im[aa][l]=0; - - n2=0; - for (n=0;n<12;n++,n2+=2) { - corr_re[aa][l]+=(xr[aa][l][n2]*idft12_re[seq_index][n]+xr[aa][l][n2+1]*idft12_im[seq_index][n])>>15; - corr_im[aa][l]+=(xr[aa][l][n2]*idft12_im[seq_index][n]-xr[aa][l][n2+1]*idft12_re[seq_index][n])>>15; + for (n=0;n<12;n++) { + corr_re[aa][l]+=xr[aa][l][n].r*idft12_re[seq_index][n]+xr[aa][l][n].i*idft12_im[seq_index][n]; + corr_im[aa][l]+=xr[aa][l][n].r*idft12_im[seq_index][n]-xr[aa][l][n].i*idft12_re[seq_index][n]; } + corr_re[aa][l]>>=15; + corr_im[aa][l]>>=15; } } - LOG_D(PHY,"PUCCH IDFT[%d/%d] = (%d,%d)=>%f\n", + LOG_D(PHY,"PUCCH IDFT[%d/%d] = (%ld,%ld)=>%f\n", mcs[i],seq_index,corr_re[0][0],corr_im[0][0], 10*log10((double)corr_re[0][0]*corr_re[0][0] + (double)corr_im[0][0]*corr_im[0][0])); if (pucch_pdu->nr_of_symbols==2) - LOG_D(PHY,"PUCCH 2nd symbol IDFT[%d/%d] = (%d,%d)=>%f\n", + LOG_D(PHY,"PUCCH 2nd symbol IDFT[%d/%d] = (%ld,%ld)=>%f\n", mcs[i],seq_index,corr_re[0][1],corr_im[0][1], 10*log10((double)corr_re[0][1]*corr_re[0][1] + (double)corr_im[0][1]*corr_im[0][1])); if (pucch_pdu->freq_hop_flag == 0) { @@ -392,7 +387,8 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, uci_stats->pucch0_n01 = gNB->measurements.n0_subband_power_tot_dB[prb_offset[1]]; LOG_D(PHY,"n00[%d] = %d, n01[%d] = %d\n",prb_offset[0],uci_stats->pucch0_n00,prb_offset[1],uci_stats->pucch0_n01); // estimate CQI for MAC (from antenna port 0 only) - int max_n0 = uci_stats->pucch0_n00>uci_stats->pucch0_n01 ? uci_stats->pucch0_n00:uci_stats->pucch0_n01; + int max_n0 = max(gNB->measurements.n0_subband_power_tot_dB[prb_offset[0]], + gNB->measurements.n0_subband_power_tot_dB[prb_offset[1]]); int SNRtimes10,sigenergy=0; for (int aa=0;aanb_antennas_rx;aa++) sigenergy += signal_energy_nodc(&rxdataF[aa][soffset+ @@ -407,8 +403,16 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, uci_stats->pucch0_thres = gNB->pucch0_thres; /* + (10*max_n0);*/ bool no_conf=false; if (nr_sequences>1) { - if (xrtmag_dBtimes10 < (50+xrtmag_next_dBtimes10) || SNRtimes10 < uci_stats->pucch0_thres) + if (xrtmag_dBtimes10 < (50+xrtmag_next_dBtimes10) || SNRtimes10 < gNB->pucch0_thres) { no_conf=true; + LOG_W(PHY,"%d.%d PUCCH bad confidence: %d threshold, %d, %d, %d\n", + frame, slot, + uci_stats->pucch0_thres, + SNRtimes10, + xrtmag_dBtimes10, + xrtmag_next_dBtimes10); + abort(); + } } gNB->bad_pucch += no_conf; // first bit of bitmap for sr presence and second bit for acknack presence @@ -422,7 +426,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, if (pucch_pdu->bit_len_harq==0) { uci_pdu->harq = NULL; uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr)); - uci_pdu->sr->sr_confidence_level = no_conf ? 1 : 0; + uci_pdu->sr->sr_confidence_level = no_conf; uci_stats->pucch0_sr_trials++; if (xrtmag_dBtimes10>(10*gNB->measurements.n0_power_tot_dB)) { uci_pdu->sr->sr_indication = 1; @@ -434,17 +438,19 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, else if (pucch_pdu->bit_len_harq==1) { uci_pdu->harq = calloc(1,sizeof(*uci_pdu->harq)); uci_pdu->harq->num_harq = 1; - uci_pdu->harq->harq_confidence_level = no_conf ? 1 : 0; - uci_pdu->harq->harq_list = (nfapi_nr_harq_t*)malloc(1); + uci_pdu->harq->harq_confidence_level = no_conf; + uci_pdu->harq->harq_list = (nfapi_nr_harq_t*)malloc(sizeof *uci_pdu->harq->harq_list); uci_pdu->harq->harq_list[0].harq_value = !(index&0x01); - LOG_D(PHY, "[DLSCH/PDSCH/PUCCH] %d.%d HARQ value %d (0 pass, 1 fail) with confidence level %d (0 is good, 1 is bad) xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d, energy %f, sync_pos %d\n", - frame,slot,uci_pdu->harq->harq_list[0].harq_value,uci_pdu->harq->harq_confidence_level,xrtmag_dBtimes10,xrtmag_next_dBtimes10,max_n0,uci_stats->pucch0_n00,uci_stats->pucch0_n01,uci_stats->pucch0_thres,cqi,SNRtimes10,10*log10((double)sigenergy),gNB->ulsch_stats[0].sync_pos); + LOG_D(PHY, "[DLSCH/PDSCH/PUCCH] %d.%d HARQ %s with confidence level %s xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d, energy %f, sync_pos %d\n", + frame,slot,uci_pdu->harq->harq_list[0].harq_value==0?"ACK":"NACK", + uci_pdu->harq->harq_confidence_level==0?"good":"bad", + xrtmag_dBtimes10,xrtmag_next_dBtimes10,max_n0,uci_stats->pucch0_n00,uci_stats->pucch0_n01,uci_stats->pucch0_thres,cqi,SNRtimes10,10*log10((double)sigenergy),gNB->ulsch_stats[0].sync_pos); if (pucch_pdu->sr_flag == 1) { uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr)); - uci_pdu->sr->sr_indication = (index>1) ? 1 : 0; - uci_pdu->sr->sr_confidence_level = no_conf ? 1 : 0; + uci_pdu->sr->sr_indication = (index>1); + uci_pdu->sr->sr_confidence_level = no_conf; uci_stats->pucch0_positive_SR++; } uci_stats->pucch01_trials++; @@ -452,17 +458,23 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, else { uci_pdu->harq = calloc(1,sizeof(*uci_pdu->harq)); uci_pdu->harq->num_harq = 2; - uci_pdu->harq->harq_confidence_level = (no_conf) ? 1 : 0; - uci_pdu->harq->harq_list = (nfapi_nr_harq_t*)malloc(2); + uci_pdu->harq->harq_confidence_level = no_conf; + uci_pdu->harq->harq_list = (nfapi_nr_harq_t*)malloc(2 * sizeof( *uci_pdu->harq->harq_list)); uci_pdu->harq->harq_list[1].harq_value = !(index&0x01); uci_pdu->harq->harq_list[0].harq_value = !((index>>1)&0x01); - LOG_D(PHY, "[DLSCH/PDSCH/PUCCH] %d.%d HARQ values %d and %d (0 pass, 1 fail) with confidence level %d (0 is good, 1 is bad), xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d,sync_pos %d\n", - frame,slot,uci_pdu->harq->harq_list[1].harq_value,uci_pdu->harq->harq_list[0].harq_value,uci_pdu->harq->harq_confidence_level,xrtmag_dBtimes10,xrtmag_next_dBtimes10,max_n0,uci_stats->pucch0_n00,uci_stats->pucch0_n01,uci_stats->pucch0_thres,cqi,SNRtimes10,gNB->ulsch_stats[0].sync_pos); + LOG_D(PHY, "[DLSCH/PDSCH/PUCCH] %d.%d HARQ values (%s, %s) with confidence level %s, xrt_mag %d xrt_mag_next %d n0 %d (%d,%d) pucch0_thres %d, cqi %d, SNRtimes10 %d,sync_pos %d\n", + frame,slot, + uci_pdu->harq->harq_list[1].harq_value == 0 ? "ACK" : "NACK", + uci_pdu->harq->harq_list[0].harq_value == 0 ? "ACK" : "NACK", + uci_pdu->harq->harq_confidence_level == 0 ? "good" : "bad", + xrtmag_dBtimes10,xrtmag_next_dBtimes10,max_n0, + uci_stats->pucch0_n00,uci_stats->pucch0_n01,uci_stats->pucch0_thres,cqi, + SNRtimes10,gNB->ulsch_stats[0].sync_pos); if (pucch_pdu->sr_flag == 1) { uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr)); uci_pdu->sr->sr_indication = (index>3) ? 1 : 0; - uci_pdu->sr->sr_confidence_level = (no_conf) ? 1 : 0; + uci_pdu->sr->sr_confidence_level = no_conf; } } } diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c index 5e18f6cc6d..9f0e1bea71 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c @@ -817,6 +817,10 @@ void nr_pdcch_unscrambling(int16_t *z, if (((s >> (i % 32)) & 1) == 1) z2[i] = -z[i]; else z2[i]=z[i]; } + printf("Encoded Payload (length:%d dwords):\n", length>>5); + + for (int i=0; i>5; i++) + printf("[%d]->0x%08x \t", i, z2[i]); } @@ -868,6 +872,7 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, int L = rel15->L[j]; // Loop over possible DCI lengths + for (int k = 0; k < rel15->num_dci_options; k++) { // skip this candidate if we've already found one with the // same rnti and format at a different aggregation level @@ -902,8 +907,8 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, NR_POLAR_DCI_MESSAGE_TYPE, dci_length, L); n_rnti = rel15->rnti; - LOG_D(PHY, "(%i.%i) dci indication (rnti %x,dci format %s,n_CCE %d,payloadSize %d)\n", - proc->frame_rx, proc->nr_slot_rx,n_rnti,nr_dci_format_string[rel15->dci_format_options[k]],CCEind,dci_length); + LOG_D(PHY, "(%i.%i) dci indication (rnti %x,dci format %s,n_CCE %d,payloadSize %d,payload %llx )\n", + proc->frame_rx, proc->nr_slot_rx,n_rnti,nr_dci_format_string[rel15->dci_format_options[k]],CCEind,dci_length, *(unsigned long long*)dci_estimation); if (crc == n_rnti) { LOG_D(PHY, "(%i.%i) Received dci indication (rnti %x,dci format %s,n_CCE %d,payloadSize %d,payload %llx)\n", proc->frame_rx, proc->nr_slot_rx,n_rnti,nr_dci_format_string[rel15->dci_format_options[k]],CCEind,dci_length,*(unsigned long long*)dci_estimation); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c index 54b7c34608..bf9cfaaa70 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c @@ -172,6 +172,7 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint memset(dlsch->harq_processes[i]->d[r],0,5*8448); else exit_flag=2; + } } else { exit_flag=1; @@ -299,17 +300,14 @@ void nr_processDLSegment(void* arg) { K_bits_F = Kr-harq_process->F; t_nrLDPC_time_stats procTime = {0}; - t_nrLDPC_time_stats* p_procTime = &procTime ; t_nrLDPC_procBuf **p_nrLDPC_procBuf = harq_process->p_nrLDPC_procBuf; - int16_t w[5*8448]; - memset(w,0,(5*8448)*sizeof(short)); - start_meas(&rdata->ts_deinterleave); //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_IN); + int16_t w[E]; nr_deinterleaving_ldpc(E, Qm, w, // [hna] w is e @@ -397,7 +395,7 @@ void nr_processDLSegment(void* arg) { (int8_t *)&pl[0], llrProcBuf, p_nrLDPC_procBuf[r], - p_procTime); + &procTime); //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_LDPC, VCD_FUNCTION_OUT); // Fixme: correct type is unsigned, but nrLDPC_decoder and all called behind use signed int diff --git a/openair1/PHY/TOOLS/dB_routines.h b/openair1/PHY/TOOLS/dB_routines.h deleted file mode 100644 index 185913cf5b..0000000000 --- a/openair1/PHY/TOOLS/dB_routines.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 - */ - -/* - * dB_routines.h - * - * Created on: Nov 12, 2013 - * Author: winckel - */ - -#ifndef DB_ROUTINES_H_ -#define DB_ROUTINES_H_ - -int16_t dB_fixed_times10(uint32_t x); -int16_t dB_fixed_x10(uint32_t x); - -#endif /* DB_ROUTINES_H_ */ diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h index 966e93440e..13ce9d85c7 100644 --- a/openair1/PHY/TOOLS/tools_defs.h +++ b/openair1/PHY/TOOLS/tools_defs.h @@ -39,26 +39,30 @@ extern "C" { #define CEILIDIV(a,b) ((a+b-1)/b) #define ROUNDIDIV(a,b) (((a<<1)+b)/(b<<1)) -struct complexd { +typedef struct complexd { double r; double i; -}; +} cd_t; -struct complexf { +typedef struct complexf { float r; float i; -}; +} cf_t; -struct complex16 { +typedef struct complex16 { int16_t r; int16_t i; -}; +} c16_t; -struct complex32 { +typedef struct complex32 { int32_t r; int32_t i; -}; - +} c32_t; + +typedef struct complex64 { + int64_t r; + int64_t i; +} c64_t; //cmult_sv.h /*!\fn void multadd_real_vector_complex_scalar(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N) diff --git a/openair1/SCHED/sched_common_vars.h b/openair1/SCHED/sched_common_vars.h index 2cae2aa96f..8886e0d576 100644 --- a/openair1/SCHED/sched_common_vars.h +++ b/openair1/SCHED/sched_common_vars.h @@ -20,6 +20,7 @@ */ #include +#include // This is the formula from Section 5.1.1.1 in 36.213 100*10*log10((2^(MPR*Ks)-1)), where MPR is in the range [0,6] and Ks=1.25 diff --git a/openair1/SCHED_NR_UE/harq_nr.c b/openair1/SCHED_NR_UE/harq_nr.c index 4afe5f41d3..6508e2568e 100644 --- a/openair1/SCHED_NR_UE/harq_nr.c +++ b/openair1/SCHED_NR_UE/harq_nr.c @@ -339,55 +339,23 @@ void downlink_harq_process(NR_DL_UE_HARQ_t *dl_harq, int harq_pid, int ndi, int dl_harq->first_rx = 1; } else{ - switch(rv){ - case 0: - dl_harq->round = 0; + LOG_D(PHY,"receive harq process: %p harqPid=%d, rv=%d, ndi=%d, rntiType=%d, DCIndi=%d\n", + dl_harq, harq_pid, rv, ndi, rnti_type, dl_harq->DCINdi); + AssertFatal(rv<4 && rv>=0, "invalid redondancy version %d\n", rv); + if (rv!=0 && dl_harq->ack == DL_NACK) + LOG_D(PHY,"New transmission on a harq pid (%d) never acknowledged\n", harq_pid); + if (rv==0 && ndi == dl_harq->DCINdi ) + LOG_D(PHY,"Missed previous DCI detections. redondancy version is new transmission, but ndi doesn't toogle\n"); + dl_harq->first_rx = (rv==0); + const int rounds[4]={0,3,1,2}; + dl_harq->round = rounds[rv]; dl_harq->status = ACTIVE; - dl_harq->first_rx = 1; - if (dl_harq->DCINdi == ndi) - LOG_E(PHY,"Warning! rv %d indicates new transmission but new ndi %d is the same as old ndi %d\n",rv,ndi,dl_harq->DCINdi); + if (rv!=0 && dl_harq->DCINdi != ndi ) + LOG_E(PHY,"Missed previous DCI detections. redondancy version (%d) is retransmission, but ndi toogle\n", rv); + if (rv!=0 && dl_harq->ack != DL_NACK) + LOG_E(PHY,"Missed previous DCI detections. redondancy version (%d) is retransmission, but status is not DL_NACK\n", rv); dl_harq->DCINdi = ndi; - break; - case 1: - dl_harq->round = 3; - dl_harq->status = ACTIVE; - dl_harq->first_rx = 0; - if (dl_harq->DCINdi != ndi) { - LOG_E(PHY,"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception\n",rv); - dl_harq->first_rx = 1; - dl_harq->DCINdi = ndi; - } - else if (dl_harq->ack == 1) - dl_harq->status = SCH_IDLE; - break; - case 2: - dl_harq->round = 1; - dl_harq->status = ACTIVE; - dl_harq->first_rx = 0; - if (dl_harq->DCINdi != ndi) { - LOG_E(PHY,"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception\n",rv); - dl_harq->first_rx = 1; - dl_harq->DCINdi = ndi; - } - else if (dl_harq->ack == 1) - dl_harq->status = SCH_IDLE; - break; - case 3: - dl_harq->round = 2; - dl_harq->status = ACTIVE; - dl_harq->first_rx = 0; - if (dl_harq->DCINdi != ndi) { - LOG_E(PHY,"Missed previous DCI detections. NDI toggled but rv %d does not correspond to first reception\n",rv); - dl_harq->first_rx = 1; - dl_harq->DCINdi = ndi; - } - else if (dl_harq->ack == 1) - dl_harq->status = SCH_IDLE; - break; - default: - AssertFatal(1==0,"Invalid value for rv %d\n",rv); - } - } - + //dl_harq->status = SCH_IDLE; + } } diff --git a/openair2/LAYER2/MAC/config.c b/openair2/LAYER2/MAC/config.c index 209275acb3..d22485d23f 100644 --- a/openair2/LAYER2/MAC/config.c +++ b/openair2/LAYER2/MAC/config.c @@ -58,11 +58,6 @@ extern int l2_init_eNB(void); extern void mac_top_init_eNB(void); extern void mac_init_cell_params(int Mod_idP,int CC_idP); - -int32_t **rxdata; -int32_t **txdata; - - typedef struct eutra_bandentry_s { int16_t band; uint32_t ul_min; diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index c57736990c..0c339ee70a 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -2092,6 +2092,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, pucch->is_common = current_harq->is_common; current_harq->active = false; current_harq->ack_received = false; + LOG_D(PHY,"%d.%d Sent %d ack on harq pid %d\n", frame, slot, current_harq->ack, dl_harq_pid); } } } diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c index cedc78097e..fad5643370 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c @@ -811,6 +811,7 @@ static void handle_dl_harq(module_id_t mod_id, stats->dlsch_errors++; LOG_D(NR_MAC, "retransmission error for UE %d (total %"PRIu64")\n", UE_id, stats->dlsch_errors); } else { + LOG_D(PHY,"NACK for: pid %d, ue %x\n",harq_pid, UE_id); add_tail_nr_list(&UE_info->UE_sched_ctrl[UE_id].retrans_dl_harq, harq_pid); harq->round++; } @@ -1442,7 +1443,7 @@ void handle_nr_uci_pucch_0_1(module_id_t mod_id, DevAssert(harq->is_waiting); const int8_t pid = sched_ctrl->feedback_dl_harq.head; remove_front_nr_list(&sched_ctrl->feedback_dl_harq); - LOG_D(NR_MAC,"bit %d pid %d ack/nack %d\n",harq_bit,pid,harq_value); + LOG_D(NR_MAC,"%d.%d bit %d pid %d ack/nack %d\n",frame, slot, harq_bit,pid,harq_value); handle_dl_harq(mod_id, UE_id, pid, harq_value == 0 && harq_confidence == 0); if (harq_confidence == 1) UE_info->mac_stats[UE_id].pucch0_DTX++; } diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index f7323010cb..99897f9060 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -78,13 +78,13 @@ void nrue_init_standalone_socket(int tx_port, int rx_port) int sd = socket(server_address.sin_family, SOCK_DGRAM, 0); if (sd < 0) { - LOG_E(MAC, "Socket creation error standalone PNF\n"); + LOG_E(NR_MAC, "Socket creation error standalone PNF\n"); return; } if (inet_pton(server_address.sin_family, stub_eth_params.remote_addr, &server_address.sin_addr) <= 0) { - LOG_E(MAC, "Invalid standalone PNF Address\n"); + LOG_E(NR_MAC, "Invalid standalone PNF Address\n"); close(sd); return; } @@ -92,7 +92,7 @@ void nrue_init_standalone_socket(int tx_port, int rx_port) // Using connect to use send() instead of sendto() if (connect(sd, (struct sockaddr *)&server_address, addr_len) < 0) { - LOG_E(MAC, "Connection to standalone PNF failed: %s\n", strerror(errno)); + LOG_E(NR_MAC, "Connection to standalone PNF failed: %s\n", strerror(errno)); close(sd); return; } @@ -118,7 +118,7 @@ void nrue_init_standalone_socket(int tx_port, int rx_port) if (bind(sd, (struct sockaddr *)&server_address, addr_len) < 0) { - LOG_E(MAC, "Connection to standalone PNF failed: %s\n", strerror(errno)); + LOG_E(NR_MAC, "Connection to standalone PNF failed: %s\n", strerror(errno)); close(sd); return; } @@ -603,10 +603,6 @@ static void copy_ul_tti_data_req_to_dl_info(nr_downlink_indication_t *dl_info, n pdu_0_1->harq->num_harq = 1; pdu_0_1->harq->harq_confidence_level = 0; pdu_0_1->harq->harq_list = CALLOC(pdu_0_1->harq->num_harq, sizeof(*pdu_0_1->harq->harq_list)); - for (int k = 0; k < pdu_0_1->harq->num_harq; k++) - { - pdu_0_1->harq->harq_list[k].harq_value = 0; - } } } LOG_I(NR_MAC, "We have dequeued the previously filled uci_ind and updated the snf/slot to %d/%d.\n", @@ -986,7 +982,7 @@ void *nrue_standalone_pnf_task(void *context) if (sem_post(&sfn_slot_semaphore) != 0) { - LOG_E(MAC, "sem_post() error\n"); + LOG_E(NR_MAC, "sem_post() error\n"); abort(); } } @@ -1062,7 +1058,7 @@ void update_harq_status(module_id_t module_id, uint8_t harq_pid, uint8_t ack_nac } else { //shouldn't get here - LOG_E(MAC, "Trying to process acknack for an inactive harq process (%d)\n", harq_pid); + LOG_E(NR_MAC, "Trying to process acknack for an inactive harq process (%d)\n", harq_pid); } } @@ -1121,9 +1117,9 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ } else { // UL indication after reception of DCI or DL PDU if (dl_info && dl_info->dci_ind && dl_info->dci_ind->number_of_dcis) { - LOG_D(MAC,"[L2][IF MODULE][DL INDICATION][DCI_IND]\n"); + LOG_D(NR_MAC,"[L2][IF MODULE][DL INDICATION][DCI_IND]\n"); for (int i = 0; i < dl_info->dci_ind->number_of_dcis; i++) { - LOG_D(MAC,">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d\n",i,dl_info->dci_ind->number_of_dcis); + LOG_D(NR_MAC,">>>NR_IF_Module i=%d, dl_info->dci_ind->number_of_dcis=%d\n",i,dl_info->dci_ind->number_of_dcis); nr_scheduled_response_t scheduled_response; int8_t ret = handle_dci(dl_info->module_id, dl_info->cc_id, @@ -1137,7 +1133,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ /* The check below filters out UL_DCIs (format 7) which are being processed as DL_DCIs. */ if (dci_index->dci_format == 7 && mac->ra.ra_state == RA_SUCCEEDED) { LOG_D(NR_MAC, "We are filtering a UL_DCI to prevent it from being treated like a DL_DCI\n"); - break; + continue; } dci_pdu_rel15_t *def_dci_pdu_rel15 = &mac->def_dci_pdu_rel15[dci_index->dci_format]; g_harq_pid = def_dci_pdu_rel15->harq_pid; @@ -1160,7 +1156,7 @@ int nr_ue_dl_indication(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_ for (int i=0; irx_ind->number_pdus; ++i) { - LOG_D(MAC, "In %s sending DL indication to MAC. 1 PDU type %d of %d total number of PDUs \n", + LOG_D(NR_MAC, "In %s sending DL indication to MAC. 1 PDU type %d of %d total number of PDUs \n", __FUNCTION__, dl_info->rx_ind->rx_indication_body[i].pdu_type, dl_info->rx_ind->number_pdus); diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 25da395b90..13a09db5a3 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -93,9 +93,6 @@ extern uint16_t sf_ahead; void ue_stub_rx_handler(unsigned int, char *); -int32_t **rxdata; -int32_t **txdata; - int timer_subframe = 0; int timer_frame = 0; SF_ticking *phy_stub_ticking = NULL; @@ -2498,23 +2495,18 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, AssertFatal( phy_vars_ue[CC_id] !=0, ""); frame_parms = &(phy_vars_ue[CC_id]->frame_parms); // replace RX signal buffers with mmaped HW versions - rxdata = (int32_t **)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t *) ); - txdata = (int32_t **)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t *) ); - for (i=0; inb_antennas_rx; i++) { LOG_I(PHY, "Mapping UE CC_id %d, rx_ant %d, freq %lu on card %d, chain %d\n", CC_id, i, downlink_frequency[CC_id][i], phy_vars_ue[CC_id]->rf_map.card, (phy_vars_ue[CC_id]->rf_map.chain)+i ); free( phy_vars_ue[CC_id]->common_vars.rxdata[i] ); - rxdata[i] = (int32_t *)malloc16_clear( 307200*sizeof(int32_t) ); - phy_vars_ue[CC_id]->common_vars.rxdata[i] = rxdata[i]; // what about the "-N_TA_offset" ? // N_TA offset for TDD + phy_vars_ue[CC_id]->common_vars.rxdata[i] = malloc16_clear( 307200*sizeof(int32_t) ); // what about the "-N_TA_offset" ? // N_TA offset for TDD } for (i=0; inb_antennas_tx; i++) { LOG_I(PHY, "Mapping UE CC_id %d, tx_ant %d, freq %lu on card %d, chain %d\n", CC_id, i, downlink_frequency[CC_id][i], phy_vars_ue[CC_id]->rf_map.card, (phy_vars_ue[CC_id]->rf_map.chain)+i ); free( phy_vars_ue[CC_id]->common_vars.txdata[i] ); - txdata[i] = (int32_t *)malloc16_clear( 307200*sizeof(int32_t) ); - phy_vars_ue[CC_id]->common_vars.txdata[i] = txdata[i]; + phy_vars_ue[CC_id]->common_vars.txdata[i] = malloc16_clear( 307200*sizeof(int32_t) ); } // rxdata[x] points now to the same memory region as phy_vars_ue[CC_id]->common_vars.rxdata[x] From 42c16795454fdaaed2617ac32e4eada3ec71318f Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Tue, 15 Mar 2022 14:23:25 +0100 Subject: [PATCH 084/150] remove one global --- openair1/PHY/INIT/nr_init_ue.c | 2 -- openair1/PHY/NR_TRANSPORT/nr_dci.c | 3 +- openair1/PHY/NR_UE_TRANSPORT/dci_nr.c | 28 +++++++++++-------- .../NR_UE_TRANSPORT/nr_transport_proto_ue.h | 7 +++-- openair1/PHY/defs_nr_UE.h | 3 -- openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 5 ++-- 6 files changed, 25 insertions(+), 23 deletions(-) diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index 75315187d9..5a3c2569da 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -404,7 +404,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) ue->pdcch_vars[th_id][gNB_id]->llr = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) ); ue->pdcch_vars[th_id][gNB_id]->llr16 = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) ); ue->pdcch_vars[th_id][gNB_id]->wbar = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) ); - ue->pdcch_vars[th_id][gNB_id]->e_rx = (int16_t *)malloc16_clear( 4*2*100*12 ); ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext = (int32_t **)malloc16_clear( 4*fp->nb_antennas_rx*sizeof(int32_t *) ); ue->pdcch_vars[th_id][gNB_id]->rho = (int32_t **)malloc16( fp->nb_antennas_rx*sizeof(int32_t *) ); @@ -574,7 +573,6 @@ void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) free_and_zero(ue->pdcch_vars[th_id][gNB_id]->llr); free_and_zero(ue->pdcch_vars[th_id][gNB_id]->llr16); free_and_zero(ue->pdcch_vars[th_id][gNB_id]->wbar); - free_and_zero(ue->pdcch_vars[th_id][gNB_id]->e_rx); free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rxdataF_comp); free_and_zero(ue->pdcch_vars[th_id][gNB_id]->dl_ch_rho_ext); free_and_zero(ue->pdcch_vars[th_id][gNB_id]->rho); diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c index ae96eb26bc..9876dfca86 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dci.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c @@ -132,7 +132,8 @@ void nr_generate_dci(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15, polar_encoder_fast((uint64_t*)dci_pdu->Payload, (void*)encoder_output, n_RNTI, 1, NR_POLAR_DCI_MESSAGE_TYPE, dci_pdu->PayloadSizeBits, dci_pdu->AggregationLevel); -#if 1 +#ifdef DEBUG_CHANNEL_CODING +//debug dump dci printf("polar rnti %x,length %d, L %d\n",n_RNTI, dci_pdu->PayloadSizeBits,pdcch_pdu_rel15->dci_pdu->AggregationLevel); printf("DCI PDU: [0]->0x%lx \t [1]->0x%lx\n", ((uint64_t*)dci_pdu->Payload)[0], ((uint64_t*)dci_pdu->Payload)[1]); diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c index 9f0e1bea71..66422a9dfa 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c @@ -83,7 +83,7 @@ char nr_dci_format_string[8][30] = { //static const int16_t conjugate[8]__attribute__((aligned(32))) = {-1,1,-1,1,-1,1,-1,1}; -void nr_pdcch_demapping_deinterleaving(uint32_t *llr, +static void nr_pdcch_demapping_deinterleaving(uint32_t *llr, uint32_t *z, uint8_t coreset_time_dur, uint8_t start_symbol, @@ -685,7 +685,8 @@ void nr_pdcch_detection_mrc(NR_DL_FRAME_PARMS *frame_parms, int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15) { + fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15, + int16_t e_rx[4*2*100*12] ) { uint32_t frame = proc->frame_rx; uint32_t slot = proc->nr_slot_rx; @@ -772,7 +773,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, LOG_D(PHY,"we enter nr_pdcch_demapping_deinterleaving(), number of candidates %d\n",rel15->number_of_candidates); nr_pdcch_demapping_deinterleaving((uint32_t *) pdcch_vars->llr, - (uint32_t *) pdcch_vars->e_rx, + (uint32_t *) e_rx, rel15->coreset.duration, rel15->coreset.StartSymbolIndex, n_rb, @@ -791,7 +792,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, -void nr_pdcch_unscrambling(int16_t *z, +void nr_pdcch_unscrambling(int16_t e_rx[4*2*100*12], uint16_t scrambling_RNTI, uint32_t length, uint16_t pdcch_DMRS_scrambling_id, @@ -814,13 +815,15 @@ void nr_pdcch_unscrambling(int16_t *z, reset = 0; } - if (((s >> (i % 32)) & 1) == 1) z2[i] = -z[i]; - else z2[i]=z[i]; + if (((s >> (i % 32)) & 1) == 1) + z2[i] = -e_rx[i]; + else + z2[i]=e_rx[i]; } - printf("Encoded Payload (length:%d dwords):\n", length>>5); + printf("Encoded Payload (length:%d dwords):\n", length); - for (int i=0; i>5; i++) - printf("[%d]->0x%08x \t", i, z2[i]); + for (int i=0; i0x%x \t", i, z2[i]); } @@ -855,7 +858,8 @@ static uint16_t nr_dci_false_detection(uint64_t *dci, return x; } -uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, +uint8_t nr_dci_decoding_procedure(int16_t e_rx[4*2*100*12], + PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, fapi_nr_dci_indication_t *dci_ind, fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15) { @@ -891,10 +895,10 @@ uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, LOG_D(PHY, "Trying DCI candidate %d of %d number of candidates, CCE %d (%d), L %d, length %d, format %s\n", j, rel15->number_of_candidates, CCEind, e_rx_cand_idx, L, dci_length,nr_dci_format_string[rel15->dci_format_options[k]]); - nr_pdcch_unscrambling(&pdcch_vars->e_rx[e_rx_cand_idx], rel15->coreset.scrambling_rnti, L*108, rel15->coreset.pdcch_dmrs_scrambling_id, tmp_e); + nr_pdcch_unscrambling(&e_rx[e_rx_cand_idx], rel15->coreset.scrambling_rnti, L*108, rel15->coreset.pdcch_dmrs_scrambling_id, tmp_e); #ifdef DEBUG_DCI_DECODING - uint32_t *z = (uint32_t *) &pdcch_vars->e_rx[e_rx_cand_idx]; + uint32_t *z = (uint32_t *) &e_rx[e_rx_cand_idx]; for (int index_z = 0; index_z < L*6; index_z++){ for (int i=0; i<9; i++) { LOG_D(PHY,"z[%d]=(%d,%d) \n", (9*index_z + i), *(int16_t *) &z[index_z + i],*(1 + (int16_t *) &z[index_z + i])); 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 aac59a7da1..945eb5df0f 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h @@ -1105,8 +1105,8 @@ uint32_t dlsch_decoding_emul(PHY_VARS_NR_UE *phy_vars_ue, int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, - fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15); - + fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15, + int16_t e_rx[4*2*100*12]); /*! \brief Extract PSS and SSS resource elements @param phy_vars_ue Pointer to UE variables @@ -1667,7 +1667,8 @@ uint8_t get_prach_prb_offset(NR_DL_FRAME_PARMS *frame_parms, #include -uint8_t nr_dci_decoding_procedure(PHY_VARS_NR_UE *ue, +uint8_t nr_dci_decoding_procedure(int16_t e_rx[4*2*100*12], + PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, fapi_nr_dci_indication_t *dci_ind, fapi_nr_dl_config_dci_dl_pdu_rel15_t *rel15); diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index 04080e7215..3762107d5d 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -611,9 +611,6 @@ typedef struct { /// \brief \f$\overline{w}\f$ from 36-211. /// - first index: ? [0..48*N_RB_DL[ int16_t *wbar; - /// \brief PDCCH/DCI e-sequence (input to rate matching). - /// - first index: ? [0..96*N_RB_DL[ - int16_t *e_rx; /// Total number of PDU errors (diagnostic mode) uint32_t dci_errors; /// Total number of PDU received diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index ddddcd09e2..52fa0d4b2f 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -500,7 +500,8 @@ int nr_ue_pdcch_procedures(uint8_t gNB_id, start_meas(&ue->dlsch_rx_pdcch_stats); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_IN); - nr_rx_pdcch(ue, proc, rel15); + int16_t e_rx[4*2*100*12]={0}; + nr_rx_pdcch(ue, proc, rel15, e_rx); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PDCCH, VCD_FUNCTION_OUT); @@ -511,7 +512,7 @@ int nr_ue_pdcch_procedures(uint8_t gNB_id, n_ss); #endif - dci_cnt = nr_dci_decoding_procedure(ue, proc, dci_ind, rel15); + dci_cnt = nr_dci_decoding_procedure(e_rx, ue, proc, dci_ind, rel15); #ifdef NR_PDCCH_SCHED_DEBUG LOG_I(PHY,"<-NR_PDCCH_PHY_PROCEDURES_LTE_UE (nr_ue_pdcch_procedures)-> Ending function nr_dci_decoding_procedure() -> dci_cnt=%u\n",dci_cnt); From a7e7d05da340aa0aadb134a49773071e3e159c8e Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Wed, 16 Mar 2022 21:23:53 +0100 Subject: [PATCH 085/150] fix difficult to read code --- executables/nr-gnb.c | 1 + executables/nr-uesoftmodem.c | 10 +- .../PHY/LTE_ESTIMATION/lte_est_freq_offset.c | 18 +-- openair1/PHY/LTE_ESTIMATION/lte_sync_time.c | 22 +-- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 2 +- .../LTE_TRANSPORT/transport_common_proto.h | 2 +- openair1/PHY/LTE_UE_TRANSPORT/get_pmi.c | 2 +- .../PHY/LTE_UE_TRANSPORT/transport_proto_ue.h | 10 -- openair1/PHY/NR_REFSIG/pss_nr.h | 6 - openair1/PHY/NR_REFSIG/ptrs_nr.c | 6 +- openair1/PHY/NR_TRANSPORT/nr_dlsch.c | 46 +++--- openair1/PHY/NR_TRANSPORT/nr_dlsch.h | 4 +- openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c | 12 +- openair1/PHY/NR_TRANSPORT/pucch_rx.c | 3 +- openair1/PHY/NR_UE_TRANSPORT/dci_nr.c | 6 +- .../PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c | 12 +- .../NR_UE_TRANSPORT/nr_transport_proto_ue.h | 10 -- openair1/PHY/NR_UE_TRANSPORT/pss_nr.c | 75 ++++------ openair1/PHY/TOOLS/angle.c | 2 +- openair1/PHY/TOOLS/cadd_sv.c | 2 +- openair1/PHY/TOOLS/cadd_vv.c | 2 +- openair1/PHY/TOOLS/calibration_test.c | 10 +- openair1/PHY/TOOLS/nr_phy_scope.c | 2 +- openair1/SIMULATION/NR_PHY/dlschsim.c | 2 +- openair1/SIMULATION/NR_PHY/pucchsim.c | 2 +- .../unit_tests/src/frame_config_test.c | 2 +- .../NR_UE_PHY/unit_tests/src/harq_test.c | 2 +- .../NR_UE_PHY/unit_tests/src/pbch_test.c | 2 +- .../NR_UE_PHY/unit_tests/src/pss_test.c | 2 +- .../NR_UE_PHY/unit_tests/src/pss_util_test.c | 2 +- .../NR_UE_PHY/unit_tests/src/pss_util_test.h | 2 +- .../unit_tests/src/pucch_uci_generator_test.c | 2 +- .../NR_UE_PHY/unit_tests/src/pucch_uci_test.c | 2 +- .../NR_UE_PHY/unit_tests/src/srs_test.c | 2 +- .../NR_UE_PHY/unit_tests/src/sss_test.c | 2 +- openair2/LAYER2/NR_MAC_COMMON/nr_mac.h | 15 +- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 128 +++++----------- openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 3 +- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c | 6 +- .../LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c | 79 ++++------ .../LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 137 ++++++------------ openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h | 2 +- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 2 +- openair2/RRC/NR/rrc_gNB_NGAP.c | 6 +- openair3/NAS/NR_UE/nr_nas_msg_sim.c | 2 +- targets/ARCH/rfsimulator/apply_channelmod.c | 6 +- targets/ARCH/rfsimulator/rfsimulator.h | 4 +- targets/ARCH/rfsimulator/simulator.c | 8 +- targets/RT/USER/lte-ue.c | 2 +- 49 files changed, 258 insertions(+), 431 deletions(-) diff --git a/executables/nr-gnb.c b/executables/nr-gnb.c index 4793ef4e95..b6c95de4ce 100644 --- a/executables/nr-gnb.c +++ b/executables/nr-gnb.c @@ -458,6 +458,7 @@ void init_gNB_Tpool(int inst) { for (int i=0; i < 2; i++) { notifiedFIFO_elt_t *msgL1Tx = newNotifiedFIFO_elt(sizeof(processingData_L1tx_t),0,gNB->L1_tx_out,tx_func); processingData_L1tx_t *msgDataTx = (processingData_L1tx_t *)NotifiedFifoData(msgL1Tx); + memset(msgDataTx,0, sizeof(processingData_L1tx_t)); init_DLSCH_struct(gNB, msgDataTx); memset(msgDataTx->ssb, 0, 64*sizeof(NR_gNB_SSB_t)); pushNotifiedFIFO(gNB->L1_tx_free,msgL1Tx); // to unblock the process in the beginning diff --git a/executables/nr-uesoftmodem.c b/executables/nr-uesoftmodem.c index 649b68631b..82ba86ea63 100644 --- a/executables/nr-uesoftmodem.c +++ b/executables/nr-uesoftmodem.c @@ -241,16 +241,16 @@ nrUE_params_t *get_nrUE_params(void) { } /* initialie thread pools used for NRUE processing paralleliation */ void init_tpools(uint8_t nun_dlsch_threads) { - char params[NR_RX_NB_TH*NR_NB_TH_SLOT*3+1]; + char params[NR_RX_NB_TH*NR_NB_TH_SLOT*3+1]={0}; for (int i=0; iN_RB_DL/2 - 1)*12,dl_ch_shift); //omega = dot_product(dl_ch,dl_ch_prev,frame_parms->ofdm_symbol_size,15); - omega_cpx.r = ((struct complex16*) &omega)->r; - omega_cpx.i = ((struct complex16*) &omega)->i; + omega_cpx.r = ((c16_t*) &omega)->r; + omega_cpx.i = ((c16_t*) &omega)->i; dl_ch = (int16_t *)&dl_ch_estimates[aa][(((frame_parms->N_RB_DL/2) + 1)*12) + ch_offset]; @@ -155,8 +155,8 @@ int lte_est_freq_offset(int **dl_ch_estimates, // calculate omega = angle(conj(dl_ch)*dl_ch_prev)) omega = dot_product(dl_ch,dl_ch_prev,((frame_parms->N_RB_DL/2) - 1)*12,dl_ch_shift); - omega_cpx.r += ((struct complex16*) &omega)->r; - omega_cpx.i += ((struct complex16*) &omega)->i; + omega_cpx.r += ((c16_t*) &omega)->r; + omega_cpx.i += ((c16_t*) &omega)->i; // phase_offset += atan2((double)omega_cpx->i,(double)omega_cpx->r); phase_offset += atan2((double)omega_cpx.i,(double)omega_cpx.r); @@ -195,7 +195,7 @@ int lte_mbsfn_est_freq_offset(int **dl_ch_estimates, { int ch_offset, omega, dl_ch_shift; - struct complex16 *omega_cpx; + c16_t *omega_cpx; double phase_offset; int freq_offset_est; unsigned char aa; @@ -234,7 +234,7 @@ int lte_mbsfn_est_freq_offset(int **dl_ch_estimates, // printf("Computing freq_offset\n"); omega = dot_product(dl_ch,dl_ch_prev,(frame_parms->N_RB_DL/2 - 1)*12,dl_ch_shift); //omega = dot_product(dl_ch,dl_ch_prev,frame_parms->ofdm_symbol_size,15); - omega_cpx = (struct complex16*) ω + omega_cpx = (c16_t*) ω // printf("omega (%d,%d)\n",omega_cpx->r,omega_cpx->i); @@ -247,8 +247,8 @@ int lte_mbsfn_est_freq_offset(int **dl_ch_estimates, // calculate omega = angle(conj(dl_ch)*dl_ch_prev)) omega = dot_product(dl_ch,dl_ch_prev,((frame_parms->N_RB_DL/2) - 1)*12,dl_ch_shift); - omega_cpx->r += ((struct complex16*) &omega)->r; - omega_cpx->i += ((struct complex16*) &omega)->i; + omega_cpx->r += ((c16_t*) &omega)->r; + omega_cpx->i += ((c16_t*) &omega)->i; // phase_offset += atan2((double)omega_cpx->i,(double)omega_cpx->r); phase_offset += atan2((double)omega_cpx->i,(double)omega_cpx->r); // printf("omega (%d,%d) -> %f\n",omega_cpx->r,omega_cpx->i,phase_offset); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c index 1fbc8b7ef2..b21f526fcc 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_time.c @@ -34,9 +34,9 @@ // Note: this is for prototype of generate_drs_pusch (OTA synchronization of RRUs) #include "PHY/LTE_UE_TRANSPORT/transport_proto_ue.h" -static struct complex16 *primary_synch0_time __attribute__((aligned(32))); -static struct complex16 *primary_synch1_time __attribute__((aligned(32))); -static struct complex16 *primary_synch2_time __attribute__((aligned(32))); +static c16_t *primary_synch0_time __attribute__((aligned(32))); +static c16_t *primary_synch1_time __attribute__((aligned(32))); +static c16_t *primary_synch2_time __attribute__((aligned(32))); static void doIdft(int size, short *in, short *out) { switch (size) { @@ -67,7 +67,7 @@ static void doIdft(int size, short *in, short *out) { } } -static void copyPrimary( struct complex16 *out, struct complex16 *in, int ofdmSize) { +static void copyPrimary( c16_t *out, struct complex16 *in, int ofdmSize) { int k=ofdmSize-36; for (int i=0; i<72; i++) { @@ -83,20 +83,20 @@ static void copyPrimary( struct complex16 *out, struct complex16 *in, int ofdmSi } int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms ) { // LTE_UE_COMMON *common_vars - struct complex16 syncF_tmp[2048]__attribute__((aligned(32)))= {{0}}; + c16_t syncF_tmp[2048]__attribute__((aligned(32)))= {{0}}; int sz=frame_parms->ofdm_symbol_size*sizeof(*primary_synch0_time); - AssertFatal( NULL != (primary_synch0_time = (struct complex16 *)malloc16(sz)),""); + AssertFatal( NULL != (primary_synch0_time = (c16_t *)malloc16(sz)),""); bzero(primary_synch0_time,sz); - AssertFatal( NULL != (primary_synch1_time = (struct complex16 *)malloc16(sz)),""); + AssertFatal( NULL != (primary_synch1_time = (c16_t *)malloc16(sz)),""); bzero(primary_synch1_time,sz); - AssertFatal( NULL != (primary_synch2_time = (struct complex16 *)malloc16(sz)),""); + AssertFatal( NULL != (primary_synch2_time = (c16_t *)malloc16(sz)),""); bzero(primary_synch2_time,sz); // generate oversampled sync_time sequences - copyPrimary( syncF_tmp, (struct complex16 *) primary_synch0, frame_parms->ofdm_symbol_size); + copyPrimary( syncF_tmp, (c16_t *) primary_synch0, frame_parms->ofdm_symbol_size); doIdft(frame_parms->N_RB_DL, (short *)syncF_tmp,(short *)primary_synch0_time); - copyPrimary( syncF_tmp, (struct complex16 *) primary_synch1, frame_parms->ofdm_symbol_size); + copyPrimary( syncF_tmp, (c16_t *) primary_synch1, frame_parms->ofdm_symbol_size); doIdft(frame_parms->N_RB_DL, (short *)syncF_tmp,(short *)primary_synch1_time); - copyPrimary( syncF_tmp, (struct complex16 *) primary_synch2, frame_parms->ofdm_symbol_size); + copyPrimary( syncF_tmp, (c16_t *) primary_synch2, frame_parms->ofdm_symbol_size); doIdft(frame_parms->N_RB_DL, (short *)syncF_tmp,(short *)primary_synch2_time); if ( LOG_DUMPFLAG(DEBUG_LTEESTIM)){ diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index c6b312cc61..de21b7f4e2 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -2237,7 +2237,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, int P1_SHIFT[13],P2_SHIFT[13]; int offset,nushiftmod3; - uint8_t get_pmi_temp; + int get_pmi_temp; MIMO_mode_t mimo_mode = -1; uint8_t mprime=0,Ns; diff --git a/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h b/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h index af8e63c3ed..e6240a4e78 100644 --- a/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h +++ b/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h @@ -299,7 +299,7 @@ uint64_t pmi2hex_2Ar1(uint32_t pmi); uint64_t pmi2hex_2Ar2(uint32_t pmi); -uint8_t get_pmi(uint8_t N_RB_DL,MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb); +uint8_t get_pmi(int N_RB_DL,MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb); // DL power control functions double get_pa_dB(uint8_t pa); diff --git a/openair1/PHY/LTE_UE_TRANSPORT/get_pmi.c b/openair1/PHY/LTE_UE_TRANSPORT/get_pmi.c index 7bbe8e8942..6ab2ad9fdd 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/get_pmi.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/get_pmi.c @@ -21,7 +21,7 @@ #include "PHY/LTE_UE_TRANSPORT/transport_proto_ue.h" -uint8_t get_pmi(uint8_t N_RB_DL, MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb) +uint8_t get_pmi(int N_RB_DL, MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb) { /* MIMO_mode_t mode = dlsch_harq->mimo_mode; diff --git a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h index c5d096ceb7..bdfe0b8d07 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h +++ b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h @@ -1550,16 +1550,6 @@ uint64_t cqi2hex(uint32_t cqi); uint16_t computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs); - -/** \brief This routine extracts a single subband PMI from a bitmap coming from UCI or the pmi_extend function - @param N_RB_DL number of resource blocks - @param mimo_mode - @param pmi_alloc subband PMI bitmap - @param rb resource block for which to extract PMI - @returns subband PMI -*/ -uint8_t get_pmi(uint8_t N_RB_DL,MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb); - int get_nCCE_offset_l1(int *CCE_table, const unsigned char L, const int nCCE, diff --git a/openair1/PHY/NR_REFSIG/pss_nr.h b/openair1/PHY/NR_REFSIG/pss_nr.h index b32d48a2e9..c65ca3799d 100644 --- a/openair1/PHY/NR_REFSIG/pss_nr.h +++ b/openair1/PHY/NR_REFSIG/pss_nr.h @@ -113,12 +113,6 @@ EXTERN int16_t *primary_synchro_time_nr[NUMBER_PSS_SEQUENCE] #endif ; -EXTERN int64_t *pss_corr_ue[NUMBER_PSS_SEQUENCE] -#ifdef INIT_VARIABLES_PSS_NR_H -= { NULL, NULL, NULL} -#endif -; - /* profiling structure */ EXTERN time_stats_t generic_time[TIME_LAST]; diff --git a/openair1/PHY/NR_REFSIG/ptrs_nr.c b/openair1/PHY/NR_REFSIG/ptrs_nr.c index 40a6a56611..68134eb02d 100644 --- a/openair1/PHY/NR_REFSIG/ptrs_nr.c +++ b/openair1/PHY/NR_REFSIG/ptrs_nr.c @@ -268,8 +268,8 @@ void nr_ptrs_cpe_estimation(uint8_t K_ptrs, return; } uint16_t sc_per_symbol = (nb_rb + K_ptrs - 1)/K_ptrs; - struct complex16 ptrs_p[(1 + sc_per_symbol/4)*4]; - struct complex16 dmrs_comp_p[(1 + sc_per_symbol/4)*4]; + c16_t ptrs_p[(1 + sc_per_symbol/4)*4]; + c16_t dmrs_comp_p[(1 + sc_per_symbol/4)*4]; double abs = 0.0; double real = 0.0; double imag = 0.0; @@ -422,7 +422,7 @@ void get_slope_from_estimates(uint8_t start, uint8_t end, int16_t *est_p, double /* estimate from slope */ void ptrs_estimate_from_slope(int16_t *error_est, double *slope_p, uint8_t start, uint8_t end) { - struct complex16 *error=(struct complex16 *) error_est; + c16_t *error=(struct complex16 *) error_est; for(uint8_t i = 1; i< (end -start);i++) { error[start+i].r = error[start].r + (int16_t)(i * slope_p[0]);// real error[start+i].i = error[start].i + (int16_t)(i * slope_p[1]); //imag diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c index 876d6cc83a..e4fe9b8371 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c @@ -98,7 +98,6 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, uint16_t nb_re = ((12*rel15->NrOfSymbols)-nb_re_dmrs*dmrs_len-xOverhead)*rel15->rbSize*rel15->nrOfLayers; uint8_t Qm = rel15->qamModOrder[0]; uint32_t encoded_length = nb_re*Qm; - uint32_t scrambled_output[rel15->NrOfCodewords][(encoded_length>>5)+1]; int16_t mod_dmrs[n_dmrs<<1] __attribute__ ((aligned(16))); /* PTRS */ @@ -125,7 +124,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, start_meas(dlsch_encoding_stats); if (nr_dlsch_encoding(gNB, - harq->pdu, frame, slot, dlsch, frame_parms,output,tinput,tprep,tparity,toutput, + frame, slot, harq, frame_parms,output,tinput,tprep,tparity,toutput, dlsch_rate_matching_stats, dlsch_interleaving_stats, dlsch_segmentation_stats) == -1) @@ -148,46 +147,41 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, #endif /// scrambling - start_meas(dlsch_scrambling_stats); for (int q=0; qNrOfCodewords; q++) { - memset((void*)scrambled_output[q], 0, ((encoded_length>>5)+1)*sizeof(uint32_t)); + uint32_t scrambled_output[encoded_length]; + start_meas(dlsch_scrambling_stats); nr_pdsch_codeword_scrambling(output, encoded_length, q, rel15->dataScramblingId, rel15->rnti, - scrambled_output[q]); - } - - stop_meas(dlsch_scrambling_stats); + scrambled_output); + stop_meas(dlsch_scrambling_stats); + #ifdef DEBUG_DLSCH - printf("PDSCH scrambling:\n"); - for (int i=0; i>8; i++) { - for (int j=0; j<8; j++) - printf("0x%08x\t", scrambled_output[0][(i<<3)+j]); - printf("\n"); - } + printf("PDSCH scrambling:\n"); + for (int i=0; i>8; i++) { + for (int j=0; j<8; j++) + printf("0x%08x\t", scrambled_output[(i<<3)+j]); + printf("\n"); + } #endif - - /// Modulation start_meas(dlsch_modulation_stats); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_MODULATION, 1); - for (int q=0; qNrOfCodewords; q++) - nr_modulation(scrambled_output[q], + nr_modulation(scrambled_output, encoded_length, Qm, mod_symbs[q]); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_MODULATION, 0); stop_meas(dlsch_modulation_stats); #ifdef DEBUG_DLSCH - printf("PDSCH Modulation: Qm %d(%d)\n", Qm, nb_re); - for (int i=0; i>3; i++) { - for (int j=0; j<8; j++) { - printf("%d %d\t", mod_symbs[0][((i<<3)+j)<<1], mod_symbs[0][(((i<<3)+j)<<1)+1]); + printf("PDSCH Modulation: Qm %d(%d)\n", Qm, nb_re); + for (int i=0; i>3; i++) { + for (int j=0; j<8; j++) { + printf("%d %d\t", mod_symbs[0][((i<<3)+j)<<1], mod_symbs[0][(((i<<3)+j)<<1)+1]); + } + printf("\n"); } - printf("\n"); - } #endif + } start_meas(&gNB->dlsch_layer_mapping_stats); /// Layer mapping diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.h b/openair1/PHY/NR_TRANSPORT/nr_dlsch.h index 28676b49f2..daa4ed1723 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.h +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.h @@ -78,9 +78,9 @@ int16_t find_nr_dlsch(uint16_t rnti, PHY_VARS_gNB *gNB,find_type_t type); NR_gNB_SCH_STATS_t *find_nr_dlsch_stats(uint16_t rnti, PHY_VARS_gNB *gNB,find_type_t type); int nr_dlsch_encoding(PHY_VARS_gNB *gNB, - unsigned char *a,int frame, + int frame, uint8_t slot, - NR_gNB_DLSCH_t *dlsch, + NR_DL_gNB_HARQ_t *harq, NR_DL_FRAME_PARMS* frame_parms, unsigned char * output, time_stats_t *tinput, diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c index 229f59032e..bf33457aaa 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c @@ -286,10 +286,9 @@ void ldpc8blocks( void *p) { } int nr_dlsch_encoding(PHY_VARS_gNB *gNB, - unsigned char *a, int frame, uint8_t slot, - NR_gNB_DLSCH_t *dlsch, + NR_DL_gNB_HARQ_t *harq, NR_DL_FRAME_PARMS *frame_parms, unsigned char * output, time_stats_t *tinput,time_stats_t *tprep,time_stats_t *tparity,time_stats_t *toutput, @@ -298,13 +297,12 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB, encoder_implemparams_t impp; impp.output=output; unsigned int crc=1; - NR_DL_gNB_HARQ_t *harq = &dlsch->harq_process; nfapi_nr_dl_tti_pdsch_pdu_rel15_t *rel15 = &harq->pdsch_pdu.pdsch_pdu_rel15; - impp.Zc = &dlsch->harq_process.Z; + impp.Zc = &harq->Z; float Coderate = 0.0; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ENCODING, VCD_FUNCTION_IN); uint32_t A = rel15->TBSize[0]<<3; - + unsigned char *a=harq->pdu; if ( rel15->rnti != SI_RNTI) trace_NRpdu(DIRECTION_DOWNLINK, a, rel15->TBSize[0], 0, WS_C_RNTI, rel15->rnti, frame, slot,0, 0); @@ -317,14 +315,14 @@ int nr_dlsch_encoding(PHY_VARS_gNB *gNB, stats=&gNB->dlsch_stats[i]; } - if (gNB->dlsch_stats[i].rnti == dlsch->rnti) { + if (gNB->dlsch_stats[i].rnti == rel15->rnti) { stats=&gNB->dlsch_stats[i]; break; } } if (stats) { - stats->rnti = dlsch->rnti; + stats->rnti = rel15->rnti; stats->total_bytes_tx += rel15->TBSize[0]; stats->current_RI = rel15->nrOfLayers; stats->current_Qm = rel15->qamModOrder[0]; diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c index 17f145b98a..eda53e1c84 100644 --- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c +++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c @@ -405,13 +405,12 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, if (nr_sequences>1) { if (xrtmag_dBtimes10 < (50+xrtmag_next_dBtimes10) || SNRtimes10 < gNB->pucch0_thres) { no_conf=true; - LOG_W(PHY,"%d.%d PUCCH bad confidence: %d threshold, %d, %d, %d\n", + LOG_D(PHY,"%d.%d PUCCH bad confidence: %d threshold, %d, %d, %d\n", frame, slot, uci_stats->pucch0_thres, SNRtimes10, xrtmag_dBtimes10, xrtmag_next_dBtimes10); - abort(); } } gNB->bad_pucch += no_conf; diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c index 66422a9dfa..5b0544bf21 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c @@ -820,10 +820,6 @@ void nr_pdcch_unscrambling(int16_t e_rx[4*2*100*12], else z2[i]=e_rx[i]; } - printf("Encoded Payload (length:%d dwords):\n", length); - - for (int i=0; i0x%x \t", i, z2[i]); } @@ -898,7 +894,7 @@ uint8_t nr_dci_decoding_procedure(int16_t e_rx[4*2*100*12], nr_pdcch_unscrambling(&e_rx[e_rx_cand_idx], rel15->coreset.scrambling_rnti, L*108, rel15->coreset.pdcch_dmrs_scrambling_id, tmp_e); #ifdef DEBUG_DCI_DECODING - uint32_t *z = (uint32_t *) &e_rx[e_rx_cand_idx]; + uint32_t *z = (uint32_t *) &pdcch_vars->e_rx[e_rx_cand_idx]; for (int index_z = 0; index_z < L*6; index_z++){ for (int i=0; i<9; i++) { LOG_D(PHY,"z[%d]=(%d,%d) \n", (9*index_z + i), *(int16_t *) &z[index_z + i],*(1 + (int16_t *) &z[index_z + i])); diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c index bf9cfaaa70..6163a95e5c 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c @@ -168,8 +168,6 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint dlsch->harq_processes[i]->d[r] = (int16_t *)malloc16(5*8448*sizeof(int16_t)); if (dlsch->harq_processes[i]->c[r]) memset(dlsch->harq_processes[i]->c[r],0,1056); - if (dlsch->harq_processes[i]->d[r]) - memset(dlsch->harq_processes[i]->d[r],0,5*8448); else exit_flag=2; @@ -326,12 +324,12 @@ void nr_processDLSegment(void* arg) { harq_process->rvidx, harq_process->round); */ //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_IN); - + int16_t d[5*8448]; if (nr_rate_matching_ldpc_rx(Ilbrm, Tbslbrm, p_decoderParms->BG, p_decoderParms->Z, - harq_process->d[r], + d, w, harq_process->C, harq_process->rvidx, @@ -353,7 +351,7 @@ void nr_processDLSegment(void* arg) { LOG_D(PHY,"decoder input(segment %u) :",r); for (int i=0; id[r][i]); + LOG_D(PHY,"%d : %d\n",i,d[i]); LOG_D(PHY,"\n"); } @@ -379,9 +377,9 @@ void nr_processDLSegment(void* arg) { //set Filler bits memset((&z[0]+K_bits_F),127,harq_process->F*sizeof(int16_t)); //Move coded bits before filler bits - memcpy((&z[0]+2*harq_process->Z),harq_process->d[r],(K_bits_F-2*harq_process->Z)*sizeof(int16_t)); + memcpy((&z[0]+2*harq_process->Z),d,(K_bits_F-2*harq_process->Z)*sizeof(int16_t)); //skip filler bits - memcpy((&z[0]+Kr),harq_process->d[r]+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t)); + memcpy((&z[0]+Kr),d+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t)); //Saturate coded bits before decoding into 8 bits values for (i=0, j=0; j < ((kc*harq_process->Z)>>4)+1; i+=2, j++) { 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 945eb5df0f..ead5ec2da5 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h @@ -1480,16 +1480,6 @@ uint64_t cqi2hex(uint32_t cqi); uint16_t computeRIV(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs); - -/** \brief This routine extracts a single subband PMI from a bitmap coming from UCI or the pmi_extend function - @param N_RB_DL number of resource blocks - @param mimo_mode - @param pmi_alloc subband PMI bitmap - @param rb resource block for which to extract PMI - @returns subband PMI -*/ -uint8_t get_pmi(uint8_t N_RB_DL,MIMO_mode_t mode, uint32_t pmi_alloc,uint16_t rb); - int get_nCCE_offset_l1(int *CCE_table, const unsigned char L, const int nCCE, diff --git a/openair1/PHY/NR_UE_TRANSPORT/pss_nr.c b/openair1/PHY/NR_UE_TRANSPORT/pss_nr.c index 54712cb64e..13ed436273 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/pss_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/pss_nr.c @@ -381,7 +381,6 @@ void init_context_pss_nr(NR_DL_FRAME_PARMS *frame_parms_ue) int sizePss = LENGTH_PSS_NR * IQ_SIZE; /* complex value i & q signed 16 bits */ int size = ofdm_symbol_size * IQ_SIZE; /* i and q samples signed 16 bits */ int16_t *p = NULL; - int64_t *q = NULL; AssertFatal(ofdm_symbol_size > 127, "illegal ofdm_symbol_size %d\n",ofdm_symbol_size); for (int i = 0; i < NUMBER_PSS_SEQUENCE; i++) { @@ -410,17 +409,6 @@ void init_context_pss_nr(NR_DL_FRAME_PARMS *frame_parms_ue) assert(0); } - size = sizeof(int64_t)*(frame_parms_ue->samples_per_frame + (2*ofdm_symbol_size)); - q = (int64_t*)malloc16(size); - if (q != NULL) { - pss_corr_ue[i] = q; - bzero( pss_corr_ue[i], size); - } - else { - LOG_E(PHY,"Fatal memory allocation problem \n"); - assert(0); - } - generate_pss_nr(frame_parms_ue,i); } } @@ -443,7 +431,6 @@ void free_context_pss_nr(void) free_and_zero(primary_synchro_nr[i]); free_and_zero(primary_synchro_nr2[i]); free_and_zero(primary_synchro_time_nr[i]); - free_and_zero(pss_corr_ue[i]); } } @@ -801,7 +788,6 @@ static inline double angle64(int64_t x) *********************************************************************/ #define DOT_PRODUCT_SCALING_SHIFT (17) - int pss_search_time_nr(int **rxdata, ///rx data in time domain NR_DL_FRAME_PARMS *frame_parms, int fo_flag, @@ -812,7 +798,7 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain unsigned int n, ar, peak_position, pss_source; int64_t peak_value; int64_t result; - int64_t avg[NUMBER_PSS_SEQUENCE]; + int64_t avg[NUMBER_PSS_SEQUENCE]={0}; double ffo_est=0; // performing the correlation on a frame length plus one symbol for the first of the two frame @@ -823,9 +809,8 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain else length = frame_parms->samples_per_frame; - AssertFatal(length>0,"illegal length %d\n",length); - for (int i = 0; i < NUMBER_PSS_SEQUENCE; i++) AssertFatal(pss_corr_ue[i] != NULL,"pss_corr_ue[%d] not yet allocated! Exiting.\n", i); + AssertFatal(length>0,"illegal length %d\n",length); peak_value = 0; peak_position = 0; pss_source = 0; @@ -846,47 +831,41 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain /* Correlation computation is based on a a dot product which is realized thank to SIMS extensions */ for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++) { - avg[pss_index]=0; - memset(pss_corr_ue[pss_index],0,length*sizeof(int64_t)); - } - for (n=0; n < length; n+=4) { // + for (n=0; n < length; n+=4) { // - for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++) { + int64_t pss_corr_ue=0; + /* calculate dot product of primary_synchro_time_nr and rxdata[ar][n] + * (ar=0..nb_ant_rx) and store the sum in temp[n]; */ + for (ar=0; arnb_antennas_rx; ar++) { - if ( n < (length - frame_parms->ofdm_symbol_size)) { + /* perform correlation of rx data and pss sequence ie it is a dot product */ + result = dot_product64((short*)primary_synchro_time_nr[pss_index], + (short*)&(rxdata[ar][n+is*frame_parms->samples_per_frame]), + frame_parms->ofdm_symbol_size, + shift); + pss_corr_ue += abs64(result); + //((short*)pss_corr_ue[pss_index])[2*n] += ((short*) &result)[0]; /* real part */ + //((short*)pss_corr_ue[pss_index])[2*n+1] += ((short*) &result)[1]; /* imaginary part */ + //((short*)&synchro_out)[0] += ((int*) &result)[0]; /* real part */ + //((short*)&synchro_out)[1] += ((int*) &result)[1]; /* imaginary part */ - /* calculate dot product of primary_synchro_time_nr and rxdata[ar][n] (ar=0..nb_ant_rx) and store the sum in temp[n]; */ - for (ar=0; arnb_antennas_rx; ar++) { - - /* perform correlation of rx data and pss sequence ie it is a dot product */ - result = dot_product64((short*)primary_synchro_time_nr[pss_index], - (short*)&(rxdata[ar][n+is*frame_parms->samples_per_frame]), - frame_parms->ofdm_symbol_size, - shift); - pss_corr_ue[pss_index][n] += abs64(result); - //((short*)pss_corr_ue[pss_index])[2*n] += ((short*) &result)[0]; /* real part */ - //((short*)pss_corr_ue[pss_index])[2*n+1] += ((short*) &result)[1]; /* imaginary part */ - //((short*)&synchro_out)[0] += ((int*) &result)[0]; /* real part */ - //((short*)&synchro_out)[1] += ((int*) &result)[1]; /* imaginary part */ - - } } - + /* calculate the absolute value of sync_corr[n] */ - avg[pss_index]+=pss_corr_ue[pss_index][n]; - if (pss_corr_ue[pss_index][n] > peak_value) { - peak_value = pss_corr_ue[pss_index][n]; + avg[pss_index]+=pss_corr_ue; + if (pss_corr_ue > peak_value) { + peak_value = pss_corr_ue; peak_position = n; pss_source = pss_index; - + #ifdef DEBUG_PSS_NR - printf("pss_index %d: n %6u peak_value %15llu\n", pss_index, n, (unsigned long long)pss_corr_ue[pss_index][n]); + printf("pss_index %d: n %6u peak_value %15llu\n", pss_index, n, (unsigned long long)pss_corr_ue[n]); #endif } } } - + if (fo_flag){ // fractional frequency offset computation according to Cross-correlation Synchronization Algorithm Using PSS @@ -922,7 +901,8 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain // computing absolute value of frequency offset *f_off = ffo_est*frame_parms->subcarrier_spacing; - for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++) avg[pss_index]/=(length/4); + for (int pss_index = 0; pss_index < NUMBER_PSS_SEQUENCE; pss_index++) + avg[pss_index]/=(length/4); *eNB_id = pss_source; @@ -937,9 +917,6 @@ int pss_search_time_nr(int **rxdata, ///rx data in time domain static int debug_cnt = 0; if (debug_cnt == 0) { - LOG_M("pss_corr_ue0.m","pss_corr_ue0",pss_corr_ue[0],length,1,6); - LOG_M("pss_corr_ue1.m","pss_corr_ue1",pss_corr_ue[1],length,1,6); - LOG_M("pss_corr_ue2.m","pss_corr_ue2",pss_corr_ue[2],length,1,6); if (is) LOG_M("rxdata1.m","rxd0",rxdata[frame_parms->samples_per_frame],length,1,1); else diff --git a/openair1/PHY/TOOLS/angle.c b/openair1/PHY/TOOLS/angle.c index a06640d1cf..89ffc3cb60 100644 --- a/openair1/PHY/TOOLS/angle.c +++ b/openair1/PHY/TOOLS/angle.c @@ -29,7 +29,7 @@ #include "costable.h" #include "defs.h" -unsigned int angle(struct complex16 perror) +unsigned int angle(c16_t perror) { int a; diff --git a/openair1/PHY/TOOLS/cadd_sv.c b/openair1/PHY/TOOLS/cadd_sv.c index caa8d1cc04..56dcb71847 100644 --- a/openair1/PHY/TOOLS/cadd_sv.c +++ b/openair1/PHY/TOOLS/cadd_sv.c @@ -129,7 +129,7 @@ main () short output[256] __attribute__((aligned(16))); int i; - struct complex16 alpha; + c16_t alpha; Zero_Buffer(output,256*2); diff --git a/openair1/PHY/TOOLS/cadd_vv.c b/openair1/PHY/TOOLS/cadd_vv.c index 77346a97f7..08bf514cb3 100644 --- a/openair1/PHY/TOOLS/cadd_vv.c +++ b/openair1/PHY/TOOLS/cadd_vv.c @@ -278,7 +278,7 @@ main () short output[256] __attribute__((aligned(16))); int i; - struct complex16 alpha; + c16_t alpha; Zero_Buffer(output,256*2); diff --git a/openair1/PHY/TOOLS/calibration_test.c b/openair1/PHY/TOOLS/calibration_test.c index 5dced27060..650d5e420c 100644 --- a/openair1/PHY/TOOLS/calibration_test.c +++ b/openair1/PHY/TOOLS/calibration_test.c @@ -305,15 +305,15 @@ int main(int argc, char **argv) { openair0_device_load(&rfdevice,&openair0_cfg); - void ** samplesRx = (void **)malloc16(antennas* sizeof(struct complex16 *) ); - void ** samplesTx = (void **)malloc16(antennas* sizeof(struct complex16 *) ); + void ** samplesRx = (void **)malloc16(antennas* sizeof(c16_t *) ); + void ** samplesTx = (void **)malloc16(antennas* sizeof(c16_t *) ); int fd=open(getenv("rftestInputFile"),O_RDONLY); AssertFatal(fd>=0,"%s",strerror(errno)); for (int i=0; irbSize * NR_SYMBOLS_PER_SLOT * NR_NB_SC_PER_RB * 8 * NR_MAX_NB_LAYERS] __attribute__((aligned(32))); bzero(output,rel15->rbSize * NR_SYMBOLS_PER_SLOT * NR_NB_SC_PER_RB * 8 * NR_MAX_NB_LAYERS); if (input_fd == NULL) { - nr_dlsch_encoding(gNB, test_input, frame, slot, dlsch, frame_parms,output,NULL,NULL,NULL,NULL,NULL,NULL,NULL); + nr_dlsch_encoding(gNB, frame, slot, &dlsch->harq_process, frame_parms,output,NULL,NULL,NULL,NULL,NULL,NULL,NULL); } for (SNR = snr0; SNR < snr1; SNR += snr_step) { diff --git a/openair1/SIMULATION/NR_PHY/pucchsim.c b/openair1/SIMULATION/NR_PHY/pucchsim.c index 151d51d726..b6dc3d8f11 100644 --- a/openair1/SIMULATION/NR_PHY/pucchsim.c +++ b/openair1/SIMULATION/NR_PHY/pucchsim.c @@ -551,7 +551,7 @@ int main(int argc, char **argv) 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); - struct complex16 **rxdataF = (struct complex16 **)gNB->common_vars.rxdataF; + c16_t **rxdataF = (struct complex16 **)gNB->common_vars.rxdataF; for (int symb=0; symbframe_parms.symbols_per_slot;symb++) { if (symb= startingSymbolIndex+nrofSymbols) { int i0 = symb*gNB->frame_parms.ofdm_symbol_size; diff --git a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/frame_config_test.c b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/frame_config_test.c index c88c261667..093bb2d000 100644 --- a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/frame_config_test.c +++ b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/frame_config_test.c @@ -285,7 +285,7 @@ int main(int argc, char *argv[]) uint8_t nb_antennas_tx = 1; uint8_t nb_antennas_rx = 1; uint8_t frame_type = FDD; - uint8_t N_RB_DL=100; + int N_RB_DL=100; lte_prefix_type_t extended_prefix_flag = NORMAL; int Nid_cell[] = {(3*0+0)}; VOID_PARAMETER argc; diff --git a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/harq_test.c b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/harq_test.c index 05170e0bc9..96d7382f2b 100644 --- a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/harq_test.c +++ b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/harq_test.c @@ -200,7 +200,7 @@ int main(int argc, char *argv[]) uint8_t nb_antennas_tx = 1; uint8_t nb_antennas_rx = 1; uint8_t frame_type = FDD; - uint8_t N_RB_DL=100; + int N_RB_DL=100; lte_prefix_type_t extended_prefix_flag = NORMAL; int Nid_cell[] = {(3*0+0)}; VOID_PARAMETER argc; diff --git a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pbch_test.c b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pbch_test.c index 7600dfb08f..5c7f3157e7 100644 --- a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pbch_test.c +++ b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pbch_test.c @@ -379,7 +379,7 @@ int main(int argc, char *argv[]) uint8_t nb_antennas_tx = 1; uint8_t nb_antennas_rx = 1; uint8_t frame_type = FDD; - uint8_t N_RB_DL=100; + int N_RB_DL=100; lte_prefix_type_t extended_prefix_flag = NORMAL; int decoded_pbch = -1; int Nid1, Nid2; diff --git a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_test.c b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_test.c index 2088d558cb..de1249457f 100644 --- a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_test.c +++ b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_test.c @@ -184,7 +184,7 @@ int main(int argc, char *argv[]) uint8_t nb_antennas_rx = 1; uint16_t Nid_cell=123; uint8_t frame_type=FDD; - uint8_t N_RB_DL=100; + int N_RB_DL=100; lte_prefix_type_t extended_prefix_flag=NORMAL; const char *name_test = "PSS NR"; test_t test = { name_test, 0, 0, 0, 0}; diff --git a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_util_test.c b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_util_test.c index 4334bd12f9..2302c50ab1 100644 --- a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_util_test.c +++ b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_util_test.c @@ -206,7 +206,7 @@ void undefined_function(const char *function) { *********************************************************************/ int init_test(unsigned char N_tx, unsigned char N_rx, unsigned char transmission_mode, - unsigned char extended_prefix_flag, uint8_t frame_type, uint16_t Nid_cell, uint8_t N_RB_DL) { + unsigned char extended_prefix_flag, uint8_t frame_type, uint16_t Nid_cell, int N_RB_DL) { (void) transmission_mode; NR_DL_FRAME_PARMS *frame_parms; int log_level = OAILOG_TRACE; diff --git a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_util_test.h b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_util_test.h index f0929e88c0..78efc2234b 100644 --- a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_util_test.h +++ b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pss_util_test.h @@ -90,7 +90,7 @@ int set_pss_in_rx_buffer(PHY_VARS_NR_UE *PHY_vars_UE, int position_symbol, int p int init_test(unsigned char N_tx, unsigned char N_rx, unsigned char transmission_mode, unsigned char extended_prefix_flag, uint8_t frame_type, uint16_t Nid_cell, - uint8_t N_RB_DL); + int N_RB_DL); void display_test_configuration_pss(int position, int pss_sequence_number); diff --git a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_generator_test.c b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_generator_test.c index 68acea6d98..4948d0a876 100644 --- a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_generator_test.c +++ b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_generator_test.c @@ -142,7 +142,7 @@ int main(int argc, char *argv[]) { uint8_t nb_antennas_tx = 1; uint8_t nb_antennas_rx = 1; uint8_t frame_type = FDD; - uint8_t N_RB_DL=106; + int N_RB_DL=106; lte_prefix_type_t extended_prefix_flag = NORMAL; int Nid_cell[] = {(3*1+3)}; VOID_PARAMETER argc; diff --git a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_test.c b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_test.c index f731edc20a..31fe15a6de 100644 --- a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_test.c +++ b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/pucch_uci_test.c @@ -1239,7 +1239,7 @@ int main(int argc, char *argv[]) uint8_t nb_antennas_tx = 1; uint8_t nb_antennas_rx = 1; uint8_t frame_type = FDD; - uint8_t N_RB_DL=100; + int N_RB_DL=100; lte_prefix_type_t extended_prefix_flag = NORMAL; int Nid_cell[] = {(3*1+3)}; VOID_PARAMETER argc; diff --git a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/srs_test.c b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/srs_test.c index 34ea68bc61..235387acf7 100644 --- a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/srs_test.c +++ b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/srs_test.c @@ -442,7 +442,7 @@ int main(int argc, char *argv[]) uint8_t nb_antennas_tx = 1; uint8_t nb_antennas_rx = 1; uint8_t frame_type = FDD; - uint8_t N_RB_DL=100; + int N_RB_DL=100; lte_prefix_type_t extended_prefix_flag = NORMAL; int Nid_cell[] = {(3*0+0)}; VOID_PARAMETER argc; diff --git a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/sss_test.c b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/sss_test.c index 34127b604f..6f6594861a 100644 --- a/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/sss_test.c +++ b/openair1/SIMULATION/NR_UE_PHY/unit_tests/src/sss_test.c @@ -181,7 +181,7 @@ int main(int argc, char *argv[]) uint8_t nb_antennas_tx = 1; uint8_t nb_antennas_rx = 1; uint8_t frame_type = FDD; - uint8_t N_RB_DL=100; + int N_RB_DL=100; lte_prefix_type_t extended_prefix_flag = NORMAL; int phase; int Nid1, Nid2; diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h index ba3128923f..f084cb2d63 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h @@ -109,8 +109,7 @@ typedef struct { uint8_t LCID: 6; // octet 1 [5:0] uint8_t F: 1; // octet 1 [6] uint8_t R: 1; // octet 1 [7] - uint8_t L1: 8; // octet 2 [7:0] - uint8_t L2: 8; // octet 3 [7:0] + uint16_t L: 16; // octet 2 [7:0] } __attribute__ ((__packed__)) NR_MAC_SUBHEADER_LONG; typedef struct { @@ -118,6 +117,18 @@ typedef struct { uint8_t R: 2; // octet 1 [7:6] } __attribute__ ((__packed__)) NR_MAC_SUBHEADER_FIXED; +static inline void getMacLen(uint8_t* pdu, uint16_t *mac_ce_len, uint16_t *mac_subheader_len) { + NR_MAC_SUBHEADER_SHORT *s=(NR_MAC_SUBHEADER_SHORT*) pdu; + NR_MAC_SUBHEADER_LONG *l=(NR_MAC_SUBHEADER_LONG*) pdu; + if (s->F) { + *mac_subheader_len=sizeof(*l); + *mac_ce_len=ntohs(l->L); + } else { + *mac_subheader_len=sizeof(*s); + *mac_ce_len=s->L; + } +} + // BSR MAC CEs // TS 38.321 ch. 6.1.3.1 // Short BSR for a specific logical channel group ID diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 0c339ee70a..05313f388a 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -3326,10 +3326,6 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info, NR_UL_TIME_ALIGNMENT_t *ul_time_alignment, int pdu_id){ - uint8_t rx_lcid; - uint16_t mac_ce_len; - uint16_t mac_subheader_len; - uint16_t mac_sdu_len; module_id_t module_idP = dl_info->module_id; frame_t frameP = dl_info->frame; int slot = dl_info->slot; @@ -3348,10 +3344,9 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info, LOG_D(MAC, "In %s [%d.%d]: processing PDU %d (with length %d) of %d total number of PDUs...\n", __FUNCTION__, frameP, slot, pdu_id, pdu_len, dl_info->rx_ind->number_pdus); while (!done && pdu_len > 0){ - mac_ce_len = 0x0000; - mac_subheader_len = 0x0001; // default to fixed-length subheader = 1-oct - mac_sdu_len = 0x0000; - rx_lcid = ((NR_MAC_SUBHEADER_FIXED *)pduP)->LCID; + uint16_t mac_len = 0x0000; + uint16_t mac_subheader_len = 0x0001; // default to fixed-length subheader = 1-oct + uint8_t rx_lcid = ((NR_MAC_SUBHEADER_FIXED *)pduP)->LCID; LOG_D(MAC, "[UE] LCID %d, PDU length %d\n", rx_lcid, pdu_len); switch(rx_lcid){ @@ -3359,128 +3354,89 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info, case DL_SCH_LCID_CCCH: // MSG4 RRC Setup 38.331 // variable length - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - mac_sdu_len = ((uint16_t)(((NR_MAC_SUBHEADER_LONG *) pduP)->L1 & 0x7f) << 8) - | ((uint16_t)((NR_MAC_SUBHEADER_LONG *) pduP)->L2 & 0xff); - mac_subheader_len = 3; - } else { - mac_sdu_len = ((NR_MAC_SUBHEADER_SHORT *) pduP)->L; - mac_subheader_len = 2; - } - - AssertFatal(pdu_len > mac_sdu_len, "The mac_sdu_len (%d) has an invalid size. PDU len = %d! \n", - mac_sdu_len, pdu_len); + getMacLen(pduP, &mac_len, &mac_subheader_len); + AssertFatal(pdu_len > mac_len, "The mac_len (%d) has an invalid size. PDU len = %d! \n", + mac_len, pdu_len); // Check if it is a valid CCCH message, we get all 00's messages very often int i = 0; - for(i=0; i<(mac_subheader_len+mac_sdu_len); i++) { + for(i=0; i<(mac_subheader_len+mac_len); i++) { if(pduP[i] != 0) { break; } } - if (i == (mac_subheader_len+mac_sdu_len)) { + if (i == (mac_subheader_len+mac_len)) { LOG_D(NR_MAC, "%s() Invalid CCCH message!, pdu_len: %d\n", __func__, pdu_len); done = 1; break; } - if ( mac_sdu_len > 0 ) { - LOG_D(NR_MAC,"DL_SCH_LCID_CCCH (e.g. RRCSetup) with payload len %d\n", mac_sdu_len); + if ( mac_len > 0 ) { + LOG_D(NR_MAC,"DL_SCH_LCID_CCCH (e.g. RRCSetup) with payload len %d\n", mac_len); for (int i = 0; i < mac_subheader_len; i++) { LOG_D(NR_MAC, "MAC header %d: 0x%x\n", i, pduP[i]); } - for (int i = 0; i < mac_sdu_len; i++) { + for (int i = 0; i < mac_len; i++) { LOG_D(NR_MAC, "%d: 0x%x\n", i, pduP[mac_subheader_len + i]); } - nr_mac_rrc_data_ind_ue(module_idP, CC_id, gNB_index, frameP, 0, mac->crnti, CCCH, pduP+mac_subheader_len, mac_sdu_len); + nr_mac_rrc_data_ind_ue(module_idP, CC_id, gNB_index, frameP, 0, mac->crnti, CCCH, pduP+mac_subheader_len, mac_len); } break; case DL_SCH_LCID_TCI_STATE_ACT_UE_SPEC_PDSCH: + case DL_SCH_LCID_APERIODIC_CSI_TRI_STATE_SUBSEL: + case DL_SCH_LCID_SP_CSI_RS_CSI_IM_RES_SET_ACT: + case DL_SCH_LCID_SP_SRS_ACTIVATION: // 38.321 Ch6.1.3.14 // varialbe length - mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - mac_ce_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - mac_subheader_len = 3; - } - break; - case DL_SCH_LCID_APERIODIC_CSI_TRI_STATE_SUBSEL: - // 38.321 Ch6.1.3.13 - // varialbe length - mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - mac_ce_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - mac_subheader_len = 3; - } - break; - case DL_SCH_LCID_SP_CSI_RS_CSI_IM_RES_SET_ACT: - // 38.321 Ch6.1.3.12 - // varialbe length - mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - mac_ce_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - mac_subheader_len = 3; - } - break; - case DL_SCH_LCID_SP_SRS_ACTIVATION: - // 38.321 Ch6.1.3.17 - // varialbe length - mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - mac_ce_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - mac_subheader_len = 3; - } + getMacLen(pduP, &mac_len, &mac_subheader_len); break; + case DL_SCH_LCID_RECOMMENDED_BITRATE: // 38.321 Ch6.1.3.20 - mac_ce_len = 2; + mac_len = 2; break; case DL_SCH_LCID_SP_ZP_CSI_RS_RES_SET_ACT: // 38.321 Ch6.1.3.19 - mac_ce_len = 2; + mac_len = 2; break; case DL_SCH_LCID_PUCCH_SPATIAL_RELATION_ACT: // 38.321 Ch6.1.3.18 - mac_ce_len = 3; + mac_len = 3; break; case DL_SCH_LCID_SP_CSI_REP_PUCCH_ACT: // 38.321 Ch6.1.3.16 - mac_ce_len = 2; + mac_len = 2; break; case DL_SCH_LCID_TCI_STATE_IND_UE_SPEC_PDCCH: // 38.321 Ch6.1.3.15 - mac_ce_len = 2; + mac_len = 2; break; case DL_SCH_LCID_DUPLICATION_ACT: // 38.321 Ch6.1.3.11 - mac_ce_len = 1; + mac_len = 1; break; case DL_SCH_LCID_SCell_ACT_4_OCT: // 38.321 Ch6.1.3.10 - mac_ce_len = 4; + mac_len = 4; break; case DL_SCH_LCID_SCell_ACT_1_OCT: // 38.321 Ch6.1.3.10 - mac_ce_len = 1; + mac_len = 1; break; case DL_SCH_LCID_L_DRX: // 38.321 Ch6.1.3.6 // fixed length but not yet specify. - mac_ce_len = 0; + mac_len = 0; break; case DL_SCH_LCID_DRX: // 38.321 Ch6.1.3.5 // fixed length but not yet specify. - mac_ce_len = 0; + mac_len = 0; break; case DL_SCH_LCID_TA_COMMAND: // 38.321 Ch6.1.3.4 - mac_ce_len = 1; + mac_len = 1; /*uint8_t ta_command = ((NR_MAC_CE_TA *)pduP)[1].TA_COMMAND; uint8_t tag_id = ((NR_MAC_CE_TA *)pduP)[1].TAGID;*/ @@ -3502,14 +3458,14 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info, // Clause 5.1.5 and 6.1.3.3 of 3GPP TS 38.321 version 16.2.1 Release 16 // MAC Header: 1 byte (R/R/LCID) // MAC SDU: 6 bytes (UE Contention Resolution Identity) - mac_ce_len = 6; + mac_len = 6; if(ra->ra_state == WAIT_CONTENTION_RESOLUTION) { LOG_I(MAC, "[UE %d][RAPROC] Frame %d : received contention resolution identity: 0x%02x%02x%02x%02x%02x%02x Terminating RA procedure\n", module_idP, frameP, pduP[1], pduP[2], pduP[3], pduP[4], pduP[5], pduP[6]); bool ra_success = true; - for(int i = 0; icont_res_id[i] != pduP[i+1]) { ra_success = false; break; @@ -3540,22 +3496,8 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info, // check if LCID is valid at current time. if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) return; - NR_MAC_SUBHEADER_SHORT *shs = (NR_MAC_SUBHEADER_SHORT *)pduP; - if (shs->F) { - //mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - mac_subheader_len = 3; - if (pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) - return; - NR_MAC_SUBHEADER_LONG *shl = (NR_MAC_SUBHEADER_LONG *)pduP; - mac_sdu_len = ((uint16_t)(shl->L1 & 0x7f) << 8) | (uint16_t)(shl->L2 & 0xff); - } else { - if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) - return; - mac_sdu_len = (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - } - - LOG_D(NR_MAC, "[UE %d] Frame %d : DLSCH -> DL-DTCH %d (gNB %d, %d bytes)\n", module_idP, frameP, rx_lcid, gNB_index, mac_sdu_len); + getMacLen(pduP, &mac_len, &mac_subheader_len); + LOG_D(NR_MAC, "[UE %d] Frame %d : DLSCH -> DL-DTCH %d (gNB %d, %d bytes)\n", module_idP, frameP, rx_lcid, gNB_index, mac_len); #if defined(ENABLE_MAC_PAYLOAD_DEBUG) LOG_T(MAC, "[UE %d] First 32 bytes of DLSCH : \n", module_idP); @@ -3576,7 +3518,7 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info, MBMS_FLAG_NO, rx_lcid, (char *) (pduP + mac_subheader_len), - mac_sdu_len, + mac_len, 1, NULL); } else { @@ -3587,8 +3529,8 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info, break; } } - pduP += ( mac_subheader_len + mac_ce_len + mac_sdu_len ); - pdu_len -= ( mac_subheader_len + mac_ce_len + mac_sdu_len ); + pduP += ( mac_subheader_len + mac_len ); + pdu_len -= ( mac_subheader_len + mac_len ); if (pdu_len < 0) LOG_E(MAC, "[UE %d][%d.%d] nr_ue_process_mac_pdu, residual mac pdu length %d < 0!\n", module_idP, frameP, slot, pdu_len); } diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index bc9895ac2e..05c57d19ea 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -3118,8 +3118,7 @@ uint8_t nr_ue_get_sdu(module_id_t module_idP, header->R = 0; header->F = 1; header->LCID = lcid; - header->L1 = ((unsigned short) sdu_length >> 8) & 0x7f; - header->L2 = (unsigned short) sdu_length & 0xff; + header->L = htons(sdu_length); #ifdef ENABLE_MAC_PAYLOAD_DEBUG LOG_I(NR_MAC, "In %s: dumping MAC sub-header with length %d: \n", __FUNCTION__, sh_size); diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c index f36dbc4a16..2263f4656b 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c @@ -1619,7 +1619,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra harq->feedback_slot = pucch->ul_slot; harq->feedback_frame = pucch->frame; - uint8_t *buf = (uint8_t *) harq->tb; + uint8_t *buf = (uint8_t *) harq->transportBlock; // Bytes to be transmitted if (harq->round == 0) { if (ra->msg3_dcch_dtch) { @@ -1866,11 +1866,11 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra } T(T_GNB_MAC_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(ra->rnti), - T_INT(frameP), T_INT(slotP), T_INT(current_harq_pid), T_BUFFER(harq->tb, harq->tb_size)); + T_INT(frameP), T_INT(slotP), T_INT(current_harq_pid), T_BUFFER(harq->transportBlock, harq->tb_size)); // DL TX request nfapi_nr_pdu_t *tx_req = &nr_mac->TX_req[CC_id].pdu_list[nr_mac->TX_req[CC_id].Number_of_PDUs]; - memcpy(tx_req->TLVs[0].value.direct, harq->tb, sizeof(uint8_t) * harq->tb_size); + memcpy(tx_req->TLVs[0].value.direct, harq->transportBlock, sizeof(uint8_t) * harq->tb_size); tx_req->PDU_length = harq->tb_size; tx_req->PDU_index = pduindex; tx_req->num_TLV = 1; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c index 5032ee601f..ccbd6d43f8 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c @@ -1320,12 +1320,12 @@ void nr_schedule_ue_spec(module_id_t module_id, current_harq_pid); T(T_GNB_MAC_RETRANSMISSION_DL_PDU_WITH_DATA, T_INT(module_id), T_INT(CC_id), T_INT(rnti), - T_INT(frame), T_INT(slot), T_INT(current_harq_pid), T_INT(harq->round), T_BUFFER(harq->tb, TBS)); + T_INT(frame), T_INT(slot), T_INT(current_harq_pid), T_INT(harq->round), T_BUFFER(harq->transportBlock, TBS)); } else { /* initial transmission */ LOG_D(NR_MAC, "[%s] Initial HARQ transmission in %d.%d\n", __FUNCTION__, frame, slot); - uint8_t *buf = (uint8_t *) harq->tb; + uint8_t *buf = (uint8_t *) harq->transportBlock; /* first, write all CEs that might be there */ int written = nr_write_ce_dlsch_pdu(module_id, @@ -1334,8 +1334,8 @@ void nr_schedule_ue_spec(module_id_t module_id, 255, // no drx NULL); // contention res id buf += written; - int size = TBS - written; - DevAssert(size >= 0); + uint8_t* bufEnd = buf + TBS - written; + DevAssert(TBS > written); /* next, get RLC data */ @@ -1345,18 +1345,15 @@ void nr_schedule_ue_spec(module_id_t module_id, start_meas(&gNB_mac->rlc_data_req); if (sched_ctrl->num_total_bytes > 0) { tbs_size_t len = 0; - while (size > 3) { + while (bufEnd-buf > sizeof(NR_MAC_SUBHEADER_LONG) + 1 ) { // we do not know how much data we will get from RLC, i.e., whether it // will be longer than 256B or not. Therefore, reserve space for long header, then // fetch data, then fill real length NR_MAC_SUBHEADER_LONG *header = (NR_MAC_SUBHEADER_LONG *) buf; - buf += 3; - size -= 3; - /* limit requested number of bytes to what preprocessor specified, or * such that TBS is full */ - const rlc_buffer_occupancy_t ndata = min(sched_ctrl->rlc_status[lcid].bytes_in_buffer, size); - + const rlc_buffer_occupancy_t ndata = min(sched_ctrl->rlc_status[lcid].bytes_in_buffer, + bufEnd-buf-+sizeof(NR_MAC_SUBHEADER_LONG)); len = mac_rlc_data_req(module_id, rnti, module_id, @@ -1365,12 +1362,12 @@ void nr_schedule_ue_spec(module_id_t module_id, MBMS_FLAG_NO, lcid, ndata, - (char *)buf, + (char *)buf+sizeof(NR_MAC_SUBHEADER_LONG), 0, 0); - + LOG_D(NR_MAC, - "%4d.%2d RNTI %04x: %d bytes from %s %d (ndata %d, remaining size %d)\n", + "%4d.%2d RNTI %04x: %d bytes from %s %d (ndata %d, remaining size %ld)\n", frame, slot, rnti, @@ -1378,59 +1375,45 @@ void nr_schedule_ue_spec(module_id_t module_id, lcid < 4 ? "DCCH" : "DTCH", lcid, ndata, - size); + bufEnd-buf-+sizeof(NR_MAC_SUBHEADER_LONG)); if (len == 0) break; header->R = 0; header->F = 1; header->LCID = lcid; - header->L1 = (len >> 8) & 0xff; - header->L2 = len & 0xff; - size -= len; - buf += len; + header->L = htons(len); + buf += len+sizeof(NR_MAC_SUBHEADER_LONG); dlsch_total_bytes += len; } - if (len == 0) { - /* RLC did not have data anymore, mark buffer as unused */ - buf -= 3; - size += 3; - } } else if (get_softmodem_params()->phy_test || get_softmodem_params()->do_ra || get_softmodem_params()->sa) { /* we will need the large header, phy-test typically allocates all * resources and fills to the last byte below */ - NR_MAC_SUBHEADER_LONG *header = (NR_MAC_SUBHEADER_LONG *) buf; - buf += 3; - size -= 3; - DevAssert(size > 0); - LOG_D(NR_MAC, "Configuring DL_TX in %d.%d: TBS %d with %d B of random data\n", frame, slot, TBS, size); - // fill dlsch_buffer with random data - for (int i = 0; i < size; i++) - buf[i] = lrand48() & 0xff; - header->R = 0; - header->F = 1; - header->LCID = DL_SCH_LCID_PADDING; - header->L1 = (size >> 8) & 0xff; - header->L2 = size & 0xff; - size -= size; - buf += size; - dlsch_total_bytes += size; + LOG_D(NR_MAC, "Configuring DL_TX in %d.%d: TBS %d of random data\n", frame, slot, TBS); + if (bufEnd-buf > sizeof(NR_MAC_SUBHEADER_LONG) ) { + NR_MAC_SUBHEADER_LONG *header = (NR_MAC_SUBHEADER_LONG *) buf; + // fill dlsch_buffer with random data + header->R = 0; + header->F = 1; + header->LCID = DL_SCH_LCID_PADDING; + buf += sizeof(NR_MAC_SUBHEADER_LONG); + header->L = htons(bufEnd-buf); + dlsch_total_bytes += bufEnd-buf; + for (; buf < bufEnd; buf++) + *buf = lrand48() & 0xff; + } } stop_meas(&gNB_mac->rlc_data_req); // Add padding header and zero rest out if there is space left - if (size > 0) { + if (bufEnd-buf > 0) { NR_MAC_SUBHEADER_FIXED *padding = (NR_MAC_SUBHEADER_FIXED *) buf; padding->R = 0; padding->LCID = DL_SCH_LCID_PADDING; - size -= 1; buf += 1; - while (size > 0) { - *buf = 0; - buf += 1; - size -= 1; - } + memset(buf,0,bufEnd-buf); + buf=bufEnd; } UE_info->mac_stats[UE_id].dlsch_total_bytes += TBS; @@ -1455,7 +1438,7 @@ void nr_schedule_ue_spec(module_id_t module_id, } T(T_GNB_MAC_DL_PDU_WITH_DATA, T_INT(module_id), T_INT(CC_id), T_INT(rnti), - T_INT(frame), T_INT(slot), T_INT(current_harq_pid), T_BUFFER(harq->tb, TBS)); + T_INT(frame), T_INT(slot), T_INT(current_harq_pid), T_BUFFER(harq->transportBlock, TBS)); } const int ntx_req = gNB_mac->TX_req[CC_id].Number_of_PDUs; @@ -1464,7 +1447,7 @@ void nr_schedule_ue_spec(module_id_t module_id, tx_req->PDU_index = pduindex; tx_req->num_TLV = 1; tx_req->TLVs[0].length = TBS + 2; - memcpy(tx_req->TLVs[0].value.direct, harq->tb, TBS); + memcpy(tx_req->TLVs[0].value.direct, harq->transportBlock, TBS); gNB_mac->TX_req[CC_id].Number_of_PDUs++; gNB_mac->TX_req[CC_id].SFN = frame; gNB_mac->TX_req[CC_id].Slot = slot; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index aa49b14fe5..6c89d30800 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -205,11 +205,7 @@ int nr_process_mac_pdu(module_id_t module_idP, int pdu_len) { - uint8_t rx_lcid; uint8_t done = 0; - uint16_t mac_ce_len; - uint16_t mac_subheader_len; - uint16_t mac_sdu_len; NR_UE_info_t *UE_info = &RC.nrmac[module_idP]->UE_info; NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id]; @@ -223,10 +219,9 @@ int nr_process_mac_pdu(module_id_t module_idP, #endif while (!done && pdu_len > 0){ - mac_ce_len = 0; - mac_subheader_len = sizeof(NR_MAC_SUBHEADER_FIXED); - mac_sdu_len = 0; - rx_lcid = ((NR_MAC_SUBHEADER_FIXED *)pduP)->LCID; + uint16_t mac_len=0; + uint16_t mac_subheader_len=sizeof(NR_MAC_SUBHEADER_FIXED); + uint8_t rx_lcid = ((NR_MAC_SUBHEADER_FIXED *)pduP)->LCID; LOG_D(NR_MAC, "In %s: received UL-SCH sub-PDU with LCID 0x%x in %d.%d (remaining PDU length %d)\n", __func__, rx_lcid, frameP, slot, pdu_len); @@ -241,7 +236,7 @@ int nr_process_mac_pdu(module_id_t module_idP, #endif*/ case UL_SCH_LCID_RECOMMENDED_BITRATE_QUERY: // 38.321 Ch6.1.3.20 - mac_ce_len = 2; + mac_len = 2; break; case UL_SCH_LCID_CONFIGURED_GRANT_CONFIRMATION: // 38.321 Ch6.1.3.7 @@ -251,7 +246,7 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_S_TRUNCATED_BSR: //38.321 section 6.1.3.1 //fixed length - mac_ce_len =1; + mac_len =1; /* Extract short BSR value */ ce_ptr = &pduP[mac_subheader_len]; NR_BSR_SHORT *bsr_s = (NR_BSR_SHORT *) ce_ptr; @@ -269,25 +264,20 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_L_BSR: case UL_SCH_LCID_L_TRUNCATED_BSR: - //38.321 section 6.1.3.1 - //variable length - mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - mac_ce_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - mac_subheader_len = 3; - } - /* Extract long BSR value */ - ce_ptr = &pduP[mac_subheader_len]; - NR_BSR_LONG *bsr_l = (NR_BSR_LONG *) ce_ptr; - sched_ctrl->estimated_ul_buffer = 0; + //38.321 section 6.1.3.1 + //variable length + getMacLen(pduP, &mac_len, &mac_subheader_len); + /* Extract long BSR value */ + ce_ptr = &pduP[mac_subheader_len]; + NR_BSR_LONG *bsr_l = (NR_BSR_LONG *) ce_ptr; + sched_ctrl->estimated_ul_buffer = 0; + + n_Lcg = bsr_l->LcgID7 + bsr_l->LcgID6 + bsr_l->LcgID5 + bsr_l->LcgID4 + + bsr_l->LcgID3 + bsr_l->LcgID2 + bsr_l->LcgID1 + bsr_l->LcgID0; - n_Lcg = bsr_l->LcgID7 + bsr_l->LcgID6 + bsr_l->LcgID5 + bsr_l->LcgID4 + - bsr_l->LcgID3 + bsr_l->LcgID2 + bsr_l->LcgID1 + bsr_l->LcgID0; - - LOG_D(NR_MAC, "LONG BSR, LCG ID(7-0) %d/%d/%d/%d/%d/%d/%d/%d\n", - bsr_l->LcgID7, bsr_l->LcgID6, bsr_l->LcgID5, bsr_l->LcgID4, - bsr_l->LcgID3, bsr_l->LcgID2, bsr_l->LcgID1, bsr_l->LcgID0); + LOG_D(NR_MAC, "LONG BSR, LCG ID(7-0) %d/%d/%d/%d/%d/%d/%d/%d\n", + bsr_l->LcgID7, bsr_l->LcgID6, bsr_l->LcgID5, bsr_l->LcgID4, + bsr_l->LcgID3, bsr_l->LcgID2, bsr_l->LcgID1, bsr_l->LcgID0); for (int n = 0; n < n_Lcg; n++){ LOG_D(NR_MAC, "LONG BSR, %d/%d (n/n_Lcg), BS Index %d, BS value < %d", @@ -322,14 +312,14 @@ int nr_process_mac_pdu(module_id_t module_idP, //38.321 section 6.1.3.2 //fixed length - mac_ce_len = 2; + mac_len = 2; /* Extract CRNTI value */ break; case UL_SCH_LCID_SINGLE_ENTRY_PHR: //38.321 section 6.1.3.8 //fixed length - mac_ce_len = 2; + mac_len = 2; /* Extract SINGLE ENTRY PHR elements for PHR calculation */ ce_ptr = &pduP[mac_subheader_len]; NR_SINGLE_ENTRY_PHR_MAC_CE *phr = (NR_SINGLE_ENTRY_PHR_MAC_CE *) ce_ptr; @@ -348,26 +338,11 @@ int nr_process_mac_pdu(module_id_t module_idP, break; case UL_SCH_LCID_MULTI_ENTRY_PHR_1_OCT: - //38.321 section 6.1.3.9 - // varialbe length - mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - mac_ce_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - mac_subheader_len = 3; - } - /* Extract MULTI ENTRY PHR elements from single octet bitmap for PHR calculation */ - break; - case UL_SCH_LCID_MULTI_ENTRY_PHR_4_OCT: - //38.321 section 6.1.3.9 - // varialbe length - mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - mac_ce_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - mac_subheader_len = 3; - } + // varialbe length + getMacLen(pduP, &mac_len, &mac_subheader_len); + //Extract MULTI ENTRY PHR elements from single octet bitmap for PHR calculation */ + break; /* Extract MULTI ENTRY PHR elements from four octets bitmap for PHR calculation */ break; @@ -378,23 +353,14 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_SRB1: case UL_SCH_LCID_SRB2: - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - //mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - mac_subheader_len = 3; - mac_sdu_len = ((uint16_t)(((NR_MAC_SUBHEADER_LONG *) pduP)->L1 & 0x7f) << 8) - | ((uint16_t)((NR_MAC_SUBHEADER_LONG *) pduP)->L2 & 0xff); - } else { - mac_sdu_len = (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - } - + getMacLen(pduP, &mac_len, &mac_subheader_len); rnti_t crnti = UE_info->rnti[UE_id]; int UE_idx = UE_id; for (int i = 0; i < NR_NB_RA_PROC_MAX; i++) { NR_RA_t *ra = &RC.nrmac[module_idP]->common_channels[CC_id].ra[i]; if (ra->state >= WAIT_Msg3 && ra->rnti == UE_info->rnti[UE_id]) { - uint8_t *next_subpduP = pduP + mac_subheader_len + mac_sdu_len; - if ((pduP[mac_subheader_len+mac_sdu_len] & 0x3F) == UL_SCH_LCID_C_RNTI) { + uint8_t *next_subpduP = pduP + mac_subheader_len + mac_len; + if ((pduP[mac_subheader_len+mac_len] & 0x3F) == UL_SCH_LCID_C_RNTI) { crnti = ((next_subpduP[1]&0xFF)<<8)|(next_subpduP[2]&0xFF); UE_idx = find_nr_UE_id(module_idP, crnti); break; @@ -403,7 +369,7 @@ int nr_process_mac_pdu(module_id_t module_idP, } if (UE_info->CellGroup[UE_idx]) { - LOG_D(NR_MAC, "[UE %d] Frame %d : ULSCH -> UL-DCCH %d (gNB %d, %d bytes), rnti: 0x%04x \n", module_idP, frameP, rx_lcid, module_idP, mac_sdu_len, crnti); + LOG_D(NR_MAC, "[UE %d] Frame %d : ULSCH -> UL-DCCH %d (gNB %d, %d bytes), rnti: 0x%04x \n", module_idP, frameP, rx_lcid, module_idP, mac_len, crnti); mac_rlc_data_ind(module_idP, crnti, module_idP, @@ -412,7 +378,7 @@ int nr_process_mac_pdu(module_id_t module_idP, MBMS_FLAG_NO, rx_lcid, (char *) (pduP + mac_subheader_len), - mac_sdu_len, + mac_len, 1, NULL); } else { @@ -430,23 +396,23 @@ int nr_process_mac_pdu(module_id_t module_idP, if ( rx_lcid == UL_SCH_LCID_CCCH1 ) { // RRCResumeRequest1 message includes the full I-RNTI and has a size of 8 bytes - mac_sdu_len = 8; + mac_len = 8; // Check if it is a valid CCCH1 message, we get all 00's messages very often int i = 0; - for(i=0; i<(mac_subheader_len+mac_sdu_len); i++) { + for(i=0; i<(mac_subheader_len+mac_len); i++) { if(pduP[i] != 0) { break; } } - if (i == (mac_subheader_len+mac_sdu_len)) { + if (i == (mac_subheader_len+mac_len)) { LOG_D(NR_MAC, "%s() Invalid CCCH1 message!, pdu_len: %d\n", __func__, pdu_len); done = 1; break; } } else { // fixed length of 6 bytes - mac_sdu_len = 6; + mac_len = 6; } nr_mac_rrc_data_ind(module_idP, @@ -457,23 +423,12 @@ int nr_process_mac_pdu(module_id_t module_idP, UE_info->rnti[UE_id], CCCH, pduP + mac_subheader_len, - mac_sdu_len, + mac_len, 0); break; case UL_SCH_LCID_DTCH: - // check if LCID is valid at current time. - if (((NR_MAC_SUBHEADER_SHORT *)pduP)->F) { - // mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - mac_subheader_len = 3; - mac_sdu_len = ((uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L1 & 0x7f) << 8) - | ((uint16_t)((NR_MAC_SUBHEADER_LONG *)pduP)->L2 & 0xff); - - } else { - mac_sdu_len = (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - } - + getMacLen(pduP, &mac_len, &mac_subheader_len); LOG_D(NR_MAC, "In %s: [UE %d] %d.%d : ULSCH -> UL-%s %d (gNB %d, %d bytes)\n", __func__, module_idP, @@ -482,8 +437,8 @@ int nr_process_mac_pdu(module_id_t module_idP, rx_lcid<4?"DCCH":"DTCH", rx_lcid, module_idP, - mac_sdu_len); - UE_info->mac_stats[UE_id].lc_bytes_rx[rx_lcid] += mac_sdu_len; + mac_len); + UE_info->mac_stats[UE_id].lc_bytes_rx[rx_lcid] += mac_len; mac_rlc_data_ind(module_idP, UE_info->rnti[UE_id], @@ -493,13 +448,13 @@ int nr_process_mac_pdu(module_id_t module_idP, MBMS_FLAG_NO, rx_lcid, (char *)(pduP + mac_subheader_len), - mac_sdu_len, + mac_len, 1, NULL); /* Updated estimated buffer when receiving data */ - if (sched_ctrl->estimated_ul_buffer >= mac_sdu_len) - sched_ctrl->estimated_ul_buffer -= mac_sdu_len; + if (sched_ctrl->estimated_ul_buffer >= mac_len) + sched_ctrl->estimated_ul_buffer -= mac_len; else sched_ctrl->estimated_ul_buffer = 0; break; @@ -514,16 +469,16 @@ int nr_process_mac_pdu(module_id_t module_idP, if (rx_lcid < 45 || rx_lcid == 52 || rx_lcid == 63) { LOG_I(NR_MAC, "In %s: dumping UL MAC SDU sub-header with length %d (LCID = 0x%02x):\n", __func__, mac_subheader_len, rx_lcid); log_dump(NR_MAC, pduP, mac_subheader_len, LOG_DUMP_CHAR, "\n"); - LOG_I(NR_MAC, "In %s: dumping UL MAC SDU with length %d (LCID = 0x%02x):\n", __func__, mac_sdu_len, rx_lcid); - log_dump(NR_MAC, pduP + mac_subheader_len, mac_sdu_len, LOG_DUMP_CHAR, "\n"); + LOG_I(NR_MAC, "In %s: dumping UL MAC SDU with length %d (LCID = 0x%02x):\n", __func__, mac_len, rx_lcid); + log_dump(NR_MAC, pduP + mac_subheader_len, mac_len, LOG_DUMP_CHAR, "\n"); } else { - LOG_I(NR_MAC, "In %s: dumping UL MAC CE with length %d (LCID = 0x%02x):\n", __func__, mac_ce_len, rx_lcid); - log_dump(NR_MAC, pduP + mac_subheader_len + mac_sdu_len, mac_ce_len, LOG_DUMP_CHAR, "\n"); + LOG_I(NR_MAC, "In %s: dumping UL MAC CE with length %d (LCID = 0x%02x):\n", __func__, mac_len, rx_lcid); + log_dump(NR_MAC, pduP + mac_subheader_len + mac_len, mac_len, LOG_DUMP_CHAR, "\n"); } #endif - pduP += ( mac_subheader_len + mac_ce_len + mac_sdu_len ); - pdu_len -= ( mac_subheader_len + mac_ce_len + mac_sdu_len ); + pduP += ( mac_subheader_len + mac_len ); + pdu_len -= ( mac_subheader_len + mac_len ); if (pdu_len < 0) { LOG_E(NR_MAC, "In %s: residual UL MAC PDU in %d.%d with length < 0!, pdu_len %d \n", __func__, frameP, slot, pdu_len); diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h index eccffca031..eba9bc52b3 100644 --- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h +++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h @@ -444,7 +444,7 @@ typedef struct NR_UE_harq { /* Transport block to be sent using this HARQ process, its size is in * sched_pdsch */ - uint32_t tb[16384]; + uint32_t transportBlock[16384]; uint32_t tb_size; /// sched_pdsch keeps information on MCS etc used for the initial transmission diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 99897f9060..59cf465ac1 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -1065,7 +1065,7 @@ void update_harq_status(module_id_t module_id, uint8_t harq_pid, uint8_t ack_nac int nr_ue_ul_indication(nr_uplink_indication_t *ul_info){ - NR_UE_L2_STATE_t ret; + NR_UE_L2_STATE_t ret=0; module_id_t module_id = ul_info->module_id; NR_UE_MAC_INST_t *mac = get_mac_inst(module_id); diff --git a/openair2/RRC/NR/rrc_gNB_NGAP.c b/openair2/RRC/NR/rrc_gNB_NGAP.c index 4492380d7f..c73c3d9649 100644 --- a/openair2/RRC/NR/rrc_gNB_NGAP.c +++ b/openair2/RRC/NR/rrc_gNB_NGAP.c @@ -969,9 +969,9 @@ rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ( uint16_t ue_initial_id; uint32_t gNB_ue_ngap_id; rrc_gNB_ue_context_t *ue_context_p = NULL; - protocol_ctxt_t ctxt; - gtpv1u_gnb_create_tunnel_req_t create_tunnel_req; - gtpv1u_gnb_create_tunnel_resp_t create_tunnel_resp; + protocol_ctxt_t ctxt={0}; + gtpv1u_gnb_create_tunnel_req_t create_tunnel_req={0}; + gtpv1u_gnb_create_tunnel_resp_t create_tunnel_resp={0}; uint8_t pdu_sessions_done; uint8_t inde_list[NR_NB_RB_MAX - 3]= {0}; int ret = 0; diff --git a/openair3/NAS/NR_UE/nr_nas_msg_sim.c b/openair3/NAS/NR_UE/nr_nas_msg_sim.c index 283f3b7311..e151fec9b4 100644 --- a/openair3/NAS/NR_UE/nr_nas_msg_sim.c +++ b/openair3/NAS/NR_UE/nr_nas_msg_sim.c @@ -428,7 +428,7 @@ void generateRegistrationRequest(as_nas_info_t *initialNasMsg, int Mod_id) { size += 10; // encode the message - initialNasMsg->data = (Byte_t *)malloc(size * sizeof(Byte_t)); + initialNasMsg->data = malloc16_clear(size * sizeof(Byte_t)); registration_request_buf = initialNasMsg->data; initialNasMsg->length = mm_msg_encode(mm_msg, (uint8_t*)(initialNasMsg->data), size); diff --git a/targets/ARCH/rfsimulator/apply_channelmod.c b/targets/ARCH/rfsimulator/apply_channelmod.c index d7d3a68965..6e26120e29 100644 --- a/targets/ARCH/rfsimulator/apply_channelmod.c +++ b/targets/ARCH/rfsimulator/apply_channelmod.c @@ -52,7 +52,7 @@ either we regenerate the channel (call again random_channel(desc,0)), or we keep it over subframes legacy: we regenerate each sub frame in UL, and each frame only in DL */ -void rxAddInput( struct complex16 *input_sig, struct complex16 *after_channel_sig, +void rxAddInput( c16_t *input_sig, c16_t *after_channel_sig, int rxAnt, channel_desc_t *channelDesc, int nbSamples, @@ -73,7 +73,7 @@ void rxAddInput( struct complex16 *input_sig, struct complex16 *after_channel_si const int nbTx=channelDesc->nb_tx; for (int i=0; i<((int)nbSamples-dd); i++) { - struct complex16 *out_ptr=after_channel_sig+dd+i; + c16_t *out_ptr=after_channel_sig+dd+i; struct complexd rx_tmp= {0}; for (int txAnt=0; txAnt < nbTx; txAnt++) { @@ -87,7 +87,7 @@ void rxAddInput( struct complex16 *input_sig, struct complex16 *after_channel_si // but it is not very usefull // it would be better to split out each antenna in a separate flow // that will allow to mix ru antennas freely - struct complex16 tx16=input_sig[((TS+i-l)*nbTx+txAnt)%CirSize]; + c16_t tx16=input_sig[((TS+i-l)*nbTx+txAnt)%CirSize]; rx_tmp.r += tx16.r * channelModel[l].r - tx16.i * channelModel[l].i; rx_tmp.i += tx16.i * channelModel[l].r + tx16.r * channelModel[l].i; } //l diff --git a/targets/ARCH/rfsimulator/rfsimulator.h b/targets/ARCH/rfsimulator/rfsimulator.h index 292873032e..33583f2d32 100644 --- a/targets/ARCH/rfsimulator/rfsimulator.h +++ b/targets/ARCH/rfsimulator/rfsimulator.h @@ -25,8 +25,8 @@ #define __RFSIMULATOR_H double gaussZiggurat(double mean, double variance); void tableNor(unsigned long seed); -void rxAddInput( struct complex16 *input_sig, - struct complex16 *after_channel_sig, +void rxAddInput( c16_t *input_sig, + c16_t *after_channel_sig, int rxAnt, channel_desc_t *channelDesc, int nbSamples, diff --git a/targets/ARCH/rfsimulator/simulator.c b/targets/ARCH/rfsimulator/simulator.c index 013e542689..0a05f2cbef 100644 --- a/targets/ARCH/rfsimulator/simulator.c +++ b/targets/ARCH/rfsimulator/simulator.c @@ -100,7 +100,7 @@ static telnetshell_vardef_t rfsimu_vardef[] = { }; pthread_mutex_t Sockmutex; -typedef struct complex16 sample_t; // 2*16 bits complex number +typedef c16_t sample_t; // 2*16 bits complex number typedef struct buffer_s { int conn_sock; @@ -495,7 +495,7 @@ static bool flushInput(rfsimulator_state_t *t, int timeout, int nsamps_for_initi setblocking(conn_sock, notBlocking); allocCirBuf(t, conn_sock); LOG_I(HW,"A client connected, sending the current time\n"); - struct complex16 v= {0}; + c16_t v= {0}; void *samplesVoid[t->tx_num_channels]; for ( int i=0; i < t->tx_num_channels; i++) @@ -665,7 +665,7 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest // We send timestamp for nb samples required // assuming this should have been done earlier if a Tx would exist pthread_mutex_unlock(&Sockmutex); - struct complex16 v= {0}; + c16_t v= {0}; void *dummyS[t->tx_num_channels]; for ( int i=0; i < t->tx_num_channels; i++) @@ -728,7 +728,7 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest for (int a=0; achannel_model != NULL ) // apply a channel model - rxAddInput( ptr->circularBuf, (struct complex16 *) samplesVoid[a], + rxAddInput( ptr->circularBuf, (c16_t *) samplesVoid[a], a, ptr->channel_model, nsamps, diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 13a09db5a3..1b59ba9b2b 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -1941,7 +1941,7 @@ void write_dummy(PHY_VARS_UE *UE, openair0_timestamp timestamp) { // we have to write to tell explicitly to the eNB, else it will wait for us forever // we write the next subframe (always write in future of what we received) // - struct complex16 v= {0}; + c16_t v= {0}; void *samplesVoid[UE->frame_parms.nb_antennas_tx]; for ( int i=0; i < UE->frame_parms.nb_antennas_tx; i++) From 288c29da84fa2466ea4d503bbdbcce16e8528bf1 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 18 Mar 2022 19:46:42 +0000 Subject: [PATCH 086/150] Apply review suggestions --- openair1/PHY/NR_TRANSPORT/pucch_rx.c | 14 +++++++------- openair2/LAYER2/NR_MAC_COMMON/nr_mac.h | 12 ++++++------ openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c index eda53e1c84..b8eaefedb1 100644 --- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c +++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c @@ -287,8 +287,8 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, for (int aa=0;aanb_antennas_rx;aa++) { c16_t *r=(c16_t*)&rxdataF[aa][soffset+(l2*frame_parms->ofdm_symbol_size)+re_offset[l]]; for (n=0;n<12;n++) { - xr[aa][l][n].r +=(int32_t)x_re[l][n]*r[n].r+(int32_t)x_im[l][n]*r[n].i; - xr[aa][l][n].i +=(int32_t)x_re[l][n]*r[n].i-(int32_t)x_im[l][n]*r[n].r; + xr[aa][l][n].r += (int32_t)x_re[l][n] * r[n].r + (int32_t)x_im[l][n] * r[n].i; + xr[aa][l][n].i += (int32_t)x_re[l][n] * r[n].i - (int32_t)x_im[l][n] * r[n].r; #ifdef DEBUG_NR_PUCCH_RX printf("x (%d,%d), r%d.%d (%d,%d), xr (%lld,%lld)\n", x_re[l][n],x_im[l][n],l2,re_offset[l],r[n].r,r[n].i,xr[aa][l][n].r,xr[aa][l][n].i); @@ -317,12 +317,12 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, for (int aa=0;aanb_antennas_rx;aa++) { corr_re[aa][l]=0; corr_im[aa][l]=0; - for (n=0;n<12;n++) { - corr_re[aa][l]+=xr[aa][l][n].r*idft12_re[seq_index][n]+xr[aa][l][n].i*idft12_im[seq_index][n]; - corr_im[aa][l]+=xr[aa][l][n].r*idft12_im[seq_index][n]-xr[aa][l][n].i*idft12_re[seq_index][n]; + for (n = 0; n < 12; n++) { + corr_re[aa][l] += xr[aa][l][n].r * idft12_re[seq_index][n] + xr[aa][l][n].i * idft12_im[seq_index][n]; + corr_im[aa][l] += xr[aa][l][n].r * idft12_im[seq_index][n] - xr[aa][l][n].i * idft12_re[seq_index][n]; } - corr_re[aa][l]>>=15; - corr_im[aa][l]>>=15; + corr_re[aa][l] >>= 15; + corr_im[aa][l] >>= 15; } } LOG_D(PHY,"PUCCH IDFT[%d/%d] = (%ld,%ld)=>%f\n", diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h index f084cb2d63..248c30f26f 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h @@ -118,14 +118,14 @@ typedef struct { } __attribute__ ((__packed__)) NR_MAC_SUBHEADER_FIXED; static inline void getMacLen(uint8_t* pdu, uint16_t *mac_ce_len, uint16_t *mac_subheader_len) { - NR_MAC_SUBHEADER_SHORT *s=(NR_MAC_SUBHEADER_SHORT*) pdu; - NR_MAC_SUBHEADER_LONG *l=(NR_MAC_SUBHEADER_LONG*) pdu; + NR_MAC_SUBHEADER_SHORT *s = (NR_MAC_SUBHEADER_SHORT*) pdu; + NR_MAC_SUBHEADER_LONG *l = (NR_MAC_SUBHEADER_LONG*) pdu; if (s->F) { - *mac_subheader_len=sizeof(*l); - *mac_ce_len=ntohs(l->L); + *mac_subheader_len = sizeof(*l); + *mac_ce_len = ntohs(l->L); } else { - *mac_subheader_len=sizeof(*s); - *mac_ce_len=s->L; + *mac_subheader_len = sizeof(*s); + *mac_ce_len = s->L; } } diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 05313f388a..61a2902690 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -2092,7 +2092,7 @@ uint8_t get_downlink_ack(NR_UE_MAC_INST_t *mac, pucch->is_common = current_harq->is_common; current_harq->active = false; current_harq->ack_received = false; - LOG_D(PHY,"%d.%d Sent %d ack on harq pid %d\n", frame, slot, current_harq->ack, dl_harq_pid); + LOG_D(PHY,"%4d.%2d Sent %d ack on harq pid %d\n", frame, slot, current_harq->ack, dl_harq_pid); } } } @@ -3497,7 +3497,7 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info, if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) return; getMacLen(pduP, &mac_len, &mac_subheader_len); - LOG_D(NR_MAC, "[UE %d] Frame %d : DLSCH -> DL-DTCH %d (gNB %d, %d bytes)\n", module_idP, frameP, rx_lcid, gNB_index, mac_len); + LOG_D(NR_MAC, "[UE %d] %4d.%2d : DLSCH -> DL-DTCH %d (gNB %d, %d bytes)\n", module_idP, frameP, slot, rx_lcid, gNB_index, mac_len); #if defined(ENABLE_MAC_PAYLOAD_DEBUG) LOG_T(MAC, "[UE %d] First 32 bytes of DLSCH : \n", module_idP); From b153d2d1ee021116226707fbdef90b62b31126c0 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Thu, 24 Mar 2022 21:10:23 +0100 Subject: [PATCH 087/150] fix bug in nr_rate_matching --- openair1/PHY/CODING/nr_rate_matching.c | 97 ++++++++++++++------------ 1 file changed, 54 insertions(+), 43 deletions(-) diff --git a/openair1/PHY/CODING/nr_rate_matching.c b/openair1/PHY/CODING/nr_rate_matching.c index 29cba0a557..84e6615ed9 100644 --- a/openair1/PHY/CODING/nr_rate_matching.c +++ b/openair1/PHY/CODING/nr_rate_matching.c @@ -309,60 +309,71 @@ void nr_interleaving_ldpc(uint32_t E, uint8_t Qm, uint8_t *e,uint8_t *f) void nr_deinterleaving_ldpc(uint32_t E, uint8_t Qm, int16_t *e,int16_t *f) { - int16_t *e1,*e2,*e3,*e4,*e5,*e6,*e7; switch(Qm) { case 2: - e1=e+(E/2); - for (int j = 0,j2=0; j< E/2; j+=2,j2+=4){ - e[j] = f[j2]; - e1[j] = f[j2+1]; - e[j+1] = f[j2+2]; - e1[j+1] = f[j2+3]; + { + int16_t *e1=e+(E/2); + int16_t *end=f+E-4; + while( f Date: Fri, 25 Mar 2022 08:21:25 +0100 Subject: [PATCH 088/150] removing wrong sib1_tda in config files --- ci-scripts/conf_files/gNB_SA_CU.conf | 1 - ci-scripts/conf_files/gNB_SA_DU.conf | 1 - ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf | 1 - 3 files changed, 3 deletions(-) diff --git a/ci-scripts/conf_files/gNB_SA_CU.conf b/ci-scripts/conf_files/gNB_SA_CU.conf index 1e84e479bc..6501509fb6 100644 --- a/ci-scripts/conf_files/gNB_SA_CU.conf +++ b/ci-scripts/conf_files/gNB_SA_CU.conf @@ -48,7 +48,6 @@ gNBs = pdsch_AntennaPorts = 1; pusch_AntennaPorts = 1; min_rxtxtime = 6; - sib1_tda = 0; pdcch_ConfigSIB1 = ( { diff --git a/ci-scripts/conf_files/gNB_SA_DU.conf b/ci-scripts/conf_files/gNB_SA_DU.conf index 95fa75bc1d..4a4e658bd7 100644 --- a/ci-scripts/conf_files/gNB_SA_DU.conf +++ b/ci-scripts/conf_files/gNB_SA_DU.conf @@ -40,7 +40,6 @@ gNBs = pdsch_AntennaPorts = 1; pusch_AntennaPorts = 1; min_rxtxtime = 6; - sib1_tda = 0; pdcch_ConfigSIB1 = ( { diff --git a/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf b/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf index 7f5a9d4343..f667959f15 100644 --- a/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf +++ b/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf @@ -36,7 +36,6 @@ gNBs = pdsch_AntennaPorts = 1; pusch_AntennaPorts = 1; min_rxtxtime = 6; - sib1_tda = 0; pdcch_ConfigSIB1 = ( { From 73053aa712504070badaaa3855b4476eab94aa9a Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Fri, 25 Mar 2022 16:32:07 +0100 Subject: [PATCH 089/150] fix bug introduced in this branch --- openair1/PHY/CODING/nr_rate_matching.c | 2 +- openair1/PHY/NR_TRANSPORT/pucch_rx.c | 60 +++++++++++--------------- openair1/PHY/TOOLS/tools_defs.h | 3 ++ 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/openair1/PHY/CODING/nr_rate_matching.c b/openair1/PHY/CODING/nr_rate_matching.c index 84e6615ed9..29a1e363e9 100644 --- a/openair1/PHY/CODING/nr_rate_matching.c +++ b/openair1/PHY/CODING/nr_rate_matching.c @@ -307,7 +307,7 @@ void nr_interleaving_ldpc(uint32_t E, uint8_t Qm, uint8_t *e,uint8_t *f) void nr_deinterleaving_ldpc(uint32_t E, uint8_t Qm, int16_t *e,int16_t *f) -{ +{ switch(Qm) { case 2: diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c index b8eaefedb1..06b3c6e9e7 100644 --- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c +++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c @@ -272,7 +272,6 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, x_im[1] = table_5_2_2_2_2_Im[u[1]]; c64_t xr[frame_parms->nb_antennas_rx][pucch_pdu->nr_of_symbols][12] __attribute__((aligned(32))); - memset(xr, 0, sizeof(xr)); int64_t xrtmag=0,xrtmag_next=0; uint8_t maxpos=0; uint8_t index=0; @@ -287,72 +286,65 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, for (int aa=0;aanb_antennas_rx;aa++) { c16_t *r=(c16_t*)&rxdataF[aa][soffset+(l2*frame_parms->ofdm_symbol_size)+re_offset[l]]; for (n=0;n<12;n++) { - xr[aa][l][n].r += (int32_t)x_re[l][n] * r[n].r + (int32_t)x_im[l][n] * r[n].i; - xr[aa][l][n].i += (int32_t)x_re[l][n] * r[n].i - (int32_t)x_im[l][n] * r[n].r; + xr[aa][l][n].r = (int32_t)x_re[l][n] * r[n].r + (int32_t)x_im[l][n] * r[n].i; + xr[aa][l][n].i = (int32_t)x_re[l][n] * r[n].i - (int32_t)x_im[l][n] * r[n].r; #ifdef DEBUG_NR_PUCCH_RX printf("x (%d,%d), r%d.%d (%d,%d), xr (%lld,%lld)\n", x_re[l][n],x_im[l][n],l2,re_offset[l],r[n].r,r[n].i,xr[aa][l][n].r,xr[aa][l][n].i); #endif } - xr[aa][l][n].r>>=15; - xr[aa][l][n].i>>=15; } } - int64_t corr_re[frame_parms->nb_antennas_rx][2]; - int64_t corr_im[frame_parms->nb_antennas_rx][2]; //int32_t no_corr = 0; int seq_index = 0; int64_t temp; for(i=0;inr_of_symbols;l++) { - seq_index = (pucch_pdu->initial_cyclic_shift+ - mcs[i]+ - gNB->pucch0_lut.lut[cs_ind][slot][l+pucch_pdu->start_symbol_index])%12; + c64_t corr[frame_parms->nb_antennas_rx][2]; + for (int aa=0;aanb_antennas_rx;aa++) { + for (int l=0;lnr_of_symbols;l++) { + seq_index = (pucch_pdu->initial_cyclic_shift+ + mcs[i]+ + gNB->pucch0_lut.lut[cs_ind][slot][l+pucch_pdu->start_symbol_index])%12; #ifdef DEBUG_NR_PUCCH_RX - printf("PUCCH symbol %d seq %d, seq_index %d, mcs %d\n",l,i,seq_index,mcs[i]); + printf("PUCCH symbol %d seq %d, seq_index %d, mcs %d\n",l,i,seq_index,mcs[i]); #endif - for (int aa=0;aanb_antennas_rx;aa++) { - corr_re[aa][l]=0; - corr_im[aa][l]=0; + corr[aa][l]=(c64_t){0}; for (n = 0; n < 12; n++) { - corr_re[aa][l] += xr[aa][l][n].r * idft12_re[seq_index][n] + xr[aa][l][n].i * idft12_im[seq_index][n]; - corr_im[aa][l] += xr[aa][l][n].r * idft12_im[seq_index][n] - xr[aa][l][n].i * idft12_re[seq_index][n]; + corr[aa][l].r += xr[aa][l][n].r * idft12_re[seq_index][n] + xr[aa][l][n].i * idft12_im[seq_index][n]; + corr[aa][l].i += xr[aa][l][n].r * idft12_im[seq_index][n] - xr[aa][l][n].i * idft12_re[seq_index][n]; } - corr_re[aa][l] >>= 15; - corr_im[aa][l] >>= 15; + corr[aa][l].r >>= 31; + corr[aa][l].i >>= 31; } } LOG_D(PHY,"PUCCH IDFT[%d/%d] = (%ld,%ld)=>%f\n", - mcs[i],seq_index,corr_re[0][0],corr_im[0][0], - 10*log10((double)corr_re[0][0]*corr_re[0][0] + (double)corr_im[0][0]*corr_im[0][0])); + mcs[i],seq_index,corr[0][0].r,corr[0][0].i, + 10*log10((double)squaredMod(corr[0][0]))); if (pucch_pdu->nr_of_symbols==2) LOG_D(PHY,"PUCCH 2nd symbol IDFT[%d/%d] = (%ld,%ld)=>%f\n", - mcs[i],seq_index,corr_re[0][1],corr_im[0][1], - 10*log10((double)corr_re[0][1]*corr_re[0][1] + (double)corr_im[0][1]*corr_im[0][1])); + mcs[i],seq_index,corr[0][1].r,corr[0][1].i, + 10*log10((double)squaredMod(corr[0][1]))); if (pucch_pdu->freq_hop_flag == 0) { if (pucch_pdu->nr_of_symbols==1) {// non-coherent correlation temp=0; for (int aa=0;aanb_antennas_rx;aa++) - temp+=(int64_t)corr_re[aa][0]*corr_re[aa][0] + (int64_t)corr_im[aa][0]*corr_im[aa][0]; + temp+=squaredMod(corr[aa][0]); } else { - int64_t corr_re2=0; - int64_t corr_im2=0; temp=0; for (int aa=0;aanb_antennas_rx;aa++) { - corr_re2 = (int64_t)corr_re[aa][0]+corr_re[aa][1]; - corr_im2 = (int64_t)corr_im[aa][0]+corr_im[aa][1]; - // coherent combining of 2 symbols and then complex modulus for single-frequency case - temp+=corr_re2*corr_re2 + corr_im2*corr_im2; + c64_t corr2; + csum(corr2, corr[aa][0], corr[aa][1]); + // coherent combining of 2 symbols and then complex modulus for single-frequency case + temp+=corr2.r*corr2.r + corr2.i*corr2.i; } } } else if (pucch_pdu->freq_hop_flag == 1) { // full non-coherent combining of 2 symbols for frequency-hopping case temp=0; for (int aa=0;aanb_antennas_rx;aa++) - temp += (int64_t)corr_re[aa][0]*corr_re[aa][0] + (int64_t)corr_im[aa][0]*corr_im[aa][0] + (int64_t)corr_re[aa][1]*corr_re[aa][1] + (int64_t)corr_im[aa][1]*corr_im[aa][1]; + temp += squaredMod(corr[aa][0]) + squaredMod(corr[aa][1]); } else AssertFatal(1==0,"shouldn't happen\n"); @@ -364,9 +356,9 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, uci_stats->current_pucch0_stat0 = 0; int64_t temp2=0,temp3=0;; for (int aa=0;aanb_antennas_rx;aa++) { - temp2 += ((int64_t)corr_re[aa][0]*corr_re[aa][0] + (int64_t)corr_im[aa][0]*corr_im[aa][0]); + temp2 += squaredMod(corr[aa][0]); if (pucch_pdu->nr_of_symbols==2) - temp3 += ((int64_t)corr_re[aa][1]*corr_re[aa][1] + (int64_t)corr_im[aa][1]*corr_im[aa][1]); + temp3 += squaredMod(corr[aa][1]); } uci_stats->current_pucch0_stat0= dB_fixed64(temp2); if ( pucch_pdu->nr_of_symbols==2) diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h index 13ce9d85c7..c763ec6bac 100644 --- a/openair1/PHY/TOOLS/tools_defs.h +++ b/openair1/PHY/TOOLS/tools_defs.h @@ -63,6 +63,9 @@ typedef struct complex64 { int64_t r; int64_t i; } c64_t; + +#define squaredMod(a) ((a).r*(a).r+(a).i*(a).i) +#define csum(res, i1, i2) (res).r=(i1).r+(i2).r ; (res).i=(i1).i+(i2).i //cmult_sv.h /*!\fn void multadd_real_vector_complex_scalar(int16_t *x,int16_t *alpha,int16_t *y,uint32_t N) From 9be58373bc35b076b07f8bcc9d5aedb487956e5c Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Fri, 25 Mar 2022 18:20:05 +0100 Subject: [PATCH 090/150] fix regression on harq in UE --- openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c | 12 +++++++----- openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h | 1 + openair1/SIMULATION/NR_PHY/dlschsim.c | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c index 6163a95e5c..eac595b39e 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c @@ -168,6 +168,8 @@ NR_UE_DLSCH_t *new_nr_ue_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint dlsch->harq_processes[i]->d[r] = (int16_t *)malloc16(5*8448*sizeof(int16_t)); if (dlsch->harq_processes[i]->c[r]) memset(dlsch->harq_processes[i]->c[r],0,1056); + if (dlsch->harq_processes[i]->d[r]) + memset(dlsch->harq_processes[i]->d[r],0,5*8448); else exit_flag=2; @@ -306,6 +308,7 @@ void nr_processDLSegment(void* arg) { //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_DEINTERLEAVING, VCD_FUNCTION_IN); int16_t w[E]; + memset(w, 0, sizeof(w)); nr_deinterleaving_ldpc(E, Qm, w, // [hna] w is e @@ -324,12 +327,11 @@ void nr_processDLSegment(void* arg) { harq_process->rvidx, harq_process->round); */ //VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_RATE_MATCHING, VCD_FUNCTION_IN); - int16_t d[5*8448]; if (nr_rate_matching_ldpc_rx(Ilbrm, Tbslbrm, p_decoderParms->BG, p_decoderParms->Z, - d, + harq_process->d[r], w, harq_process->C, harq_process->rvidx, @@ -351,7 +353,7 @@ void nr_processDLSegment(void* arg) { LOG_D(PHY,"decoder input(segment %u) :",r); for (int i=0; id[r][i]); LOG_D(PHY,"\n"); } @@ -377,9 +379,9 @@ void nr_processDLSegment(void* arg) { //set Filler bits memset((&z[0]+K_bits_F),127,harq_process->F*sizeof(int16_t)); //Move coded bits before filler bits - memcpy((&z[0]+2*harq_process->Z),d,(K_bits_F-2*harq_process->Z)*sizeof(int16_t)); + memcpy((&z[0]+2*harq_process->Z),harq_process->d[r],(K_bits_F-2*harq_process->Z)*sizeof(int16_t)); //skip filler bits - memcpy((&z[0]+Kr),d+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t)); + memcpy((&z[0]+Kr),harq_process->d[r]+(Kr-2*harq_process->Z),(kc*harq_process->Z-Kr)*sizeof(int16_t)); //Saturate coded bits before decoding into 8 bits values for (i=0, j=0; j < ((kc*harq_process->Z)>>4)+1; i+=2, j++) { diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h index f76119250f..ef42bb2abd 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_ue.h @@ -181,6 +181,7 @@ typedef struct { /// Pointers to transport block segments uint8_t **c; /// soft bits for each received segment ("d"-sequence)(for definition see 36-212 V8.6 2009-03, p.15) + /// Accumulates the soft bits for each round to increase decoding success (HARQ) int16_t **d; /// Index of current HARQ round for this DLSCH uint8_t round; diff --git a/openair1/SIMULATION/NR_PHY/dlschsim.c b/openair1/SIMULATION/NR_PHY/dlschsim.c index c8969d7a0f..eb48d26908 100644 --- a/openair1/SIMULATION/NR_PHY/dlschsim.c +++ b/openair1/SIMULATION/NR_PHY/dlschsim.c @@ -483,7 +483,7 @@ int main(int argc, char **argv) //unsigned char test_input[TBS / 8] __attribute__ ((aligned(16))); for (i = 0; i < TBS / 8; i++) test_input[i] = (unsigned char) rand(); - + harq->pdu=test_input; //estimated_output = harq_process->b; #ifdef DEBUG_NR_DLSCHSIM From a79ccb99926ab6e93e826a93441347436a6f5269 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Fri, 25 Mar 2022 21:45:37 +0100 Subject: [PATCH 091/150] fix nr_deinterleaving_ldpc() again, we are now too short in the buffer --- common/utils/assertions.h | 4 ++-- openair1/PHY/CODING/nr_rate_matching.c | 27 +++++++++++++++----------- openair1/SIMULATION/NR_PHY/dlschsim.c | 2 +- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/common/utils/assertions.h b/common/utils/assertions.h index 573036b1d9..c8959d0adb 100644 --- a/common/utils/assertions.h +++ b/common/utils/assertions.h @@ -44,9 +44,9 @@ #define _Assert_(cOND, aCTION, fORMAT, aRGS...) \ do { \ if (!(cOND)) { \ - fprintf(stderr, "\nAssertion ("#cOND") failed!\n" \ + fprintf(stderr, "\nAssertion (%s) failed!\n" \ "In %s() %s:%d\n" fORMAT, \ - __FUNCTION__, __FILE__, __LINE__, ##aRGS); \ + #cOND, __FUNCTION__, __FILE__, __LINE__, ##aRGS); \ aCTION; \ } \ } while(0) diff --git a/openair1/PHY/CODING/nr_rate_matching.c b/openair1/PHY/CODING/nr_rate_matching.c index 29a1e363e9..fbad79cad7 100644 --- a/openair1/PHY/CODING/nr_rate_matching.c +++ b/openair1/PHY/CODING/nr_rate_matching.c @@ -309,25 +309,28 @@ void nr_interleaving_ldpc(uint32_t E, uint8_t Qm, uint8_t *e,uint8_t *f) void nr_deinterleaving_ldpc(uint32_t E, uint8_t Qm, int16_t *e,int16_t *f) { + switch(Qm) { case 2: { - int16_t *e1=e+(E/2); - int16_t *end=f+E-4; - while( fpdu=test_input; + dlsch->harq_process.pdu=test_input; //estimated_output = harq_process->b; #ifdef DEBUG_NR_DLSCHSIM From c0568a997a003b15b64e47c3ae8c4868d0630425 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Tue, 22 Mar 2022 15:23:44 +0100 Subject: [PATCH 092/150] fix bugs, delete dead code --- executables/nr-ue.c | 27 +++--- openair1/PHY/defs_RU.h | 1 - openair1/PHY/defs_UE.h | 14 --- openair1/PHY/defs_gNB.h | 3 - openair1/SCHED_UE/phy_procedures_lte_ue.c | 106 ---------------------- openair2/RRC/LTE/rrc_UE.c | 3 +- targets/ARCH/rfsimulator/simulator.c | 72 ++++----------- targets/RT/USER/lte-ru.c | 19 +++- targets/RT/USER/lte-softmodem.h | 1 - targets/RT/USER/lte-uesoftmodem.c | 9 -- 10 files changed, 51 insertions(+), 204 deletions(-) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 3cc71b8b3a..aef0370e53 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -654,17 +654,15 @@ static void UE_synch(void *arg) { openair0_cfg[UE->rf_map.card].rx_freq[0], openair0_cfg[UE->rf_map.card].tx_freq[0]); - if (UE->mode != loop_through_memory) { - UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0); - //UE->rfdevice.trx_set_gains_func(&openair0,&openair0_cfg[0]); - //UE->rfdevice.trx_stop_func(&UE->rfdevice); - // sleep(1); - /*if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) { - LOG_E(HW,"Could not start the device\n"); - oai_exit=1; - }*/ - } - + UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0); + //UE->rfdevice.trx_set_gains_func(&openair0,&openair0_cfg[0]); + //UE->rfdevice.trx_stop_func(&UE->rfdevice); + // sleep(1); + /*if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) { + LOG_E(HW,"Could not start the device\n"); + oai_exit=1; + }*/ + if (UE->UE_scan_carrier == 1) { UE->UE_scan_carrier = 0; } else { @@ -683,8 +681,7 @@ static void UE_synch(void *arg) { LOG_I(PHY, "Initial sync failed: trying carrier off %d Hz\n", freq_offset); - if (UE->mode != loop_through_memory) - UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0); + UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0); } break; @@ -729,7 +726,7 @@ void processSlotTX(void *arg) { stop_meas(&UE->ue_ul_indication_stats); } - if ((UE->mode != loop_through_memory) && (rxtxD->ue_sched_mode != NOT_PUSCH)) { + if (rxtxD->ue_sched_mode != NOT_PUSCH) { phy_procedures_nrUE_TX(UE,proc,0); } } @@ -873,7 +870,7 @@ void syncInFrame(PHY_VARS_NR_UE *UE, openair0_timestamp *timestamp) { *timestamp += UE->frame_parms.get_samples_per_slot(1,&UE->frame_parms); for ( int size=UE->rx_offset ; size > 0 ; size -= UE->frame_parms.samples_per_subframe ) { int unitTransfer=size>UE->frame_parms.samples_per_subframe ? UE->frame_parms.samples_per_subframe : size ; - // we write before read becasue gNB waits for UE to write and both executions halt + // we write before read because gNB waits for UE to write and both executions halt // this happens here as the read size is samples_per_subframe which is very much larger than samp_per_slot if (IS_SOFTMODEM_RFSIM) dummyWrite(UE,*timestamp, unitTransfer); AssertFatal(unitTransfer == diff --git a/openair1/PHY/defs_RU.h b/openair1/PHY/defs_RU.h index 0b20aa409b..243e76f851 100644 --- a/openair1/PHY/defs_RU.h +++ b/openair1/PHY/defs_RU.h @@ -54,7 +54,6 @@ typedef enum { no_L2_connect=5, calib_prach_tx=6, rx_dump_frame=7, - loop_through_memory=8 } runmode_t; /*! \brief Extension Type */ diff --git a/openair1/PHY/defs_UE.h b/openair1/PHY/defs_UE.h index 7f4d07ddae..a634a0d585 100644 --- a/openair1/PHY/defs_UE.h +++ b/openair1/PHY/defs_UE.h @@ -168,19 +168,6 @@ typedef struct { struct sched_param sched_param_ue; /// pthread descriptor main UE thread pthread_t pthread_ue; - /// \brief Instance count for synch thread. - /// \internal This variable is protected by \ref mutex_synch. - int instance_cnt_synch; - /// pthread attributes for synch processing thread - pthread_attr_t attr_synch; - /// scheduling parameters for synch thread - struct sched_param sched_param_synch; - /// pthread descriptor synch thread - pthread_t pthread_synch; - /// condition variable for UE synch thread; - pthread_cond_t cond_synch; - /// mutex for UE synch thread - pthread_mutex_t mutex_synch; /// instance count for eNBs int instance_cnt_eNBs; /// set of scheduling variables RXn-TXnp4 threads @@ -833,7 +820,6 @@ typedef struct { pthread_mutex_t timer_mutex; pthread_cond_t timer_cond; int instance_cnt_timer; - /// RF and Interface devices per CC openair0_device rfdevice; diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 6dcce5df0a..66bf3e8b03 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -589,9 +589,6 @@ typedef struct gNB_L1_proc_t_s { int instance_cnt_te; /// \internal This variable is protected by \ref mutex_prach. int instance_cnt_prach; - - // instance count for over-the-air gNB synchronization - int instance_cnt_synch; /// \internal This variable is protected by \ref mutex_asynch_rxtx. int instance_cnt_asynch_rxtx; /// pthread structure for eNB single processing thread diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index b02f24e04e..52e7351e24 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -4870,109 +4870,3 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue, LOG_D(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, subframe_rx); return (0); } - - -void phy_procedures_UE_lte(PHY_VARS_UE *ue, - UE_rxtx_proc_t *proc, - uint8_t eNB_id, - uint8_t abstraction_flag, - uint8_t do_pdcch_flag, - runmode_t mode) { - MessageDef *msg_p; - int result; - int frame_rx = proc->frame_rx; - int frame_tx = proc->frame_tx; - int subframe_rx = proc->subframe_rx; - int subframe_tx = proc->subframe_tx; - UE_L2_STATE_t ret; - int slot; - - if (ue->mac_enabled == 0) { - ue->UE_mode[eNB_id]=PUSCH; - } - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,1); - - if ( LOG_DEBUGFLAG(UE_TIMING)) { - start_meas(&ue->phy_proc[ue->current_thread_id[subframe_rx]]); - } - do { - // Checks if a message has been sent to PHY sub-task - itti_poll_msg (TASK_PHY_UE, &msg_p); - - if (msg_p != NULL) { - switch (ITTI_MSG_ID(msg_p)) { - case PHY_FIND_CELL_REQ: - LOG_I(PHY, "[UE ] Received %s\n", ITTI_MSG_NAME (msg_p)); - /* TODO process the message */ - break; - - default: - LOG_E(PHY, "[UE %ld] Received unexpected message %s\n", ITTI_MSG_DESTINATION_INSTANCE (msg_p), ITTI_MSG_NAME (msg_p)); - break; - } - - result = itti_free (ITTI_MSG_ORIGIN_ID(msg_p), msg_p); - AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - } - } while(msg_p != NULL); - - for (slot=0; slot<2; slot++) { - if ((subframe_select(&ue->frame_parms,subframe_tx)==SF_UL)|| - (ue->frame_parms.frame_type == FDD)) { - phy_procedures_UE_TX(ue,proc,eNB_id,abstraction_flag,mode); - } - - if ((subframe_select(&ue->frame_parms,subframe_rx)==SF_DL) || - (ue->frame_parms.frame_type == FDD)) { - phy_procedures_UE_RX(ue,proc,eNB_id,abstraction_flag,do_pdcch_flag,mode); - } - - if ((subframe_select(&ue->frame_parms,subframe_tx)==SF_S) && - (slot==1)) { - phy_procedures_UE_S_TX(ue,eNB_id,abstraction_flag); - } - - if ((subframe_select(&ue->frame_parms,subframe_rx)==SF_S) && - (slot==0)) { - phy_procedures_UE_RX(ue,proc,eNB_id,abstraction_flag,do_pdcch_flag,mode); - } - - if (ue->mac_enabled==1) { - if (slot==0) { - //LOG_I(PHY,"[UE %d] Frame %d, subframe %d, star ue_scheduler\n", ue->Mod_id,frame_rx,subframe_tx); - ret = ue_scheduler(ue->Mod_id, - frame_rx, - subframe_rx, - frame_tx, - subframe_tx, - subframe_select(&ue->frame_parms,subframe_tx), - eNB_id, - 0/*FIXME CC_id*/); - - if (ret == CONNECTION_LOST) { - LOG_E(PHY,"[UE %d] Frame %d, subframe %d RRC Connection lost, returning to PRACH\n",ue->Mod_id, - frame_rx,subframe_tx); - ue->UE_mode[eNB_id] = PRACH; - // mac_xface->macphy_exit("Connection lost"); - } else if (ret == PHY_RESYNCH) { - LOG_E(PHY,"[UE %d] Frame %d, subframe %d RRC Connection lost, trying to resynch\n", - ue->Mod_id, - frame_rx,subframe_tx); - ue->UE_mode[eNB_id] = RESYNCH; - // mac_xface->macphy_exit("Connection lost"); - } else if (ret == PHY_HO_PRACH) { - LOG_I(PHY,"[UE %d] Frame %d, subframe %d, return to PRACH and perform a contention-free access\n", - ue->Mod_id,frame_rx,subframe_tx); - ue->UE_mode[eNB_id] = PRACH; - } - } - } - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE,0); - - if (LOG_DEBUGFLAG(UE_TIMING)) { - stop_meas(&ue->phy_proc[ue->current_thread_id[subframe_rx]]); - } - } // slot -} diff --git a/openair2/RRC/LTE/rrc_UE.c b/openair2/RRC/LTE/rrc_UE.c index b46bba2492..9b37853ed2 100644 --- a/openair2/RRC/LTE/rrc_UE.c +++ b/openair2/RRC/LTE/rrc_UE.c @@ -3175,7 +3175,8 @@ int decode_SIB1( const protocol_ctxt_t *const ctxt_pP, const uint8_t eNB_index, const size_t num_plmn_data = sizeof(plmn_data) / sizeof(plmn_data[0]); for (size_t plmn_ind = 0;; ++plmn_ind) { if (plmn_ind == num_plmn_data) { - LOG_E( RRC, "Did not find name from internal table for %u %u\n", mcc, mnc); + LOG_W( RRC, "Did not find operator name from internal table for MCC %0*d, MNC %0*d\n", + mccdigits, mcc, mncdigits, mnc); break; } if ((plmn_data[plmn_ind].mcc == mcc) && (plmn_data[plmn_ind].mnc == mnc)) { diff --git a/targets/ARCH/rfsimulator/simulator.c b/targets/ARCH/rfsimulator/simulator.c index 013e542689..dc5eab2f34 100644 --- a/targets/ARCH/rfsimulator/simulator.c +++ b/targets/ARCH/rfsimulator/simulator.c @@ -117,7 +117,7 @@ typedef struct buffer_s { typedef struct { int listen_sock, epollfd; - openair0_timestamp nextTimestamp; + openair0_timestamp nextRxTstamp; openair0_timestamp lastWroteTS; uint64_t typeStamp; char *ip; @@ -196,7 +196,7 @@ static void removeCirBuf(rfsimulator_state_t *bridge, int sock) { free(bridge->buf[sock].circularBuf); // Fixme: no free_channel_desc_scm(bridge->buf[sock].channel_model) implemented // a lot of mem leaks - free(bridge->buf[sock].channel_model); + //free(bridge->buf[sock].channel_model); memset(&bridge->buf[sock], 0, sizeof(buffer_t)); bridge->buf[sock].conn_sock=-1; } @@ -429,8 +429,6 @@ static int rfsimulator_write_internal(rfsimulator_state_t *t, openair0_timestamp if (!alreadyLocked) pthread_mutex_lock(&Sockmutex); - LOG_D(HW,"sending %d samples at time: %ld\n", nsamps, timestamp); - for (int i=0; ibuf[i]; @@ -549,14 +547,14 @@ static bool flushInput(rfsimulator_state_t *t, int timeout, int nsamps_for_initi (t->typeStamp == ENB_MAGICDL && b->th.magic==UE_MAGICDL), "Socket Error in protocol"); b->headerMode=false; - if ( t->nextTimestamp == 0 ) { // First block in UE, resync with the eNB current TS - t->nextTimestamp=b->th.timestamp> nsamps_for_initial ? + if ( t->nextRxTstamp == 0 ) { // First block in UE, resync with the eNB current TS + t->nextRxTstamp=b->th.timestamp> nsamps_for_initial ? b->th.timestamp - nsamps_for_initial : 0; b->lastReceivedTS=b->th.timestamp> nsamps_for_initial ? b->th.timestamp : nsamps_for_initial; - LOG_W(HW,"UE got first timestamp: starting at %lu\n", t->nextTimestamp); + LOG_W(HW,"UE got first timestamp: starting at %lu\n", t->nextRxTstamp); b->trashingPacket=true; } else if ( b->lastReceivedTS < b->th.timestamp) { int nbAnt= b->th.nbAnt; @@ -623,7 +621,7 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest } rfsimulator_state_t *t = device->priv; - LOG_D(HW, "Enter rfsimulator_read, expect %d samples, will release at TS: %ld\n", nsamps, t->nextTimestamp+nsamps); + LOG_D(HW, "Enter rfsimulator_read, expect %d samples, will release at TS: %ld\n", nsamps, t->nextRxTstamp+nsamps); // deliver data from received data // check if a UE is connected int first_sock; @@ -634,54 +632,22 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest if ( first_sock == FD_SETSIZE ) { // no connected device (we are eNB, no UE is connected) - if ( t->nextTimestamp == 0) + if ( t->nextRxTstamp == 0) LOG_W(HW,"No connected device, generating void samples...\n"); if (!flushInput(t, 10, nsamps)) { for (int x=0; x < nbAnt; x++) memset(samplesVoid[x],0,sampleToByte(nsamps,1)); - t->nextTimestamp+=nsamps; + t->nextRxTstamp+=nsamps; - if ( ((t->nextTimestamp/nsamps)%100) == 0) - LOG_D(HW,"No UE, Generated void samples for Rx: %ld\n", t->nextTimestamp); + if ( ((t->nextRxTstamp/nsamps)%100) == 0) + LOG_D(HW,"No UE, Generated void samples for Rx: %ld\n", t->nextRxTstamp); - *ptimestamp = t->nextTimestamp-nsamps; + *ptimestamp = t->nextRxTstamp-nsamps; return nsamps; } } else { - pthread_mutex_lock(&Sockmutex); - - if ( t->nextTimestamp > 0 && t->lastWroteTS < t->nextTimestamp) { - pthread_mutex_unlock(&Sockmutex); - usleep(10000); - pthread_mutex_lock(&Sockmutex); - - if ( t->lastWroteTS < t->nextTimestamp ) { - // Assuming Tx is not done fully in another thread - // We can never write is the past from the received time - // So, the node perform receive but will never write these symbols - // let's tell this to the opposite node - // We send timestamp for nb samples required - // assuming this should have been done earlier if a Tx would exist - pthread_mutex_unlock(&Sockmutex); - struct complex16 v= {0}; - void *dummyS[t->tx_num_channels]; - - for ( int i=0; i < t->tx_num_channels; i++) - dummyS[i]=(void *)&v; - - LOG_I(HW, "No samples Tx occured, so we send 1 sample to notify it: Tx:%lu, Rx:%lu\n", - t->lastWroteTS, t->nextTimestamp); - rfsimulator_write_internal(t, t->nextTimestamp, - dummyS, 1, - t->tx_num_channels, 1, true); - } else { - pthread_mutex_unlock(&Sockmutex); - LOG_W(HW, "trx_write came from another thread\n"); - } - } else - pthread_mutex_unlock(&Sockmutex); bool have_to_wait; @@ -692,7 +658,7 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest buffer_t *b=&t->buf[sock]; if ( b->circularBuf ) - if ( t->nextTimestamp+nsamps > b->lastReceivedTS ) { + if ( t->nextRxTstamp+nsamps > b->lastReceivedTS ) { have_to_wait=true; break; } @@ -701,7 +667,7 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest if (have_to_wait) /*printf("Waiting on socket, current last ts: %ld, expected at least : %ld\n", ptr->lastReceivedTS, - t->nextTimestamp+nsamps); + t->nextRxTstamp+nsamps); */ flushInput(t, 3, nsamps); } while (have_to_wait); @@ -732,7 +698,7 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest a, ptr->channel_model, nsamps, - t->nextTimestamp, + t->nextRxTstamp, CirSize ); else { // no channel modeling @@ -747,8 +713,8 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest //LOG_I(HW, "nbAnt_tx %d\n",nbAnt_tx); for (int i=0; i < nsamps; i++) {//loop over nsamps for (int a_tx=0; a_txcircularBuf[((t->nextTimestamp+i)*nbAnt_tx+a_tx)%CirSize].r*H_awgn_mimo[a][a_tx]); - out[i].i += (short)(ptr->circularBuf[((t->nextTimestamp+i)*nbAnt_tx+a_tx)%CirSize].i*H_awgn_mimo[a][a_tx]); + out[i].r += (short)(ptr->circularBuf[((t->nextRxTstamp+i)*nbAnt_tx+a_tx)%CirSize].r*H_awgn_mimo[a][a_tx]); + out[i].i += (short)(ptr->circularBuf[((t->nextRxTstamp+i)*nbAnt_tx+a_tx)%CirSize].i*H_awgn_mimo[a][a_tx]); } // end for a_tx } // end for i (number of samps) } // end of no channel modeling @@ -756,11 +722,11 @@ static int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimest } } - *ptimestamp = t->nextTimestamp; // return the time of the first sample - t->nextTimestamp+=nsamps; + *ptimestamp = t->nextRxTstamp; // return the time of the first sample + t->nextRxTstamp+=nsamps; LOG_D(HW,"Rx to upper layer: %d from %ld to %ld, energy in first antenna %d\n", nsamps, - *ptimestamp, t->nextTimestamp, + *ptimestamp, t->nextRxTstamp, signal_energy(samplesVoid[0], nsamps)); return nsamps; } diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index 66ce6ef247..f6cf51f101 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -733,7 +733,7 @@ void tx_rf(RU_t *ru, int sf_extension = 0; if ((SF_type == SF_DL) || - (SF_type == SF_S)) { + (SF_type == SF_S) ) { int siglen=fp->samples_per_tti,flags=1; if (SF_type == SF_S) { @@ -831,6 +831,23 @@ void tx_rf(RU_t *ru, late_control=STATE_BURST_TERMINATE; LOG_E(PHY,"TX : Timeout (sent %d/%d) state =%d\n",txs, siglen,late_control); } + } else if (IS_SOFTMODEM_RFSIM ) { + // in case of rfsim, we always enable tx because we need to feed rx of the opposite side + // we write 1 single I/Q sample to trigger Rx (rfsim will fill gaps with 0 I/Q) + void *dummy_tx[ru->frame_parms->nb_antennas_tx]; + for (int i=0; iframe_parms->nb_antennas_tx; i++) + dummy_tx[i]=malloc16_clear(4); + + AssertFatal( 1 == + ru->rfdevice.trx_write_func(&ru->rfdevice, + timestamp+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension, + dummy_tx, + 1, + ru->frame_parms->nb_antennas_tx, + 4),""); + + for (int i=0; iframe_parms->nb_antennas_tx; i++) + free(dummy_tx[i]); } } diff --git a/targets/RT/USER/lte-softmodem.h b/targets/RT/USER/lte-softmodem.h index 0267ad8ce0..1c887dd3c8 100644 --- a/targets/RT/USER/lte-softmodem.h +++ b/targets/RT/USER/lte-softmodem.h @@ -49,7 +49,6 @@ {"debug-ue-prach", CONFIG_HLP_DBGUEPR, PARAMFLAG_BOOL, uptr:NULL, defuintval:1, TYPE_INT, 0}, \ {"no-L2-connect", CONFIG_HLP_NOL2CN, PARAMFLAG_BOOL, uptr:NULL, defuintval:1, TYPE_INT, 0}, \ {"calib-prach-tx", CONFIG_HLP_CALPRACH, PARAMFLAG_BOOL, uptr:NULL, defuintval:1, TYPE_INT, 0}, \ - {"loop-memory", CONFIG_HLP_UELOOP, 0, strptr:&loopfile, defstrval:"iqs.in", TYPE_STRING,0}, \ {"ue-dump-frame", CONFIG_HLP_DUMPFRAME, PARAMFLAG_BOOL, iptr:&dumpframe, defintval:0, TYPE_INT, 0}, \ } #define CMDLINE_CALIBUERX_IDX 0 diff --git a/targets/RT/USER/lte-uesoftmodem.c b/targets/RT/USER/lte-uesoftmodem.c index 8cdef647ca..089941c7df 100644 --- a/targets/RT/USER/lte-uesoftmodem.c +++ b/targets/RT/USER/lte-uesoftmodem.c @@ -276,7 +276,6 @@ uint16_t node_number; static void get_options(void) { int CC_id=0; int tddflag=0; - char *loopfile=NULL; int dumpframe=0; int timingadv=0; uint8_t nfapi_mode = NFAPI_MONOLITHIC; @@ -293,14 +292,6 @@ static void get_options(void) { config_process_cmdline( cmdline_ueparams,sizeof(cmdline_ueparams)/sizeof(paramdef_t),NULL); nfapi_setmode(nfapi_mode); - - if (loopfile != NULL) { - printf("Input file for hardware emulation: %s",loopfile); - mode=loop_through_memory; - input_fd = fopen(loopfile,"r"); - AssertFatal(input_fd != NULL,"Please provide a valid input file\n"); - } - get_softmodem_params()->hw_timing_advance = timingadv; if ( (cmdline_uemodeparams[CMDLINE_CALIBUERX_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue; From 4a51762a83a07f30bb0dbc3b9a7f0cf51026362d Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 30 Mar 2022 13:46:48 +0200 Subject: [PATCH 093/150] feat(ci): adding automation for 5G NR SA L2 simulator with Proxy - Adding new templates for nFAPI in gNB and NR-UE images - Better entrypoint for NR-UE (alignment on others) - New Test method: StatsFromGenObject - At deployment, image name, size and date are printed - Initial scenario with 1 NR-UE and just ping operations - Trigger new child sub-pipeline for L2-sim-5G tests Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-GitLab-Container | 20 ++ ci-scripts/cls_containerize.py | 81 ++++- ci-scripts/cls_oaicitest.py | 27 +- ci-scripts/main.py | 4 +- ci-scripts/ran.py | 29 +- ci-scripts/xml_class_list.yml | 1 + .../xml_files/container_5g_l2sim_tdd.xml | 115 +++++++ .../xml_files/container_5g_l2sim_tdd_down.xml | 38 +++ .../5g_l2sim_tdd/docker-compose.yaml | 322 ++++++++++++++++++ docker/Dockerfile.nrUE.rhel8.2 | 10 +- docker/Dockerfile.nrUE.ubuntu18 | 10 +- docker/scripts/generateTemplate.py | 12 +- docker/scripts/gnb_entrypoint.sh | 3 +- docker/scripts/gnb_parameters.yaml | 36 ++ docker/scripts/nr_ue_entrypoint.sh | 16 +- docker/scripts/nr_ue_parameters.yaml | 49 +++ 16 files changed, 743 insertions(+), 30 deletions(-) create mode 100644 ci-scripts/xml_files/container_5g_l2sim_tdd.xml create mode 100644 ci-scripts/xml_files/container_5g_l2sim_tdd_down.xml create mode 100644 ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml create mode 100644 docker/scripts/nr_ue_parameters.yaml diff --git a/ci-scripts/Jenkinsfile-GitLab-Container b/ci-scripts/Jenkinsfile-GitLab-Container index f5852bace5..a76323513f 100644 --- a/ci-scripts/Jenkinsfile-GitLab-Container +++ b/ci-scripts/Jenkinsfile-GitLab-Container @@ -238,6 +238,26 @@ pipeline { } } } + stage ("5G L2 Simulators") { + when { expression {doMandatoryTests} } + steps { + script { + triggerSlaveJob ('RAN-L2-Sim-Test-5G', 'Test-L2-Sim-Container-4G') + } + } + post { + always { + script { + finalizeSlaveJob('RAN-L2-Sim-Test-5G') + } + } + failure { + script { + currentBuild.result = 'FAILURE' + } + } + } + } stage ("NSA B200 Sanity Check") { when { expression {doMandatoryTests} } steps { diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index fdc2bc1597..533b32058f 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -93,6 +93,7 @@ class Containerize(): self.allImagesSize = {} self.collectInfo = {} + self.deployedContainers = [] self.tsharkStarted = False self.pingContName = '' self.pingOptions = '' @@ -680,12 +681,28 @@ class Containerize(): cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps -a' count = 0 healthy = 0 + newContainers = [] while (count < 10): count += 1 containerStatus = [] deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) healthy = 0 for state in deployStatus.split('\n'): + res = re.search('Name|----------', state) + if res is not None: + continue + if len(state) == 0: + continue + res = re.search('^(?P[a-zA-Z0-9\-\_]+) ', state) + if res is not None: + cName = res.group('container_name') + found = False + for alreadyDeployed in self.deployedContainers: + if cName == alreadyDeployed: + found = True + if not found: + newContainers.append(cName) + self.deployedContainers.append(cName) if re.search('Up \(healthy\)', state) is not None: healthy += 1 if re.search('rfsim4g-db-init.*Exit 0', state) is not None: @@ -696,16 +713,33 @@ class Containerize(): else: time.sleep(10) + imagesInfo = '' + for newCont in newContainers: + cmd = 'docker inspect -f "{{.Config.Image}}" ' + newCont + imageName = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) + imageName = str(imageName).strip() + cmd = 'docker image inspect --format "{{.RepoTags}}\t{{.Size}}\t{{.Created}}" ' + imageName + imagesInfo += subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) + + html_queue = SimpleQueue() + html_cell = '
\n'
+		for imageInfo in imagesInfo.split('\n'):
+			html_cell += imageInfo[:-11] + '\n'
+		html_cell += '\n'
+		for cState in containerStatus:
+			html_cell += cState + '\n'
+		html_cell += '
' + html_queue.put(html_cell) if count == 100 and healthy == self.nb_healthy[0]: if self.tsharkStarted == False: logging.debug('Starting tshark on public network') self.CaptureOnDockerNetworks() - HTML.CreateHtmlTestRow('n/a', 'OK', CONST.ALL_PROCESSES_OK) + HTML.CreateHtmlTestRowQueue('n/a', 'OK', 1, html_queue) for cState in containerStatus: logging.debug(cState) logging.info('\u001B[1m Deploying OAI Object(s) PASS\u001B[0m') else: - HTML.CreateHtmlTestRow('Could not deploy in time', 'KO', CONST.ALL_PROCESSES_OK) + HTML.CreateHtmlTestRowQueue('Could not deploy in time', 'KO', 1, html_queue) for cState in containerStatus: logging.debug(cState) logging.error('\u001B[1m Deploying OAI Object(s) FAILED\u001B[0m') @@ -724,10 +758,12 @@ class Containerize(): cmd = 'sudo nohup tshark -f "(host 192.168.61.11 and icmp) or (not host 192.168.61.11 and not host 192.168.61.30 and not arp and not port 53 and not port 2152)"' elif re.search('5g.*rfsimulator', self.yamlPath[0]) is not None: cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not host 192.168.71.150 and not arp and not port 53 and not port 2152 and not port 2153)"' + elif re.search('5g_l2sim', self.yamlPath[0]) is not None: + cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not arp and not port 53 and not port 2152 and not port 2153)"' else: return for name in networkNames.split('\n'): - if re.search('rfsim', name) is not None: + if re.search('rfsim', name) is not None or re.search('l2sim', name) is not None: cmd += ' -i ' + name cmd += ' -w /tmp/capture_' ymlPath = self.yamlPath[0].split('/') @@ -779,7 +815,7 @@ class Containerize(): # Analyzing log file(s)! listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du'] for container in listOfPossibleRanContainers: - filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log' + filename = self.yamlPath[0] + '/*-oai-' + container + '.log' cmd = 'ls ' + filename containerStatus = True try: @@ -801,7 +837,7 @@ class Containerize(): listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*'] for container in listOfPossibleUeContainers: - filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log' + filename = self.yamlPath[0] + '/*-oai-' + container + '.log' cmd = 'ls ' + filename containerStatus = True try: @@ -849,6 +885,7 @@ class Containerize(): logging.error('\u001B[1m Undeploying OAI Object(s) FAILED\u001B[0m') return + self.deployedContainers = [] # Cleaning any created tmp volume cmd = 'docker volume prune --force || true' logging.debug(cmd) @@ -861,6 +898,40 @@ class Containerize(): HTML.CreateHtmlTestRow('n/a', 'KO', CONST.ALL_PROCESSES_OK) logging.info('\u001B[1m Undeploying OAI Object(s) FAIL\u001B[0m') + def StatsFromGenObject(self, HTML): + self.exitStatus = 0 + ymlPath = self.yamlPath[0].split('/') + logPath = '../cmake_targets/log/' + ymlPath[1] + + # if the containers are running, recover the logs! + cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml ps --all' + logging.debug(cmd) + deployStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) + cmd = 'docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}" ' + anyLogs = False + for state in deployStatus.split('\n'): + res = re.search('Name|----------', state) + if res is not None: + continue + if len(state) == 0: + continue + res = re.search('^(?P[a-zA-Z0-9\-\_]+) ', state) + if res is not None: + anyLogs = True + cmd += res.group('container_name') + ' ' + message = '' + if anyLogs: + logging.debug(cmd) + stats = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=30) + for statLine in stats.split('\n'): + logging.debug(statLine) + message += statLine + '\n' + + html_queue = SimpleQueue() + html_cell = '
\n' + message + '
' + html_queue.put(html_cell) + HTML.CreateHtmlTestRowQueue(self.pingOptions, 'OK', 1, html_queue) + def PingFromContainer(self, HTML, RAN, UE): self.exitStatus = 0 ymlPath = self.yamlPath[0].split('/') diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py index 5d89a7b2e0..75fd1bf05e 100644 --- a/ci-scripts/cls_oaicitest.py +++ b/ci-scripts/cls_oaicitest.py @@ -3156,10 +3156,12 @@ class OaiCiTest(): nrFoundDCI = 0 nrCRCOK = 0 mbms_messages = 0 + nbPduSessAccept = 0 + nbPduDiscard = 0 HTML.htmlUEFailureMsg='' global_status = CONST.ALL_PROCESSES_OK for line in ue_log_file.readlines(): - result = re.search('nr_synchro_time', str(line)) + result = re.search('nr_synchro_time|Starting NR UE soft modem', str(line)) if result is not None: nrUEFlag = True if nrUEFlag: @@ -3172,6 +3174,15 @@ class OaiCiTest(): result = re.search('CRC OK', str(line)) if result is not None: nrCRCOK += 1 + result = re.search('Received PDU Session Establishment Accept', str(line)) + if result is not None: + nbPduSessAccept += 1 + result = re.search('warning: discard PDU, sn out of window', str(line)) + if result is not None: + nbPduDiscard += 1 + result = re.search('--nfapi 5 --node-number 2 --sa', str(line)) + if result is not None: + frequency_found = True result = re.search('Exiting OAI softmodem', str(line)) if result is not None: exitSignalReceived = True @@ -3302,21 +3313,29 @@ class OaiCiTest(): HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n' if nrUEFlag: if nrDecodeMib > 0: - statMsg = 'UE showed ' + str(nrDecodeMib) + ' MIB decode message(s)' + statMsg = 'UE showed ' + str(nrDecodeMib) + ' "MIB decode" message(s)' logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m') HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n' if nrFoundDCI > 0: - statMsg = 'UE showed ' + str(nrFoundDCI) + ' DCI found message(s)' + statMsg = 'UE showed ' + str(nrFoundDCI) + ' "DCI found" message(s)' logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m') HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n' if nrCRCOK > 0: - statMsg = 'UE showed ' + str(nrCRCOK) + ' PDSCH decoding message(s)' + statMsg = 'UE showed ' + str(nrCRCOK) + ' "PDSCH decoding" message(s)' logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m') HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n' if not frequency_found: statMsg = 'NR-UE could NOT synch!' logging.error('\u001B[1;30;43m ' + statMsg + ' \u001B[0m') HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n' + if nbPduSessAccept > 0: + statMsg = 'UE showed ' + str(nbPduSessAccept) + ' "Received PDU Session Establishment Accept" message(s)' + logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m') + HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n' + if nbPduDiscard > 0: + statMsg = 'UE showed ' + str(nbPduDiscard) + ' "warning: discard PDU, sn out of window" message(s)' + logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m') + HTML.htmlUEFailureMsg=HTML.htmlUEFailureMsg + statMsg + '\n' if uciStatMsgCount > 0: statMsg = 'UE showed ' + str(uciStatMsgCount) + ' "uci->stat" message(s)' logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m') diff --git a/ci-scripts/main.py b/ci-scripts/main.py index aa7d512b3d..3236676e14 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -391,7 +391,7 @@ def GetParametersFromXML(action): if (string_field is not None): CONTAINERS.yamlPath[CONTAINERS.eNB_instance] = string_field - elif action == 'DeployGenObject' or action == 'UndeployGenObject': + elif action == 'DeployGenObject' or action == 'UndeployGenObject' or action == 'StatsFromGenObject': string_field=test.findtext('yaml_path') if (string_field is not None): CONTAINERS.yamlPath[0] = string_field @@ -931,6 +931,8 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re CONTAINERS.IperfFromContainer(HTML, RAN) if CONTAINERS.exitStatus==1: RAN.prematureExit = True + elif action == 'StatsFromGenObject': + CONTAINERS.StatsFromGenObject(HTML) else: sys.exit('Invalid class (action) from xml') if RAN.prematureExit: diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py index 3b32a75542..26abef94f2 100644 --- a/ci-scripts/ran.py +++ b/ci-scripts/ran.py @@ -677,13 +677,13 @@ class RANManagement(): # if T tracer was run with option 0 (no logs), analyze logs # from textlog, otherwise do normal analysis (e.g., option 2) result = re.search('T_stdout 0', str(self.Initialize_eNB_args)) - enbLogFile = self.eNBLogFiles[int(self.eNB_instance)] - raw_record_file = enbLogFile.replace('.log', '_record.raw') - replay_log_file = enbLogFile.replace('.log', '_replay.log') if (result is not None): logging.debug('\u001B[1m Replaying RAW record file\u001B[0m') mySSH.open(lIpAddr, lUserName, lPassWord) mySSH.command('cd ' + lSourcePath + '/common/utils/T/tracer/', '\$', 5) + enbLogFile = self.eNBLogFiles[int(self.eNB_instance)] + raw_record_file = enbLogFile.replace('.log', '_record.raw') + replay_log_file = enbLogFile.replace('.log', '_replay.log') extracted_txt_file = enbLogFile.replace('.log', '_extracted_messages.txt') extracted_log_file = enbLogFile.replace('.log', '_extracted_messages.log') mySSH.command('./extract_config -i ' + lSourcePath + '/cmake_targets/' + raw_record_file + ' > ' + lSourcePath + '/cmake_targets/' + extracted_txt_file, '\$', 5) @@ -706,8 +706,6 @@ class RANManagement(): mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*stats.log', '.') mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*.pickle', '.') mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/*.png', '.') - mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/'+raw_record_file, '.') - mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/'+replay_log_file, '.') # copyin_res = mySSH.copyin(lIpAddr, lUserName, lPassWord, lSourcePath + '/cmake_targets/' + fileToAnalyze, '.') if (copyin_res == -1): @@ -723,9 +721,7 @@ class RANManagement(): mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrL1_stats.log', self.eNBSourceCodePath + '/cmake_targets/') mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './nrMAC_stats.log', self.eNBSourceCodePath + '/cmake_targets/') mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.pickle', self.eNBSourceCodePath + '/cmake_targets/') - mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.png', self.eNBSourceCodePath + '/cmake_targets/')#RH 21/02/2002 this does not work, there are more than 1 png file - mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword,'./'+raw_record_file, self.eNBSourceCodePath + '/cmake_targets/') - mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword,'./'+replay_log_file, self.eNBSourceCodePath + '/cmake_targets/') + mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './gnb_stats_monitor.png', self.eNBSourceCodePath + '/cmake_targets/') # mySSH.copyout(self.eNBIPAddress, self.eNBUserName, self.eNBPassword, './' + fileToAnalyze, self.eNBSourceCodePath + '/cmake_targets/') logging.debug('\u001B[1m Analyzing ' + nodeB_prefix + 'NB logfile \u001B[0m ' + fileToAnalyze) @@ -826,6 +822,8 @@ class RANManagement(): RealTimeProcessingIssue = False DLRetxIssue = False ULRetxIssue = False + nrRrcRcfgComplete = 0 + harqFeedbackPast = 0 line_cnt=0 #log file line counter for line in enb_log_file.readlines(): @@ -1002,6 +1000,13 @@ class RANManagement(): #remove 1- all useless char before relevant info (ulsch or dlsch) 2- trailing char dlsch_ulsch_stats[k]=re.sub(r'^.*\]\s+', r'' , line.rstrip()) + result = re.search('Received NR_RRCReconfigurationComplete from UE', str(line)) + if result is not None: + nrRrcRcfgComplete += 1 + result = re.search('HARQ feedback is in the past', str(line)) + if result is not None: + harqFeedbackPast += 1 + #count "problem receiving samples" msg result = re.search('\[PHY\]\s+problem receiving samples', str(line)) @@ -1089,6 +1094,14 @@ class RANManagement(): statMsg = nodeB_prefix + 'NB ran with TX Write thread enabled' logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m') htmleNBFailureMsg += statMsg + '\n' + if nrRrcRcfgComplete > 0: + statMsg = nodeB_prefix + 'NB showed ' + str(nrRrcRcfgComplete) + ' "Received NR_RRCReconfigurationComplete from UE" message(s)' + logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m') + htmleNBFailureMsg += statMsg + '\n' + if harqFeedbackPast > 0: + statMsg = nodeB_prefix + 'NB showed ' + str(harqFeedbackPast) + ' "HARQ feedback is in the past" message(s)' + logging.debug('\u001B[1;30;43m ' + statMsg + ' \u001B[0m') + htmleNBFailureMsg += statMsg + '\n' #FR1 NSA test : add new markers to make sure gNB is used if NSA_RAPROC_PUSCH_check: statMsg = '[RAPROC] PUSCH with TC_RNTI message check for ' + nodeB_prefix + 'NB : PASS ' diff --git a/ci-scripts/xml_class_list.yml b/ci-scripts/xml_class_list.yml index 9e33ee468d..d6f75191a8 100755 --- a/ci-scripts/xml_class_list.yml +++ b/ci-scripts/xml_class_list.yml @@ -46,3 +46,4 @@ - UndeployGenObject - PingFromContainer - IperfFromContainer + - StatsFromGenObject diff --git a/ci-scripts/xml_files/container_5g_l2sim_tdd.xml b/ci-scripts/xml_files/container_5g_l2sim_tdd.xml new file mode 100644 index 0000000000..be6b789b6b --- /dev/null +++ b/ci-scripts/xml_files/container_5g_l2sim_tdd.xml @@ -0,0 +1,115 @@ + + + l2sim-5gnr-tdd + Testing 5G NR L2 sim - TDD gNB + wrench + 2 + + 100001 + 000000 + 000001 + 000002 + 000003 + 000011 + 200000 + 020001 + 020002 + 200001 + 100001 + + + + + DeployGenObject + Deploy MySql Database + yaml_files/5g_l2sim_tdd + mysql + 1 + + + + DeployGenObject + Deploy OAI 5G CoreNetwork + yaml_files/5g_l2sim_tdd + oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn + 6 + + + + DeployGenObject + Deploy OAI 5G gNB L2 sim SA + yaml_files/5g_l2sim_tdd + oai-gnb + 7 + + + + DeployGenObject + Deploy OAI 5G NR-UE L2 sim SA and Proxy + yaml_files/5g_l2sim_tdd + proxy oai-nr-ue0 + 9 + + + + IdleSleep + Sleep + 10 + + + + PingFromContainer + Ping ext-dn from NR-UE + l2sim-oai-nr-ue0 + -I oaitun_ue1 -c 20 192.168.72.135 + 5 + + + + PingFromContainer + Ping NR-UE from ext-dn + l2sim-oai-ext-dn + -c 20 12.1.1.2 + 5 + + + + UndeployGenObject + Undeploy all OAI 5G stack + yaml_files/5g_l2sim_tdd + + + + StatsFromGenObject + Statistics before Traffic Test + yaml_files/5g_l2sim_tdd + + + + StatsFromGenObject + Statistics after Traffic Test + yaml_files/5g_l2sim_tdd + + + diff --git a/ci-scripts/xml_files/container_5g_l2sim_tdd_down.xml b/ci-scripts/xml_files/container_5g_l2sim_tdd_down.xml new file mode 100644 index 0000000000..d3630cd905 --- /dev/null +++ b/ci-scripts/xml_files/container_5g_l2sim_tdd_down.xml @@ -0,0 +1,38 @@ + + + l2sim-5gnr-down + CleanUp 5G L2 sim - TDD gNB + trash + + 100002 + + + + + UndeployGenObject + Undeploy all OAI 5G stack + yaml_files/5g_l2sim_tdd + + + diff --git a/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml b/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml new file mode 100644 index 0000000000..c899f8cc7e --- /dev/null +++ b/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml @@ -0,0 +1,322 @@ +version: '3.8' +services: + oai-nrf: + container_name: "l2sim-oai-nrf" + image: oai-nrf:latest + environment: + - NRF_INTERFACE_NAME_FOR_SBI=eth0 + - NRF_INTERFACE_PORT_FOR_SBI=80 + - NRF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 + - NRF_API_VERSION=v1 + - INSTANCE=0 + - PID_DIRECTORY=/var/run + networks: + public_net: + ipv4_address: 192.168.71.130 + volumes: + - ../5g_rfsimulator/nrf-healthcheck.sh:/openair-nrf/bin/nrf-healthcheck.sh + healthcheck: + test: /bin/bash -c "/openair-nrf/bin/nrf-healthcheck.sh" + interval: 10s + timeout: 5s + retries: 5 + mysql: + container_name: "l2sim-mysql" + image: mysql:5.7 + volumes: + - ../5g_rfsimulator/oai_db.sql:/docker-entrypoint-initdb.d/oai_db.sql + - ../5g_rfsimulator/mysql-healthcheck.sh:/tmp/mysql-healthcheck.sh + environment: + - TZ=Europe/Paris + - MYSQL_DATABASE=oai_db + - MYSQL_USER=test + - MYSQL_PASSWORD=test + - MYSQL_ROOT_PASSWORD=linux + healthcheck: + test: /bin/bash -c "/tmp/mysql-healthcheck.sh" + interval: 10s + timeout: 5s + retries: 5 + networks: + public_net: + ipv4_address: 192.168.71.131 + oai-amf: + container_name: "l2sim-oai-amf" + image: oai-amf:latest + environment: + - TZ=Europe/paris + - INSTANCE=0 + - PID_DIRECTORY=/var/run + - MCC=208 + - MNC=99 + - REGION_ID=128 + - AMF_SET_ID=1 + - SERVED_GUAMI_MCC_0=208 + - SERVED_GUAMI_MNC_0=99 + - SERVED_GUAMI_REGION_ID_0=128 + - SERVED_GUAMI_AMF_SET_ID_0=1 + - SERVED_GUAMI_MCC_1=460 + - SERVED_GUAMI_MNC_1=11 + - SERVED_GUAMI_REGION_ID_1=10 + - SERVED_GUAMI_AMF_SET_ID_1=1 + - PLMN_SUPPORT_MCC=208 + - PLMN_SUPPORT_MNC=99 + - PLMN_SUPPORT_TAC=0x0001 + - SST_0=1 + - SD_0=1 + - SST_1=1 + - SD_1=12 + - AMF_INTERFACE_NAME_FOR_NGAP=eth0 + - AMF_INTERFACE_NAME_FOR_N11=eth0 + - SMF_INSTANCE_ID_0=1 + - SMF_FQDN_0=oai-smf + - SMF_IPV4_ADDR_0=0.0.0.0 + - SMF_HTTP_VERSION_0=v1 + - SELECTED_0=true + - SMF_INSTANCE_ID_1=2 + - SMF_FQDN_1=oai-smf + - SMF_IPV4_ADDR_1=0.0.0.0 + - SMF_HTTP_VERSION_1=v1 + - SELECTED_1=false + - MYSQL_SERVER=192.168.71.131 + - MYSQL_USER=root + - MYSQL_PASS=linux + - MYSQL_DB=oai_db + - OPERATOR_KEY=c42449363bbad02b66d16bc975d77cc1 + - NRF_IPV4_ADDRESS=192.168.71.130 + - NRF_PORT=80 + - NF_REGISTRATION=yes + - SMF_SELECTION=yes + - USE_FQDN_DNS=yes + - NRF_API_VERSION=v1 + - NRF_FQDN=oai-nrf + - EXTERNAL_AUSF=no + - AUSF_IPV4_ADDRESS=0.0.0.0 + - AUSF_PORT=80 + - AUSF_API_VERSION=v1 + - AUSF_FQDN=localhost + depends_on: + - oai-nrf + - mysql + volumes: + - ../5g_rfsimulator/amf-healthcheck.sh:/openair-amf/bin/amf-healthcheck.sh + healthcheck: + test: /bin/bash -c "/openair-amf/bin/amf-healthcheck.sh" + interval: 10s + timeout: 15s + retries: 5 + networks: + public_net: + ipv4_address: 192.168.71.132 + oai-smf: + container_name: "l2sim-oai-smf" + image: oai-smf:latest + environment: + - TZ=Europe/Paris + - INSTANCE=0 + - PID_DIRECTORY=/var/run + - SMF_INTERFACE_NAME_FOR_N4=eth0 + - SMF_INTERFACE_NAME_FOR_SBI=eth0 + - SMF_INTERFACE_PORT_FOR_SBI=80 + - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 + - SMF_API_VERSION=v1 + - DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129 + - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 + - AMF_IPV4_ADDRESS=0.0.0.0 + - AMF_PORT=80 + - AMF_API_VERSION=v1 + - AMF_FQDN=oai-amf + - UDM_IPV4_ADDRESS=127.0.0.1 + - UDM_PORT=80 + - UDM_API_VERSION=v1 + - UDM_FQDN=localhost + - UPF_IPV4_ADDRESS=192.168.71.134 + - UPF_FQDN_0=oai-spgwu + - NRF_IPV4_ADDRESS=192.168.71.130 + - NRF_PORT=80 + - NRF_API_VERSION=v1 + - NRF_FQDN=oai-nrf + - REGISTER_NRF=yes + - DISCOVER_UPF=yes + - USE_FQDN_DNS=yes + - DNN_NI0=oai + - DNN_NI2=oai.ipv4 + depends_on: + - oai-nrf + - oai-amf + volumes: + - ../5g_rfsimulator/smf-healthcheck.sh:/openair-smf/bin/smf-healthcheck.sh + healthcheck: + test: /bin/bash -c "/openair-smf/bin/smf-healthcheck.sh" + interval: 10s + timeout: 5s + retries: 5 + networks: + public_net: + ipv4_address: 192.168.71.133 + oai-spgwu: + container_name: "l2sim-oai-spgwu" + image: oai-spgwu-tiny:latest + environment: + - TZ=Europe/Paris + - PID_DIRECTORY=/var/run + - SGW_INTERFACE_NAME_FOR_S1U_S12_S4_UP=eth0 + - SGW_INTERFACE_NAME_FOR_SX=eth0 + - PGW_INTERFACE_NAME_FOR_SGI=eth0 + - NETWORK_UE_NAT_OPTION=yes + - NETWORK_UE_IP=12.1.1.0/24 + - SPGWC0_IP_ADDRESS=192.168.71.133 + - BYPASS_UL_PFCP_RULES=no + - MCC=208 + - MNC=99 + - MNC03=099 + - TAC=1 + - GTP_EXTENSION_HEADER_PRESENT=yes + - GW_ID=1 + - REALM=openairinterface.org + - ENABLE_5G_FEATURES=yes + - REGISTER_NRF=yes + - USE_FQDN_NRF=yes + - UPF_FQDN_5G=oai-spgwu + - NRF_IPV4_ADDRESS=192.168.71.130 + - NRF_PORT=80 + - NRF_API_VERSION=v1 + - NRF_FQDN=oai-nrf + - NSSAI_SST_0=1 + - NSSAI_SD_0=1 + - DNN_0=oai + depends_on: + - oai-nrf + - oai-smf + cap_add: + - NET_ADMIN + - SYS_ADMIN + cap_drop: + - ALL + privileged: true + volumes: + - ../5g_rfsimulator/spgwu-healthcheck.sh:/openair-spgwu-tiny/bin/spgwu-healthcheck.sh + healthcheck: + test: /bin/bash -c "/openair-spgwu-tiny/bin/spgwu-healthcheck.sh" + interval: 10s + timeout: 5s + retries: 5 + networks: + public_net: + ipv4_address: 192.168.71.134 + traffic_net: + ipv4_address: 192.168.72.134 + oai-ext-dn: + image: ubuntu:bionic + privileged: true + container_name: "l2sim-oai-ext-dn" + entrypoint: /bin/bash -c \ + "apt update; apt install -y procps iptables iproute2 iperf iputils-ping;"\ + "ip route add 12.1.1.0/24 via 192.168.72.134 dev eth0; sleep infinity" + depends_on: + - oai-spgwu + networks: + traffic_net: + ipv4_address: 192.168.72.135 + healthcheck: + test: /bin/bash -c "ping -c 2 192.168.72.134" + interval: 10s + timeout: 5s + retries: 5 + oai-gnb: + image: oai-gnb:develop + privileged: true + container_name: "l2sim-oai-gnb" + network_mode: "host" + environment: + TZ: Europe/Paris + USE_SA_NFAPI_VNF: 'yes' + GNB_NAME: gnb-l2sim-vnf + TAC: 1 + MCC: '208' + MNC: '99' + MNC_LENGTH: 2 + NSSAI_SST: 1 + NSSAI_SD0: 1 + NSSAI_SD1: 112233 + AMF_IP_ADDRESS: 192.168.71.132 + GNB_NGA_IF_NAME: eno1 + GNB_NGA_IP_ADDRESS: 192.168.18.193 + GNB_NGU_IF_NAME: eno1 + GNB_NGU_IP_ADDRESS: 192.168.18.193 + LOCAL_S_IF_NAME: 'lo:' + REMOTE_S_ADDRESS: 127.0.0.1 + LOCAL_S_ADDRESS: 127.0.0.2 + USE_ADDITIONAL_OPTIONS: --sa --nfapi 2 --emulate-l1 --log_config.global_log_options level,time,thread_id,nocolor + depends_on: + - oai-spgwu + - oai-amf + healthcheck: + test: /bin/bash -c "pgrep nr-softmodem" + interval: 10s + timeout: 5s + retries: 5 + + proxy: + image: oai-lte-multi-ue-proxy:latest + privileged: true + container_name: "l2sim-proxy" + network_mode: "host" + environment: + TZ: Europe/Paris + command: "/oai-lte-multi-ue-proxy/bin/proxy 1 --nr" + depends_on: + - oai-gnb + healthcheck: + test: /bin/bash -c "pgrep proxy" + interval: 10s + timeout: 5s + retries: 5 + + oai-nr-ue0: + image: oai-nr-ue:develop + privileged: true + container_name: "l2sim-oai-nr-ue0" + network_mode: "host" + environment: + TZ: Europe/Paris + USE_NFAPI: 'yes' + OPENAIR_DIR: /opt/oai-nr-ue + FULL_IMSI: '208990100001100' + FULL_KEY: 'fec86ba6eb707ed08905757b1bb44b8f' + OPC: 'C42449363BBAD02B66D16BC975D77CC1' + DNN: oai + NSSAI_SST: 1 + NSSAI_SD: 1 + NR_UE_NFAPI_IF_NAME: eno1 + GNB_IP_ADDRESS: 127.0.0.1 + NR_UE_IP_ADDRESS: 127.0.0.1 + USE_ADDITIONAL_OPTIONS: --nokrnmod 1 --nfapi 5 --node-number 2 --sa --emulate-l1 --log_config.global_log_options level,time,thread_id,nocolor + volumes: + - ../../../openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results:/opt/oai-nr-ue/openair1/SIMULATION/LTE_PHY/BLER_SIMULATIONS/AWGN/AWGN_results + depends_on: + - oai-gnb + - proxy + healthcheck: + test: /bin/bash -c "pgrep nr-uesoftmodem" + interval: 10s + timeout: 5s + retries: 5 + +networks: + public_net: + driver: bridge + name: l2sim-oai-public-net + ipam: + config: + - subnet: 192.168.71.128/26 + driver_opts: + com.docker.network.bridge.name: "l2sim-public" + traffic_net: + driver: bridge + name: l2sim-oai-traffic-net + ipam: + config: + - subnet: 192.168.72.128/26 + driver_opts: + com.docker.network.bridge.name: "l2sim-traffic" diff --git a/docker/Dockerfile.nrUE.rhel8.2 b/docker/Dockerfile.nrUE.rhel8.2 index d38e81bd71..a9d74dd84e 100644 --- a/docker/Dockerfile.nrUE.rhel8.2 +++ b/docker/Dockerfile.nrUE.rhel8.2 @@ -29,7 +29,8 @@ FROM ran-base:latest AS nr-ue-base FROM ran-build:latest AS nr-ue-build -RUN cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh +RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/nr_ue_parameters.yaml && \ + cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh #start from scratch for target executable FROM registry.access.redhat.com/ubi8/ubi:latest as oai-nr-ue @@ -62,7 +63,10 @@ COPY --from=nr-ue-build \ ./ WORKDIR /opt/oai-nr-ue/etc -COPY --from=nr-ue-build /oai-ran/ci-scripts/conf_files/nr-ue-sim.conf . +COPY --from=nr-ue-build \ + /oai-ran/ci-scripts/conf_files/nr-ue-sim.conf \ + /oai-ran/docker/etc/nr-ue.nfapi.conf \ + ./ COPY --from=nr-ue-build \ /oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \ @@ -118,5 +122,5 @@ WORKDIR /opt/oai-nr-ue/etc COPY --from=nr-ue-build /oai-ran/ci-scripts/conf_files/ue.* . WORKDIR /opt/oai-nr-ue -CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue-sim.conf"] +CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"] ENTRYPOINT ["/opt/oai-nr-ue/bin/entrypoint.sh"] diff --git a/docker/Dockerfile.nrUE.ubuntu18 b/docker/Dockerfile.nrUE.ubuntu18 index 0fa219296b..29303b312b 100644 --- a/docker/Dockerfile.nrUE.ubuntu18 +++ b/docker/Dockerfile.nrUE.ubuntu18 @@ -29,7 +29,8 @@ FROM ran-base:latest AS nr-ue-base FROM ran-build:latest AS nr-ue-build -RUN cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh +RUN python3 ./docker/scripts/generateTemplate.py ./docker/scripts/nr_ue_parameters.yaml && \ + cp /oai-ran/docker/scripts/nr_ue_entrypoint.sh /oai-ran/docker/scripts/entrypoint.sh #start from scratch for target executable FROM ubuntu:bionic as oai-nr-ue @@ -67,7 +68,10 @@ COPY --from=nr-ue-build \ ./ WORKDIR /opt/oai-nr-ue/etc -COPY --from=nr-ue-build /oai-ran/ci-scripts/conf_files/nr-ue-sim.conf . +COPY --from=nr-ue-build \ + /oai-ran/ci-scripts/conf_files/nr-ue-sim.conf \ + /oai-ran/docker/etc/nr-ue.nfapi.conf \ + ./ COPY --from=nr-ue-build \ /oai-ran/cmake_targets/ran_build/build/liboai_eth_transpro.so \ @@ -106,5 +110,5 @@ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai ldconfig WORKDIR /opt/oai-nr-ue -CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue-sim.conf"] +CMD ["/opt/oai-nr-ue/bin/nr-uesoftmodem.Rel15", "-O", "/opt/oai-nr-ue/etc/nr-ue.conf"] ENTRYPOINT ["/opt/oai-nr-ue/bin/entrypoint.sh"] diff --git a/docker/scripts/generateTemplate.py b/docker/scripts/generateTemplate.py index 297c202a03..850bb535a5 100644 --- a/docker/scripts/generateTemplate.py +++ b/docker/scripts/generateTemplate.py @@ -23,6 +23,7 @@ #----------------------------------------------------------- # Import #----------------------------------------------------------- +import glob import re import yaml import os @@ -33,7 +34,8 @@ def main(): #read yaml input parameters f = open(f'{sys.argv[1]}',) data = yaml.full_load(f) - dir = os.listdir(f'{data[0]["paths"]["source_dir"]}') + initial_path = f'{data[0]["paths"]["source_dir"]}' + dir = glob.glob(initial_path + '/**/*.conf', recursive=True) #identify configs, read and replace corresponding values for config in data[1]["configurations"]: @@ -42,7 +44,10 @@ def main(): print('================================================') print('filePrefix = ' + filePrefix) print('outputfilename = ' + outputfilename) + found = False for inputfile in dir: + if found: + continue if inputfile.find(filePrefix) >=0: prefix_outputfile = {"cu.band7.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}', "du.band7.tm1.25PRB": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}', @@ -58,10 +63,13 @@ def main(): "gnb.sa.band66.fr1.106PRB.usrpn300.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}', "gNB_SA_CU.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}', "gNB_SA_DU.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}', + "proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}', + "proxy_nr-ue.nfapi.conf": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}', "ue.nfapi": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}', "ue_sim_ci": f'{data[0]["paths"]["dest_dir"]}/{outputfilename}' } print('inputfile = ' + inputfile) + found = True if filePrefix in prefix_outputfile: outputfile1 = prefix_outputfile[filePrefix] @@ -69,7 +77,7 @@ def main(): if not os.path.exists(directory): os.makedirs(directory, exist_ok=True) - with open(f'{data[0]["paths"]["source_dir"]}{inputfile}', mode='r') as inputfile, \ + with open(f'{inputfile}', mode='r') as inputfile, \ open(outputfile1, mode='w') as outputfile: for line in inputfile: count = 0 diff --git a/docker/scripts/gnb_entrypoint.sh b/docker/scripts/gnb_entrypoint.sh index aec5c48050..dd6256609c 100755 --- a/docker/scripts/gnb_entrypoint.sh +++ b/docker/scripts/gnb_entrypoint.sh @@ -11,8 +11,9 @@ THREAD_PARALLEL_CONFIG=${THREAD_PARALLEL_CONFIG:-PARALLEL_SINGLE_THREAD} if [[ -v USE_NSA_TDD_MONO ]]; then cp $PREFIX/etc/gnb.nsa.tdd.conf $PREFIX/etc/gnb.conf; fi if [[ -v USE_SA_TDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.tdd.conf $PREFIX/etc/gnb.conf; fi if [[ -v USE_SA_FDD_MONO ]]; then cp $PREFIX/etc/gnb.sa.fdd.conf $PREFIX/etc/gnb.conf; fi -if [[ -v USE_SA_CU ]]; then ln -s $PREFIX/etc/gnb.sa.cu.conf $PREFIX/etc/gnb.conf; fi +if [[ -v USE_SA_CU ]]; then cp $PREFIX/etc/gnb.sa.cu.conf $PREFIX/etc/gnb.conf; fi if [[ -v USE_SA_TDD_CU ]]; then cp $PREFIX/etc/gnb.sa.du.tdd.conf $PREFIX/etc/gnb.conf; fi +if [[ -v USE_SA_NFAPI_VNF ]]; then cp $PREFIX/etc/gnb.sa.nfapi.vnf.conf $PREFIX/etc/gnb.conf; fi # Sometimes, the templates are not enough. We mount a conf file on $PREFIX/etc. It can be a template itself. if [[ -v USE_VOLUMED_CONF ]]; then cp $PREFIX/etc/mounted.conf $PREFIX/etc/gnb.conf; fi diff --git a/docker/scripts/gnb_parameters.yaml b/docker/scripts/gnb_parameters.yaml index 8547d48e67..d5942f2c9b 100644 --- a/docker/scripts/gnb_parameters.yaml +++ b/docker/scripts/gnb_parameters.yaml @@ -202,3 +202,39 @@ - key: remote_n_portd env: "@F1_CU_D_PORT@" + - filePrefix: proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf + outputfilename: "gnb.sa.nfapi.vnf.conf" + config: + - key: Active_gNBs + env: "@GNB_NAME@" + - key: gNB_name + env: "@GNB_NAME@" + - key: mcc + env: "@MCC@" + - key: mnc + env: "@MNC@" + - key: mnc_length + env: "@MNC_LENGTH@" + - key: tracking_area_code + env: "@TAC@" + - key: sst + env: "@NSSAI_SST@" + - key: ipv4 + env: "@AMF_IP_ADDRESS@" + - key: GNB_INTERFACE_NAME_FOR_NG_AMF + env: "@GNB_NGA_IF_NAME@" + - key: GNB_IPV4_ADDRESS_FOR_NG_AMF + env: "@GNB_NGA_IP_ADDRESS@" + - key: GNB_INTERFACE_NAME_FOR_NGU + env: "@GNB_NGU_IF_NAME@" + - key: GNB_IPV4_ADDRESS_FOR_NGU + env: "@GNB_NGU_IP_ADDRESS@" + - key: parallel_config + env: "@THREAD_PARALLEL_CONFIG@" + - key: local_s_if_name + env: "@LOCAL_S_IF_NAME@" + - key: remote_s_address + env: "@REMOTE_S_ADDRESS@" + - key: local_s_address + env: "@LOCAL_S_ADDRESS@" + diff --git a/docker/scripts/nr_ue_entrypoint.sh b/docker/scripts/nr_ue_entrypoint.sh index af2b8a8333..38b080a41b 100755 --- a/docker/scripts/nr_ue_entrypoint.sh +++ b/docker/scripts/nr_ue_entrypoint.sh @@ -5,12 +5,22 @@ set -euo pipefail PREFIX=/opt/oai-nr-ue # Based another env var, pick one template to use -#if [[ -v USE_NFAPI ]]; then cp $PREFIX/etc/ue.nfapi.conf $PREFIX/etc/ue.conf; fi +if [[ -v USE_NFAPI ]]; then cp $PREFIX/etc/nr-ue.nfapi.conf $PREFIX/etc/nr-ue.conf; fi +# Sometimes, the templates are not enough. We mount a conf file on $PREFIX/etc. It can be a template itself. +if [[ -v USE_VOLUMED_CONF ]]; then cp $PREFIX/etc/mounted.conf $PREFIX/etc/nr-ue.conf; fi +# if none, pick the default +if [ ! -f $PREFIX/etc/nr-ue.conf ]; then cp $PREFIX/etc/nr-ue-sim.conf $PREFIX/etc/nr-ue.conf; fi -# Only this template will be manipulated and the USIM one! -CONFIG_FILES=`ls $PREFIX/etc/ue.conf $PREFIX/etc/nr-ue-sim.conf || true` +# Only this template will be manipulated +CONFIG_FILES=`ls $PREFIX/etc/nr-ue.conf || true` for c in ${CONFIG_FILES}; do + # Sometimes templates have no pattern to be replaced. + if ! grep -oP '@[a-zA-Z0-9_]+@' ${c}; then + echo "Configuration is already set" + break + fi + # grep variable names (format: ${VAR}) from template to be rendered VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${c} | sort | uniq | xargs) diff --git a/docker/scripts/nr_ue_parameters.yaml b/docker/scripts/nr_ue_parameters.yaml new file mode 100644 index 0000000000..afdba880e1 --- /dev/null +++ b/docker/scripts/nr_ue_parameters.yaml @@ -0,0 +1,49 @@ +#/* +# * 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 +# */ + +--- +- paths: + source_dir: "ci-scripts/conf_files/" + dest_dir: docker/etc + +- configurations: + - filePrefix: proxy_nr-ue.nfapi.conf + outputfilename: "nr-ue.nfapi.conf" + config: + - key: imsi + env: "@FULL_IMSI@" + - key: key + env: "@FULL_KEY@" + - key: opc + env: "@OPC@" + - key: dnn + env: "@DNN@" + - key: nssai_sst + env: "@NSSAI_SST@" + - key: nssai_sd + env: "@NSSAI_SD@" + - key: remote_n_address + env: "@GNB_IP_ADDRESS@" + - key: local_n_address + env: "@NR_UE_IP_ADDRESS@" + - key: local_n_if_name + env: "@NR_UE_NFAPI_IF_NAME@" + From 1985393d518e1afbc8e32e77dc40b7f5e3b57b2e Mon Sep 17 00:00:00 2001 From: Mario Hudon Date: Wed, 30 Mar 2022 11:38:53 -0400 Subject: [PATCH 094/150] - Fixed NR UE Scope build - Added a double data buffer in the NR UE Scope to reduce the risk of race condition/data corruption between the Scope thread and the Rx thread --- openair1/PHY/NR_UE_TRANSPORT/dci_nr.c | 7 ++ openair1/PHY/TOOLS/nr_phy_scope.c | 81 +++++++++++++----------- openair1/PHY/TOOLS/phy_scope_interface.h | 2 + 3 files changed, 52 insertions(+), 38 deletions(-) diff --git a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c index 293588b978..3add2c7b99 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/dci_nr.c @@ -42,6 +42,7 @@ #include "PHY/CODING/coding_extern.h" #include "PHY/sse_intrin.h" #include "common/utils/nr/nr_common.h" +#include #include "assertions.h" #include "T.h" @@ -766,6 +767,9 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, s, log2_maxh, n_rb); // log2_maxh+I0_shift + + UEscopeCopy(ue, pdcchRxdataF_comp, rxdataF_comp, sizeof(struct complex16), frame_parms->nb_antennas_rx, rx_size); + if (frame_parms->nb_antennas_rx > 1) { LOG_D(PHY,"we enter nr_pdcch_detection_mrc(frame_parms->nb_antennas_rx=%d)\n", frame_parms->nb_antennas_rx); nr_pdcch_detection_mrc(frame_parms, rx_size, rxdataF_comp,s); @@ -779,6 +783,9 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, llr, s, n_rb); + + UEscopeCopy(ue, pdcchLlr, llr, sizeof(int16_t), 1, llr_size); + #if T_TRACER // T(T_UE_PHY_PDCCH_IQ, T_INT(frame_parms->N_RB_DL), T_INT(frame_parms->N_RB_DL), diff --git a/openair1/PHY/TOOLS/nr_phy_scope.c b/openair1/PHY/TOOLS/nr_phy_scope.c index fe0f785ef4..81ca5bf3dd 100644 --- a/openair1/PHY/TOOLS/nr_phy_scope.c +++ b/openair1/PHY/TOOLS/nr_phy_scope.c @@ -678,52 +678,42 @@ static void uePbchIQ (scopeGraphData_t **data, OAIgraph_t *graph, PHY_VARS_NR_U static void uePcchLLR (scopeGraphData_t **data, OAIgraph_t *graph, PHY_VARS_NR_UE *phy_vars_ue, int eNB_id, int UE_id) { // PDCCH LLRs - if (!phy_vars_ue->pdcch_vars[0][eNB_id]->llr) + if (!data[pdcchLlr]) return; //int num_re = 4*273*12; // 12*frame_parms->N_RB_DL*num_pdcch_symbols //int Qm = 2; - int coded_bits_per_codeword = 2*4*100*12; //num_re*Qm; + const int sz=data[pdcchLlr]->lineSz; float *llr, *bit; - oai_xygraph_getbuff(graph, &bit, &llr, coded_bits_per_codeword*RX_NB_TH_MAX, 0); - int base=0; + oai_xygraph_getbuff(graph, &bit, &llr, sz, 0); - for (int thr=0 ; thr < RX_NB_TH_MAX ; thr ++ ) { - int16_t *pdcch_llr = (int16_t *) phy_vars_ue->pdcch_vars[thr][eNB_id]->llr; + int16_t *pdcch_llr = (int16_t *)(data[pdcchLlr]+1); - for (int i=0; ipdcch_vars[0][eNB_id]->rxdataF_comp[0]) + if (!data[pdcchRxdataF_comp]) return; - int nb=4*273*12; // 12*frame_parms->N_RB_DL*num_pdcch_symbols + const int sz=data[pdcchRxdataF_comp]->lineSz; + //const int antennas=data[pdcchRxdataF_comp]->colSz; + // We take the first antenna only for now float *I, *Q; - oai_xygraph_getbuff(graph, &I, &Q, nb*RX_NB_TH_MAX, 0); - int base=0; + oai_xygraph_getbuff(graph, &I, &Q, sz, 0); - for (int thr=0 ; thr < RX_NB_TH_MAX ; thr ++ ) { - scopeSample_t *pdcch_comp = (scopeSample_t *) phy_vars_ue->pdcch_vars[thr][eNB_id]->rxdataF_comp[0]; + scopeSample_t *pdcch_comp = (scopeSample_t *) (data[pdcchRxdataF_comp]+1); - for (int i=0; i< nb; i++) { - I[base+i] = pdcch_comp[i].r; - Q[base+i] = pdcch_comp[i].i; - } - - base+=nb; + for (int i=0; iscopeData)->liveData=calloc(sizeof(scopeGraphData_t *), UEdataTypeNumberOfItems); while (!oai_exit) { fl_freeze_form(form_nrue->phy_scope); @@ -925,28 +914,43 @@ static void *nrUEscopeThread(void *arg) { } void UEcopyData(PHY_VARS_NR_UE *ue, enum UEdataType type, void *dataIn, int elementSz, int colSz, int lineSz) { + // Local static copy of the scope data bufs + // The active data buf is alterned to avoid interference between the Scope thread (display) and the Rx thread (data input) + // Index of "2" could be set to the number of Rx threads + 1 + static scopeGraphData_t *copyDataBufs[UEdataTypeNumberOfItems][2] = {0}; + static int copyDataBufsIdx[UEdataTypeNumberOfItems] = {0}; + scopeData_t *tmp=(scopeData_t *)ue->scopeData; if (tmp) { - scopeGraphData_t *live= ((scopeGraphData_t **)tmp->liveData)[type]; + // Begin of critical zone between UE Rx threads that might copy new data at the same time: might require a mutex + int newCopyDataIdx = (copyDataBufsIdx[type]==0)?1:0; + copyDataBufsIdx[type] = newCopyDataIdx; + // End of critical zone between UE Rx threads - if (live == NULL || live->dataSize < elementSz*colSz*lineSz) { - scopeGraphData_t *ptr=realloc(live, sizeof(scopeGraphData_t) + elementSz*colSz*lineSz); + // New data will be copied in a different buffer than the live one + scopeGraphData_t *copyData= copyDataBufs[type][newCopyDataIdx]; + + if (copyData == NULL || copyData->dataSize < elementSz*colSz*lineSz) { + scopeGraphData_t *ptr=realloc(copyData, sizeof(scopeGraphData_t) + elementSz*colSz*lineSz); if (!ptr) { LOG_E(PHY,"can't realloc\n"); return; } else { - live=ptr; + copyData=ptr; } } - live->dataSize=elementSz*colSz*lineSz; - live->elementSz=elementSz; - live->colSz=colSz; - live->lineSz=lineSz; - memcpy(live+1, dataIn, elementSz*colSz*lineSz); - ((scopeGraphData_t **)tmp->liveData)[type]=live; + copyData->dataSize=elementSz*colSz*lineSz; + copyData->elementSz=elementSz; + copyData->colSz=colSz; + copyData->lineSz=lineSz; + memcpy(copyData+1, dataIn, elementSz*colSz*lineSz); + copyDataBufs[type][newCopyDataIdx] = copyData; + + // The new data just copied in the local static buffer becomes live now + ((scopeGraphData_t **)tmp->liveData)[type]=copyData; } } @@ -954,6 +958,7 @@ void nrUEinitScope(PHY_VARS_NR_UE *ue) { AssertFatal(ue->scopeData=malloc(sizeof(scopeData_t)),""); scopeData_t *scope=(scopeData_t *) ue->scopeData; scope->copyData=UEcopyData; + AssertFatal(scope->liveData=calloc(sizeof(scopeGraphData_t *), UEdataTypeNumberOfItems),""); pthread_t forms_thread; threadCreate(&forms_thread, nrUEscopeThread, ue, "scope", -1, OAI_PRIORITY_RT_LOW); } diff --git a/openair1/PHY/TOOLS/phy_scope_interface.h b/openair1/PHY/TOOLS/phy_scope_interface.h index 9cd8e1dc40..6162e1eee5 100644 --- a/openair1/PHY/TOOLS/phy_scope_interface.h +++ b/openair1/PHY/TOOLS/phy_scope_interface.h @@ -45,6 +45,8 @@ enum UEdataType { pbchDlChEstimateTime, pbchLlr, pbchRxdataF_comp, + pdcchLlr, + pdcchRxdataF_comp, UEdataTypeNumberOfItems }; From c832d42eb46e94722156fdd7455a79bf2f34ca72 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 30 Mar 2022 16:15:31 +0200 Subject: [PATCH 095/150] doc(l2sim): adding a light tutorial for L2 sim + proxy using containers Signed-off-by: Raphael Defosseux --- ci-scripts/yaml_files/5g_l2sim_tdd/README.md | 355 +++++++++++++++++++ doc/L2NFAPI.md | 2 + 2 files changed, 357 insertions(+) create mode 100644 ci-scripts/yaml_files/5g_l2sim_tdd/README.md diff --git a/ci-scripts/yaml_files/5g_l2sim_tdd/README.md b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md new file mode 100644 index 0000000000..531f2406ef --- /dev/null +++ b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md @@ -0,0 +1,355 @@ + + + + + +
+ + + + + + OAI Full Stack 5G-NR L2 simulation with containers and a proxy +
+ +This page is only valid for an `Ubuntu18` host. + +This tutorial is only valid once this file is merged into the `develop` branch. + +# 1. Retrieving the images on Docker-Hub # + +Currently the images are hosted under the user account `rdefosseoai`. + +This may change in the future. + +Once again you may need to log on [docker-hub](https://hub.docker.com/) if your organization has reached pulling limit as `anonymous`. + +```bash +$ docker login +Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. +Username: +Password: +``` + +Now pull images. + +```bash +$ docker pull mysql:5.7 +$ docker pull rdefosseoai/oai-amf:latest +$ docker pull rdefosseoai/oai-nrf:latest +$ docker pull rdefosseoai/oai-smf:latest +$ docker pull rdefosseoai/oai-spgwu-tiny:latest + +$ docker pull rdefosseoai/oai-gnb:develop +$ docker pull rdefosseoai/oai-nr-ue:develop +$ docker pull rdefosseoai/proxy:latest +``` + +And **re-tag** them for tutorials' docker-compose file to work. + +```bash +$ docker image tag rdefosseoai/oai-amf:latest oai-amf:latest +$ docker image tag rdefosseoai/oai-nrf:latest oai-nrf:latest +$ docker image tag rdefosseoai/oai-smf:latest oai-smf:latest +$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest + +$ docker image tag rdefosseoai/oai-gnb:develop oai-gnb:develop +$ docker image tag rdefosseoai/oai-nr-ue:develop oai-nr-ue:develop +$ docker image tag rdefosseoai/proxy:latest oai-lte-multi-ue-proxy:latest +``` + +```bash +$ docker logout +``` + +Note that the proxy image is based on the source available at [https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy](https://github.com/EpiSci/oai-lte-5g-multi-ue-proxy). + +At time of writing, the `latest` tag corresponded to `56cfdc046a5f96d5e67d42a2fc2bf6ba2fe58b41` commit. + +# 2. Deploy containers # + +**CAUTION: this SHALL be done in multiple steps.** + +**Just `docker-compose up -d` WILL NOT WORK!** + +All the following commands **SHALL** be run from the `ci-scripts/yaml_files/5g_l2sim_tdd` folder. + +The `gNB`, `proxy` and `NR-UE` containers will be deployed in `host`-mode. It will use the host loopback interface to connect. + +```bash +sudo ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up +``` + +## 2.1. Deploy OAI 5G Core Network ## + +```bash +$ cd ci-scripts/yaml_files/5g_l2sim_tdd +$ docker-compose up -d mysql oai-nrf oai-amf oai-smf oai-spgwu oai-ext-dn +Creating network "l2sim-oai-public-net" with driver "bridge" +Creating network "l2sim-oai-traffic_net-net" with driver "bridge" +Creating l2sim-oai-nrf ... done +Creating l2sim-mysql ... done +Creating l2sim-oai-spgwu ... done +Creating l2sim-oai-amf ... done +Creating l2sim-oai-smf ... done +Creating l2sim-oai-ext-dn ... done +``` + +Wait for a bit. + +```bash +$ docker-compose ps -a + Name Command State Ports +------------------------------------------------------------------------------------------------- +l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp +l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp +l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy) +l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp +l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp +l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp +``` + +At this point, you can prepare a capture on the newly-created public docker bridges: + +```bash +$ ifconfig +... +l2sim-public: flags=4163 mtu 1500 + inet 192.168.71.129 netmask 255.255.255.192 broadcast 192.168.71.191 + inet6 fe80::42:c4ff:fe2b:3d38 prefixlen 64 scopeid 0x20 + ether 02:42:c4:2b:3d:38 txqueuelen 0 (Ethernet) + RX packets 4 bytes 112 (112.0 B) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 7 bytes 626 (626.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + +l2sim-traffic: flags=4163 mtu 1500 + inet 192.168.72.129 netmask 255.255.255.192 broadcast 192.168.72.191 + inet6 fe80::42:b5ff:fed3:e732 prefixlen 64 scopeid 0x20 + ether 02:42:b5:d3:e7:32 txqueuelen 0 (Ethernet) + RX packets 2652 bytes 142335 (142.3 KB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 3999 bytes 23367972 (23.3 MB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 +... + +$ sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not arp and not port 53 and not port 2152 and not port 2153)" -i l2sim-public -i l2sim-traffic -w /tmp/capture_5g_l2sim_tdd.pcap > /tmp/tshark.log 2>&1 & +``` + +## 2.2. Deploy OAI gNB in Standalone Mode as a VNF ## + +**CAUTION: To execute this 2nd step, the whole `CN5G` SHALL be in `healthy` state (especially the `mysql` container).** + +```bash +$ docker-compose up -d oai-gnb +l2sim-oai-nrf is up-to-date +l2sim-oai-spgwu is up-to-date +l2sim-oai-ext-dn is up-to-date +Creating l2sim-oai-gnb ... done +``` + +Wait for a bit. + +```bash +$ docker-compose ps -a + Name Command State Ports +------------------------------------------------------------------------------------------------- +l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp +l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp +l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy) +l2sim-oai-gnb /opt/oai-gnb/bin/entrypoin ... Up (healthy) +l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp +l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp +l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp +``` + +You can verify that the `gNB` is connected with the `AMF`: + +```bagh +$ docker logs rfsim5g-oai-amf +... +[AMF] [amf_app] [info ] |----------------------------------------------------gNBs' information-------------------------------------------| +[AMF] [amf_app] [info ] | Index | Status | Global ID | gNB Name | PLMN | +[AMF] [amf_app] [info ] | 1 | Connected | 0x0 | gnb-l2sim-vnf | 208, 99 | +[AMF] [amf_app] [info ] |----------------------------------------------------------------------------------------------------------------| +... +``` + +## 2.3. Deploy OAI NR-UE and proxy + +```bash +$ docker-compose up -d proxy oai-nr-ue0 +l2sim-mysql is up-to-date +l2sim-oai-nrf is up-to-date +l2sim-oai-amf is up-to-date +l2sim-oai-smf is up-to-date +l2sim-oai-spgwu is up-to-date +l2sim-oai-ext-dn is up-to-date +l2sim-oai-gnb is up-to-date +Creating l2sim-oai-nr-ue ... done +Creating l2sim-proxy ... done +``` + +Wait for a bit. + +```bash +$ docker-compose ps -a + Name Command State Ports +------------------------------------------------------------------------------------------------- +l2sim-mysql docker-entrypoint.sh mysqld Up (healthy) 3306/tcp, 33060/tcp +l2sim-oai-amf /bin/bash /openair-amf/bin ... Up (healthy) 38412/sctp, 80/tcp, 9090/tcp +l2sim-oai-ext-dn /bin/bash -c apt update; ... Up (healthy) +l2sim-oai-gnb /opt/oai-gnb/bin/entrypoin ... Up (healthy) +l2sim-oai-nr-ue0 /opt/oai-nr-ue/bin/entrypo ... Up (healthy) +l2sim-oai-nrf /bin/bash /openair-nrf/bin ... Up (healthy) 80/tcp, 9090/tcp +l2sim-oai-smf /bin/bash /openair-smf/bin ... Up (healthy) 80/tcp, 8805/udp, 9090/tcp +l2sim-oai-spgwu /openair-spgwu-tiny/bin/en ... Up (healthy) 2152/udp, 8805/udp +l2sim-proxy /oai-lte-multi-ue-proxy/bi ... Up (healthy) + +$ docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}} {{.MemUsage}}\t{{.MemPerc}}" l2sim-mysql l2sim-oai-amf l2sim-oai-ext-dn l2sim-oai-gnb l2sim-oai-nr-ue0 l2sim-oai-nrf l2sim-oai-smf l2sim-oai-spgwu l2sim-proxy +CONTAINER CPU % MEM USAGE / LIMIT MEM % +l2sim-mysql 0.03% 206.7MiB / 62.54GiB 0.32% +l2sim-oai-amf 4.05% 29.49MiB / 62.54GiB 0.05% +l2sim-oai-ext-dn 0.00% 31.27MiB / 62.54GiB 0.05% +l2sim-oai-gnb 1.29% 1.853GiB / 62.54GiB 2.96% +l2sim-oai-nr-ue0 1.43% 350.8MiB / 62.54GiB 0.55% +l2sim-oai-nrf 0.21% 9.105MiB / 62.54GiB 0.01% +l2sim-oai-smf 3.24% 30.23MiB / 62.54GiB 0.05% +l2sim-oai-spgwu 0.00% 11.78MiB / 62.54GiB 0.02% +l2sim-proxy 6.97% 290.4MiB / 62.54GiB 0.45% +``` + +**CAUTION: As you can see the CPU usage is not that important compared to a 5G RF simulator equivalent.** + +But the CPU speed matters; I am running on a fast server: + +```bash +$ lscpu +Architecture: x86_64 +CPU(s): 16 +... +Model name: Intel(R) Xeon(R) Silver 4215R CPU @ 3.20GHz +``` + +I tried on a slower server with more CPUs and it did not work: + +```bash +oaici@orion:~$ lscpu +Architecture: x86_64 +CPU(s): 48 +... +Model name: Intel(R) Xeon(R) CPU E5-2658 v3 @ 2.20GHz +``` + +We will work on this issue. + + +Making sure the OAI UE is connected: + +```bash +$ docker exec -it l2sim-oai-nr-ue /bin/bash +root@bb4d400a832d:/opt/oai-nr-ue# ifconfig +eth0: flags=4163 mtu 1500 + inet 192.168.71.137 netmask 255.255.255.192 broadcast 192.168.71.191 + ether 02:42:c0:a8:47:89 txqueuelen 0 (Ethernet) + RX packets 224259 bytes 5821372018 (5.8 GB) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 235916 bytes 7848786376 (7.8 GB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + +lo: flags=73 mtu 65536 + inet 127.0.0.1 netmask 255.0.0.0 + loop txqueuelen 1000 (Local Loopback) + RX packets 0 bytes 0 (0.0 B) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 0 bytes 0 (0.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 + +oaitun_ue1: flags=4305 mtu 1500 + inet 12.1.1.2 netmask 255.255.255.0 destination 12.1.1.2 + unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC) + RX packets 0 bytes 0 (0.0 B) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 0 bytes 0 (0.0 B) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 +``` + +# 3. Check traffic # + +## 3.1. Check your Internet connectivity ## + +You can also check with the `ext-dn` container (IP address is `192.168.72.135` in docker-compose) + +```bash +$ docker exec -it l2sim-oai-nr-ue /bin/bash +root@bb4d400a832d# ping -I oaitun_ue1 -c 20 192.168.72.135 +PING 192.168.72.135 (192.168.72.135) from 12.1.1.2 oaitun_ue1: 56(84) bytes of data. +64 bytes from 192.168.72.135: icmp_seq=1 ttl=63 time=65.1 ms +64 bytes from 192.168.72.135: icmp_seq=2 ttl=63 time=74.2 ms +... +64 bytes from 192.168.72.135: icmp_seq=19 ttl=63 time=25.0 ms +64 bytes from 192.168.72.135: icmp_seq=20 ttl=63 time=34.7 ms + +--- 192.168.72.135 ping statistics --- +20 packets transmitted, 20 received, 0% packet loss, time 19025ms +rtt min/avg/max/mdev = 16.413/120.639/209.673/57.159 ms +``` + +# 4. Un-deployment # + +```bash +$ docker-compose down +Stopping l2sim-oai-nr-ue2 ... done +Stopping l2sim-oai-nr-ue ... done +Stopping l2sim-oai-gnb ... done +Stopping l2sim-oai-ext-dn ... done +Stopping l2sim-oai-spgwu ... done +Stopping l2sim-oai-smf ... done +Stopping l2sim-oai-amf ... done +Stopping l2sim-oai-nrf ... done +Stopping l2sim-mysql ... done +Removing l2sim-oai-nr-ue2 ... done +Removing l2sim-oai-nr-ue ... done +Removing l2sim-oai-gnb ... done +Removing l2sim-oai-ext-dn ... done +Removing l2sim-oai-spgwu ... done +Removing l2sim-oai-smf ... done +Removing l2sim-oai-amf ... done +Removing l2sim-oai-nrf ... done +Removing l2sim-mysql ... done +Removing network l2sim-oai-public-net +Removing network l2sim-oai-traffic-net +``` + +# 5. Adapt the `docker-compose` to your environment # + +In the `SMF` section, provide your own DNS IP address: + +```yaml + DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129 +``` + +In the `gNB` section, provide your docker-host primary IP address and interface name: in our case `192.168.18.193` and `eno1`. + +```yaml + GNB_NGA_IF_NAME: eno1 + GNB_NGA_IP_ADDRESS: 192.168.18.193 + GNB_NGU_IF_NAME: eno1 + GNB_NGU_IP_ADDRESS: 192.168.18.193 +``` + +Same thing in the `nr-ue` section: + +```yaml + NR_UE_NFAPI_IF_NAME: eno1 +``` + +This tutorial is a first draft. This nFAPI feature and the proxy are still under development. + +At time of writing, we were able to run in `host-mode`, 1 `NR-UE` and just ping traffic. + +Later development will include: + + - deploying `gNB-VNF`, `proxy` and `UE` in isolated containers (with their own IP address) + - more UEs + - more traffic (`UDP` and `TCP`) diff --git a/doc/L2NFAPI.md b/doc/L2NFAPI.md index 5b8c0f546c..77f9e5cb78 100644 --- a/doc/L2NFAPI.md +++ b/doc/L2NFAPI.md @@ -46,6 +46,8 @@ This proxy allows to perform L2 nFAPI simulator for: * 5G-NSA * 5G-SA +Another tutorial for 5G SA mode with 1 User is available [here](../ci-scripts/yaml_files/5g_l2sim_tdd/README.md). + ---- [oai wiki home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home) From 2c64a0d7574b6d9e24e43baf8648f13855f6768a Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 31 Mar 2022 10:24:39 +0200 Subject: [PATCH 096/150] fix(ci): fix little typo Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-GitLab-Container | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/Jenkinsfile-GitLab-Container b/ci-scripts/Jenkinsfile-GitLab-Container index a76323513f..12d235914b 100644 --- a/ci-scripts/Jenkinsfile-GitLab-Container +++ b/ci-scripts/Jenkinsfile-GitLab-Container @@ -242,7 +242,7 @@ pipeline { when { expression {doMandatoryTests} } steps { script { - triggerSlaveJob ('RAN-L2-Sim-Test-5G', 'Test-L2-Sim-Container-4G') + triggerSlaveJob ('RAN-L2-Sim-Test-5G', 'Test-L2-Sim-Container-5G') } } post { From 8eb22e7262d51515f78f2732cf85eca91a6870b7 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 1 Apr 2022 11:44:07 +0200 Subject: [PATCH 097/150] Remove duplicate statements --- openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c index 226ba5b66d..7f4f57c359 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_scheduler.c @@ -2259,8 +2259,6 @@ void nr_ue_pucch_scheduler(module_id_t module_idP, frame_t frameP, int slotP, in .resource_indicator = -1, .initial_pucch_id = -1 }; - pucch.resource_indicator = -1; - pucch.initial_pucch_id = -1; uint16_t rnti = mac->crnti; //FIXME not sure this is valid for all pucch instances // SR From a826af5839cfd8e40b77702bb22019e3ee77b412 Mon Sep 17 00:00:00 2001 From: athanassopoulos Date: Thu, 13 Jan 2022 21:54:26 +0100 Subject: [PATCH 098/150] SDAP Initial Implementation --- cmake_targets/CMakeLists.txt | 3 +- common/utils/LOG/log.c | 1 + common/utils/LOG/log.h | 1 + common/utils/T/T_messages.txt | 21 + doc/FEATURE_SET.md | 16 + openair2/COMMON/platform_types.h | 9 + openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c | 4 +- openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h | 2 +- openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c | 96 ++-- openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h | 3 + openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c | 4 +- openair2/RRC/NR/rrc_gNB.c | 8 +- openair2/SDAP/nr_sdap/nr_sdap.c | 73 +++ openair2/SDAP/nr_sdap/nr_sdap.h | 59 +++ openair2/SDAP/nr_sdap/nr_sdap_entity.c | 474 +++++++++++++++++++ openair2/SDAP/nr_sdap/nr_sdap_entity.h | 167 +++++++ openair2/SDAP/nr_sdap/nr_sdap_gnb.c | 87 ---- openair2/SDAP/nr_sdap/nr_sdap_gnb.h | 61 --- openair2/SDAP/nr_sdap/sdap_gNB.c | 30 -- openair3/ocp-gtpu/gtp_itf.cpp | 61 ++- 20 files changed, 937 insertions(+), 243 deletions(-) create mode 100644 openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h create mode 100644 openair2/SDAP/nr_sdap/nr_sdap.c create mode 100644 openair2/SDAP/nr_sdap/nr_sdap.h create mode 100644 openair2/SDAP/nr_sdap/nr_sdap_entity.c create mode 100644 openair2/SDAP/nr_sdap/nr_sdap_entity.h delete mode 100644 openair2/SDAP/nr_sdap/nr_sdap_gnb.c delete mode 100644 openair2/SDAP/nr_sdap/nr_sdap_gnb.h delete mode 100644 openair2/SDAP/nr_sdap/sdap_gNB.c diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 46e33e8803..06ba14965c 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -1779,7 +1779,8 @@ set(NR_PDCP_SRC ) set(NR_SDAP_SRC - ${OPENAIR2_DIR}/SDAP/nr_sdap/nr_sdap_gnb.c + ${OPENAIR2_DIR}/SDAP/nr_sdap/nr_sdap.c + ${OPENAIR2_DIR}/SDAP/nr_sdap/nr_sdap_entity.c ) set(L2_SRC diff --git a/common/utils/LOG/log.c b/common/utils/LOG/log.c index 5b047c082d..8be3568034 100644 --- a/common/utils/LOG/log.c +++ b/common/utils/LOG/log.c @@ -478,6 +478,7 @@ int logInit (void) register_log_component("NAS","log",NAS); register_log_component("UDP","",UDP_); register_log_component("GTPU","",GTPU); + register_log_component("SDAP","",SDAP); register_log_component("S1AP","",S1AP); register_log_component("F1AP","",F1AP); register_log_component("M2AP","",M2AP); diff --git a/common/utils/LOG/log.h b/common/utils/LOG/log.h index 1fbf42f62d..89b9c5e94d 100644 --- a/common/utils/LOG/log.h +++ b/common/utils/LOG/log.h @@ -215,6 +215,7 @@ typedef enum { OCM, UDP_, GTPU, + SDAP, SPGW, S1AP, F1AP, diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt index a8b919e525..b3c06d6be8 100644 --- a/common/utils/T/T_messages.txt +++ b/common/utils/T/T_messages.txt @@ -944,6 +944,27 @@ ID = LEGACY_GTPU_TRACE GROUP = ALL:LEGACY_GTPU:LEGACY_GROUP_TRACE:LEGACY FORMAT = string,log +ID = LEGACY_SDAP_INFO + DESC = SDAP legacy logs - info level + GROUP = ALL:LEGACY_SDAP:LEGACY_GROUP_INFO:LEGACY + FORMAT = string,log +ID = LEGACY_SDAP_ERROR + DESC = SDAP legacy logs - error level + GROUP = ALL:LEGACY_SDAP:LEGACY_GROUP_ERROR:LEGACY + FORMAT = string,log +ID = LEGACY_SDAP_WARNING + DESC = SDAP legacy logs - warning level + GROUP = ALL:LEGACY_SDAP:LEGACY_GROUP_WARNING:LEGACY + FORMAT = string,log +ID = LEGACY_SDAP_DEBUG + DESC = SDAP legacy logs - debug level + GROUP = ALL:LEGACY_SDAP:LEGACY_GROUP_DEBUG:LEGACY + FORMAT = string,log +ID = LEGACY_SDAP_TRACE + DESC = SDAP legacy logs - trace level + GROUP = ALL:LEGACY_SDAP:LEGACY_GROUP_TRACE:LEGACY + FORMAT = string,log + ID = LEGACY_TMR_INFO DESC = TMR legacy logs - info level GROUP = ALL:LEGACY_TMR:LEGACY_GROUP_INFO:LEGACY diff --git a/doc/FEATURE_SET.md b/doc/FEATURE_SET.md index eaa691d6ef..a289c6d17e 100644 --- a/doc/FEATURE_SET.md +++ b/doc/FEATURE_SET.md @@ -351,6 +351,14 @@ The following features are valid for the gNB and the 5G-NR UE. - Interfaces with RRC, RLC - Interfaces with gtp-u (data Tx/Rx over N3 and F1-U interfaces) +**gNB SDAP** +- Send/Receive operations according to 37.324 Rel.15 + - Establishment/Handling of SDAP entities. + - Transfer of User Plane Data + - Mapping between a QoS flow and a DRB for both DL and UL + - Marking QoS flow ID in both DL and UL packets + - Reflective QoS flow to DRB mapping for UL SDAP data PDUs + **gNB RRC** - NR RRC (38.331) Rel 16 messages using new asn1c - LTE RRC (36.331) also updated to Rel 15 @@ -400,6 +408,7 @@ The following features are valid for the gNB and the 5G-NR UE. - New gtp-u implementation supporting both N3 and F1-U interfaces according to 29.281 Rel.15 - Interfaces with RRC, F1AP for tunnel creation - Interfaces with PDCP and RLC for data send/receive at the CU and DU respectively (F1-U interface) + - Interface with SDAP for data send/receive, capture of GTP-U Optional Header, GTP-U Extension Header and PDU Session Container. # OpenAirInterface 5G-NR UE Feature Set # @@ -502,6 +511,13 @@ The following features are valid for the gNB and the 5G-NR UE. - Radio bearer establishment/handling and association with PDCP entities - Interfaces with RRC, RLC +**UE SDAP** +* Tx/Rx operations operations according to 37.324 Rel.15 + - Establishment/Handling of SDAP entities. + - Transfer of User Plane Data + - Reflective Mapping + - RRC Signaling Mapping + **UE RRC** * Integration of RRC messages and procedures supporting UE 5G SA connection according to 38.331 Rel.16 - RRCSetupRequest/RRCSetup/RRCSetupComplete diff --git a/openair2/COMMON/platform_types.h b/openair2/COMMON/platform_types.h index c24291de64..b9a7375b9f 100644 --- a/openair2/COMMON/platform_types.h +++ b/openair2/COMMON/platform_types.h @@ -233,11 +233,20 @@ typedef uint8_t pdusessionid_t; //----------------------------------------------------------------------------- // may be ITTI not enabled, but type instance is useful also for OTG, typedef intptr_t instance_t; + +typedef struct sdap_protocol_ctxt_s { + boolean_t rqi; + uint8_t qfi; + boolean_t dc; + int pdusession_id; +} sdap_protocol_ctxt_t; + typedef struct protocol_ctxt_s { module_id_t module_id; /*!< \brief Virtualized module identifier */ eNB_flag_t enb_flag; /*!< \brief Flag to indicate eNB (1) or UE (0) */ instance_t instance; /*!< \brief ITTI or OTG module identifier */ rnti_t rnti; + sdap_protocol_ctxt_t sdap; frame_t frame; /*!< \brief LTE frame number.*/ sub_frame_t subframe; /*!< \brief LTE sub frame number.*/ eNB_index_t eNB_index; /*!< \brief valid for UE indicating the index of connected eNB(s) */ diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c index 62aa101a50..42b9f171ce 100644 --- a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c +++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c @@ -368,8 +368,8 @@ nr_pdcp_entity_t *new_nr_pdcp_entity( ret->set_security = nr_pdcp_entity_set_security; ret->set_time = nr_pdcp_entity_set_time; - ret->delete = nr_pdcp_entity_delete; - + ret->delete_entity = nr_pdcp_entity_delete; + ret->deliver_sdu = deliver_sdu; ret->deliver_sdu_data = deliver_sdu_data; diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h index fbcc2b96cd..49e9c4142b 100644 --- a/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h +++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h @@ -39,7 +39,7 @@ typedef struct nr_pdcp_entity_t { void (*recv_pdu)(struct nr_pdcp_entity_t *entity, char *buffer, int size); void (*recv_sdu)(struct nr_pdcp_entity_t *entity, char *buffer, int size, int sdu_id); - void (*delete)(struct nr_pdcp_entity_t *entity); + void (*delete_entity)(struct nr_pdcp_entity_t *entity); /* set_security: pass -1 to integrity_algorithm / ciphering_algorithm * to keep the current algorithm diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c index 7d1e2f4931..3c99916169 100644 --- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c +++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c @@ -36,7 +36,8 @@ #include "pdcp.h" #include "LAYER2/nr_rlc/nr_rlc_oai_api.h" #include -#include "openair2/SDAP/nr_sdap/nr_sdap_gnb.h" +#include "openair2/SDAP/nr_sdap/nr_sdap.h" +#include "nr_pdcp_oai_api.h" #define TODO do { \ printf("%s:%d:%s: todo\n", __FILE__, __LINE__, __FUNCTION__); \ @@ -438,9 +439,13 @@ static void *enb_tun_read_thread(void *_) ctxt.rnti = rnti; - pdcp_data_req(&ctxt, SRB_FLAG_NO, rb_id, RLC_MUI_UNDEFINED, - RLC_SDU_CONFIRM_NO, len, (unsigned char *)rx_buf, - PDCP_TRANSMISSION_MODE_DATA, NULL, NULL); + ctxt.sdap.qfi = 7; + ctxt.sdap.rqi = 0; + ctxt.sdap.pdusession_id = 10; + + sdap_data_req(&ctxt, SRB_FLAG_NO, rb_id, RLC_MUI_UNDEFINED, + RLC_SDU_CONFIRM_NO, len, (unsigned char *)rx_buf, + PDCP_TRANSMISSION_MODE_DATA, NULL, NULL); } return NULL; @@ -481,9 +486,13 @@ static void *ue_tun_read_thread(void *_) ctxt.rnti = rnti; - pdcp_data_req(&ctxt, SRB_FLAG_NO, rb_id, RLC_MUI_UNDEFINED, - RLC_SDU_CONFIRM_NO, len, (unsigned char *)rx_buf, - PDCP_TRANSMISSION_MODE_DATA, NULL, NULL); + ctxt.sdap.dc = SDAP_HDR_UL_DATA_PDU; + ctxt.sdap.qfi = 7; + ctxt.sdap.pdusession_id = 10; + + sdap_data_req(&ctxt, SRB_FLAG_NO, rb_id, RLC_MUI_UNDEFINED, + RLC_SDU_CONFIRM_NO, len, (unsigned char *)rx_buf, + PDCP_TRANSMISSION_MODE_DATA, NULL, NULL); } return NULL; @@ -607,28 +616,13 @@ uint64_t nr_pdcp_module_init(uint64_t _pdcp_optmask, int id) static void deliver_sdu_drb(void *_ue, nr_pdcp_entity_t *entity, char *buf, int size) { - extern int nas_sock_fd[]; - int len; nr_pdcp_ue_t *ue = _ue; - MessageDef *message_p; - uint8_t *gtpu_buffer_p; int rb_id; int i; if (IS_SOFTMODEM_NOS1 || UE_NAS_USE_TUN) { - LOG_D(PDCP, "IP packet received, to be sent to TUN interface"); - - if(entity->has_sdapDLheader){ - size -= SDAP_HDR_LENGTH; - len = write(nas_sock_fd[0], &buf[SDAP_HDR_LENGTH], size); - } else { - len = write(nas_sock_fd[0], buf, size); - } - - if (len != size) { - LOG_E(PDCP, "%s:%d:%s: fatal error %d: %s\n", __FILE__, __LINE__, __FUNCTION__, errno, strerror(errno)); - } - + LOG_D(PDCP, "IP packet received with size %d, to be sent to SDAP interface, UE rnti: %d\n", size, ue->rnti); + sdap_data_ind(entity, ue->rnti, buf, size); } else{ for (i = 0; i < 5; i++) { @@ -644,31 +638,9 @@ static void deliver_sdu_drb(void *_ue, nr_pdcp_entity_t *entity, rb_found: { - int offset=0; - if (entity->has_sdap == 1 && entity->has_sdapULheader == 1) - offset = 1; // this is the offset of the SDAP header in bytes - - message_p = itti_alloc_new_message_sized(TASK_PDCP_ENB, 0, - GTPV1U_GNB_TUNNEL_DATA_REQ, - sizeof(gtpv1u_gnb_tunnel_data_req_t) + size - + GTPU_HEADER_OVERHEAD_MAX - offset); - AssertFatal(message_p != NULL, "OUT OF MEMORY"); - - gtpv1u_gnb_tunnel_data_req_t *req=>PV1U_GNB_TUNNEL_DATA_REQ(message_p); - gtpu_buffer_p = (uint8_t*)(req+1); - memcpy(gtpu_buffer_p+GTPU_HEADER_OVERHEAD_MAX, buf+offset, size-offset); - req->buffer = gtpu_buffer_p; - req->length = size-offset; - req->offset = GTPU_HEADER_OVERHEAD_MAX; - req->rnti = ue->rnti; - req->pdusession_id = entity->pdusession_id; - if (offset==1) { - LOG_I(PDCP, "%s() (drb %d) SDAP header %2x\n",__func__, rb_id, buf[0]); - sdap_gnb_ul_header_handler(buf[0]); // Handler for the UL gNB SDAP Header - } - LOG_D(PDCP, "%s() (drb %d) sending message to gtp size %d\n", __func__, rb_id, size-offset); - itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p); - } + LOG_D(PDCP, "%s() (drb %d) sending message to SDAP size %d\n", __func__, rb_id, size); + sdap_data_ind(entity, ue->rnti, buf, size); + } } } @@ -967,6 +939,9 @@ static void add_drb_am(int is_gnb, int rnti, struct NR_DRB_ToAddMod *s, int has_sdap = 0; int has_sdapULheader=0; int has_sdapDLheader=0; + boolean_t is_sdap_DefaultDRB = false; + NR_QFI_t *mappedQFIs2Add = NULL; + uint8_t mappedQFIs2AddCount=0; if (s->cnAssociation->present == NR_DRB_ToAddMod__cnAssociation_PR_eps_BearerIdentity) pdusession_id = s->cnAssociation->choice.eps_BearerIdentity; else { @@ -978,6 +953,10 @@ static void add_drb_am(int is_gnb, int rnti, struct NR_DRB_ToAddMod *s, has_sdap = 1; has_sdapULheader = s->cnAssociation->choice.sdap_Config->sdap_HeaderUL == NR_SDAP_Config__sdap_HeaderUL_present ? 1 : 0; has_sdapDLheader = s->cnAssociation->choice.sdap_Config->sdap_HeaderDL == NR_SDAP_Config__sdap_HeaderDL_present ? 1 : 0; + is_sdap_DefaultDRB = s->cnAssociation->choice.sdap_Config->defaultDRB == true ? 1 : 0; + mappedQFIs2Add = (NR_QFI_t*)s->cnAssociation->choice.sdap_Config->mappedQoS_FlowsToAdd->list.array[0]; + mappedQFIs2AddCount = s->cnAssociation->choice.sdap_Config->mappedQoS_FlowsToAdd->list.count; + LOG_D(SDAP, "Captured mappedQoS_FlowsToAdd from RRC: %ld \n", *mappedQFIs2Add); } /* TODO(?): accept different UL and DL SN sizes? */ if (sn_size_ul != sn_size_dl) { @@ -1009,6 +988,14 @@ static void add_drb_am(int is_gnb, int rnti, struct NR_DRB_ToAddMod *s, nr_pdcp_ue_add_drb_pdcp_entity(ue, drb_id, pdcp_drb); LOG_D(PDCP, "%s:%d:%s: added drb %d to ue rnti %x\n", __FILE__, __LINE__, __FUNCTION__, drb_id, rnti); + + new_nr_sdap_entity(rnti, + pdusession_id, + is_sdap_DefaultDRB, + drb_id, + mappedQFIs2Add, + mappedQFIs2AddCount); + LOG_D(SDAP, "Added SDAP entity to ue rnti %x with pdusession_id %d\n", rnti, pdusession_id); } nr_pdcp_manager_unlock(nr_pdcp_ue_manager); } @@ -1140,7 +1127,7 @@ void nr_DRB_preconfiguration(uint16_t crnti) NR_DRB_ToAddMod_t *drb_ToAddMod = calloc(1,sizeof(*drb_ToAddMod)); drb_ToAddMod->cnAssociation = calloc(1,sizeof(*drb_ToAddMod->cnAssociation)); drb_ToAddMod->cnAssociation->present = NR_DRB_ToAddMod__cnAssociation_PR_eps_BearerIdentity; - drb_ToAddMod->cnAssociation->choice.eps_BearerIdentity= 5; + drb_ToAddMod->cnAssociation->choice.eps_BearerIdentity= 10; drb_ToAddMod->drb_Identity = 1; drb_ToAddMod->reestablishPDCP = NULL; drb_ToAddMod->recoverPDCP = NULL; @@ -1450,3 +1437,12 @@ void nr_pdcp_tick(int frame, int subframe) nr_pdcp_wakeup_timer_thread(nr_pdcp_current_time); } } + +nr_pdcp_entity_t *nr_pdcp_find_entity_sdap(int rnti, uint8_t sdap_drb_id){ + nr_pdcp_ue_t *ue; + ue = nr_pdcp_manager_get_ue(nr_pdcp_ue_manager, rnti); + if(ue->drb[sdap_drb_id-1]) + return ue->drb[sdap_drb_id-1]; + + return NULL; +} diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h new file mode 100644 index 0000000000..59e366ca46 --- /dev/null +++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h @@ -0,0 +1,3 @@ +#include "openair2/COMMON/platform_types.h" + +nr_pdcp_entity_t *nr_pdcp_find_entity_sdap(int rnti, uint8_t sdap_drb_id); diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c index 160c5ebb22..1f21593c63 100644 --- a/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c +++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.c @@ -127,11 +127,11 @@ void nr_pdcp_manager_remove_ue(nr_pdcp_ue_manager_t *_m, int rnti) for (j = 0; j < 2; j++) if (ue->srb[j] != NULL) - ue->srb[j]->delete(ue->srb[j]); + ue->srb[j]->delete_entity(ue->srb[j]); for (j = 0; j < 5; j++) if (ue->drb[j] != NULL) - ue->drb[j]->delete(ue->drb[j]); + ue->drb[j]->delete_entity(ue->drb[j]); free(ue); diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 86b767f83c..5ea118f64e 100755 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -818,7 +818,6 @@ rrc_gNB_generate_dedicatedRRCReconfiguration( uint8_t buffer[RRC_BUF_SIZE]; uint16_t size; int qos_flow_index = 0; - NR_QFI_t qfi = 0; int pdu_sessions_done = 0; int i; NR_CellGroupConfig_t *cellGroupConfig; @@ -870,14 +869,15 @@ rrc_gNB_generate_dedicatedRRCReconfiguration( memset(sdap_config, 0, sizeof(NR_SDAP_Config_t)); sdap_config->pdu_Session = ue_context_pP->ue_context.pduSession[i].param.pdusession_id; sdap_config->sdap_HeaderDL = NR_SDAP_Config__sdap_HeaderDL_present; - sdap_config->sdap_HeaderUL = NR_SDAP_Config__sdap_HeaderUL_absent; + sdap_config->sdap_HeaderUL = NR_SDAP_Config__sdap_HeaderUL_present; sdap_config->defaultDRB = TRUE; sdap_config->mappedQoS_FlowsToAdd = calloc(1, sizeof(struct NR_SDAP_Config__mappedQoS_FlowsToAdd)); memset(sdap_config->mappedQoS_FlowsToAdd, 0, sizeof(struct NR_SDAP_Config__mappedQoS_FlowsToAdd)); for (qos_flow_index = 0; qos_flow_index < ue_context_pP->ue_context.pduSession[i].param.nb_qos; qos_flow_index++) { - qfi = ue_context_pP->ue_context.pduSession[i].param.qos[qos_flow_index].qfi; - ASN_SEQUENCE_ADD(&sdap_config->mappedQoS_FlowsToAdd->list, &qfi); + NR_QFI_t *qfi = calloc(1, sizeof(NR_QFI_t)); + *qfi = ue_context_pP->ue_context.pduSession[i].param.qos[qos_flow_index].qfi; + ASN_SEQUENCE_ADD(&sdap_config->mappedQoS_FlowsToAdd->list, qfi); } sdap_config->mappedQoS_FlowsToRelease = NULL; DRB_config->cnAssociation->choice.sdap_Config = sdap_config; diff --git a/openair2/SDAP/nr_sdap/nr_sdap.c b/openair2/SDAP/nr_sdap/nr_sdap.c new file mode 100644 index 0000000000..674dd700b1 --- /dev/null +++ b/openair2/SDAP/nr_sdap/nr_sdap.c @@ -0,0 +1,73 @@ +/* + * 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 "nr_sdap.h" + +boolean_t sdap_data_req(protocol_ctxt_t *ctxt_p, + const srb_flag_t srb_flag, + const rb_id_t rb_id, + const mui_t mui, + const confirm_t confirm, + const sdu_size_t sdu_buffer_size, + unsigned char *const sdu_buffer, + const pdcp_transmission_mode_t pt_mode, + const uint32_t *sourceL2Id, + const uint32_t *destinationL2Id) { + nr_sdap_entity_t *sdap_entity; + sdap_entity = nr_sdap_get_entity(ctxt_p->rnti, ctxt_p->sdap.pdusession_id); + + if(sdap_entity == NULL) { + LOG_E(SDAP, "%s:%d:%s: Entity not found with ue rnti: %x and pdusession id: %d\n", __FILE__, __LINE__, __FUNCTION__, ctxt_p->rnti, ctxt_p->sdap.pdusession_id); + return 0; + } + + boolean_t ret = sdap_entity->tx_entity(sdap_entity, + ctxt_p, + srb_flag, + rb_id, + mui, + confirm, + sdu_buffer_size, + sdu_buffer, + pt_mode, + sourceL2Id, + destinationL2Id); + return ret; +} + +void sdap_data_ind(nr_pdcp_entity_t *pdcp_entity, + int rnti, + char *buf, + int size) { + nr_sdap_entity_t *sdap_entity; + sdap_entity = nr_sdap_get_entity(rnti, pdcp_entity->pdusession_id); + + if(sdap_entity == NULL) { + LOG_E(SDAP, "%s:%d:%s: Entity not found\n", __FILE__, __LINE__, __FUNCTION__); + return; + } + + sdap_entity->rx_entity(sdap_entity, + pdcp_entity, + rnti, + buf, + size); +} diff --git a/openair2/SDAP/nr_sdap/nr_sdap.h b/openair2/SDAP/nr_sdap/nr_sdap.h new file mode 100644 index 0000000000..e4e8004e2d --- /dev/null +++ b/openair2/SDAP/nr_sdap/nr_sdap.h @@ -0,0 +1,59 @@ +/* + * 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 + */ + +#ifndef _NR_SDAP_GNB_H_ +#define _NR_SDAP_GNB_H_ + +#include "openair2/COMMON/platform_types.h" +#include "common/utils/LOG/log.h" +#include "nr_sdap_entity.h" + +/* + * TS 37.324 4.4 Functions + * Transfer of user plane data + * Downlink - gNB + * Uplink - nrUE + */ +boolean_t sdap_data_req(protocol_ctxt_t *ctxt_p, + const srb_flag_t srb_flag, + const rb_id_t rb_id, + const mui_t mui, + const confirm_t confirm, + const sdu_size_t sdu_buffer_size, + unsigned char *const sdu_buffer, + const pdcp_transmission_mode_t pt_mode, + const uint32_t *sourceL2Id, + const uint32_t *destinationL2Id + ); + +/* + * TS 37.324 4.4 Functions + * Transfer of user plane data + * Uplink - gNB + * Downlink - nrUE + */ +void sdap_data_ind(nr_pdcp_entity_t *pdcp_entity, + int rnti, + char *buf, + int size + ); + +#endif diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.c b/openair2/SDAP/nr_sdap/nr_sdap_entity.c new file mode 100644 index 0000000000..028653372f --- /dev/null +++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.c @@ -0,0 +1,474 @@ +/* + * 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 "nr_sdap_entity.h" +#include "common/utils/LOG/log.h" +#include +#include +#include "openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h" + +#include +#include +#include + +typedef struct { + nr_sdap_entity_t *sdap_entity_llist; +} nr_sdap_entity_info; + +static nr_sdap_entity_info sdap_info; + +static boolean_t nr_sdap_tx_entity(nr_sdap_entity_t *entity, + protocol_ctxt_t *ctxt_p, + const srb_flag_t srb_flag, + const rb_id_t rb_id, + const mui_t mui, + const confirm_t confirm, + const sdu_size_t sdu_buffer_size, + unsigned char *const sdu_buffer, + const pdcp_transmission_mode_t pt_mode, + const uint32_t *sourceL2Id, + const uint32_t *destinationL2Id + ) { + /* The offset of the SDAP header, it might be 0 if the has_sdap is not true in the pdcp entity. */ + int offset=0; + boolean_t ret=false; + /*Hardcode DRB ID given from upper layer (ue/enb_tun_read_thread rb_id), it will change if we have SDAP*/ + rb_id_t sdap_drb_id = rb_id; + int pdcp_ent_has_sdap = 0; + + if(sdu_buffer == NULL) { + LOG_E(SDAP, "%s:%d:%s: NULL sdu_buffer \n", __FILE__, __LINE__, __FUNCTION__); + exit(1); + } + + uint8_t sdap_buf[SDAP_MAX_PDU]; + nr_pdcp_entity_t *pdcp_entity = entity->qfi2drb_map(entity, ctxt_p->sdap.qfi, rb_id); + + if(pdcp_entity){ + sdap_drb_id = pdcp_entity->rb_id; + pdcp_ent_has_sdap = pdcp_entity->has_sdap; + } + + if(!pdcp_ent_has_sdap){ + ret = pdcp_data_req(ctxt_p, + srb_flag, + sdap_drb_id, + mui, + confirm, + sdu_buffer_size, + sdu_buffer, + pt_mode, + sourceL2Id, + destinationL2Id); + + if(!ret) + LOG_E(SDAP, "%s:%d:%s: PDCP refused PDU\n", __FILE__, __LINE__, __FUNCTION__); + + return ret; + } + + if(sdu_buffer_size == 0 || sdu_buffer_size > 8999) { + LOG_E(SDAP, "%s:%d:%s: NULL or 0 or exceeded sdu_buffer_size (over max PDCP SDU)\n", __FILE__, __LINE__, __FUNCTION__); + return 0; + } + + if(ctxt_p->enb_flag) { // gNB + offset = SDAP_HDR_LENGTH; + /* + * TS 37.324 4.4 Functions + * marking QoS flow ID in DL packets. + * + * Construct the DL SDAP data PDU. + */ + nr_sdap_dl_hdr_t sdap_hdr; + sdap_hdr.QFI = ctxt_p->sdap.qfi; + sdap_hdr.RQI = ctxt_p->sdap.rqi; + sdap_hdr.RDI = 0; // SDAP Hardcoded Value + /* Add the SDAP DL Header to the buffer */ + memcpy(&sdap_buf[0], &sdap_hdr, SDAP_HDR_LENGTH); + memcpy(&sdap_buf[SDAP_HDR_LENGTH], sdu_buffer, sdu_buffer_size); + LOG_D(SDAP, "TX Entity QFI: %u \n", sdap_hdr.QFI); + LOG_D(SDAP, "TX Entity RQI: %u \n", sdap_hdr.RQI); + LOG_D(SDAP, "TX Entity RDI: %u \n", sdap_hdr.RDI); + } else { // nrUE + offset = SDAP_HDR_LENGTH; + /* + * TS 37.324 4.4 Functions + * marking QoS flow ID in UL packets. + * + * 5.2.1 Uplink + * construct the UL SDAP data PDU as specified in the subclause 6.2.2.3. + */ + nr_sdap_ul_hdr_t sdap_hdr; + sdap_hdr.QFI = ctxt_p->sdap.qfi; + sdap_hdr.R = 0; + sdap_hdr.DC = ctxt_p->sdap.dc; + /* Add the SDAP UL Header to the buffer */ + memcpy(&sdap_buf[0], &sdap_hdr, SDAP_HDR_LENGTH); + memcpy(&sdap_buf[SDAP_HDR_LENGTH], sdu_buffer, sdu_buffer_size); + LOG_D(SDAP, "TX Entity QFI: %u \n", sdap_hdr.QFI); + LOG_D(SDAP, "TX Entity R: %u \n", sdap_hdr.R); + LOG_D(SDAP, "TX Entity DC: %u \n", sdap_hdr.DC); + } + + /* + * TS 37.324 5.2 Data transfer + * 5.2.1 Uplink UE side + * submit the constructed UL SDAP data PDU to the lower layers + * + * Downlink gNB side + */ + ret = pdcp_data_req(ctxt_p, + srb_flag, + sdap_drb_id, + mui, + confirm, + sdu_buffer_size+offset, + sdap_buf, + pt_mode, + sourceL2Id, + destinationL2Id); + + if(!ret) + LOG_E(SDAP, "%s:%d:%s: PDCP refused PDU\n", __FILE__, __LINE__, __FUNCTION__); + + return ret; +} + +static void nr_sdap_rx_entity(nr_sdap_entity_t *entity, + nr_pdcp_entity_t *pdcp_entity, + int rnti, + char *buf, + int size) { + /* The offset of the SDAP header, it might be 0 if the has_sdap is not true in the pdcp entity. */ + int offset=0; + + if(pdcp_entity->is_gnb) { // gNB + if(pdcp_entity->has_sdap && pdcp_entity->has_sdapULheader ) { // Handling the SDAP Header + offset = SDAP_HDR_LENGTH; + nr_sdap_ul_hdr_t *sdap_hdr = (nr_sdap_ul_hdr_t *)buf; + LOG_D(SDAP, "RX Entity Received QFI : %u\n", sdap_hdr->QFI); + LOG_D(SDAP, "RX Entity Received Reserved bit : %u\n", sdap_hdr->R); + LOG_D(SDAP, "RX Entity Received DC bit : %u\n", sdap_hdr->DC); + + switch (sdap_hdr->DC) { + case SDAP_HDR_UL_DATA_PDU: + LOG_D(SDAP, "RX Entity Received SDAP Data PDU\n"); + break; + + case SDAP_HDR_UL_CTRL_PDU: + LOG_D(SDAP, "RX Entity Received SDAP Control PDU\n"); + break; + } + } + + // Pushing SDAP SDU to GTP-U Layer + MessageDef *message_p; + uint8_t *gtpu_buffer_p; + gtpu_buffer_p = itti_malloc(TASK_PDCP_ENB, TASK_GTPV1_U, size + GTPU_HEADER_OVERHEAD_MAX - offset); + AssertFatal(gtpu_buffer_p != NULL, "OUT OF MEMORY"); + memcpy(>pu_buffer_p[GTPU_HEADER_OVERHEAD_MAX], buf+offset, size-offset); + message_p = itti_alloc_new_message(TASK_PDCP_ENB, 0 , GTPV1U_GNB_TUNNEL_DATA_REQ); + AssertFatal(message_p != NULL, "OUT OF MEMORY"); + GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).buffer = gtpu_buffer_p; + GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).length = size-offset; + GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).offset = GTPU_HEADER_OVERHEAD_MAX; + GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).rnti = rnti; + GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).pdusession_id = pdcp_entity->pdusession_id; + LOG_D(SDAP, "%s() sending message to gtp size %d\n", __func__, size-offset); + itti_send_msg_to_task(TASK_VARIABLE, INSTANCE_DEFAULT, message_p); + } else { //nrUE + /* + * TS 37.324 5.2 Data transfer + * 5.2.2 Downlink + * if the DRB from which this SDAP data PDU is received is configured by RRC with the presence of SDAP header. + */ + if(pdcp_entity->has_sdap && pdcp_entity->has_sdapDLheader) { // Handling the SDAP Header + offset = SDAP_HDR_LENGTH; + /* + * TS 37.324 5.2 Data transfer + * 5.2.2 Downlink + * retrieve the SDAP SDU from the DL SDAP data PDU as specified in the subclause 6.2.2.2. + */ + nr_sdap_dl_hdr_t *sdap_hdr = (nr_sdap_dl_hdr_t *)buf; + LOG_D(SDAP, "RX Entity Received QFI : %u\n", sdap_hdr->QFI); + LOG_D(SDAP, "RX Entity Received RQI : %u\n", sdap_hdr->RQI); + LOG_D(SDAP, "RX Entity Received RDI : %u\n", sdap_hdr->RDI); + + /* + * TS 37.324 5.2 Data transfer + * 5.2.2 Downlink + * Perform reflective QoS flow to DRB mapping as specified in the subclause 5.3.2. + */ + if(sdap_hdr->RDI == SDAP_REFLECTIVE_MAPPING) { + /* + * TS 37.324 5.3 QoS flow to DRB Mapping + * 5.3.2 Reflective mapping + * If there is no stored QoS flow to DRB mapping rule for the QoS flow and a default DRB is configured. + */ + if(!entity->qfi2drb_table[sdap_hdr->QFI] && entity->default_drb->rb_id){ + nr_sdap_ul_hdr_t sdap_ctrl_pdu = entity->sdap_construct_ctrl_pdu(sdap_hdr->QFI); + nr_pdcp_entity_t *sdap_ctrl_pdu_drb = entity->sdap_map_ctrl_pdu(entity, pdcp_entity, SDAP_CTRL_PDU_MAP_DEF_DRB, sdap_hdr->QFI); + entity->sdap_submit_ctrl_pdu(rnti, sdap_ctrl_pdu_drb, sdap_ctrl_pdu); + } + + /* + * TS 37.324 5.3 QoS flow to DRB mapping + * 5.3.2 Reflective mapping + * if the stored QoS flow to DRB mapping rule for the QoS flow + * is different from the QoS flow to DRB mapping of the DL SDAP data PDU + * and + * the DRB according to the stored QoS flow to DRB mapping rule is configured by RRC + * with the presence of UL SDAP header + */ + if( (pdcp_entity->rb_id != entity->qfi2drb_table[sdap_hdr->QFI]->rb_id) && + pdcp_entity->has_sdapULheader ){ + nr_sdap_ul_hdr_t sdap_ctrl_pdu = entity->sdap_construct_ctrl_pdu(sdap_hdr->QFI); + nr_pdcp_entity_t *sdap_ctrl_pdu_drb = entity->sdap_map_ctrl_pdu(entity, pdcp_entity, SDAP_CTRL_PDU_MAP_RULE_DRB, sdap_hdr->QFI); + entity->sdap_submit_ctrl_pdu(rnti, sdap_ctrl_pdu_drb, sdap_ctrl_pdu); + } + + /* + * TS 37.324 5.3 QoS flow to DRB Mapping + * 5.3.2 Reflective mapping + * store the QoS flow to DRB mapping of the DL SDAP data PDU as the QoS flow to DRB mapping rule for the UL. + */ + entity->qfi2drb_table[sdap_hdr->QFI]->rb_id = pdcp_entity->rb_id; + } + + /* + * TS 37.324 5.2 Data transfer + * 5.2.2 Downlink + * perform RQI handling as specified in the subclause 5.4 + */ + if(sdap_hdr->RQI == SDAP_RQI_HANDLING) { + LOG_W(SDAP, "UE - TODD 5.4\n"); + } + } /* else - retrieve the SDAP SDU from the DL SDAP data PDU as specified in the subclause 6.2.2.1 */ + + /* + * TS 37.324 5.2 Data transfer + * 5.2.2 Downlink + * deliver the retrieved SDAP SDU to the upper layer. + */ + extern int nas_sock_fd[]; + int len = write(nas_sock_fd[0], &buf[offset], size-offset); + LOG_D(SDAP, "RX Entity len : %d\n", len); + LOG_D(SDAP, "RX Entity size : %d\n", size); + LOG_D(SDAP, "RX Entity offset : %d\n", offset); + + if (len != size-offset) + LOG_E(SDAP, "%s:%d:%s: fatal\n", __FILE__, __LINE__, __FUNCTION__); + } +} + +void nr_sdap_qfi2drb_map_update(nr_sdap_entity_t *entity, uint8_t qfi, uint8_t drb){ + if(qfi < SDAP_MAX_QFI && + qfi > SDAP_MAP_RULE_EMPTY && + drb > 0 && + drb <= AVLBL_DRB) + { + nr_pdcp_entity_t *pdcp_entity; + pdcp_entity = nr_pdcp_find_entity_sdap(entity->rnti, drb); + + if(!pdcp_entity){ + LOG_D(SDAP, "Map Update failed - PDCP Entity does not exist, should create it\n"); + LOG_D(SDAP, "Map Update failed - Mapping to default DRB\n"); + entity->qfi2drb_table[qfi] = entity->default_drb; + } + + entity->qfi2drb_table[qfi] = pdcp_entity; + LOG_D(SDAP, "Updated QFI to DRB Map: QFI %u -> DRB %d \n", qfi, entity->qfi2drb_table[qfi]->rb_id); + } +} + +void nr_sdap_qfi2drb_map_del(nr_sdap_entity_t *entity, uint8_t qfi){ + entity->qfi2drb_table[qfi] = SDAP_NO_MAPPING_RULE; + LOG_D(SDAP, "Deleted QFI to DRB Map for QFI %u \n", qfi); +} + +nr_pdcp_entity_t *nr_sdap_qfi2drb_map(nr_sdap_entity_t *entity, uint8_t qfi, long upper_layer_rb_id){ + nr_pdcp_entity_t *pdcp_entity; + + pdcp_entity = entity->qfi2drb_table[qfi]; + + if(pdcp_entity){ + return pdcp_entity; + } else if(entity->default_drb) { + LOG_D(SDAP, "Mapped QFI %u to Default DRB\n", qfi); + entity->qfi2drb_map_update(entity, qfi, entity->default_drb->rb_id); + return entity->default_drb; + } else { + /* Update map for Hardcode DRB ID given from upper layer (ue/enb_tun_read_thread rb_id)*/ + entity->qfi2drb_map_update(entity, qfi, upper_layer_rb_id); + return SDAP_MAP_RULE_EMPTY; + } + + return pdcp_entity; +} + +nr_sdap_ul_hdr_t nr_sdap_construct_ctrl_pdu(uint8_t qfi){ + nr_sdap_ul_hdr_t sdap_end_marker_hdr; + sdap_end_marker_hdr.QFI = qfi; + sdap_end_marker_hdr.R = 0; + sdap_end_marker_hdr.DC = SDAP_HDR_UL_CTRL_PDU; + LOG_D(SDAP, "Constructed Control PDU with QFI:%u R:%u DC:%u \n", sdap_end_marker_hdr.QFI, + sdap_end_marker_hdr.R, + sdap_end_marker_hdr.DC); + return sdap_end_marker_hdr; +} + +nr_pdcp_entity_t *nr_sdap_map_ctrl_pdu(nr_sdap_entity_t *entity, nr_pdcp_entity_t *pdcp_entity, int map_type, uint8_t dl_qfi){ + nr_pdcp_entity_t *drb_of_endmarker = NULL; + if(map_type == SDAP_CTRL_PDU_MAP_DEF_DRB){ + drb_of_endmarker = entity->default_drb; + LOG_D(SDAP, "Mapped Control PDU to default drb\n"); + } + if(map_type == SDAP_CTRL_PDU_MAP_RULE_DRB){ + drb_of_endmarker = entity->qfi2drb_map(entity, dl_qfi, pdcp_entity->rb_id); + LOG_D(SDAP, "Mapped Control PDU according to the mapping rule, qfi %u \n", dl_qfi); + } + return drb_of_endmarker; +} + +void nr_sdap_submit_ctrl_pdu(int rnti, nr_pdcp_entity_t *sdap_ctrl_pdu_drb, nr_sdap_ul_hdr_t ctrl_pdu){ + if(sdap_ctrl_pdu_drb){ + sdap_ctrl_pdu_drb->recv_sdu(sdap_ctrl_pdu_drb, (char*)&ctrl_pdu, SDAP_HDR_LENGTH, RLC_MUI_UNDEFINED); + LOG_D(SDAP, "Sent Control PDU to PDCP Layer.\n"); + } +} + +void nr_sdap_ue_qfi2drb_config(nr_sdap_entity_t *existing_sdap_entity, + nr_pdcp_entity_t *pdcp_entity, + uint16_t rnti, + NR_QFI_t *mapped_qfi_2_add, + uint8_t mappedQFIs2AddCount, + uint8_t drb_identity) +{ + uint8_t qfi = 0; + + for(int i = 0; i < mappedQFIs2AddCount; i++){ + qfi = mapped_qfi_2_add[i]; + if(existing_sdap_entity->default_drb && existing_sdap_entity->qfi2drb_table[qfi] == SDAP_NO_MAPPING_RULE){ + nr_sdap_ul_hdr_t sdap_ctrl_pdu = existing_sdap_entity->sdap_construct_ctrl_pdu(qfi); + nr_pdcp_entity_t *sdap_ctrl_pdu_drb = existing_sdap_entity->sdap_map_ctrl_pdu(existing_sdap_entity, pdcp_entity, SDAP_CTRL_PDU_MAP_DEF_DRB, qfi); + existing_sdap_entity->sdap_submit_ctrl_pdu(rnti, sdap_ctrl_pdu_drb, sdap_ctrl_pdu); + } + if(existing_sdap_entity->qfi2drb_table[qfi]->rb_id != drb_identity && pdcp_entity->has_sdapULheader){ + nr_sdap_ul_hdr_t sdap_ctrl_pdu = existing_sdap_entity->sdap_construct_ctrl_pdu(qfi); + nr_pdcp_entity_t *sdap_ctrl_pdu_drb = existing_sdap_entity->sdap_map_ctrl_pdu(existing_sdap_entity, pdcp_entity, SDAP_CTRL_PDU_MAP_RULE_DRB, qfi); + existing_sdap_entity->sdap_submit_ctrl_pdu(rnti, sdap_ctrl_pdu_drb, sdap_ctrl_pdu); + } + } +} + +nr_sdap_entity_t *new_nr_sdap_entity(uint16_t rnti, + int pdusession_id, + boolean_t is_defaultDRB, + uint8_t drb_identity, + NR_QFI_t *mapped_qfi_2_add, + uint8_t mappedQFIs2AddCount) +{ + if(nr_sdap_get_entity(rnti, pdusession_id)) { + LOG_E(SDAP, "SDAP Entity for UE already exists.\n"); + nr_sdap_entity_t *existing_sdap_entity = nr_sdap_get_entity(rnti, pdusession_id); + nr_pdcp_entity_t *pdcp_entity = existing_sdap_entity->default_drb; + nr_sdap_ue_qfi2drb_config(existing_sdap_entity, pdcp_entity, rnti, mapped_qfi_2_add, mappedQFIs2AddCount, drb_identity); + return existing_sdap_entity; + } + + nr_sdap_entity_t *sdap_entity; + sdap_entity = calloc(1, sizeof(nr_sdap_entity_t)); + + if(sdap_entity == NULL) { + LOG_E(SDAP, "SDAP Entity creation failed, out of memory\n"); + exit(1); + } + + sdap_entity->rnti = rnti; + sdap_entity->pdusession_id = pdusession_id; + + sdap_entity->tx_entity = nr_sdap_tx_entity; + sdap_entity->rx_entity = nr_sdap_rx_entity; + + sdap_entity->sdap_construct_ctrl_pdu = nr_sdap_construct_ctrl_pdu; + sdap_entity->sdap_map_ctrl_pdu = nr_sdap_map_ctrl_pdu; + sdap_entity->sdap_submit_ctrl_pdu = nr_sdap_submit_ctrl_pdu; + + sdap_entity->qfi2drb_map_update = nr_sdap_qfi2drb_map_update; + sdap_entity->qfi2drb_map_delete = nr_sdap_qfi2drb_map_del; + sdap_entity->qfi2drb_map = nr_sdap_qfi2drb_map; + + if(is_defaultDRB) { + nr_pdcp_entity_t *pdcp_entity = nr_pdcp_find_entity_sdap(sdap_entity->rnti, drb_identity); + sdap_entity->default_drb = pdcp_entity; + LOG_I(SDAP, "Default DRB for the created SDAP entity: %d \n", sdap_entity->default_drb->rb_id); + + if(mappedQFIs2AddCount) { + for (int i = 0; i < mappedQFIs2AddCount; i++) + { + LOG_D(SDAP, "Mapped QFI to Add : %ld \n", mapped_qfi_2_add[i]); + sdap_entity->qfi2drb_map_update(sdap_entity, mapped_qfi_2_add[i], sdap_entity->default_drb->rb_id); + } + } + } + + sdap_entity->next_entity = sdap_info.sdap_entity_llist; + sdap_info.sdap_entity_llist = sdap_entity; + return sdap_entity; +} + +nr_sdap_entity_t *nr_sdap_get_entity(uint16_t rnti, int pdusession_id) { + nr_sdap_entity_t *sdap_entity; + sdap_entity = sdap_info.sdap_entity_llist; + + if(sdap_entity == NULL) + return NULL; + + while(sdap_entity->rnti != rnti && sdap_entity->next_entity != NULL) { + sdap_entity = sdap_entity->next_entity; + } + + if (sdap_entity->rnti == rnti && sdap_entity->pdusession_id == pdusession_id) + return sdap_entity; + + return NULL; +} + +void delete_nr_sdap_entity(uint16_t rnti) { + nr_sdap_entity_t *entityPtr, *entityPrev = NULL; + entityPtr = sdap_info.sdap_entity_llist; + + if(entityPtr->rnti == rnti) { + sdap_info.sdap_entity_llist = sdap_info.sdap_entity_llist->next_entity; + free(entityPtr); + } else { + while(entityPtr->rnti != rnti && entityPtr->next_entity != NULL) { + entityPrev = entityPtr; + entityPtr = entityPtr->next_entity; + } + + if(entityPtr->rnti != rnti) { + entityPrev->next_entity = entityPtr->next_entity; + free(entityPtr); + } + } +} diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.h b/openair2/SDAP/nr_sdap/nr_sdap_entity.h new file mode 100644 index 0000000000..46c9ea3774 --- /dev/null +++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.h @@ -0,0 +1,167 @@ +/* + * 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 + */ + +#ifndef _NR_SDAP_ENTITY_H_ +#define _NR_SDAP_ENTITY_H_ + +#include +#include "openair2/COMMON/platform_types.h" +#include "openair2/LAYER2/nr_pdcp/nr_pdcp_entity.h" +#include "NR_RadioBearerConfig.h" + +#define SDAP_BITMASK_DC (0x80) +#define SDAP_BITMASK_R (0x40) +#define SDAP_BITMASK_QFI (0x3F) +#define SDAP_BITMASK_RQI (0x40) +#define SDAP_HDR_UL_DATA_PDU (1) +#define SDAP_HDR_UL_CTRL_PDU (0) +#define SDAP_HDR_LENGTH (1) +#define SDAP_MAX_QFI (64) +#define SDAP_MAP_RULE_EMPTY (0) +#define AVLBL_DRB (5) +#define SDAP_NO_MAPPING_RULE (0) +#define SDAP_REFLECTIVE_MAPPING (1) +#define SDAP_RQI_HANDLING (1) +#define SDAP_CTRL_PDU_MAP_DEF_DRB (0) +#define SDAP_CTRL_PDU_MAP_RULE_DRB (1) +#define SDAP_MAX_PDU (9000) + +/* + * The values of QoS Flow ID (QFI) and Reflective QoS Indication, + * are located in the PDU Session Container, which is conveyed by + * the GTP-U Extension Header. Inside the DL PDU SESSION INFORMATION frame. + * TS 38.415 Fig. 5.5.2.1-1 + */ +typedef struct nr_sdap_dl_hdr_s { + uint8_t QFI:6; + uint8_t RQI:1; + uint8_t RDI:1; +} __attribute__((packed)) nr_sdap_dl_hdr_t; + +typedef struct nr_sdap_ul_hdr_s { + uint8_t QFI:6; + uint8_t R:1; + uint8_t DC:1; +} __attribute__((packed)) nr_sdap_ul_hdr_t; + +typedef struct nr_sdap_entity_s { + uint16_t rnti; + nr_pdcp_entity_t *default_drb; + int pdusession_id; + nr_pdcp_entity_t *qfi2drb_table[SDAP_MAX_QFI]; + + void (*qfi2drb_map_update)(struct nr_sdap_entity_s *entity, uint8_t qfi, uint8_t drb); + void (*qfi2drb_map_delete)(struct nr_sdap_entity_s *entity, uint8_t qfi); + nr_pdcp_entity_t *(*qfi2drb_map)(struct nr_sdap_entity_s *entity, uint8_t qfi, long upper_layer_rb_id); + + nr_sdap_ul_hdr_t (*sdap_construct_ctrl_pdu)(uint8_t qfi); + nr_pdcp_entity_t *(*sdap_map_ctrl_pdu)(struct nr_sdap_entity_s *entity, nr_pdcp_entity_t *pdcp_entity, int map_type, uint8_t dl_qfi); + void (*sdap_submit_ctrl_pdu)(int rnti, nr_pdcp_entity_t *sdap_ctrl_pdu_drb, nr_sdap_ul_hdr_t ctrl_pdu); + + + boolean_t (*tx_entity)(struct nr_sdap_entity_s *entity, + protocol_ctxt_t *ctxt_p, + const srb_flag_t srb_flag, + const rb_id_t rb_id, + const mui_t mui, + const confirm_t confirm, + const sdu_size_t sdu_buffer_size, + unsigned char *const sdu_buffer, + const pdcp_transmission_mode_t pt_mode, + const uint32_t *sourceL2Id, + const uint32_t *destinationL2Id); + + void (*rx_entity)(struct nr_sdap_entity_s *entity, + nr_pdcp_entity_t *pdcp_entity, + int rnti, + char *buf, + int size); + + /* List of entities */ + struct nr_sdap_entity_s *next_entity; +} nr_sdap_entity_t; + +/* QFI to DRB Mapping Related Function */ +void nr_sdap_qfi2drb_map_update(nr_sdap_entity_t *entity, uint8_t qfi, uint8_t drb); + +/* QFI to DRB Mapping Related Function */ +void nr_sdap_qfi2drb_map_del(nr_sdap_entity_t *entity, uint8_t qfi); + +/* + * TS 37.324 + * 4.4 Functions + * Mapping between a QoS flow and a DRB for both DL and UL. + * + * 5.2.1 Uplink + * If there is no stored QoS flow to DRB mapping rule for the QoS flow as specified in the subclause 5.3, map the SDAP SDU to the default DRB + * else, map the SDAP SDU to the DRB according to the stored QoS flow to DRB mapping rule. + */ +nr_pdcp_entity_t *nr_sdap_qfi2drb_map(nr_sdap_entity_t *entity, uint8_t qfi, long upper_layer_rb_id); + +/* + * TS 37.324 5.3 QoS flow to DRB Mapping + * construct an end-marker control PDU, as specified in the subclause 6.2.3, for the QoS flow; + */ +nr_sdap_ul_hdr_t nr_sdap_construct_ctrl_pdu(uint8_t qfi); + +/* + * TS 37.324 5.3 QoS flow to DRB Mapping + * map the end-marker control PDU to the + * 1.) default DRB or + * 2.) DRB according to the stored QoS flow to DRB mapping rule + */ +nr_pdcp_entity_t *nr_sdap_map_ctrl_pdu(nr_sdap_entity_t *entity, nr_pdcp_entity_t *pdcp_entity, int map_type, uint8_t dl_qfi); + +/* + * TS 37.324 5.3 QoS flow to DRB Mapping + * Submit the end-marker control PDU to the lower layer. + */ +void nr_sdap_submit_ctrl_pdu(int rnti, nr_pdcp_entity_t *sdap_ctrl_pdu_drb, nr_sdap_ul_hdr_t ctrl_pdu); + +/* + * TS 37.324 5.3 QoS flow to DRB Mapping + * 5.3.1 Configuration Procedures + */ +void nr_sdap_ue_qfi2drb_config(nr_sdap_entity_t *existing_sdap_entity, + nr_pdcp_entity_t *pdcp_entity, + uint16_t rnti, + NR_QFI_t *mapped_qfi_2_add, + uint8_t mappedQFIs2AddCount, + uint8_t drb_identity); + +/* + * TS 37.324 4.4 5.1.1 SDAP entity establishment + * Establish an SDAP entity. + */ +nr_sdap_entity_t *new_nr_sdap_entity(uint16_t rnti, + int pdusession_id, + boolean_t is_defaultDRB, + uint8_t default_DRB, + NR_QFI_t *mapped_qfi_2_add, + uint8_t mappedQFIs2AddCount); + +/* Entity Handling Related Functions */ +nr_sdap_entity_t *nr_sdap_get_entity(uint16_t rnti, int pdusession_id); + +/* Entity Handling Related Functions */ +void delete_nr_sdap_entity(uint16_t rnti); + +#endif diff --git a/openair2/SDAP/nr_sdap/nr_sdap_gnb.c b/openair2/SDAP/nr_sdap/nr_sdap_gnb.c deleted file mode 100644 index 5f0a2640e9..0000000000 --- a/openair2/SDAP/nr_sdap/nr_sdap_gnb.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 "nr_sdap_gnb.h" -#include - -boolean_t sdap_gnb_data_req(protocol_ctxt_t *ctxt_p, - const srb_flag_t srb_flag, - const rb_id_t rb_id, - const mui_t mui, - const confirm_t confirm, - const sdu_size_t sdu_buffer_size, - unsigned char *const sdu_buffer, - const pdcp_transmission_mode_t pt_mode, - const uint32_t *sourceL2Id, - const uint32_t *destinationL2Id - ) { - if(sdu_buffer == NULL) { - LOG_E(PDCP, "%s:%d:%s: SDAP Layer gNB - NULL sdu_buffer \n", __FILE__, __LINE__, __FUNCTION__); - exit(1); - } - - if(sdu_buffer_size == 0) { - LOG_E(PDCP, "%s:%d:%s: SDAP Layer gNB - NULL or 0 sdu_buffer_size \n", __FILE__, __LINE__, __FUNCTION__); - exit(1); - } - - uint8_t *sdap_buf = (uint8_t *)malloc(sdu_buffer_size+SDAP_HDR_LENGTH); - nr_sdap_dl_hdr_t sdap_hdr; - sdap_hdr.RDI = 0; // SDAP_Hardcoded - - sdap_hdr.RQI = 0; // SDAP_Hardcoded - Should get this info from DL_PDU_SESSION_INFORMATION - sdap_hdr.QFI = 1; // SDAP_Hardcoded - Should get this info from DL_PDU_SESSION_INFORMATION - memcpy(&sdap_buf[0], &sdap_hdr, 1); - memcpy(&sdap_buf[1], sdu_buffer, sdu_buffer_size); - rb_id_t sdap_drb_id = rb_id; // SDAP_Hardcoded - Should get this info from QFI to DRB mapping table - boolean_t ret = pdcp_data_req(ctxt_p, - srb_flag, - sdap_drb_id, - mui, - confirm, - sdu_buffer_size+1, - sdap_buf, - pt_mode, - sourceL2Id, - destinationL2Id); - - if(!ret) { - LOG_E(PDCP, "%s:%d:%s: SDAP Layer gNB - PDCP DL refused PDU\n", __FILE__, __LINE__, __FUNCTION__); - free(sdap_buf); - return 0; - } - - free(sdap_buf); - return 1; -} - -void sdap_gnb_ul_header_handler(char sdap_gnb_ul_hdr) { - nr_sdap_ul_hdr_t *sdap_hdr_ul = (nr_sdap_ul_hdr_t *)&sdap_gnb_ul_hdr; - - switch (sdap_hdr_ul->DC) { - case SDAP_HDR_UL_DATA_PDU: - LOG_I(PDCP, "%s:%d:%s: SDAP Layer gNB - UL Received SDAP Data PDU\n", __FILE__, __LINE__, __FUNCTION__); - break; - - case SDAP_HDR_UL_CTRL_PDU: - LOG_I(PDCP, "%s:%d:%s: SDAP Layer gNB - Received SDAP Control PDU\n", __FILE__, __LINE__, __FUNCTION__); - break; - } -} \ No newline at end of file diff --git a/openair2/SDAP/nr_sdap/nr_sdap_gnb.h b/openair2/SDAP/nr_sdap/nr_sdap_gnb.h deleted file mode 100644 index 243aa89010..0000000000 --- a/openair2/SDAP/nr_sdap/nr_sdap_gnb.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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 - */ - -#ifndef _NR_SDAP_GNB_ -#define _NR_SDAP_GNB_ - -#include "openair2/COMMON/platform_types.h" -#include "common/utils/LOG/log.h" - -#define SDAP_BITMASK_DC (0x80) -#define SDAP_BITMASK_R (0x40) -#define SDAP_BITMASK_QFI (0x3F) -#define SDAP_HDR_UL_DATA_PDU (1) -#define SDAP_HDR_UL_CTRL_PDU (0) -#define SDAP_HDR_LENGTH (1) - -typedef struct nr_sdap_dl_hdr_s { - uint8_t QFI:6; - uint8_t RQI:1; - uint8_t RDI:1; -} __attribute__((packed)) nr_sdap_dl_hdr_t; - -typedef struct nr_sdap_ul_hdr_s { - uint8_t QFI:6; - uint8_t R:1; - uint8_t DC:1; -} __attribute__((packed)) nr_sdap_ul_hdr_t; - -boolean_t sdap_gnb_data_req(protocol_ctxt_t *ctxt_p, - const srb_flag_t srb_flag, - const rb_id_t rb_id, - const mui_t mui, - const confirm_t confirm, - const sdu_size_t sdu_buffer_size, - unsigned char *const sdu_buffer, - const pdcp_transmission_mode_t pt_mode, - const uint32_t *sourceL2Id, - const uint32_t *destinationL2Id - ); - -void sdap_gnb_ul_header_handler(char sdap_gnb_ul_hdr); - -#endif \ No newline at end of file diff --git a/openair2/SDAP/nr_sdap/sdap_gNB.c b/openair2/SDAP/nr_sdap/sdap_gNB.c deleted file mode 100644 index ad84e4c273..0000000000 --- a/openair2/SDAP/nr_sdap/sdap_gNB.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 - */ - -/*! \file sdap_gNB.c - * \brief sdap tasks for gNB - * \author Konstantinos Alexandris , Cedric Roux , Navid Nikaein - * \date 2018 - * \version 1.0 - */ -#define SDAP_GNB -#define SDAP_GNB_C - diff --git a/openair3/ocp-gtpu/gtp_itf.cpp b/openair3/ocp-gtpu/gtp_itf.cpp index cc41de3550..3c6c63c6a4 100644 --- a/openair3/ocp-gtpu/gtp_itf.cpp +++ b/openair3/ocp-gtpu/gtp_itf.cpp @@ -17,7 +17,7 @@ extern "C" { #include #include #include -#include "openair2/SDAP/nr_sdap/nr_sdap_gnb.h" +#include "openair2/SDAP/nr_sdap/nr_sdap.h" //#include #pragma pack(1) @@ -34,8 +34,35 @@ typedef struct Gtpv1uMsgHeader { teid_t teid; } __attribute__((packed)) Gtpv1uMsgHeaderT; +typedef struct Gtpv1uMsgHeaderOptFields { + uint8_t seqNum1Oct; + uint8_t seqNum2Oct; + uint8_t NPDUNum; + uint8_t NextExtHeaderType; +} __attribute__((packed)) Gtpv1uMsgHeaderOptFieldsT; + +typedef struct PDUSessionContainer { + uint8_t spare:4; + uint8_t PDU_type:4; + uint8_t QFI:6; + uint8_t RQI:1; + uint8_t PPP:1; +} __attribute__((packed)) PDUSessionContainerT; + +typedef struct Gtpv1uExtHeader { + uint8_t ExtHeaderLen; + PDUSessionContainerT pdusession_cntr; + //uint8_t NextExtHeaderType; +}__attribute__((packed)) Gtpv1uExtHeaderT; + #pragma pack() +// TS 29.281, fig 5.2.1-3 +#define PDU_SESSION_CONTAINER (0x85) +// TS 29.281, 5.2.1 +#define EXT_HDR_LNTH_OCTET_UNITS (4) +#define NO_MORE_EXT_HDRS (0) + // TS 29.060, table 7.1 defines the possible message types // here are all the possible messages (3GPP R16) #define GTP_ECHO_REQ (1) @@ -65,6 +92,7 @@ typedef struct { rnti_t rnti; ebi_t incoming_rb_id; gtpCallback callBack; + int pdusession_id; } rntiData_t; class gtpEndPoint { @@ -449,6 +477,8 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int incoming_bearer inst->te2ue_mapping[incoming_teid].callBack=callBack; + inst->te2ue_mapping[incoming_teid].pdusession_id = (uint8_t)outgoing_bearer_id; + gtpv1u_bearer_t *tmp=&inst->ue2te_mapping[rnti].bearers[outgoing_bearer_id]; int addrs_length_in_bytes = remoteAddr.length / 8; @@ -574,7 +604,7 @@ int gtpv1u_create_ngu_tunnel( const instance_t instance, create_tunnel_req->pdusession_id[i], create_tunnel_req->outgoing_teid[i], create_tunnel_req->dst_addr[i], dstport, - sdap_gnb_data_req); + sdap_data_req); create_tunnel_resp->status=0; create_tunnel_resp->rnti=create_tunnel_req->rnti; create_tunnel_resp->num_tunnels=create_tunnel_req->num_tunnels; @@ -815,10 +845,28 @@ static int Gtpv1uHandleGpdu(int h, return GTPNOK; } - int offset=8; + int offset=sizeof(Gtpv1uMsgHeaderT); - if( msgHdr->E || msgHdr->S ||msgHdr->PN) - offset+=8; + uint8_t qfi = 0; + boolean_t rqi = FALSE; + + if( msgHdr->E || msgHdr->S || msgHdr->PN){ + Gtpv1uMsgHeaderOptFieldsT *msgHdrOpt = (Gtpv1uMsgHeaderOptFieldsT *)(msgBuf+offset); + offset+=sizeof(Gtpv1uMsgHeaderOptFieldsT); + if( msgHdr->E && msgHdrOpt->NextExtHeaderType == PDU_SESSION_CONTAINER){ + Gtpv1uExtHeaderT *msgHdrExt = (Gtpv1uExtHeaderT *)(msgBuf+offset); + offset+=msgHdrExt->ExtHeaderLen*EXT_HDR_LNTH_OCTET_UNITS; + qfi = msgHdrExt->pdusession_cntr.QFI; + rqi = msgHdrExt->pdusession_cntr.RQI; + + /* + * Check if the next extension header type of GTP extension header is set to 0 + * We can not put it in the struct Gtpv1uExtHeaderT because the length is dynamic. + */ + if(*(msgBuf+offset-1) != NO_MORE_EXT_HDRS) + LOG_W(GTPU, "Warning - Next extension header is not zero, handle it \n"); + } + } // This context is not good for gtp // frame, ... has no meaning @@ -828,6 +876,9 @@ static int Gtpv1uHandleGpdu(int h, ctxt.enb_flag = 1; ctxt.instance = inst->addr.originInstance; ctxt.rnti = tunnel->second.rnti; + ctxt.sdap.qfi = qfi; + ctxt.sdap.rqi = rqi; + ctxt.sdap.pdusession_id = tunnel->second.pdusession_id; ctxt.frame = 0; ctxt.subframe = 0; ctxt.eNB_index = 0; From 30f14c7e55e08428c4bd749eeb904418505cd629 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Mon, 17 Jan 2022 11:42:52 +0100 Subject: [PATCH 099/150] Rename dummy eNB function to make GTP compile in 4G (no SDAP) --- openair2/F1AP/dummy_enb.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/openair2/F1AP/dummy_enb.c b/openair2/F1AP/dummy_enb.c index d54f9b8df7..5d1c22824d 100644 --- a/openair2/F1AP/dummy_enb.c +++ b/openair2/F1AP/dummy_enb.c @@ -32,16 +32,15 @@ void apply_macrlc_config(gNB_RRC_INST *rrc, abort(); } -boolean_t sdap_gnb_data_req(protocol_ctxt_t *ctxt_p, - const srb_flag_t srb_flag, - const rb_id_t rb_id, - const mui_t mui, - const confirm_t confirm, - const sdu_size_t sdu_buffer_size, - unsigned char *const sdu_buffer, - const pdcp_transmission_mode_t pt_mode, - const uint32_t *sourceL2Id, - const uint32_t *destinationL2Id - ) { +boolean_t sdap_gnb_data(protocol_ctxt_t *ctxt_p, + const srb_flag_t srb_flag, + const rb_id_t rb_id, + const mui_t mui, + const confirm_t confirm, + const sdu_size_t sdu_buffer_size, + unsigned char *const sdu_buffer, + const pdcp_transmission_mode_t pt_mode, + const uint32_t *sourceL2Id, + const uint32_t *destinationL2Id) { abort(); } From cf30f61e656da1de6b6b7bbde212da24b0f6797d Mon Sep 17 00:00:00 2001 From: athanassopoulos Date: Tue, 22 Feb 2022 14:01:41 +0100 Subject: [PATCH 100/150] Changes to SDAP code 1. Removed SDAP struct from protocol context. 2. Added configuration for the SDAP. 3. SDAP doesn't use pdcp_entities, the values come from function arguements. 4. Make nr_pdcp_ue_manager accessible from SDAP. 5. Avoid using the PDCP locking mechanism in SDAP. 6. Removed nr_pdcp_find_entity_sdap function. 7. Rename dummy eNB function to make GTP compile (no SDAP). 8. Fix: Regression issues with LTE 9. Fix: Regression issues with NR CU/DU --- openair2/COMMON/platform_types.h | 8 -- openair2/COMMON/rrc_messages_types.h | 1 + openair2/F1AP/dummy_enb.c | 7 +- openair2/GNB_APP/gnb_config.c | 4 +- openair2/GNB_APP/gnb_paramdef.h | 7 +- openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c | 56 ++++++---- openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h | 3 - openair2/RRC/NR/rrc_gNB.c | 9 +- openair2/SDAP/nr_sdap/nr_sdap.c | 25 +++-- openair2/SDAP/nr_sdap/nr_sdap.h | 11 +- openair2/SDAP/nr_sdap/nr_sdap_entity.c | 119 ++++++++++++---------- openair2/SDAP/nr_sdap/nr_sdap_entity.h | 43 +++++--- openair3/ocp-gtpu/gtp_itf.cpp | 51 +++++++--- openair3/ocp-gtpu/gtp_itf.h | 15 +++ 14 files changed, 225 insertions(+), 134 deletions(-) delete mode 100644 openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h diff --git a/openair2/COMMON/platform_types.h b/openair2/COMMON/platform_types.h index b9a7375b9f..67300da308 100644 --- a/openair2/COMMON/platform_types.h +++ b/openair2/COMMON/platform_types.h @@ -234,19 +234,11 @@ typedef uint8_t pdusessionid_t; // may be ITTI not enabled, but type instance is useful also for OTG, typedef intptr_t instance_t; -typedef struct sdap_protocol_ctxt_s { - boolean_t rqi; - uint8_t qfi; - boolean_t dc; - int pdusession_id; -} sdap_protocol_ctxt_t; - typedef struct protocol_ctxt_s { module_id_t module_id; /*!< \brief Virtualized module identifier */ eNB_flag_t enb_flag; /*!< \brief Flag to indicate eNB (1) or UE (0) */ instance_t instance; /*!< \brief ITTI or OTG module identifier */ rnti_t rnti; - sdap_protocol_ctxt_t sdap; frame_t frame; /*!< \brief LTE frame number.*/ sub_frame_t subframe; /*!< \brief LTE sub frame number.*/ eNB_index_t eNB_index; /*!< \brief valid for UE indicating the index of connected eNB(s) */ diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index 6b41970735..ac70dee092 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -427,6 +427,7 @@ typedef struct NRRrcConfigurationReq_s { bool force_256qam_off; int pusch_TargetSNRx10; int pucch_TargetSNRx10; + bool enable_sdap; } gNB_RrcConfigurationReq; typedef struct NRDuDlReq_s { diff --git a/openair2/F1AP/dummy_enb.c b/openair2/F1AP/dummy_enb.c index 5d1c22824d..9085fdb57c 100644 --- a/openair2/F1AP/dummy_enb.c +++ b/openair2/F1AP/dummy_enb.c @@ -32,7 +32,7 @@ void apply_macrlc_config(gNB_RRC_INST *rrc, abort(); } -boolean_t sdap_gnb_data(protocol_ctxt_t *ctxt_p, +boolean_t sdap_data_req(protocol_ctxt_t *ctxt_p, const srb_flag_t srb_flag, const rb_id_t rb_id, const mui_t mui, @@ -41,6 +41,9 @@ boolean_t sdap_gnb_data(protocol_ctxt_t *ctxt_p, unsigned char *const sdu_buffer, const pdcp_transmission_mode_t pt_mode, const uint32_t *sourceL2Id, - const uint32_t *destinationL2Id) { + const uint32_t *destinationL2Id, + const uint8_t qfi, + const boolean_t rqi, + const int pdusession_id) { abort(); } diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index e9fcee6622..c38a89b15a 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -1192,7 +1192,9 @@ void RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { LOG_I(RRC, "256 QAM: %s\n", NRRRC_CONFIGURATION_REQ (msg_p).force_256qam_off ? "force off" : "may be on"); NRRRC_CONFIGURATION_REQ (msg_p).scc = scc; NRRRC_CONFIGURATION_REQ (msg_p).scd = scd; - + NRRRC_CONFIGURATION_REQ (msg_p).enable_sdap = *GNBParamList.paramarray[i][GNB_ENABLE_SDAP_IDX].iptr; + LOG_I(GNB_APP, "SDAP layer is %s\n", NRRRC_CONFIGURATION_REQ (msg_p).enable_sdap ? "enabled" : "disabled"); + }// }//End for (k=0; k configuration, &NRRRC_CONFIGURATION_REQ(msg_p), sizeof(NRRRC_CONFIGURATION_REQ(msg_p))); diff --git a/openair2/GNB_APP/gnb_paramdef.h b/openair2/GNB_APP/gnb_paramdef.h index e1d3d93d0b..eb6b2bdccd 100644 --- a/openair2/GNB_APP/gnb_paramdef.h +++ b/openair2/GNB_APP/gnb_paramdef.h @@ -125,7 +125,8 @@ typedef enum { #define GNB_CONFIG_STRING_MINRXTXTIME "min_rxtxtime" #define GNB_CONFIG_STRING_ULPRBBLACKLIST "ul_prbblacklist" #define GNB_CONFIG_STRING_FORCE256QAMOFF "force_256qam_off" - +#define GNB_CONFIG_STRING_ENABLE_SDAP "enable_sdap" +#define GNB_CONFIG_HLP_STRING_ENABLE_SDAP "enable the SDAP layer\n" #define GNB_CONFIG_HLP_FORCE256QAMOFF "suppress activation of 256 QAM despite UE support" @@ -159,7 +160,8 @@ typedef enum { {GNB_CONFIG_STRING_NRCELLID, NULL, 0, u64ptr:NULL, defint64val:1, TYPE_UINT64, 0}, \ {GNB_CONFIG_STRING_MINRXTXTIME, NULL, 0, iptr:NULL, defintval:2, TYPE_INT, 0}, \ {GNB_CONFIG_STRING_ULPRBBLACKLIST, NULL, 0, strptr:NULL, defstrval:"", TYPE_STRING, 0}, \ -{GNB_CONFIG_STRING_FORCE256QAMOFF, GNB_CONFIG_HLP_FORCE256QAMOFF, PARAMFLAG_BOOL, iptr:NULL, defintval:0, TYPE_INT, 0} \ +{GNB_CONFIG_STRING_FORCE256QAMOFF, GNB_CONFIG_HLP_FORCE256QAMOFF, PARAMFLAG_BOOL, iptr:NULL, defintval:0, TYPE_INT, 0}, \ +{GNB_CONFIG_STRING_ENABLE_SDAP, GNB_CONFIG_HLP_STRING_ENABLE_SDAP, PARAMFLAG_BOOL, iptr:NULL, defintval:0, TYPE_INT, 0}, \ } #define GNB_GNB_ID_IDX 0 @@ -188,6 +190,7 @@ typedef enum { #define GNB_MINRXTXTIME_IDX 23 #define GNB_ULPRBBLACKLIST_IDX 24 #define GNB_FORCE256QAMOFF_IDX 25 +#define GNB_ENABLE_SDAP_IDX 26 #define TRACKING_AREA_CODE_OKRANGE {0x0001,0xFFFD} #define GNBPARAMS_CHECK { \ diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c index 3c99916169..74ca77a9c5 100644 --- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c +++ b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c @@ -37,7 +37,6 @@ #include "LAYER2/nr_rlc/nr_rlc_oai_api.h" #include #include "openair2/SDAP/nr_sdap/nr_sdap.h" -#include "nr_pdcp_oai_api.h" #define TODO do { \ printf("%s:%d:%s: todo\n", __FILE__, __LINE__, __FUNCTION__); \ @@ -439,13 +438,13 @@ static void *enb_tun_read_thread(void *_) ctxt.rnti = rnti; - ctxt.sdap.qfi = 7; - ctxt.sdap.rqi = 0; - ctxt.sdap.pdusession_id = 10; + uint8_t qfi = 7; + boolean_t rqi = 0; + int pdusession_id = 10; sdap_data_req(&ctxt, SRB_FLAG_NO, rb_id, RLC_MUI_UNDEFINED, - RLC_SDU_CONFIRM_NO, len, (unsigned char *)rx_buf, - PDCP_TRANSMISSION_MODE_DATA, NULL, NULL); + RLC_SDU_CONFIRM_NO, len, (unsigned char *)rx_buf, + PDCP_TRANSMISSION_MODE_DATA, NULL, NULL, qfi, rqi, pdusession_id); } return NULL; @@ -486,13 +485,13 @@ static void *ue_tun_read_thread(void *_) ctxt.rnti = rnti; - ctxt.sdap.dc = SDAP_HDR_UL_DATA_PDU; - ctxt.sdap.qfi = 7; - ctxt.sdap.pdusession_id = 10; + boolean_t dc = SDAP_HDR_UL_DATA_PDU; + uint8_t qfi = 7; + int pdusession_id = 10; sdap_data_req(&ctxt, SRB_FLAG_NO, rb_id, RLC_MUI_UNDEFINED, - RLC_SDU_CONFIRM_NO, len, (unsigned char *)rx_buf, - PDCP_TRANSMISSION_MODE_DATA, NULL, NULL); + RLC_SDU_CONFIRM_NO, len, (unsigned char *)rx_buf, + PDCP_TRANSMISSION_MODE_DATA, NULL, NULL, qfi, dc, pdusession_id); } return NULL; @@ -622,7 +621,14 @@ static void deliver_sdu_drb(void *_ue, nr_pdcp_entity_t *entity, if (IS_SOFTMODEM_NOS1 || UE_NAS_USE_TUN) { LOG_D(PDCP, "IP packet received with size %d, to be sent to SDAP interface, UE rnti: %d\n", size, ue->rnti); - sdap_data_ind(entity, ue->rnti, buf, size); + sdap_data_ind(entity->rb_id, + entity->is_gnb, + entity->has_sdap, + entity->has_sdapULheader, + entity->pdusession_id, + ue->rnti, + buf, + size); } else{ for (i = 0; i < 5; i++) { @@ -639,7 +645,14 @@ static void deliver_sdu_drb(void *_ue, nr_pdcp_entity_t *entity, rb_found: { LOG_D(PDCP, "%s() (drb %d) sending message to SDAP size %d\n", __func__, rb_id, size); - sdap_data_ind(entity, ue->rnti, buf, size); + sdap_data_ind(rb_id, + ue->drb[rb_id-1]->is_gnb, + ue->drb[rb_id-1]->has_sdap, + ue->drb[rb_id-1]->has_sdapULheader, + ue->drb[rb_id-1]->pdusession_id, + ue->rnti, + buf, + size); } } } @@ -950,9 +963,9 @@ static void add_drb_am(int is_gnb, int rnti, struct NR_DRB_ToAddMod *s, exit(-1); } pdusession_id = s->cnAssociation->choice.sdap_Config->pdu_Session; - has_sdap = 1; has_sdapULheader = s->cnAssociation->choice.sdap_Config->sdap_HeaderUL == NR_SDAP_Config__sdap_HeaderUL_present ? 1 : 0; has_sdapDLheader = s->cnAssociation->choice.sdap_Config->sdap_HeaderDL == NR_SDAP_Config__sdap_HeaderDL_present ? 1 : 0; + has_sdap = has_sdapULheader | has_sdapDLheader; is_sdap_DefaultDRB = s->cnAssociation->choice.sdap_Config->defaultDRB == true ? 1 : 0; mappedQFIs2Add = (NR_QFI_t*)s->cnAssociation->choice.sdap_Config->mappedQoS_FlowsToAdd->list.array[0]; mappedQFIs2AddCount = s->cnAssociation->choice.sdap_Config->mappedQoS_FlowsToAdd->list.count; @@ -989,7 +1002,8 @@ static void add_drb_am(int is_gnb, int rnti, struct NR_DRB_ToAddMod *s, LOG_D(PDCP, "%s:%d:%s: added drb %d to ue rnti %x\n", __FILE__, __LINE__, __FUNCTION__, drb_id, rnti); - new_nr_sdap_entity(rnti, + new_nr_sdap_entity(has_sdap, + rnti, pdusession_id, is_sdap_DefaultDRB, drb_id, @@ -1438,11 +1452,9 @@ void nr_pdcp_tick(int frame, int subframe) } } -nr_pdcp_entity_t *nr_pdcp_find_entity_sdap(int rnti, uint8_t sdap_drb_id){ - nr_pdcp_ue_t *ue; - ue = nr_pdcp_manager_get_ue(nr_pdcp_ue_manager, rnti); - if(ue->drb[sdap_drb_id-1]) - return ue->drb[sdap_drb_id-1]; - - return NULL; +/* + * For the SDAP API + */ +nr_pdcp_ue_manager_t *nr_pdcp_sdap_get_ue_manager(){ + return nr_pdcp_ue_manager; } diff --git a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h b/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h deleted file mode 100644 index 59e366ca46..0000000000 --- a/openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h +++ /dev/null @@ -1,3 +0,0 @@ -#include "openair2/COMMON/platform_types.h" - -nr_pdcp_entity_t *nr_pdcp_find_entity_sdap(int rnti, uint8_t sdap_drb_id); diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 5ea118f64e..69bff1c7da 100755 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -868,8 +868,13 @@ rrc_gNB_generate_dedicatedRRCReconfiguration( sdap_config = CALLOC(1, sizeof(NR_SDAP_Config_t)); memset(sdap_config, 0, sizeof(NR_SDAP_Config_t)); sdap_config->pdu_Session = ue_context_pP->ue_context.pduSession[i].param.pdusession_id; - sdap_config->sdap_HeaderDL = NR_SDAP_Config__sdap_HeaderDL_present; - sdap_config->sdap_HeaderUL = NR_SDAP_Config__sdap_HeaderUL_present; + if (rrc->configuration.enable_sdap) { + sdap_config->sdap_HeaderDL = NR_SDAP_Config__sdap_HeaderDL_present; + sdap_config->sdap_HeaderUL = NR_SDAP_Config__sdap_HeaderUL_present; + } else { + sdap_config->sdap_HeaderDL = NR_SDAP_Config__sdap_HeaderDL_absent; + sdap_config->sdap_HeaderUL = NR_SDAP_Config__sdap_HeaderUL_absent; + } sdap_config->defaultDRB = TRUE; sdap_config->mappedQoS_FlowsToAdd = calloc(1, sizeof(struct NR_SDAP_Config__mappedQoS_FlowsToAdd)); memset(sdap_config->mappedQoS_FlowsToAdd, 0, sizeof(struct NR_SDAP_Config__mappedQoS_FlowsToAdd)); diff --git a/openair2/SDAP/nr_sdap/nr_sdap.c b/openair2/SDAP/nr_sdap/nr_sdap.c index 674dd700b1..74ef93aff7 100644 --- a/openair2/SDAP/nr_sdap/nr_sdap.c +++ b/openair2/SDAP/nr_sdap/nr_sdap.c @@ -30,12 +30,15 @@ boolean_t sdap_data_req(protocol_ctxt_t *ctxt_p, unsigned char *const sdu_buffer, const pdcp_transmission_mode_t pt_mode, const uint32_t *sourceL2Id, - const uint32_t *destinationL2Id) { + const uint32_t *destinationL2Id, + const uint8_t qfi, + const boolean_t rqi, + const int pdusession_id) { nr_sdap_entity_t *sdap_entity; - sdap_entity = nr_sdap_get_entity(ctxt_p->rnti, ctxt_p->sdap.pdusession_id); + sdap_entity = nr_sdap_get_entity(ctxt_p->rnti, pdusession_id); if(sdap_entity == NULL) { - LOG_E(SDAP, "%s:%d:%s: Entity not found with ue rnti: %x and pdusession id: %d\n", __FILE__, __LINE__, __FUNCTION__, ctxt_p->rnti, ctxt_p->sdap.pdusession_id); + LOG_E(SDAP, "%s:%d:%s: Entity not found with ue rnti: %x and pdusession id: %d\n", __FILE__, __LINE__, __FUNCTION__, ctxt_p->rnti, pdusession_id); return 0; } @@ -49,16 +52,22 @@ boolean_t sdap_data_req(protocol_ctxt_t *ctxt_p, sdu_buffer, pt_mode, sourceL2Id, - destinationL2Id); + destinationL2Id, + qfi, + rqi); return ret; } -void sdap_data_ind(nr_pdcp_entity_t *pdcp_entity, +void sdap_data_ind(rb_id_t pdcp_entity, + int is_gnb, + int has_sdap, + int has_sdapULheader, + int pdusession_id, int rnti, char *buf, int size) { nr_sdap_entity_t *sdap_entity; - sdap_entity = nr_sdap_get_entity(rnti, pdcp_entity->pdusession_id); + sdap_entity = nr_sdap_get_entity(rnti, pdusession_id); if(sdap_entity == NULL) { LOG_E(SDAP, "%s:%d:%s: Entity not found\n", __FILE__, __LINE__, __FUNCTION__); @@ -67,6 +76,10 @@ void sdap_data_ind(nr_pdcp_entity_t *pdcp_entity, sdap_entity->rx_entity(sdap_entity, pdcp_entity, + is_gnb, + has_sdap, + has_sdapULheader, + pdusession_id, rnti, buf, size); diff --git a/openair2/SDAP/nr_sdap/nr_sdap.h b/openair2/SDAP/nr_sdap/nr_sdap.h index e4e8004e2d..cd702cfd7f 100644 --- a/openair2/SDAP/nr_sdap/nr_sdap.h +++ b/openair2/SDAP/nr_sdap/nr_sdap.h @@ -41,7 +41,10 @@ boolean_t sdap_data_req(protocol_ctxt_t *ctxt_p, unsigned char *const sdu_buffer, const pdcp_transmission_mode_t pt_mode, const uint32_t *sourceL2Id, - const uint32_t *destinationL2Id + const uint32_t *destinationL2Id, + const uint8_t qfi, + const boolean_t rqi, + const int pdusession_id ); /* @@ -50,7 +53,11 @@ boolean_t sdap_data_req(protocol_ctxt_t *ctxt_p, * Uplink - gNB * Downlink - nrUE */ -void sdap_data_ind(nr_pdcp_entity_t *pdcp_entity, +void sdap_data_ind(rb_id_t pdcp_entity, + int is_gnb, + int has_sdap, + int has_sdapULheader, + int pdusession_id, int rnti, char *buf, int size diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.c b/openair2/SDAP/nr_sdap/nr_sdap_entity.c index 028653372f..c5d1c1d6fe 100644 --- a/openair2/SDAP/nr_sdap/nr_sdap_entity.c +++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.c @@ -23,7 +23,7 @@ #include "common/utils/LOG/log.h" #include #include -#include "openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.h" +#include "openair2/LAYER2/nr_pdcp/nr_pdcp_ue_manager.h" #include #include @@ -35,6 +35,17 @@ typedef struct { static nr_sdap_entity_info sdap_info; +nr_pdcp_ue_manager_t *nr_pdcp_sdap_get_ue_manager(void); + +void nr_pdcp_submit_sdap_ctrl_pdu(int rnti, rb_id_t sdap_ctrl_pdu_drb, nr_sdap_ul_hdr_t ctrl_pdu){ + nr_pdcp_ue_t *ue; + nr_pdcp_ue_manager_t *nr_pdcp_ue_manager; + nr_pdcp_ue_manager = nr_pdcp_sdap_get_ue_manager(); + ue = nr_pdcp_manager_get_ue(nr_pdcp_ue_manager, rnti); + ue->drb[sdap_ctrl_pdu_drb-1]->recv_sdu(ue->drb[sdap_ctrl_pdu_drb-1], (char*)&ctrl_pdu, SDAP_HDR_LENGTH, RLC_MUI_UNDEFINED); + return; +} + static boolean_t nr_sdap_tx_entity(nr_sdap_entity_t *entity, protocol_ctxt_t *ctxt_p, const srb_flag_t srb_flag, @@ -45,7 +56,9 @@ static boolean_t nr_sdap_tx_entity(nr_sdap_entity_t *entity, unsigned char *const sdu_buffer, const pdcp_transmission_mode_t pt_mode, const uint32_t *sourceL2Id, - const uint32_t *destinationL2Id + const uint32_t *destinationL2Id, + const uint8_t qfi, + const boolean_t rqi ) { /* The offset of the SDAP header, it might be 0 if the has_sdap is not true in the pdcp entity. */ int offset=0; @@ -60,11 +73,11 @@ static boolean_t nr_sdap_tx_entity(nr_sdap_entity_t *entity, } uint8_t sdap_buf[SDAP_MAX_PDU]; - nr_pdcp_entity_t *pdcp_entity = entity->qfi2drb_map(entity, ctxt_p->sdap.qfi, rb_id); + rb_id_t pdcp_entity = entity->qfi2drb_map(entity, qfi, rb_id); if(pdcp_entity){ - sdap_drb_id = pdcp_entity->rb_id; - pdcp_ent_has_sdap = pdcp_entity->has_sdap; + sdap_drb_id = pdcp_entity; + pdcp_ent_has_sdap = entity->qfi2drb_table[qfi].hasSdap; } if(!pdcp_ent_has_sdap){ @@ -99,8 +112,8 @@ static boolean_t nr_sdap_tx_entity(nr_sdap_entity_t *entity, * Construct the DL SDAP data PDU. */ nr_sdap_dl_hdr_t sdap_hdr; - sdap_hdr.QFI = ctxt_p->sdap.qfi; - sdap_hdr.RQI = ctxt_p->sdap.rqi; + sdap_hdr.QFI = qfi; + sdap_hdr.RQI = rqi; sdap_hdr.RDI = 0; // SDAP Hardcoded Value /* Add the SDAP DL Header to the buffer */ memcpy(&sdap_buf[0], &sdap_hdr, SDAP_HDR_LENGTH); @@ -118,9 +131,9 @@ static boolean_t nr_sdap_tx_entity(nr_sdap_entity_t *entity, * construct the UL SDAP data PDU as specified in the subclause 6.2.2.3. */ nr_sdap_ul_hdr_t sdap_hdr; - sdap_hdr.QFI = ctxt_p->sdap.qfi; + sdap_hdr.QFI = qfi; sdap_hdr.R = 0; - sdap_hdr.DC = ctxt_p->sdap.dc; + sdap_hdr.DC = rqi; /* Add the SDAP UL Header to the buffer */ memcpy(&sdap_buf[0], &sdap_hdr, SDAP_HDR_LENGTH); memcpy(&sdap_buf[SDAP_HDR_LENGTH], sdu_buffer, sdu_buffer_size); @@ -154,15 +167,19 @@ static boolean_t nr_sdap_tx_entity(nr_sdap_entity_t *entity, } static void nr_sdap_rx_entity(nr_sdap_entity_t *entity, - nr_pdcp_entity_t *pdcp_entity, + rb_id_t pdcp_entity, + int is_gnb, + int has_sdap, + int has_sdapHeader, + int pdusession_id, int rnti, char *buf, int size) { /* The offset of the SDAP header, it might be 0 if the has_sdap is not true in the pdcp entity. */ int offset=0; - if(pdcp_entity->is_gnb) { // gNB - if(pdcp_entity->has_sdap && pdcp_entity->has_sdapULheader ) { // Handling the SDAP Header + if(is_gnb) { // gNB + if(has_sdap && has_sdapHeader ) { // Handling the SDAP Header offset = SDAP_HDR_LENGTH; nr_sdap_ul_hdr_t *sdap_hdr = (nr_sdap_ul_hdr_t *)buf; LOG_D(SDAP, "RX Entity Received QFI : %u\n", sdap_hdr->QFI); @@ -192,16 +209,16 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity, GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).length = size-offset; GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).offset = GTPU_HEADER_OVERHEAD_MAX; GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).rnti = rnti; - GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).pdusession_id = pdcp_entity->pdusession_id; + GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).pdusession_id = pdusession_id; LOG_D(SDAP, "%s() sending message to gtp size %d\n", __func__, size-offset); - itti_send_msg_to_task(TASK_VARIABLE, INSTANCE_DEFAULT, message_p); + itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p); } else { //nrUE /* * TS 37.324 5.2 Data transfer * 5.2.2 Downlink * if the DRB from which this SDAP data PDU is received is configured by RRC with the presence of SDAP header. */ - if(pdcp_entity->has_sdap && pdcp_entity->has_sdapDLheader) { // Handling the SDAP Header + if(has_sdap && has_sdapHeader) { // Handling the SDAP Header offset = SDAP_HDR_LENGTH; /* * TS 37.324 5.2 Data transfer @@ -224,9 +241,9 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity, * 5.3.2 Reflective mapping * If there is no stored QoS flow to DRB mapping rule for the QoS flow and a default DRB is configured. */ - if(!entity->qfi2drb_table[sdap_hdr->QFI] && entity->default_drb->rb_id){ + if(!entity->qfi2drb_table[sdap_hdr->QFI].drb_id && entity->default_drb){ nr_sdap_ul_hdr_t sdap_ctrl_pdu = entity->sdap_construct_ctrl_pdu(sdap_hdr->QFI); - nr_pdcp_entity_t *sdap_ctrl_pdu_drb = entity->sdap_map_ctrl_pdu(entity, pdcp_entity, SDAP_CTRL_PDU_MAP_DEF_DRB, sdap_hdr->QFI); + rb_id_t sdap_ctrl_pdu_drb = entity->sdap_map_ctrl_pdu(entity, pdcp_entity, SDAP_CTRL_PDU_MAP_DEF_DRB, sdap_hdr->QFI); entity->sdap_submit_ctrl_pdu(rnti, sdap_ctrl_pdu_drb, sdap_ctrl_pdu); } @@ -239,10 +256,10 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity, * the DRB according to the stored QoS flow to DRB mapping rule is configured by RRC * with the presence of UL SDAP header */ - if( (pdcp_entity->rb_id != entity->qfi2drb_table[sdap_hdr->QFI]->rb_id) && - pdcp_entity->has_sdapULheader ){ + if( (pdcp_entity != entity->qfi2drb_table[sdap_hdr->QFI].drb_id) && + has_sdapHeader ){ nr_sdap_ul_hdr_t sdap_ctrl_pdu = entity->sdap_construct_ctrl_pdu(sdap_hdr->QFI); - nr_pdcp_entity_t *sdap_ctrl_pdu_drb = entity->sdap_map_ctrl_pdu(entity, pdcp_entity, SDAP_CTRL_PDU_MAP_RULE_DRB, sdap_hdr->QFI); + rb_id_t sdap_ctrl_pdu_drb = entity->sdap_map_ctrl_pdu(entity, pdcp_entity, SDAP_CTRL_PDU_MAP_RULE_DRB, sdap_hdr->QFI); entity->sdap_submit_ctrl_pdu(rnti, sdap_ctrl_pdu_drb, sdap_ctrl_pdu); } @@ -251,7 +268,7 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity, * 5.3.2 Reflective mapping * store the QoS flow to DRB mapping of the DL SDAP data PDU as the QoS flow to DRB mapping rule for the UL. */ - entity->qfi2drb_table[sdap_hdr->QFI]->rb_id = pdcp_entity->rb_id; + entity->qfi2drb_table[sdap_hdr->QFI].drb_id = pdcp_entity; } /* @@ -280,45 +297,35 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity, } } -void nr_sdap_qfi2drb_map_update(nr_sdap_entity_t *entity, uint8_t qfi, uint8_t drb){ +void nr_sdap_qfi2drb_map_update(nr_sdap_entity_t *entity, uint8_t qfi, rb_id_t drb, boolean_t hasSdap){ if(qfi < SDAP_MAX_QFI && qfi > SDAP_MAP_RULE_EMPTY && drb > 0 && drb <= AVLBL_DRB) { - nr_pdcp_entity_t *pdcp_entity; - pdcp_entity = nr_pdcp_find_entity_sdap(entity->rnti, drb); - - if(!pdcp_entity){ - LOG_D(SDAP, "Map Update failed - PDCP Entity does not exist, should create it\n"); - LOG_D(SDAP, "Map Update failed - Mapping to default DRB\n"); - entity->qfi2drb_table[qfi] = entity->default_drb; - } - - entity->qfi2drb_table[qfi] = pdcp_entity; - LOG_D(SDAP, "Updated QFI to DRB Map: QFI %u -> DRB %d \n", qfi, entity->qfi2drb_table[qfi]->rb_id); + entity->qfi2drb_table[qfi].drb_id = drb; + entity->qfi2drb_table[qfi].hasSdap = hasSdap; + LOG_D(SDAP, "Updated QFI to DRB Map: QFI %u -> DRB %ld \n", qfi, entity->qfi2drb_table[qfi].drb_id); + LOG_D(SDAP, "DRB %ld %s\n", entity->qfi2drb_table[qfi].drb_id, hasSdap ? "has SDAP" : "does not have SDAP"); } } void nr_sdap_qfi2drb_map_del(nr_sdap_entity_t *entity, uint8_t qfi){ - entity->qfi2drb_table[qfi] = SDAP_NO_MAPPING_RULE; + entity->qfi2drb_table[qfi].drb_id = SDAP_NO_MAPPING_RULE; LOG_D(SDAP, "Deleted QFI to DRB Map for QFI %u \n", qfi); } -nr_pdcp_entity_t *nr_sdap_qfi2drb_map(nr_sdap_entity_t *entity, uint8_t qfi, long upper_layer_rb_id){ - nr_pdcp_entity_t *pdcp_entity; +rb_id_t nr_sdap_qfi2drb_map(nr_sdap_entity_t *entity, uint8_t qfi, rb_id_t upper_layer_rb_id){ + rb_id_t pdcp_entity; - pdcp_entity = entity->qfi2drb_table[qfi]; + pdcp_entity = entity->qfi2drb_table[qfi].drb_id; if(pdcp_entity){ return pdcp_entity; } else if(entity->default_drb) { LOG_D(SDAP, "Mapped QFI %u to Default DRB\n", qfi); - entity->qfi2drb_map_update(entity, qfi, entity->default_drb->rb_id); return entity->default_drb; } else { - /* Update map for Hardcode DRB ID given from upper layer (ue/enb_tun_read_thread rb_id)*/ - entity->qfi2drb_map_update(entity, qfi, upper_layer_rb_id); return SDAP_MAP_RULE_EMPTY; } @@ -336,28 +343,28 @@ nr_sdap_ul_hdr_t nr_sdap_construct_ctrl_pdu(uint8_t qfi){ return sdap_end_marker_hdr; } -nr_pdcp_entity_t *nr_sdap_map_ctrl_pdu(nr_sdap_entity_t *entity, nr_pdcp_entity_t *pdcp_entity, int map_type, uint8_t dl_qfi){ - nr_pdcp_entity_t *drb_of_endmarker = NULL; +rb_id_t nr_sdap_map_ctrl_pdu(nr_sdap_entity_t *entity, rb_id_t pdcp_entity, int map_type, uint8_t dl_qfi){ + rb_id_t drb_of_endmarker = 0; if(map_type == SDAP_CTRL_PDU_MAP_DEF_DRB){ drb_of_endmarker = entity->default_drb; LOG_D(SDAP, "Mapped Control PDU to default drb\n"); } if(map_type == SDAP_CTRL_PDU_MAP_RULE_DRB){ - drb_of_endmarker = entity->qfi2drb_map(entity, dl_qfi, pdcp_entity->rb_id); + drb_of_endmarker = entity->qfi2drb_map(entity, dl_qfi, pdcp_entity); LOG_D(SDAP, "Mapped Control PDU according to the mapping rule, qfi %u \n", dl_qfi); } return drb_of_endmarker; } -void nr_sdap_submit_ctrl_pdu(int rnti, nr_pdcp_entity_t *sdap_ctrl_pdu_drb, nr_sdap_ul_hdr_t ctrl_pdu){ +void nr_sdap_submit_ctrl_pdu(int rnti, rb_id_t sdap_ctrl_pdu_drb, nr_sdap_ul_hdr_t ctrl_pdu){ if(sdap_ctrl_pdu_drb){ - sdap_ctrl_pdu_drb->recv_sdu(sdap_ctrl_pdu_drb, (char*)&ctrl_pdu, SDAP_HDR_LENGTH, RLC_MUI_UNDEFINED); + nr_pdcp_submit_sdap_ctrl_pdu(rnti, sdap_ctrl_pdu_drb, ctrl_pdu); LOG_D(SDAP, "Sent Control PDU to PDCP Layer.\n"); } } void nr_sdap_ue_qfi2drb_config(nr_sdap_entity_t *existing_sdap_entity, - nr_pdcp_entity_t *pdcp_entity, + rb_id_t pdcp_entity, uint16_t rnti, NR_QFI_t *mapped_qfi_2_add, uint8_t mappedQFIs2AddCount, @@ -367,20 +374,21 @@ void nr_sdap_ue_qfi2drb_config(nr_sdap_entity_t *existing_sdap_entity, for(int i = 0; i < mappedQFIs2AddCount; i++){ qfi = mapped_qfi_2_add[i]; - if(existing_sdap_entity->default_drb && existing_sdap_entity->qfi2drb_table[qfi] == SDAP_NO_MAPPING_RULE){ + if(existing_sdap_entity->default_drb && existing_sdap_entity->qfi2drb_table[qfi].drb_id == SDAP_NO_MAPPING_RULE){ nr_sdap_ul_hdr_t sdap_ctrl_pdu = existing_sdap_entity->sdap_construct_ctrl_pdu(qfi); - nr_pdcp_entity_t *sdap_ctrl_pdu_drb = existing_sdap_entity->sdap_map_ctrl_pdu(existing_sdap_entity, pdcp_entity, SDAP_CTRL_PDU_MAP_DEF_DRB, qfi); + rb_id_t sdap_ctrl_pdu_drb = existing_sdap_entity->sdap_map_ctrl_pdu(existing_sdap_entity, pdcp_entity, SDAP_CTRL_PDU_MAP_DEF_DRB, qfi); existing_sdap_entity->sdap_submit_ctrl_pdu(rnti, sdap_ctrl_pdu_drb, sdap_ctrl_pdu); } - if(existing_sdap_entity->qfi2drb_table[qfi]->rb_id != drb_identity && pdcp_entity->has_sdapULheader){ + if(existing_sdap_entity->qfi2drb_table[qfi].drb_id != drb_identity && existing_sdap_entity->qfi2drb_table[qfi].hasSdap){ nr_sdap_ul_hdr_t sdap_ctrl_pdu = existing_sdap_entity->sdap_construct_ctrl_pdu(qfi); - nr_pdcp_entity_t *sdap_ctrl_pdu_drb = existing_sdap_entity->sdap_map_ctrl_pdu(existing_sdap_entity, pdcp_entity, SDAP_CTRL_PDU_MAP_RULE_DRB, qfi); + rb_id_t sdap_ctrl_pdu_drb = existing_sdap_entity->sdap_map_ctrl_pdu(existing_sdap_entity, pdcp_entity, SDAP_CTRL_PDU_MAP_RULE_DRB, qfi); existing_sdap_entity->sdap_submit_ctrl_pdu(rnti, sdap_ctrl_pdu_drb, sdap_ctrl_pdu); } } } -nr_sdap_entity_t *new_nr_sdap_entity(uint16_t rnti, +nr_sdap_entity_t *new_nr_sdap_entity(int has_sdap, + uint16_t rnti, int pdusession_id, boolean_t is_defaultDRB, uint8_t drb_identity, @@ -390,7 +398,7 @@ nr_sdap_entity_t *new_nr_sdap_entity(uint16_t rnti, if(nr_sdap_get_entity(rnti, pdusession_id)) { LOG_E(SDAP, "SDAP Entity for UE already exists.\n"); nr_sdap_entity_t *existing_sdap_entity = nr_sdap_get_entity(rnti, pdusession_id); - nr_pdcp_entity_t *pdcp_entity = existing_sdap_entity->default_drb; + rb_id_t pdcp_entity = existing_sdap_entity->default_drb; nr_sdap_ue_qfi2drb_config(existing_sdap_entity, pdcp_entity, rnti, mapped_qfi_2_add, mappedQFIs2AddCount, drb_identity); return existing_sdap_entity; } @@ -418,15 +426,14 @@ nr_sdap_entity_t *new_nr_sdap_entity(uint16_t rnti, sdap_entity->qfi2drb_map = nr_sdap_qfi2drb_map; if(is_defaultDRB) { - nr_pdcp_entity_t *pdcp_entity = nr_pdcp_find_entity_sdap(sdap_entity->rnti, drb_identity); - sdap_entity->default_drb = pdcp_entity; - LOG_I(SDAP, "Default DRB for the created SDAP entity: %d \n", sdap_entity->default_drb->rb_id); + sdap_entity->default_drb = drb_identity; + LOG_I(SDAP, "Default DRB for the created SDAP entity: %ld \n", sdap_entity->default_drb); if(mappedQFIs2AddCount) { for (int i = 0; i < mappedQFIs2AddCount; i++) { LOG_D(SDAP, "Mapped QFI to Add : %ld \n", mapped_qfi_2_add[i]); - sdap_entity->qfi2drb_map_update(sdap_entity, mapped_qfi_2_add[i], sdap_entity->default_drb->rb_id); + sdap_entity->qfi2drb_map_update(sdap_entity, mapped_qfi_2_add[i], sdap_entity->default_drb, has_sdap); } } } diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.h b/openair2/SDAP/nr_sdap/nr_sdap_entity.h index 46c9ea3774..b46e5bf4e3 100644 --- a/openair2/SDAP/nr_sdap/nr_sdap_entity.h +++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.h @@ -62,19 +62,26 @@ typedef struct nr_sdap_ul_hdr_s { uint8_t DC:1; } __attribute__((packed)) nr_sdap_ul_hdr_t; +typedef struct qfi2drb_s { + rb_id_t drb_id; + boolean_t hasSdap; +} qfi2drb_t; + +void nr_pdcp_submit_sdap_ctrl_pdu(int rnti, rb_id_t sdap_ctrl_pdu_drb, nr_sdap_ul_hdr_t ctrl_pdu); + typedef struct nr_sdap_entity_s { uint16_t rnti; - nr_pdcp_entity_t *default_drb; + rb_id_t default_drb; int pdusession_id; - nr_pdcp_entity_t *qfi2drb_table[SDAP_MAX_QFI]; + qfi2drb_t qfi2drb_table[SDAP_MAX_QFI]; - void (*qfi2drb_map_update)(struct nr_sdap_entity_s *entity, uint8_t qfi, uint8_t drb); + void (*qfi2drb_map_update)(struct nr_sdap_entity_s *entity, uint8_t qfi, rb_id_t drb, boolean_t hasSdap); void (*qfi2drb_map_delete)(struct nr_sdap_entity_s *entity, uint8_t qfi); - nr_pdcp_entity_t *(*qfi2drb_map)(struct nr_sdap_entity_s *entity, uint8_t qfi, long upper_layer_rb_id); + rb_id_t (*qfi2drb_map)(struct nr_sdap_entity_s *entity, uint8_t qfi, rb_id_t upper_layer_rb_id); nr_sdap_ul_hdr_t (*sdap_construct_ctrl_pdu)(uint8_t qfi); - nr_pdcp_entity_t *(*sdap_map_ctrl_pdu)(struct nr_sdap_entity_s *entity, nr_pdcp_entity_t *pdcp_entity, int map_type, uint8_t dl_qfi); - void (*sdap_submit_ctrl_pdu)(int rnti, nr_pdcp_entity_t *sdap_ctrl_pdu_drb, nr_sdap_ul_hdr_t ctrl_pdu); + rb_id_t (*sdap_map_ctrl_pdu)(struct nr_sdap_entity_s *entity, rb_id_t pdcp_entity, int map_type, uint8_t dl_qfi); + void (*sdap_submit_ctrl_pdu)(int rnti, rb_id_t sdap_ctrl_pdu_drb, nr_sdap_ul_hdr_t ctrl_pdu); boolean_t (*tx_entity)(struct nr_sdap_entity_s *entity, @@ -87,10 +94,17 @@ typedef struct nr_sdap_entity_s { unsigned char *const sdu_buffer, const pdcp_transmission_mode_t pt_mode, const uint32_t *sourceL2Id, - const uint32_t *destinationL2Id); + const uint32_t *destinationL2Id, + const uint8_t qfi, + const boolean_t rqi + ); void (*rx_entity)(struct nr_sdap_entity_s *entity, - nr_pdcp_entity_t *pdcp_entity, + rb_id_t pdcp_entity, + int is_gnb, + int has_sdap, + int has_sdapULheader, + int pdusession_id, int rnti, char *buf, int size); @@ -100,7 +114,7 @@ typedef struct nr_sdap_entity_s { } nr_sdap_entity_t; /* QFI to DRB Mapping Related Function */ -void nr_sdap_qfi2drb_map_update(nr_sdap_entity_t *entity, uint8_t qfi, uint8_t drb); +void nr_sdap_qfi2drb_map_update(nr_sdap_entity_t *entity, uint8_t qfi, rb_id_t drb, boolean_t hasSdap); /* QFI to DRB Mapping Related Function */ void nr_sdap_qfi2drb_map_del(nr_sdap_entity_t *entity, uint8_t qfi); @@ -114,7 +128,7 @@ void nr_sdap_qfi2drb_map_del(nr_sdap_entity_t *entity, uint8_t qfi); * If there is no stored QoS flow to DRB mapping rule for the QoS flow as specified in the subclause 5.3, map the SDAP SDU to the default DRB * else, map the SDAP SDU to the DRB according to the stored QoS flow to DRB mapping rule. */ -nr_pdcp_entity_t *nr_sdap_qfi2drb_map(nr_sdap_entity_t *entity, uint8_t qfi, long upper_layer_rb_id); +rb_id_t nr_sdap_qfi2drb_map(nr_sdap_entity_t *entity, uint8_t qfi, rb_id_t upper_layer_rb_id); /* * TS 37.324 5.3 QoS flow to DRB Mapping @@ -128,20 +142,20 @@ nr_sdap_ul_hdr_t nr_sdap_construct_ctrl_pdu(uint8_t qfi); * 1.) default DRB or * 2.) DRB according to the stored QoS flow to DRB mapping rule */ -nr_pdcp_entity_t *nr_sdap_map_ctrl_pdu(nr_sdap_entity_t *entity, nr_pdcp_entity_t *pdcp_entity, int map_type, uint8_t dl_qfi); +rb_id_t nr_sdap_map_ctrl_pdu(nr_sdap_entity_t *entity, rb_id_t pdcp_entity, int map_type, uint8_t dl_qfi); /* * TS 37.324 5.3 QoS flow to DRB Mapping * Submit the end-marker control PDU to the lower layer. */ -void nr_sdap_submit_ctrl_pdu(int rnti, nr_pdcp_entity_t *sdap_ctrl_pdu_drb, nr_sdap_ul_hdr_t ctrl_pdu); +void nr_sdap_submit_ctrl_pdu(int rnti, rb_id_t sdap_ctrl_pdu_drb, nr_sdap_ul_hdr_t ctrl_pdu); /* * TS 37.324 5.3 QoS flow to DRB Mapping * 5.3.1 Configuration Procedures */ void nr_sdap_ue_qfi2drb_config(nr_sdap_entity_t *existing_sdap_entity, - nr_pdcp_entity_t *pdcp_entity, + rb_id_t pdcp_entity, uint16_t rnti, NR_QFI_t *mapped_qfi_2_add, uint8_t mappedQFIs2AddCount, @@ -151,7 +165,8 @@ void nr_sdap_ue_qfi2drb_config(nr_sdap_entity_t *existing_sdap_entity, * TS 37.324 4.4 5.1.1 SDAP entity establishment * Establish an SDAP entity. */ -nr_sdap_entity_t *new_nr_sdap_entity(uint16_t rnti, +nr_sdap_entity_t *new_nr_sdap_entity(int has_sdap, + uint16_t rnti, int pdusession_id, boolean_t is_defaultDRB, uint8_t default_DRB, diff --git a/openair3/ocp-gtpu/gtp_itf.cpp b/openair3/ocp-gtpu/gtp_itf.cpp index 3c6c63c6a4..7b8ba308bf 100644 --- a/openair3/ocp-gtpu/gtp_itf.cpp +++ b/openair3/ocp-gtpu/gtp_itf.cpp @@ -20,6 +20,8 @@ extern "C" { #include "openair2/SDAP/nr_sdap/nr_sdap.h" //#include +static boolean_t is_gnb = false; + #pragma pack(1) typedef struct Gtpv1uMsgHeader { @@ -92,6 +94,7 @@ typedef struct { rnti_t rnti; ebi_t incoming_rb_id; gtpCallback callBack; + gtpCallbackSDAP callBackSDAP; int pdusession_id; } rntiData_t; @@ -476,6 +479,8 @@ teid_t newGtpuCreateTunnel(instance_t instance, rnti_t rnti, int incoming_bearer inst->te2ue_mapping[incoming_teid].incoming_rb_id= incoming_bearer_id; inst->te2ue_mapping[incoming_teid].callBack=callBack; + + inst->te2ue_mapping[incoming_teid].callBackSDAP = sdap_data_req; inst->te2ue_mapping[incoming_teid].pdusession_id = (uint8_t)outgoing_bearer_id; @@ -597,14 +602,14 @@ int gtpv1u_create_ngu_tunnel( const instance_t instance, create_tunnel_req->num_tunnels, create_tunnel_req->outgoing_teid[0]); tcp_udp_port_t dstport=globGtp.instances[compatInst(instance)].get_dstport(); - + is_gnb = true; for (int i = 0; i < create_tunnel_req->num_tunnels; i++) { teid_t teid=newGtpuCreateTunnel(instance, create_tunnel_req->rnti, create_tunnel_req->incoming_rb_id[i], create_tunnel_req->pdusession_id[i], create_tunnel_req->outgoing_teid[i], create_tunnel_req->dst_addr[i], dstport, - sdap_data_req); + pdcp_data_req); create_tunnel_resp->status=0; create_tunnel_resp->rnti=create_tunnel_req->rnti; create_tunnel_resp->num_tunnels=create_tunnel_req->num_tunnels; @@ -876,9 +881,6 @@ static int Gtpv1uHandleGpdu(int h, ctxt.enb_flag = 1; ctxt.instance = inst->addr.originInstance; ctxt.rnti = tunnel->second.rnti; - ctxt.sdap.qfi = qfi; - ctxt.sdap.rqi = rqi; - ctxt.sdap.pdusession_id = tunnel->second.pdusession_id; ctxt.frame = 0; ctxt.subframe = 0; ctxt.eNB_index = 0; @@ -894,17 +896,34 @@ static int Gtpv1uHandleGpdu(int h, const uint32_t destinationL2Id=0; pthread_mutex_unlock(&globGtp.gtp_lock); - if ( !tunnel->second.callBack(&ctxt, - srb_flag, - rb_id, - mui, - confirm, - sdu_buffer_size, - sdu_buffer, - mode, - &sourceL2Id, - &destinationL2Id) ) - LOG_E(GTPU,"[%d] down layer refused incoming packet\n", h); + if(is_gnb && qfi){ + if ( !tunnel->second.callBackSDAP(&ctxt, + srb_flag, + rb_id, + mui, + confirm, + sdu_buffer_size, + sdu_buffer, + mode, + &sourceL2Id, + &destinationL2Id, + qfi, + rqi, + tunnel->second.pdusession_id) ) + LOG_E(GTPU,"[%d] down layer refused incoming packet\n", h); + } else { + if ( !tunnel->second.callBack(&ctxt, + srb_flag, + rb_id, + mui, + confirm, + sdu_buffer_size, + sdu_buffer, + mode, + &sourceL2Id, + &destinationL2Id) ) + LOG_E(GTPU,"[%d] down layer refused incoming packet\n", h); + } LOG_D(GTPU,"[%d] Received a %d bytes packet for: teid:%x\n", h, msgBufLen-offset, diff --git a/openair3/ocp-gtpu/gtp_itf.h b/openair3/ocp-gtpu/gtp_itf.h index ba6cf0f8bb..17882ebf1e 100644 --- a/openair3/ocp-gtpu/gtp_itf.h +++ b/openair3/ocp-gtpu/gtp_itf.h @@ -20,6 +20,21 @@ typedef boolean_t (*gtpCallback)( const uint32_t *sourceL2Id, const uint32_t *destinationL2Id); +typedef boolean_t (*gtpCallbackSDAP)( + protocol_ctxt_t *ctxt_pP, + const srb_flag_t srb_flagP, + const rb_id_t rb_idP, + const mui_t muiP, + const confirm_t confirmP, + const sdu_size_t sdu_buffer_sizeP, + unsigned char *const sdu_buffer_pP, + const pdcp_transmission_mode_t modeP, + const uint32_t *sourceL2Id, + const uint32_t *destinationL2Id, + const uint8_t qfi, + const boolean_t rqi, + const int pdusession_id); + typedef struct openAddr_s { char originHost[HOST_NAME_MAX]; char originService[HOST_NAME_MAX]; From b98f10b73643840200e9f952d2ecb286cad15800 Mon Sep 17 00:00:00 2001 From: Mario Hudon Date: Mon, 4 Apr 2022 14:32:27 -0400 Subject: [PATCH 101/150] - Fixed failing CI tests - Memory leak - Seg fault in dlsim tests --- openair1/PHY/INIT/nr_init_ue.c | 4 ++++ openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index ca18b7509b..67c5605f2b 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -526,6 +526,10 @@ void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) free_and_zero(ue->pdsch_vars[th_id][gNB_id]); } + for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++) { + free_and_zero(ue->pdcch_vars[th_id][gNB_id]); + } + for (int i = 0; i < fp->nb_antennas_rx; i++) { free_and_zero(ue->nr_srs_info->srs_received_signal[i]); free_and_zero(ue->nr_srs_info->srs_ls_estimated_channel[i]); diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index 2f643866e5..20c9b7a1ac 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -1478,8 +1478,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, } // Hold the channel estimates in frequency domain. - int32_t pdcch_est_size = fp->symbols_per_slot*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH); - int32_t pdcch_dl_ch_estimates[4*fp->nb_antennas_rx][pdcch_est_size]; + int32_t pdcch_est_size = ((((fp->symbols_per_slot*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH))+15)/16)*16); + __attribute__ ((aligned(16))) int32_t pdcch_dl_ch_estimates[4*fp->nb_antennas_rx][pdcch_est_size]; dci_cnt = 0; for(int n_ss = 0; n_ssnb_search_space; n_ss++) { From 2e99d33f2701282393a73aea547f894ef9d1633b Mon Sep 17 00:00:00 2001 From: Mario Hudon Date: Mon, 4 Apr 2022 15:41:36 -0400 Subject: [PATCH 102/150] Fixed compile warning --- openair1/PHY/INIT/nr_init_ue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index b8b89209a1..2c4835136c 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -159,7 +159,7 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) NR_UE_COMMON *const common_vars = &ue->common_vars; NR_UE_PBCH **const pbch_vars = ue->pbch_vars; NR_UE_PRACH **const prach_vars = ue->prach_vars; - int i,j,slot,symb, gNB_id, th_id; + int i,slot,symb, gNB_id, th_id; NR_UE_SRS **const srs_vars = ue->srs_vars; From 76c0335a8b0b01827a473990b8c00cfdaa9f1842 Mon Sep 17 00:00:00 2001 From: hardy Date: Thu, 24 Feb 2022 17:04:20 +0100 Subject: [PATCH 103/150] initial work for amarisoft ue --- ci-scripts/as_ue/oai_ext_app.sh | 18 + .../as_ue/oaicicd-3xue-noPing-SATest.cfg | 172 ++++++++++ .../as_ue/oaicicd-multi-ue-1xPing-SATest.cfg | 142 ++++++++ .../as_ue/oaicicd-multi-ue-2xPing-SATest.cfg | 150 +++++++++ .../oaicicd-multi-ue-2xPingSeq-SATest.cfg | 150 +++++++++ ci-scripts/as_ue/oaicicd-ue-Ping-SATest.cfg | 113 +++++++ ci-scripts/as_ue/oaicicd-ue-iperf-SATest.cfg | 109 +++++++ ci-scripts/ci_ueinfra.yaml | 40 +++ ci-scripts/cls_amarisoft_ue.py | 75 +++++ ci-scripts/cls_oaicitest.py | 210 +++++++----- ...and78.sa.fr1.106PRB.2x2.usrpn310.asue.conf | 308 ++++++++++++++++++ ci-scripts/epc.py | 10 +- ci-scripts/main.py | 10 + ci-scripts/sshconnection.py | 9 +- .../xml_files/fr1_sa_amarisoft_ue_1x.xml | 87 +++++ ci-scripts/xml_files/sa_cn5g_asue_closure.xml | 38 +++ ci-scripts/xml_files/sa_cn5g_asue_start.xml | 39 +++ 17 files changed, 1595 insertions(+), 85 deletions(-) create mode 100755 ci-scripts/as_ue/oai_ext_app.sh create mode 100644 ci-scripts/as_ue/oaicicd-3xue-noPing-SATest.cfg create mode 100644 ci-scripts/as_ue/oaicicd-multi-ue-1xPing-SATest.cfg create mode 100644 ci-scripts/as_ue/oaicicd-multi-ue-2xPing-SATest.cfg create mode 100644 ci-scripts/as_ue/oaicicd-multi-ue-2xPingSeq-SATest.cfg create mode 100644 ci-scripts/as_ue/oaicicd-ue-Ping-SATest.cfg create mode 100644 ci-scripts/as_ue/oaicicd-ue-iperf-SATest.cfg create mode 100644 ci-scripts/cls_amarisoft_ue.py create mode 100644 ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf create mode 100644 ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml create mode 100644 ci-scripts/xml_files/sa_cn5g_asue_closure.xml create mode 100644 ci-scripts/xml_files/sa_cn5g_asue_start.xml diff --git a/ci-scripts/as_ue/oai_ext_app.sh b/ci-scripts/as_ue/oai_ext_app.sh new file mode 100755 index 0000000000..727e2b5db2 --- /dev/null +++ b/ci-scripts/as_ue/oai_ext_app.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +ue_id="$1" # UE id +duration="$2" # Sim duration + +shift +shift + +function end +{ + exit 0 +} +trap end INT TERM + +echo "ip netns exec $ue_id $@ > /tmp/test_${ue_id}.log" +ip netns exec $ue_id $@ > /tmp/test_$ue_id.log + + diff --git a/ci-scripts/as_ue/oaicicd-3xue-noPing-SATest.cfg b/ci-scripts/as_ue/oaicicd-3xue-noPing-SATest.cfg new file mode 100644 index 0000000000..a9299b67e3 --- /dev/null +++ b/ci-scripts/as_ue/oaicicd-3xue-noPing-SATest.cfg @@ -0,0 +1,172 @@ +/* UE simulator configuration */ + + +/* UE simulator configuration file version 2021-06-17 + * LTE / 5G Non StandAlone + * Copyright (C) 2019-2021 Amarisoft + */ +{ +#define N_ANTENNA_DL 1 +#define TDD 1 +#define CELL_BANDWIDTH 40 +#define UE_COUNT 3 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129 + + +log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1", +log_filename: "/tmp/ue0.log", + +/* Enable remote API and Web interface */ +com_addr: "0.0.0.0:9002", + +include "rf_driver/1chan.cfg", + +/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */ + +cell_groups: [{ + group_type: "nr", + multi_ue: true, + cells: [{ + rf_port: 0, + bandwidth: CELL_BANDWIDTH, +#if TDD == 1 + band: 78, + dl_nr_arfcn:621312, + ssb_nr_arfcn:621312, + + //band: 41, + //dl_nr_arfcn:517020, + //ssb_nr_arfcn:516990, +#else + band: 7, + dl_nr_arfcn: 536020, + ssb_nr_arfcn: 535930, + ssb_subcarrier_spacing: 15, +#endif + subcarrier_spacing: 30, + n_antenna_dl: N_ANTENNA_DL, + n_antenna_ul: 1, + rx_to_tx_latency:2, + }], +}], + + +/* Enable it to allow sim_events to be handled remotely */ +//rue_bind_addr: "127.0.10.11", + + + +ue_list: [ + { + /* UE capabilities */ + /* USIM data */ + "ue_id" : 0, + "imsi": "208970100001127", + "K": "fec86ba6eb707ed08905757b1bb44b8f", + "sim_algo":"milenage", + "op": "1006020f0a478bf6b699f15c062e42b3", + as_release: 15, + ue_category: "nr", + apn:"oai", + attach_pdn_type:"ipv4", + default_nssai: [ + { + sst: 1, + sd: 66051, + }, + ], + default_pdu_session_snssai: { + sst: 1, + sd: 66051, + }, + /* Enable it to allow sim_events to be handled remotely */ + //rue_addr: "127.1.0.0", + /* Enable it to create a TUN interface for each UE PDN */ + tun_setup_script: "ue-ifup", + sim_events: [ + { + event: "power_on", + start_time: 5, + }, + { + event: "power_off", + start_time: 30, + } + ] /*end sim events */ + }, /*end UE object 0*/ + { + /* UE capabilities */ + /* USIM data */ + "ue_id" : 1, + "imsi": "208970100001128", + "K": "fec86ba6eb707ed08905757b1bb44b8f", + "sim_algo":"milenage", + "op": "1006020f0a478bf6b699f15c062e42b3", + as_release: 15, + ue_category: "nr", + apn:"oai", + attach_pdn_type:"ipv4", + default_nssai: [ + { + sst: 1, + sd: 66051, + }, + ], + default_pdu_session_snssai: { + sst: 1, + sd: 66051, + }, + /* Enable it to allow sim_events to be handled remotely */ + //rue_addr: "127.1.0.0", + /* Enable it to create a TUN interface for each UE PDN */ + tun_setup_script: "ue-ifup", + sim_events: [ + { + event: "power_on", + start_time: 5, + }, + { + event: "power_off", + start_time: 30, + } + ] /*end sim events */ + }, /*end UE object 1*/ + { + /* UE capabilities */ + /* USIM data */ + "ue_id" : 2, + "imsi": "208970100001129", + "K": "fec86ba6eb707ed08905757b1bb44b8f", + "sim_algo":"milenage", + "op": "1006020f0a478bf6b699f15c062e42b3", + as_release: 15, + ue_category: "nr", + apn:"oai", + attach_pdn_type:"ipv4", + default_nssai: [ + { + sst: 1, + sd: 66051, + }, + ], + default_pdu_session_snssai: { + sst: 1, + sd: 66051, + }, + /* Enable it to allow sim_events to be handled remotely */ + //rue_addr: "127.1.0.0", + /* Enable it to create a TUN interface for each UE PDN */ + tun_setup_script: "ue-ifup", + sim_events: [ + { + event: "power_on", + start_time: 5, + }, + { + event: "power_off", + start_time: 30, + } + ] /*end sim events */ + } /*end UE object 2*/ + ],/*end UE list*/ +}/*end json*/ + diff --git a/ci-scripts/as_ue/oaicicd-multi-ue-1xPing-SATest.cfg b/ci-scripts/as_ue/oaicicd-multi-ue-1xPing-SATest.cfg new file mode 100644 index 0000000000..3405f99a59 --- /dev/null +++ b/ci-scripts/as_ue/oaicicd-multi-ue-1xPing-SATest.cfg @@ -0,0 +1,142 @@ +/* UE simulator configuration */ + + +/* UE simulator configuration file version 2021-06-17 + * LTE / 5G Non StandAlone + * Copyright (C) 2019-2021 Amarisoft + */ +{ +#define N_ANTENNA_DL 1 +#define TDD 1 +#define CELL_BANDWIDTH 40 +#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129 + + +log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1", +log_filename: "/tmp/ue0.log", + +/* Enable remote API and Web interface */ +com_addr: "0.0.0.0:9002", + +include "rf_driver/1chan.cfg", + +/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */ + +cell_groups: [{ + group_type: "nr", + multi_ue: true, + cells: [{ + rf_port: 0, + bandwidth: CELL_BANDWIDTH, +#if TDD == 1 + band: 78, + dl_nr_arfcn:621312, + ssb_nr_arfcn:621312, + + //band: 41, + //dl_nr_arfcn:517020, + //ssb_nr_arfcn:516990, +#else + band: 7, + dl_nr_arfcn: 536020, + ssb_nr_arfcn: 535930, + ssb_subcarrier_spacing: 15, +#endif + subcarrier_spacing: 30, + n_antenna_dl: N_ANTENNA_DL, + n_antenna_ul: 1, + rx_to_tx_latency:2, + }], +}], + + +/* Enable it to allow sim_events to be handled remotely */ +//rue_bind_addr: "127.0.10.11", + + + +ue_list: [ + { + /* UE capabilities */ + /* USIM data */ + "ue_id" : 1, + "imsi": "208970100001127", + "K": "fec86ba6eb707ed08905757b1bb44b8f", + "sim_algo":"milenage", + "op": "1006020f0a478bf6b699f15c062e42b3", + as_release: 15, + ue_category: "nr", + apn:"oai", + attach_pdn_type:"ipv4", + default_nssai: [ + { + sst: 1, + sd: 66051, + }, + ], + default_pdu_session_snssai: { + sst: 1, + sd: 66051, + }, + /* Enable it to allow sim_events to be handled remotely */ + //rue_addr: "127.1.0.0", + /* Enable it to create a TUN interface for each UE PDN */ + tun_setup_script: "ue-ifup", + sim_events: [ + { + event: "power_on", + start_time: 5, + }, + { + event: "power_off", + start_time: 30, + } + ] /*end sim events */ + }, /*end UE object 0*/ + { + /* UE capabilities */ + /* USIM data */ + "ue_id" : 2, + "imsi": "208970100001128", + "K": "fec86ba6eb707ed08905757b1bb44b8f", + "sim_algo":"milenage", + "op": "1006020f0a478bf6b699f15c062e42b3", + as_release: 15, + ue_category: "nr", + apn:"oai", + attach_pdn_type:"ipv4", + default_nssai: [ + { + sst: 1, + sd: 66051, + }, + ], + default_pdu_session_snssai: { + sst: 1, + sd: 66051, + }, + /* Enable it to allow sim_events to be handled remotely */ + //rue_addr: "127.1.0.0", + /* Enable it to create a TUN interface for each UE PDN */ + tun_setup_script: "ue-ifup", + sim_events: [ + { + event: "power_on", + start_time: 5, + }, + { + "tag": "ping", + "prog":"oai_ext_app.sh", + start_time: 15, + end_time: 25, + "args":["ping 192.168.70.136"], + "event":"ext_app" + }, + { + event: "power_off", + start_time: 30, + } + ] /*end sim events */ + } /*end UE object 1*/ + ],/*end UE list*/ +}/*end json*/ diff --git a/ci-scripts/as_ue/oaicicd-multi-ue-2xPing-SATest.cfg b/ci-scripts/as_ue/oaicicd-multi-ue-2xPing-SATest.cfg new file mode 100644 index 0000000000..eaa9b894fc --- /dev/null +++ b/ci-scripts/as_ue/oaicicd-multi-ue-2xPing-SATest.cfg @@ -0,0 +1,150 @@ +/* UE simulator configuration */ + + +/* UE simulator configuration file version 2021-06-17 + * LTE / 5G Non StandAlone + * Copyright (C) 2019-2021 Amarisoft + */ +{ +#define N_ANTENNA_DL 1 +#define TDD 1 +#define CELL_BANDWIDTH 40 +#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129 + + +log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1", +log_filename: "/tmp/ue0.log", + +/* Enable remote API and Web interface */ +com_addr: "0.0.0.0:9002", + +include "rf_driver/1chan.cfg", + +/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */ + +cell_groups: [{ + group_type: "nr", + multi_ue: true, + cells: [{ + rf_port: 0, + bandwidth: CELL_BANDWIDTH, +#if TDD == 1 + band: 78, + dl_nr_arfcn:621312, + ssb_nr_arfcn:621312, + + //band: 41, + //dl_nr_arfcn:517020, + //ssb_nr_arfcn:516990, +#else + band: 7, + dl_nr_arfcn: 536020, + ssb_nr_arfcn: 535930, + ssb_subcarrier_spacing: 15, +#endif + subcarrier_spacing: 30, + n_antenna_dl: N_ANTENNA_DL, + n_antenna_ul: 1, + rx_to_tx_latency:2, + }], +}], + + +/* Enable it to allow sim_events to be handled remotely */ +//rue_bind_addr: "127.0.10.11", + + + +ue_list: [ + { + /* UE capabilities */ + /* USIM data */ + "ue_id" : 1, + "imsi": "208970100001127", + "K": "fec86ba6eb707ed08905757b1bb44b8f", + "sim_algo":"milenage", + "op": "1006020f0a478bf6b699f15c062e42b3", + as_release: 15, + ue_category: "nr", + apn:"oai", + attach_pdn_type:"ipv4", + default_nssai: [ + { + sst: 1, + sd: 66051, + }, + ], + default_pdu_session_snssai: { + sst: 1, + sd: 66051, + }, + /* Enable it to allow sim_events to be handled remotely */ + //rue_addr: "127.1.0.0", + /* Enable it to create a TUN interface for each UE PDN */ + tun_setup_script: "ue-ifup", + sim_events: [ + { + event: "power_on", + start_time: 5, + }, + { + "tag": "ping", + "prog":"oai_ext_app.sh", + start_time: 15, + end_time: 25, + "args":["ping 192.168.70.136"], + "event":"ext_app" + }, + { + event: "power_off", + start_time: 30, + } + ] /*end sim events */ + }, /*end UE object 0*/ + { + /* UE capabilities */ + /* USIM data */ + "ue_id" : 2, + "imsi": "208970100001128", + "K": "fec86ba6eb707ed08905757b1bb44b8f", + "sim_algo":"milenage", + "op": "1006020f0a478bf6b699f15c062e42b3", + as_release: 15, + ue_category: "nr", + apn:"oai", + attach_pdn_type:"ipv4", + default_nssai: [ + { + sst: 1, + sd: 66051, + }, + ], + default_pdu_session_snssai: { + sst: 1, + sd: 66051, + }, + /* Enable it to allow sim_events to be handled remotely */ + //rue_addr: "127.1.0.0", + /* Enable it to create a TUN interface for each UE PDN */ + tun_setup_script: "ue-ifup", + sim_events: [ + { + event: "power_on", + start_time: 5, + }, + { + "tag": "ping", + "prog":"oai_ext_app.sh", + start_time: 15, + end_time: 25, + "args":["ping 192.168.70.136"], + "event":"ext_app" + }, + { + event: "power_off", + start_time: 30, + } + ] /*end sim events */ + } /*end UE object 1*/ + ],/*end UE list*/ +}/*end json*/ diff --git a/ci-scripts/as_ue/oaicicd-multi-ue-2xPingSeq-SATest.cfg b/ci-scripts/as_ue/oaicicd-multi-ue-2xPingSeq-SATest.cfg new file mode 100644 index 0000000000..9ebb3e01c5 --- /dev/null +++ b/ci-scripts/as_ue/oaicicd-multi-ue-2xPingSeq-SATest.cfg @@ -0,0 +1,150 @@ +/* UE simulator configuration */ + + +/* UE simulator configuration file version 2021-06-17 + * LTE / 5G Non StandAlone + * Copyright (C) 2019-2021 Amarisoft + */ +{ +#define N_ANTENNA_DL 1 +#define TDD 1 +#define CELL_BANDWIDTH 40 +#define UE_COUNT 2 // number of simulated UEs 208970100001127, 208970100001128, 208970100001129 + + +log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1", +log_filename: "/tmp/ue0.log", + +/* Enable remote API and Web interface */ +com_addr: "0.0.0.0:9002", + +include "rf_driver/1chan.cfg", + +/* If true, allow the simulation of several UEs at the same time and allow dynamic UE creation from remote API */ + +cell_groups: [{ + group_type: "nr", + multi_ue: true, + cells: [{ + rf_port: 0, + bandwidth: CELL_BANDWIDTH, +#if TDD == 1 + band: 78, + dl_nr_arfcn:621312, + ssb_nr_arfcn:621312, + + //band: 41, + //dl_nr_arfcn:517020, + //ssb_nr_arfcn:516990, +#else + band: 7, + dl_nr_arfcn: 536020, + ssb_nr_arfcn: 535930, + ssb_subcarrier_spacing: 15, +#endif + subcarrier_spacing: 30, + n_antenna_dl: N_ANTENNA_DL, + n_antenna_ul: 1, + rx_to_tx_latency:2, + }], +}], + + +/* Enable it to allow sim_events to be handled remotely */ +//rue_bind_addr: "127.0.10.11", + + + +ue_list: [ + { + /* UE capabilities */ + /* USIM data */ + "ue_id" : 1, + "imsi": "208970100001127", + "K": "fec86ba6eb707ed08905757b1bb44b8f", + "sim_algo":"milenage", + "op": "1006020f0a478bf6b699f15c062e42b3", + as_release: 15, + ue_category: "nr", + apn:"oai", + attach_pdn_type:"ipv4", + default_nssai: [ + { + sst: 1, + sd: 66051, + }, + ], + default_pdu_session_snssai: { + sst: 1, + sd: 66051, + }, + /* Enable it to allow sim_events to be handled remotely */ + //rue_addr: "127.1.0.0", + /* Enable it to create a TUN interface for each UE PDN */ + tun_setup_script: "ue-ifup", + sim_events: [ + { + event: "power_on", + start_time: 5, + }, + { + "tag": "ping", + "prog":"oai_ext_app.sh", + start_time: 20, + end_time: 30, + "args":["ping 192.168.70.136"], + "event":"ext_app" + }, + { + event: "power_off", + start_time: 60, + } + ] /*end sim events */ + }, /*end UE object 0*/ + { + /* UE capabilities */ + /* USIM data */ + "ue_id" : 2, + "imsi": "208970100001128", + "K": "fec86ba6eb707ed08905757b1bb44b8f", + "sim_algo":"milenage", + "op": "1006020f0a478bf6b699f15c062e42b3", + as_release: 15, + ue_category: "nr", + apn:"oai", + attach_pdn_type:"ipv4", + default_nssai: [ + { + sst: 1, + sd: 66051, + }, + ], + default_pdu_session_snssai: { + sst: 1, + sd: 66051, + }, + /* Enable it to allow sim_events to be handled remotely */ + //rue_addr: "127.1.0.0", + /* Enable it to create a TUN interface for each UE PDN */ + tun_setup_script: "ue-ifup", + sim_events: [ + { + event: "power_on", + start_time: 5, + }, + { + "tag": "ping", + "prog":"oai_ext_app.sh", + start_time: 40, + end_time: 50, + "args":["ping 192.168.70.136"], + "event":"ext_app" + }, + { + event: "power_off", + start_time: 60, + } + ] /*end sim events */ + } /*end UE object 1*/ + ],/*end UE list*/ +}/*end json*/ diff --git a/ci-scripts/as_ue/oaicicd-ue-Ping-SATest.cfg b/ci-scripts/as_ue/oaicicd-ue-Ping-SATest.cfg new file mode 100644 index 0000000000..ba22cbb233 --- /dev/null +++ b/ci-scripts/as_ue/oaicicd-ue-Ping-SATest.cfg @@ -0,0 +1,113 @@ +/* UE simulator configuration */ + + + +/* UE simulator configuration file version 2021-06-17 + * LTE / 5G Non StandAlone + * Copyright (C) 2019-2021 Amarisoft + */ +{ +#define N_ANTENNA_DL 1 +#define TDD 1 +#define CELL_BANDWIDTH 40 + + + log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1", + log_filename: "/tmp/ue1.log", + + /* Enable remote API and Web interface */ + com_addr: "0.0.0.0:9002", + + include "rf_driver/1chan.cfg", + + /* If true, allow the simulation of several UEs at the same time and + allow dynamic UE creation from remote API */ + +cell_groups: [{ + group_type: "nr", + multi_ue: false, + cells: [{ + rf_port: 0, + bandwidth: CELL_BANDWIDTH, +#if TDD == 1 + band: 78, + dl_nr_arfcn:621312, + ssb_nr_arfcn:621312, + + //band: 41, + //dl_nr_arfcn:517020, + //ssb_nr_arfcn:516990, +#else + band: 7, + dl_nr_arfcn: 536020, + ssb_nr_arfcn: 535930, + ssb_subcarrier_spacing: 15, +#endif + subcarrier_spacing: 30, + n_antenna_dl: N_ANTENNA_DL, + n_antenna_ul: 1, + rx_to_tx_latency:2, + }], + }], + + + + + /* Enable it to allow sim_events to be handled remotely */ + //rue_bind_addr: "127.0.10.11", + + ue_list: [ + { + /* UE capabilities */ + + /* USIM data */ + + + "imsi": "208970100001127", + "K": "fec86ba6eb707ed08905757b1bb44b8f", + "sim_algo":"milenage", + "op": "1006020f0a478bf6b699f15c062e42b3", + + + as_release: 15, + ue_category: "nr", + apn:"oai", + attach_pdn_type:"ipv4", + default_nssai: [ + { + sst: 1, + sd: 66051, + }, + ], + + default_pdu_session_snssai: { + sst: 1, + sd: 66051, + }, + + + /* Enable it to allow sim_events to be handled remotely */ + //rue_addr: "127.1.0.0", + + /* Enable it to create a TUN interface for each UE PDN */ + tun_setup_script: "ue-ifup", + + sim_events: [{ + event: "power_on", + start_time: 5, + }, { + "tag": "ping", + "prog":"oai_ext_app.sh", + start_time: 15, + end_time: 25, + "args":["ping 192.168.70.136"], + "event":"ext_app" + + }, + { + event: "power_off", + start_time: 30, + }] + } + ], +} diff --git a/ci-scripts/as_ue/oaicicd-ue-iperf-SATest.cfg b/ci-scripts/as_ue/oaicicd-ue-iperf-SATest.cfg new file mode 100644 index 0000000000..841dafb746 --- /dev/null +++ b/ci-scripts/as_ue/oaicicd-ue-iperf-SATest.cfg @@ -0,0 +1,109 @@ +/* UE simulator configuration */ + + + +/* UE simulator configuration file version 2021-06-17 + * LTE / 5G Non StandAlone + * Copyright (C) 2019-2021 Amarisoft + */ +{ +#define N_ANTENNA_DL 1 +#define TDD 1 +#define CELL_BANDWIDTH 20 + + + log_options: "all.level=error,all.max_size=0,nas.level=debug,nas.max_size=1,rrc.level=debug,rrc.max_size=1", + log_filename: "/tmp/ue0.log", + + /* Enable remote API and Web interface */ + com_addr: "0.0.0.0:9002", + + include "rf_driver/1chan.cfg", + + /* If true, allow the simulation of several UEs at the same time and + allow dynamic UE creation from remote API */ + +cell_groups: [{ + group_type: "nr", + multi_ue: false, + cells: [{ + rf_port: 0, + bandwidth: CELL_BANDWIDTH, +#if TDD == 1 + // band: 78, + // dl_nr_arfcn:621312, + // ssb_nr_arfcn:621312,*/ + + band: 41, + dl_nr_arfcn:517020, + ssb_nr_arfcn:516990, +#else + band: 7, + dl_nr_arfcn: 536020, + ssb_nr_arfcn: 535930, + ssb_subcarrier_spacing: 15, +#endif + subcarrier_spacing: 30, + n_antenna_dl: N_ANTENNA_DL, + n_antenna_ul: 1, + rx_to_tx_latency:2, + }], + }], + + + + + /* Enable it to allow sim_events to be handled remotely */ + //rue_bind_addr: "127.0.10.11", + + ue_list: [ + { + /* UE capabilities */ + + /* USIM data */ + + "imsi": "208970100001127", + "K": "fec86ba6eb707ed08905757b1bb44b8f", + "sim_algo":"milenage", + "op": "1006020f0a478bf6b699f15c062e42b3", + + + as_release: 15, + ue_category: "nr", + apn:"oai", + attach_pdn_type:"ipv4", + default_nssai: [ + { + sst: 1, + sd: 1, + }, + ], + + default_pdu_session_snssai: { + sst: 1, + sd: 1, + }, + + + /* Enable it to allow sim_events to be handled remotely */ + //rue_addr: "127.1.0.0", + + /* Enable it to create a TUN interface for each UE PDN */ + tun_setup_script: "ue-ifup", + + sim_events: [{ + event: "power_on", + start_time: 5, + }, { + event: "ext_app", + start_time: 15, + end_time: 25, + prog: "ext_app.sh", + args: ["iperf", " -c 172.21.10.5", " -u"," -b 1M"," -i 1"," -t 10"] + }, { + event: "power_off", + start_time: 30, + }] + } + ], +} diff --git a/ci-scripts/ci_ueinfra.yaml b/ci-scripts/ci_ueinfra.yaml index 51acb75968..e06b0e39b6 100644 --- a/ci-scripts/ci_ueinfra.yaml +++ b/ci-scripts/ci_ueinfra.yaml @@ -39,6 +39,46 @@ nrmodule2_quectel: StartCommands : - sudo -S ip link set dev wwan1 mtu 1500 MTU : 1500 + +#single UE single ping +amarisoft_ue_1: + ID: amarisoft_ue_1 + State : enabled + Kind : amarisoft + #not required for AS config but needed for py script + WakeupScript : none + DetachScript : none + #end + Cmd : /root/NV17-12-21/ue/lteue + Config : /root/NV17-12-21/ue/config/oaicicd-ue-Ping-SATest.cfg + Duration : 60 + Ping : /tmp/test_ue1.log + HostIPAddress : 192.168.18.89 + HostUsername : root + HostPassword : toor + HostSourceCodePath : /tmp + + +#an other scenario example +amarisoft_ue_2: + ID: amarisoft_ue_2 + State : enabled + Kind : amarisoft + #not required for AS config but needed for py script + WakeupScript : none + DetachScript : none + #end + Cmd : /root/NV17-12-21/ue/lteue + Config : /root/NV17-12-21/ue/config/xxxxxxx.cfg #to be updated for an other scenario + Duration : 60 + Ping : /tmp/test_ue1.log #to be updated fo an other scenario + HostIPAddress : 192.168.18.89 + HostUsername : root + HostPassword : toor + HostSourceCodePath : /tmp + + +#do not remove dummy: ID: '' State : '' diff --git a/ci-scripts/cls_amarisoft_ue.py b/ci-scripts/cls_amarisoft_ue.py new file mode 100644 index 0000000000..3407ec9046 --- /dev/null +++ b/ci-scripts/cls_amarisoft_ue.py @@ -0,0 +1,75 @@ +# * 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 +# */ +#--------------------------------------------------------------------- +# +# Required Python Version +# Python 3.x +# +#--------------------------------------------------------------------- + +#to use isfile +import os +import sys +import logging +#to create a SSH object locally in the methods +import sshconnection +#time.sleep +import time + + +import re +import subprocess + +from datetime import datetime + + +class AS_UE: + + def __init__(self,Module): + #create attributes as in the UE dictionary + for k, v in Module.items(): + setattr(self, k, v) + + + + +#-----------------$ +#PUBLIC Methods$ +#-----------------$ + + def WaitEndScenario(self): + logging.debug('waiting for scenario duration') + time.sleep(int(self.Duration)) + + def KillASUE(self): + mySSH = sshconnection.SSHConnection() + mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword) + mySSH.command('killall --signal SIGKILL lteue-avx2', '#', 5) + mySSH.close() + + def RunScenario(self): + mySSH = sshconnection.SSHConnection() + mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword) + cmd='echo $USER; nohup '+self.Cmd + ' ' + self.Config + ' &' + mySSH.command(cmd,'#',5) + mySSH.close() + + + diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py index 5d89a7b2e0..ae6a26fc18 100644 --- a/ci-scripts/cls_oaicitest.py +++ b/ci-scripts/cls_oaicitest.py @@ -55,6 +55,7 @@ import constants as CONST import sshconnection import cls_module_ue +import cls_amarisoft_ue import cls_ci_ueinfra #class defining the multi Ue infrastrucure logging.getLogger("matplotlib").setLevel(logging.WARNING) @@ -418,49 +419,62 @@ class OaiCiTest(): for job in multi_jobs: job.join() HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK) - else: #if an ID is specified, it is a module from the yaml infrastructure file - #RH - Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id]) - Module_UE.ue_trace=ue_trace - is_module=Module_UE.CheckCMProcess(EPC.Type) - if is_module: - Module_UE.EnableTrace() - time.sleep(5) + else: #if an ID is specified, it is a UE from the yaml infrastructure file + ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind'] + logging.debug("Detected UE Kind : " + ue_kind) - # Looping attach / detach / wait to be successful at least once - cnt = 0 - status = -1 - while cnt < 4: - Module_UE.Command("wup") - logging.debug("Waiting for IP address to be assigned") - time.sleep(20) - logging.debug("Retrieve IP address") - status=Module_UE.GetModuleIPAddress() - if status==0: - cnt = 10 - else: - cnt += 1 - Module_UE.Command("detach") + #case it is a quectel module (only 1 at a time supported at the moment) + if ue_kind == 'quectel': + Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id]) + Module_UE.ue_trace=ue_trace + is_module=Module_UE.CheckCMProcess(EPC.Type) + if is_module: + Module_UE.EnableTrace() + time.sleep(5) + + # Looping attach / detach / wait to be successful at least once + cnt = 0 + status = -1 + while cnt < 4: + Module_UE.Command("wup") + logging.debug("Waiting for IP address to be assigned") time.sleep(20) + logging.debug("Retrieve IP address") + status=Module_UE.GetModuleIPAddress() + if status==0: + cnt = 10 + else: + cnt += 1 + Module_UE.Command("detach") + time.sleep(20) - if cnt == 10 and status == 0: - HTML.CreateHtmlTestRow(Module_UE.UEIPAddress, 'OK', CONST.ALL_PROCESSES_OK) - logging.debug('UE IP addresss : '+ Module_UE.UEIPAddress) - #execute additional commands from yaml file after UE attach - SSH = sshconnection.SSHConnection() - SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword) - if hasattr(Module_UE,'StartCommands'): - for startcommand in Module_UE.StartCommands: - cmd = 'echo ' + Module_UE.HostPassword + ' | ' + startcommand - SSH.command(cmd,'\$',5) - SSH.close() - #check that the MTU is as expected / requested - Module_UE.CheckModuleMTU() - else: #status==-1 failed to retrieve IP address - HTML.CreateHtmlTestRow('N/A', 'KO', CONST.UE_IP_ADDRESS_ISSUE) - self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS) - return - + if cnt == 10 and status == 0: + HTML.CreateHtmlTestRow(Module_UE.UEIPAddress, 'OK', CONST.ALL_PROCESSES_OK) + logging.debug('UE IP addresss : '+ Module_UE.UEIPAddress) + #execute additional commands from yaml file after UE attach + SSH = sshconnection.SSHConnection() + SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword) + if hasattr(Module_UE,'StartCommands'): + for startcommand in Module_UE.StartCommands: + cmd = 'echo ' + Module_UE.HostPassword + ' | ' + startcommand + SSH.command(cmd,'\$',5) + SSH.close() + #check that the MTU is as expected / requested + Module_UE.CheckModuleMTU() + else: #status==-1 failed to retrieve IP address + HTML.CreateHtmlTestRow('N/A', 'KO', CONST.UE_IP_ADDRESS_ISSUE) + self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS) + return + + #case it is a amarisoft ue (only 1 at a time supported at the moment) + elif ue_kind == 'amarisoft': + AS_UE = cls_amarisoft_ue.AS_UE(InfraUE.ci_ue_infra[self.ue_id]) + AS_UE.RunScenario() + AS_UE.WaitEndScenario() + AS_UE.KillASUE() + + else: + logging.debug("Incorrect UE Kind was detected") def InitializeOAIUE(self,HTML,RAN,EPC,COTS_UE,InfraUE,CONTAINERS): @@ -1569,16 +1583,24 @@ class OaiCiTest(): SSH = sshconnection.SSHConnection() # Launch ping on the EPC side (true for ltebox and old open-air-cn) # But for OAI-Rel14-CUPS, we launch from python executor + ping_status = 0 launchFromEpc = True launchFromModule = False + launchFromASUE = False if re.match('OAI-Rel14-CUPS', EPC.Type, re.IGNORECASE): launchFromEpc = False #if module, ping from module to EPC if self.ue_id!='': - launchFromEpc = False - launchfromModule = True - - ping_time = re.findall("-c (\d+)",str(self.ping_args)) + if (re.match('amarisoft', self.ue_id, re.IGNORECASE)): + logging.debug("Ping analysis from amarisoft scenario") + launchFromEpc = False + launchFromASUE = True + else: + launchFromEpc = False + launchFromModule = True + #no ping args for ASUE + if self.ping_args!='': + ping_time = re.findall("-c (\d+)",str(self.ping_args)) if launchFromEpc: SSH.open(EPC.IPAddress, EPC.UserName, EPC.Password) @@ -1596,14 +1618,14 @@ class OaiCiTest(): #copy the ping log file to have it locally for analysis (ping stats) SSH.copyin(EPC.IPAddress, EPC.UserName, EPC.Password, EPC.SourceCodePath + '/scripts/ping_' + self.testCase_id + '_' + device_id + '.log', '.') else: - if launchfromModule == False: + if (launchFromModule == False) and (launchFromASUE == False): #ping log file is on the python executor cmd = 'ping ' + self.ping_args + ' ' + UE_IPAddress + ' 2>&1 > ping_' + self.testCase_id + '_' + device_id + '.log' message = cmd + '\n' logging.debug(cmd) ret = subprocess.run(cmd, shell=True) ping_status = ret.returncode - #copy the ping log file to an other folder for log collection (source and destination are EPC) + #copy the ping log file to an other folder for log collection (source and desti elif (launchfromModule == True) and (launchfromASUE == False): #launch from Modulenation are EPC) SSH.copyout(EPC.IPAddress, EPC.UserName, EPC.Password, 'ping_' + self.testCase_id + '_' + device_id + '.log', EPC.SourceCodePath + '/scripts') #copy the ping log file to have it locally for analysis (ping stats) logging.debug(EPC.SourceCodePath + 'ping_' + self.testCase_id + '_' + device_id + '.log') @@ -1613,7 +1635,8 @@ class OaiCiTest(): #cat is executed on EPC SSH.command('cat ' + EPC.SourceCodePath + '/scripts/ping_' + self.testCase_id + '_' + device_id + '.log', '\$', 5) ping_log_file='/scripts/ping_' + self.testCase_id + '_' + device_id + '.log' - else: #launch from Module + + elif (launchFromModule == True) and (launchFromASUE == False): #launch from Module SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword) #target address is different depending on EPC type if re.match('OAI-Rel14-Docker', EPC.Type, re.IGNORECASE): @@ -1625,13 +1648,25 @@ class OaiCiTest(): #ping from module NIC rather than IP address to make sure round trip is over the air cmd = 'ping -I ' + Module_UE.UENetwork + ' ' + self.ping_args + ' ' + Target + ' 2>&1 > ping_' + self.testCase_id + '_' + self.ue_id + '.log' SSH.command(cmd,'\$',int(ping_time[0])*1.5) + #copy the ping log file to have it locally for analysis (ping stats) SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, 'ping_' + self.testCase_id + '_' + self.ue_id + '.log', '.') #cat is executed locally SSH.command('cat ping_' + self.testCase_id + '_' + self.ue_id + '.log', '\$', 5) ping_log_file='ping_' + self.testCase_id + '_' + self.ue_id + '.log' - ping_status=0 + + elif (launchFromASUE == True): + #ping was already executed when running scenario + #we only need to retrieve ping log file, whose location is in the ci_ueinfra.yaml + logging.debug("Get Ping log from AS server : " + Module_UE.Ping) + SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, Module_UE.Ping, '.') + path,ping_log_file = os.path.split(Module_UE.Ping) + SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword) + SSH.command('cat ' + Module_UE.Ping, '\#', 5) + + else: + ping_status=-1 # TIMEOUT CASE if ping_status < 0: @@ -1679,28 +1714,30 @@ class OaiCiTest(): #adding extra ping stats from local file #ping_log_file variable is defined above in this function, depending on device/ue - logging.debug('Analyzing Ping log file : ' + os.getcwd() + '/' + ping_log_file) - ping_stat=GetPingTimeAnalysis(RAN,ping_log_file,self.ping_rttavg_threshold) ping_stat_msg='' - if (ping_stat!=-1) and (len(ping_stat)!=0): - ping_stat_msg+='Ping stats before removing largest value : \n' - ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_0'])) + 'ms \n' - ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_0'])) + 'ms \n' - ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_0'])) + 'ms \n' - ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_0'])) + 'ms \n' - ping_stat_msg+='Max Index : ' + str(ping_stat['max_loc']) + '\n' - ping_stat_msg+='Ping stats after removing largest value : \n' - ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_1'])) + 'ms \n' - ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_1'])) + 'ms \n' - ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_1'])) + 'ms \n' - ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_1'])) + 'ms \n' + if launchFromASUE == False : #skip in case of AS UE (for the moment) + logging.debug('Analyzing Ping log file : ' + os.getcwd() + '/' + ping_log_file) + ping_stat=GetPingTimeAnalysis(RAN,ping_log_file,self.ping_rttavg_threshold) + + if (ping_stat!=-1) and (len(ping_stat)!=0): + ping_stat_msg+='Ping stats before removing largest value : \n' + ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_0'])) + 'ms \n' + ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_0'])) + 'ms \n' + ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_0'])) + 'ms \n' + ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_0'])) + 'ms \n' + ping_stat_msg+='Max Index : ' + str(ping_stat['max_loc']) + '\n' + ping_stat_msg+='Ping stats after removing largest value : \n' + ping_stat_msg+='RTT(Min) : ' + str("{:.2f}".format(ping_stat['min_1'])) + 'ms \n' + ping_stat_msg+='RTT(Mean) : ' + str("{:.2f}".format(ping_stat['mean_1'])) + 'ms \n' + ping_stat_msg+='RTT(Median) : ' + str("{:.2f}".format(ping_stat['median_1'])) + 'ms \n' + ping_stat_msg+='RTT(Max) : ' + str("{:.2f}".format(ping_stat['max_1'])) + 'ms \n' #building html message qMsg = pal_msg + '\n' + min_msg + '\n' + avg_msg + '\n' + max_msg + '\n' + ping_stat_msg #checking packet loss compliance packetLossOK = True - if packetloss is not None: + if (packetloss is not None) : if float(packetloss) > float(self.ping_packetloss_threshold): qMsg += '\nPacket Loss too high' logging.debug('\u001B[1;37;41m Packet Loss too high; Target: '+ self.ping_packetloss_threshold + '%\u001B[0m') @@ -1728,6 +1765,7 @@ class OaiCiTest(): lock.release() SSH.close() except: + logging.debug('exit from Ping_Common except') os.kill(os.getppid(),signal.SIGUSR1) def PingNoS1_wrong_exit(self, qMsg,HTML): @@ -1855,11 +1893,21 @@ class OaiCiTest(): HTML.CreateHtmlTestRow(self.ping_args, 'KO', CONST.UE_IP_ADDRESS_ISSUE) self.AutoTerminateUEandeNB(HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS) return - else: - self.UEIPAddresses=[] - Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id]) - Module_UE.GetModuleIPAddress() - self.UEIPAddresses.append(Module_UE.UEIPAddress) + else: #if an ID is specified, it is a UE from the yaml infrastructure file + ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind'] + logging.debug("Detected UE Kind : " + ue_kind) + + if ue_kind == 'quectel': + self.UEIPAddresses=[] + Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id]) + Module_UE.GetModuleIPAddress() + self.UEIPAddresses.append(Module_UE.UEIPAddress) + elif ue_kind == 'amarisoft': + self.UEIPAddresses=['AS UE IP'] + Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id]) + else: + logging.debug("Incorrect UE Kind was detected") + logging.debug(self.UEIPAddresses) multi_jobs = [] i = 0 @@ -1870,6 +1918,7 @@ class OaiCiTest(): device_id = self.UEDevices[i] else: device_id = Module_UE.ID + "-" + Module_UE.Kind + logging.debug(device_id) p = Process(target = self.Ping_common, args = (lock,UE_IPAddress,device_id,status_queue,EPC,Module_UE,RAN,)) p.daemon = True p.start() @@ -3447,16 +3496,23 @@ class OaiCiTest(): job.join() HTML.CreateHtmlTestRow('N/A', 'OK', CONST.ALL_PROCESSES_OK) else: #if an ID is specified, it is a module from the yaml infrastructure file - Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id]) - Module_UE.ue_trace=ue_trace - Module_UE.Command("detach") - Module_UE.DisableTrace() - Module_UE.DisableCM() - archive_destination=Module_UE.LogCollect() - if Module_UE.ue_trace=='yes': - HTML.CreateHtmlTestRow('QLog at : '+archive_destination, 'OK', CONST.ALL_PROCESSES_OK) + ue_kind = InfraUE.ci_ue_infra[self.ue_id]['Kind'] + logging.debug("Detected UE Kind : " + ue_kind) + if ue_kind == 'quectel': + Module_UE = cls_module_ue.Module_UE(InfraUE.ci_ue_infra[self.ue_id]) + Module_UE.ue_trace=ue_trace + Module_UE.Command("detach") + Module_UE.DisableTrace() + Module_UE.DisableCM() + archive_destination=Module_UE.LogCollect() + if Module_UE.ue_trace=='yes': + HTML.CreateHtmlTestRow('QLog at : '+archive_destination, 'OK', CONST.ALL_PROCESSES_OK) + else: + HTML.CreateHtmlTestRow('QLog trace is disabled', 'OK', CONST.ALL_PROCESSES_OK) + elif ue_kind == 'amarisoft': + HTML.CreateHtmlTestRow('AS UE is already terminated', 'OK', CONST.ALL_PROCESSES_OK) else: - HTML.CreateHtmlTestRow('QLog trace is disabled', 'OK', CONST.ALL_PROCESSES_OK) + logging.debug("Incorrect UE Kind was detected") def TerminateOAIUE(self,HTML,RAN,COTS_UE,EPC,InfraUE,CONTAINERS): SSH = sshconnection.SSHConnection() diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf new file mode 100644 index 0000000000..0feb0bb811 --- /dev/null +++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf @@ -0,0 +1,308 @@ +Active_gNBs = ( "gNB-OAI"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +gNBs = +( + { + ////////// Identification parameters: + gNB_CU_ID = 0xe00; + +# cell_type = "CELL_MACRO_GNB"; + + gNB_name = "gNB-OAI"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = 1; + + plmn_list = ({ + mcc = 208; + mnc = 97; + mnc_length = 2; + snssaiList = ( + { + sst = 1; + sd = 0x1; // 0 false, else true + }, + { + sst = 1; + sd = 0x010203; // 0 false, else true + }, + { + sst = 1; + sd = 0x112233; // 0 false, else true + } + ); + }); + + nr_cellid = 12345678L + +# tr_s_preference = "local_mac" + + ////////// Physical parameters: + + ssb_SubcarrierOffset = 0; + pdsch_AntennaPorts = 1; + pusch_AntennaPorts = 2; + ul_prbblacklist = "51,52,53,54" + do_SRS = 1; + + pdcch_ConfigSIB1 = ( + { + controlResourceSetZero = 11; + searchSpaceZero = 0; + } + ); + + servingCellConfigCommon = ( + { + #spCellConfigCommon + + physCellId = 0; + +# downlinkConfigCommon + #frequencyInfoDL + # this is 3301.68 MHz + 22*12*30e-3 MHz = 3309.6 + #absoluteFrequencySSB = 620640; + # this is 3300.60 MHz + 53*12*30e-3 MHz = 3319.68 + absoluteFrequencySSB = 621312; + # this is 3503.28 MHz + 22*12*30e-3 MHz = 3511.2 + #absoluteFrequencySSB = 634080; + # this is 3600.48 MHz + #absoluteFrequencySSB = 640032; + #dl_frequencyBand = 78; + # this is 3301.68 MHz + #dl_absoluteFrequencyPointA = 620112; + # this is 3300.60 MHz + dl_absoluteFrequencyPointA = 620040; + # this is 3502.56 MHz + #dl_absoluteFrequencyPointA = 633552; + # this is 3600.48 MHz + #dl_absoluteFrequencyPointA = 640032; + #scs-SpecificCarrierList + dl_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + dl_subcarrierSpacing = 1; + dl_carrierBandwidth = 106; + #initialDownlinkBWP + #genericParameters + # this is RBstart=0,L=106 (275*(L-1))+RBstart + initialDLBWPlocationAndBandwidth = 28875; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialDLBWPsubcarrierSpacing = 1; + #pdcch-ConfigCommon + initialDLBWPcontrolResourceSetZero = 11; + initialDLBWPsearchSpaceZero = 0; + + #uplinkConfigCommon + #frequencyInfoUL + ul_frequencyBand = 78; + #scs-SpecificCarrierList + ul_offstToCarrier = 0; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + ul_subcarrierSpacing = 1; + ul_carrierBandwidth = 106; + pMax = 20; + #initialUplinkBWP + #genericParameters + initialULBWPlocationAndBandwidth = 28875; +# subcarrierSpacing +# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120 + initialULBWPsubcarrierSpacing = 1; + #rach-ConfigCommon + #rach-ConfigGeneric + prach_ConfigurationIndex = 98; +#prach_msg1_FDM +#0 = one, 1=two, 2=four, 3=eight + prach_msg1_FDM = 0; + prach_msg1_FrequencyStart = 0; + zeroCorrelationZoneConfig = 12; + preambleReceivedTargetPower = -104; +#preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200) + preambleTransMax = 6; +#powerRampingStep +# 0=dB0,1=dB2,2=dB4,3=dB6 + powerRampingStep = 1; +#ra_ReponseWindow +#1,2,4,8,10,20,40,80 + ra_ResponseWindow = 4; +#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 = 3; +#oneHalf (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, + + msg3_DeltaPreamble = 1; + p0_NominalWithGrant =-90; + +# pucch-ConfigCommon setup : +# pucchGroupHopping +# 0 = neither, 1= group hopping, 2=sequence hopping + pucchGroupHopping = 0; + hoppingId = 40; + p0_nominal = -90; +# ssb_PositionsInBurs_BitmapPR +# 1=short, 2=medium, 3=long + ssb_PositionsInBurst_PR = 2; + ssb_PositionsInBurst_Bitmap = 1; + +# 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 = 6; + nrofDownlinkSlots = 7; + nrofDownlinkSymbols = 6; + nrofUplinkSlots = 2; + nrofUplinkSymbols = 4; + + ssPBCH_BlockPower = -25; + } + + ); + + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + ////////// AMF parameters: + amf_ip_address = ( { ipv4 = "CI_MME_IP_ADDR"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + + GNB_INTERFACE_NAME_FOR_NG_AMF = "em1"; + GNB_IPV4_ADDRESS_FOR_NG_AMF = "CI_GNB_IP_ADDR"; + GNB_INTERFACE_NAME_FOR_NGU = "em1"; + GNB_IPV4_ADDRESS_FOR_NGU = "CI_GNB_IP_ADDR"; + GNB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + + } +); + +MACRLCs = ( + { + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "local_RRC"; +# pusch_TargetSNRx10 = 200; +# pucch_TargetSNRx10 = 150; + ulsch_max_frame_inactivity = 0; + } +); + +L1s = ( +{ + num_cc = 1; + tr_n_preference = "local_mac"; + thread_pool_size = 8; + prach_dtx_threshold = 120; +# pucch0_dtx_threshold = 150; +} +); + +RUs = ( + { + local_rf = "yes" + nb_tx = 2 + nb_rx = 2 + att_tx = 0 + att_rx = 0; + bands = [78]; + max_pdschReferenceSignalPower = -27; + max_rxgain = 75; + eNB_instances = [0]; + ##beamforming 1x2 matrix: 1 layer x 2 antennas + bf_weights = [0x00007fff, 0x0000]; + ##beamforming 1x4 matrix: 1 layer x 4 antennas + #bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000]; + ## beamforming 2x2 matrix: + # bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff]; + ## beamforming 4x4 matrix: + #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff]; + sf_extension = 0 + sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" + } +); + +THREAD_STRUCT = ( + { + #three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT" + parallel_config = "PARALLEL_SINGLE_THREAD"; + #two option for worker "WORKER_DISABLE" or "WORKER_ENABLE" + worker_config = "WORKER_ENABLE"; + } +); + +#security = { + # preferred ciphering algorithms + # the first one of the list that an UE supports in chosen + # valid values: nea0, nea1, nea2, nea3 +# ciphering_algorithms = ( "nea2" ); + + # preferred integrity algorithms + # the first one of the list that an UE supports in chosen + # valid values: nia0, nia1, nia2, nia3 +# integrity_algorithms = ( "nia2", "nia0" ); + + # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter + # what 'ciphering_algorithms' configures; same thing for 'drb_integrity' +# drb_ciphering = "yes"; +# drb_integrity = "no"; +#}; + + 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"; + f1ap_log_level ="debug"; + }; diff --git a/ci-scripts/epc.py b/ci-scripts/epc.py index 9ed9f06d8e..0fc37d4ead 100644 --- a/ci-scripts/epc.py +++ b/ci-scripts/epc.py @@ -66,6 +66,8 @@ class EPCManagement(): self.mmeConfFile = 'mme.conf' self.yamlPath = '' self.isMagmaUsed = False + self.cfgDeploy = '--type start-mini --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap' #from xml, 'mini' is default normal for docker-network.py + self.cfgUnDeploy = '--type stop-mini --fqdn yes --scenario 1' #from xml, 'mini' is default normal for docker-network.py #----------------------------------------------------------- @@ -251,8 +253,8 @@ class EPCManagement(): logging.debug('Starting OAI CN5G') mySSH.command('if [ -d ' + self.SourceCodePath + '/scripts ]; then echo ' + self.Password + ' | sudo -S rm -Rf ' + self.SourceCodePath + '/scripts ; fi', '\$', 5) mySSH.command('mkdir -p ' + self.SourceCodePath + '/scripts', '\$', 5) - mySSH.command('cd /opt/oai-cn5g-fed/docker-compose', '\$', 5) - mySSH.command('./core-network.sh start nrf spgwu', '\$', 60) + mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5) + mySSH.command('python3 ./core-network.py '+self.cfgDeploy, '\$', 60) time.sleep(2) mySSH.command('docker-compose -p 5gcn ps -a', '\$', 60) if mySSH.getBefore().count('Up (healthy)') != 6: @@ -530,8 +532,8 @@ class EPCManagement(): mySSH.command('docker logs ' + c + ' > ' + self.SourceCodePath + '/logs/' + c + '.log', '\$', 5) logging.debug('Terminating OAI CN5G') - mySSH.command('cd /opt/oai-cn5g-fed/docker-compose', '\$', 5) - mySSH.command('./core-network.sh stop nrf spgwu', '\$', 60) + mySSH.command('cd /opt/oai-cn5g-fed-v1.3/docker-compose', '\$', 5) + mySSH.command('python3 ./core-network.py '+self.cfgUnDeploy, '\$', 60) mySSH.command('docker volume prune --force || true', '\$', 60) time.sleep(2) mySSH.command('tshark -r /tmp/oai-cn5g.pcap | egrep --colour=never "Tracking area update" ','\$', 30) diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 5357a90a3d..ad9d97b787 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -376,6 +376,16 @@ def GetParametersFromXML(action): if (string_field is not None): EPC.yamlPath = string_field + elif action == 'Initialize_5GCN': + string_field = test.findtext('args') + if (string_field is not None): + EPC.cfgDeploy = string_field + + elif action == 'Terminate_5GCN': + string_field = test.findtext('args') + if (string_field is not None): + EPC.cfgUnDeploy = string_field + elif action == 'Deploy_Object' or action == 'Undeploy_Object': eNB_instance=test.findtext('eNB_instance') if (eNB_instance is None): diff --git a/ci-scripts/sshconnection.py b/ci-scripts/sshconnection.py index d5b4a4c83e..dca3daa817 100644 --- a/ci-scripts/sshconnection.py +++ b/ci-scripts/sshconnection.py @@ -56,6 +56,7 @@ class SSHConnection(): self.picocom_closure = True def open(self, ipaddress, username, password): + prompt = "#" if username == "root" else "\$" count = 0 connect_status = False while count < 4: @@ -68,7 +69,7 @@ class SSHConnection(): self.sshresponse = self.ssh.expect(['password:', username + '@']) if self.sshresponse == 0: self.ssh.sendline(password) - self.sshresponse = self.ssh.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) + self.sshresponse = self.ssh.expect([prompt, 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) if self.sshresponse == 0: count = 10 connect_status = True @@ -76,7 +77,7 @@ class SSHConnection(): logging.debug('self.sshresponse = ' + str(self.sshresponse)) elif self.sshresponse == 1: self.ssh.sendline(password) - self.sshresponse = self.ssh.expect(['\$', 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) + self.sshresponse = self.ssh.expect([prompt, 'Permission denied', 'password:', pexpect.EOF, pexpect.TIMEOUT]) if self.sshresponse == 0: count = 10 connect_status = True @@ -84,7 +85,7 @@ class SSHConnection(): logging.debug('self.sshresponse = ' + str(self.sshresponse)) elif self.sshresponse == 2: # Checking if we are really on the remote client defined by its IP address - self.command('stdbuf -o0 ifconfig | egrep --color=never "inet addr:|inet "', '\$', 5) + self.command('stdbuf -o0 ifconfig | egrep --color=never "inet addr:|inet "', prompt, 5) result = re.search(str(ipaddress), str(self.ssh.before)) if result is None: self.close() @@ -100,7 +101,7 @@ class SSHConnection(): time.sleep(1) count += 1 if connect_status: - self.command('unset HISTFILE', '\$', 5, silent=True) + self.command('unset HISTFILE', prompt, 5, silent=True) else: sys.exit('SSH Connection Failed') self.ipaddress = ipaddress diff --git a/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml b/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml new file mode 100644 index 0000000000..68df2873d9 --- /dev/null +++ b/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml @@ -0,0 +1,87 @@ + + + TEST-SA-FR1-Tab1 + SA Ping DL UL with 1 AS UE + tasks + 1 + + 040000 + 000001 + 010000 + 000002 + 050000 + 080000 + + + + + Initialize_UE + Initialize Amarisoft UE 1x + amarisoft_ue_1 + + + + + Initialize_eNB + Initialize gNB + -O ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf --sa -q --usrp-tx-thread-config 1 --T_stdout 2 --log_config.global_log_options level,nocolor,time + 0 + 0 + nr + yes + yes + datalog_rt_stats.2x2.yaml + 192.168.18.252 + + + + Ping + Ping from AS UEc + amarisoft_ue_1 + 1 + + + + IdleSleep + Sleep + 60 + + + + IdleSleep + Sleep + 20 + + + + + Terminate_eNB + Terminate gNB + 0 + 0 + nr + + + + diff --git a/ci-scripts/xml_files/sa_cn5g_asue_closure.xml b/ci-scripts/xml_files/sa_cn5g_asue_closure.xml new file mode 100644 index 0000000000..b856134e36 --- /dev/null +++ b/ci-scripts/xml_files/sa_cn5g_asue_closure.xml @@ -0,0 +1,38 @@ + + + cn5g-closure + CN5G-Closure + log-out + +060000 + + + + + Terminate_5GCN + Terminate 5G Core + --type stop-mini-as-ue --fqdn yes --scenario 1 + + + diff --git a/ci-scripts/xml_files/sa_cn5g_asue_start.xml b/ci-scripts/xml_files/sa_cn5g_asue_start.xml new file mode 100644 index 0000000000..740022b1c9 --- /dev/null +++ b/ci-scripts/xml_files/sa_cn5g_asue_start.xml @@ -0,0 +1,39 @@ + + + cn5g-start-tab + CN5G-Start + log-in + + 000100 + + + + + + Initialize_5GCN + Initialize 5G Core + --type start-mini-as-ue --fqdn yes --scenario 1 --capture /tmp/oai-cn5g-v1.3.pcap + + + From a4c8fe029a1c0fedbf10514704f517bc63ece048 Mon Sep 17 00:00:00 2001 From: Sakthivel Velumani Date: Tue, 5 Apr 2022 15:28:23 +0530 Subject: [PATCH 104/150] Fixing bad memory allocation and initialization This (sometimes) corrupts PBCH channel estimates leading to false time synchronization of received samples. --- .../PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c | 3 ++- .../nr_dl_channel_estimation.c | 22 ++++++++++--------- .../PHY/NR_UE_TRANSPORT/nr_initial_sync.c | 13 ++++++----- openair1/SCHED_NR_UE/phy_procedures_nr_ue.c | 10 +++++---- 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c b/openair1/PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c index f4f183793f..045197adc1 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_adjust_synch_ue.c @@ -36,7 +36,8 @@ void nr_adjust_synch_ue(NR_DL_FRAME_PARMS *frame_parms, PHY_VARS_NR_UE *ue, module_id_t gNB_id, - const int estimateSz, struct complex16 dl_ch_estimates_time[][estimateSz], + const int estimateSz, + struct complex16 dl_ch_estimates_time[][estimateSz], uint8_t frame, uint8_t subframe, unsigned char clear, diff --git a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c index 96709b91a1..7a6309c5ca 100644 --- a/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c +++ b/openair1/PHY/NR_UE_ESTIMATION/nr_dl_channel_estimation.c @@ -197,9 +197,9 @@ int nr_pbch_dmrs_correlation(PHY_VARS_NR_UE *ue, int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, - int estimateSz, - struct complex16 dl_ch_estimates [][estimateSz], - struct complex16 dl_ch_estimates_time [][estimateSz], + int estimateSz, + struct complex16 dl_ch_estimates [][estimateSz], + struct complex16 dl_ch_estimates_time [][ue->frame_parms.ofdm_symbol_size], UE_nr_rxtx_proc_t *proc, uint8_t gNB_id, unsigned char Ns, @@ -320,7 +320,7 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)]; dl_ch = (int16_t *)&dl_ch_estimates[aarx][ch_offset]; - memset(dl_ch,0,sizeof(*dl_ch)*(ue->frame_parms.ofdm_symbol_size)); + memset(dl_ch,0,sizeof(struct complex16)*(ue->frame_parms.ofdm_symbol_size)); #ifdef DEBUG_CH printf("pbch ch est pilot addr %p RB_DL %d\n",&pilot[0], ue->frame_parms.N_RB_DL); @@ -387,10 +387,10 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, // in 2nd symbol, skip middle REs (48 with DMRS, 144 for SSS, and another 48 with DMRS) if (dmrss == 1 && pilot_cnt == 12) { - pilot_cnt=48; - re_offset = (re_offset+144) % ue->frame_parms.ofdm_symbol_size; - rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)]; - dl_ch += 288; + pilot_cnt=48; + re_offset = (re_offset+144) % ue->frame_parms.ofdm_symbol_size; + rxF = (int16_t *)&rxdataF[aarx][(symbol_offset+k+re_offset)]; + dl_ch += 288; } ch[0] = (int16_t)(((int32_t)pil[0]*rxF[0] - (int32_t)pil[1]*rxF[1])>>15); ch[1] = (int16_t)(((int32_t)pil[0]*rxF[1] + (int32_t)pil[1]*rxF[0])>>15); @@ -452,10 +452,12 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, (int16_t*) &dl_ch_estimates[aarx][ch_offset], (int16_t*) dl_ch_estimates_time[aarx], 1); -} -} + } + } + if (dmrss == 2) UEscopeCopy(ue, pbchDlChEstimateTime, (void*)dl_ch_estimates_time, sizeof(struct complex16), ue->frame_parms.nb_antennas_rx, idftsizeidx); + return(0); } diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c index ac918b4f3e..a48bc1b58d 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c @@ -146,23 +146,26 @@ int nr_pbch_detection(UE_nr_rxtx_proc_t * proc, PHY_VARS_NR_UE *ue, int pbch_ini start_meas(&ue->dlsch_channel_estimation_stats); // computing channel estimation for selected best ssb - const int estimateSz=7*2*frame_parms->ofdm_symbol_size; + const int estimateSz = frame_parms->symbols_per_slot * frame_parms->ofdm_symbol_size; __attribute__ ((aligned(32))) struct complex16 dl_ch_estimates[frame_parms->nb_antennas_rx][estimateSz]; - __attribute__ ((aligned(32))) struct complex16 dl_ch_estimates_time[frame_parms->nb_antennas_rx][estimateSz]; + __attribute__ ((aligned(32))) struct complex16 dl_ch_estimates_time[frame_parms->nb_antennas_rx][frame_parms->ofdm_symbol_size]; + for(int i=pbch_initial_symbol; ii_ssb,temp_ptr->n_hf); + stop_meas(&ue->dlsch_channel_estimation_stats); fapiPbch_t result; ret = nr_rx_pbch(ue, proc, - estimateSz, dl_ch_estimates, - ue->pbch_vars[0], + estimateSz, + dl_ch_estimates, + ue->pbch_vars[0], frame_parms, 0, temp_ptr->i_ssb, SISO, - &result); + &result); temp_ptr=temp_ptr->next_ssb; } diff --git a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c index ddddcd09e2..d8b866d8ee 100644 --- a/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c +++ b/openair1/SCHED_NR_UE/phy_procedures_nr_ue.c @@ -1405,9 +1405,11 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, if (slot_ssb) { VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_PBCH, VCD_FUNCTION_IN); LOG_D(PHY," ------ PBCH ChannelComp/LLR: frame.slot %d.%d ------ \n", frame_rx%1024, nr_slot_rx); - const int estimateSz=7*2*sizeof(int)*fp->ofdm_symbol_size; + + const int estimateSz = fp->symbols_per_slot * fp->ofdm_symbol_size; __attribute__ ((aligned(32))) struct complex16 dl_ch_estimates[fp->nb_antennas_rx][estimateSz]; - __attribute__ ((aligned(32))) struct complex16 dl_ch_estimates_time[fp->nb_antennas_rx][estimateSz]; + __attribute__ ((aligned(32))) struct complex16 dl_ch_estimates_time[fp->nb_antennas_rx][fp->ofdm_symbol_size]; + for (int i=1; i<4; i++) { nr_slot_fep(ue, @@ -1415,7 +1417,6 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, (ue->symbol_offset+i)%(fp->symbols_per_slot), nr_slot_rx); - start_meas(&ue->dlsch_channel_estimation_stats); nr_pbch_channel_estimation(ue, estimateSz, dl_ch_estimates, dl_ch_estimates_time,proc,gNB_id,nr_slot_rx,(ue->symbol_offset+i)%(fp->symbols_per_slot),i-1,(fp->ssb_index)&7,fp->half_frame_bit); stop_meas(&ue->dlsch_channel_estimation_stats); @@ -1433,7 +1434,8 @@ int phy_procedures_nrUE_RX(PHY_VARS_NR_UE *ue, nr_adjust_synch_ue(fp, ue, gNB_id, - estimateSz, dl_ch_estimates_time, + fp->ofdm_symbol_size, + dl_ch_estimates_time, frame_rx, nr_slot_rx, 0, From b245b3b1b65ba70e84b6d9b00fe7319d7d6668b1 Mon Sep 17 00:00:00 2001 From: hardy Date: Tue, 5 Apr 2022 15:18:55 +0200 Subject: [PATCH 105/150] more logging, copy logs, create HTML row --- ci-scripts/ci_ueinfra.yaml | 9 ++++++++- ci-scripts/cls_amarisoft_ue.py | 6 ++++++ ci-scripts/cls_oaicitest.py | 6 ++++-- ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ci-scripts/ci_ueinfra.yaml b/ci-scripts/ci_ueinfra.yaml index e06b0e39b6..9934e57c08 100644 --- a/ci-scripts/ci_ueinfra.yaml +++ b/ci-scripts/ci_ueinfra.yaml @@ -53,6 +53,7 @@ amarisoft_ue_1: Config : /root/NV17-12-21/ue/config/oaicicd-ue-Ping-SATest.cfg Duration : 60 Ping : /tmp/test_ue1.log + UELog : /tmp/ue1.log HostIPAddress : 192.168.18.89 HostUsername : root HostPassword : toor @@ -60,6 +61,7 @@ amarisoft_ue_1: #an other scenario example +#notice : this will not work as such, only suggestion for multi ue scenario amarisoft_ue_2: ID: amarisoft_ue_2 State : enabled @@ -71,7 +73,12 @@ amarisoft_ue_2: Cmd : /root/NV17-12-21/ue/lteue Config : /root/NV17-12-21/ue/config/xxxxxxx.cfg #to be updated for an other scenario Duration : 60 - Ping : /tmp/test_ue1.log #to be updated fo an other scenario + Ping : + - /tmp/test_ue1.log #to be updated fo an other scenario + - /tmp/test_ue2.log #could be a list for a multi ue scenario + UELog : + - /tmp/ue1.log + - /tmp/ue1.log HostIPAddress : 192.168.18.89 HostUsername : root HostPassword : toor diff --git a/ci-scripts/cls_amarisoft_ue.py b/ci-scripts/cls_amarisoft_ue.py index 3407ec9046..367bfaac3f 100644 --- a/ci-scripts/cls_amarisoft_ue.py +++ b/ci-scripts/cls_amarisoft_ue.py @@ -67,8 +67,14 @@ class AS_UE: def RunScenario(self): mySSH = sshconnection.SSHConnection() mySSH.open(self.HostIPAddress, self.HostUsername, self.HostPassword) + + logging.debug("Deleting old artifacts :") + cmd='rm -rf ' + self.Ping + ' ' + self.UELog + mySSH.command(cmd,'#',5) + logging.debug("Running scenario :") cmd='echo $USER; nohup '+self.Cmd + ' ' + self.Config + ' &' mySSH.command(cmd,'#',5) + mySSH.close() diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py index ae6a26fc18..ec3455222f 100644 --- a/ci-scripts/cls_oaicitest.py +++ b/ci-scripts/cls_oaicitest.py @@ -469,6 +469,7 @@ class OaiCiTest(): #case it is a amarisoft ue (only 1 at a time supported at the moment) elif ue_kind == 'amarisoft': AS_UE = cls_amarisoft_ue.AS_UE(InfraUE.ci_ue_infra[self.ue_id]) + HTML.CreateHtmlTestRow(AS_UE.Config, 'OK', CONST.ALL_PROCESSES_OK) AS_UE.RunScenario() AS_UE.WaitEndScenario() AS_UE.KillASUE() @@ -1592,7 +1593,6 @@ class OaiCiTest(): #if module, ping from module to EPC if self.ue_id!='': if (re.match('amarisoft', self.ue_id, re.IGNORECASE)): - logging.debug("Ping analysis from amarisoft scenario") launchFromEpc = False launchFromASUE = True else: @@ -1659,8 +1659,10 @@ class OaiCiTest(): elif (launchFromASUE == True): #ping was already executed when running scenario #we only need to retrieve ping log file, whose location is in the ci_ueinfra.yaml - logging.debug("Get Ping log from AS server : " + Module_UE.Ping) + logging.debug("Get logs from AS server : " + Module_UE.Ping + ", " + Module_UE.UELog) SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, Module_UE.Ping, '.') + SSH.copyin(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword, Module_UE.UELog, '.') + logging.debug("Ping analysis from Amarisoft scenario") path,ping_log_file = os.path.split(Module_UE.Ping) SSH.open(Module_UE.HostIPAddress, Module_UE.HostUsername, Module_UE.HostPassword) SSH.command('cat ' + Module_UE.Ping, '\#', 5) diff --git a/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml b/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml index 68df2873d9..12ed977bb1 100644 --- a/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml +++ b/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml @@ -37,7 +37,7 @@ Initialize_UE - Initialize Amarisoft UE 1x + Run AS UE Scenario amarisoft_ue_1 From 402b9abb8cd5133e5153b8be557c2e1b6acef1a8 Mon Sep 17 00:00:00 2001 From: hardy Date: Tue, 5 Apr 2022 19:00:48 +0200 Subject: [PATCH 106/150] change ping stage description in xml --- ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml b/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml index 12ed977bb1..194ed4e453 100644 --- a/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml +++ b/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml @@ -57,7 +57,7 @@ Ping - Ping from AS UEc + Ping Log Analysis amarisoft_ue_1 1 From 0a03755f9df6fc43d30fb562fb36a516513048a9 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Sun, 3 Apr 2022 19:19:54 +0200 Subject: [PATCH 107/150] Correct gNB fail detection when running in VM --- ci-scripts/runTestOnVM.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh index 31ffa9d727..74a19de3cd 100755 --- a/ci-scripts/runTestOnVM.sh +++ b/ci-scripts/runTestOnVM.sh @@ -1899,7 +1899,7 @@ function run_test_on_vm { CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_sa_test.log #last argument = 2 is to enable --sa for SA test for 106PRB start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 2 - if [ $NR_UE_SYNC -eq 0 ] + if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ] then echo "Problem w/ gNB and NR-UE not syncing" terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2 @@ -1982,7 +1982,7 @@ function run_test_on_vm { CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_sa_test.log #last argument = 3 is to enable --sa for SA test for 24PRB start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 3 - if [ $NR_UE_SYNC -eq 0 ] + if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ] then echo "Problem w/ gNB and NR-UE not syncing" terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2 @@ -2070,7 +2070,7 @@ function run_test_on_vm { CURRENT_NR_UE_LOG_FILE=tdd_${PRB}prb_${CN_CONFIG}_ue_ra_fr2_test.log #last argument = 1 is to enable --do-ra for RA test start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1 - if [ $NR_UE_SYNC -eq 0 ] + if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ] then echo "Problem w/ gNB and NR-UE not syncing" terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2 @@ -2172,7 +2172,7 @@ function run_test_on_vm { CURRENT_NR_UE_LOG_FILE=${TMODE}_${PRB}prb_${CN_CONFIG}_ue_ra_test.log #last argument = 1 is to enable --do-ra for RA test start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 1 - if [ $NR_UE_SYNC -eq 0 ] + if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ] then echo "Problem w/ gNB and NR-UE not syncing" terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2 @@ -2253,7 +2253,7 @@ function run_test_on_vm { echo "############################################################" CURRENT_NR_UE_LOG_FILE=${TMODE}_${PRB}prb_${CN_CONFIG}_ue.log start_rf_sim_nr_ue $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR $GNB_VM_IP_ADDR $CURRENT_NR_UE_LOG_FILE $PRB $FREQUENCY $S1_NOS1_CFG 0 - if [ $NR_UE_SYNC -eq 0 ] + if [ $GNB_SYNC -eq 0 ] || [ $NR_UE_SYNC -eq 0 ] then echo "Problem w/ gNB and NR-UE not syncing" terminate_enb_ue_basic_sim $NR_UE_VM_CMDS $NR_UE_VM_IP_ADDR 2 From 276c7be575c7ba75f1ba195581f966df9cf37b4f Mon Sep 17 00:00:00 2001 From: hardy Date: Mon, 4 Apr 2022 13:39:33 +0200 Subject: [PATCH 108/150] fix SYNC_STATUS flag mgt to get the final status correct --- ci-scripts/runTestOnVM.sh | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/ci-scripts/runTestOnVM.sh b/ci-scripts/runTestOnVM.sh index 74a19de3cd..2472ffe3bc 100755 --- a/ci-scripts/runTestOnVM.sh +++ b/ci-scripts/runTestOnVM.sh @@ -1939,6 +1939,12 @@ function run_test_on_vm { SA_106PRB_STATUS=0 fi done + #manage SYNC issue after try_cnt + if [ $SYNC_STATUS -ne 0 ] + then + echo "SA 106PRB test NOT OK, NOT SYNC'ED" + SA_106PRB_STATUS=-1 + fi ########### end SA test sleep 30 @@ -2022,6 +2028,12 @@ function run_test_on_vm { SA_24PRB_STATUS=0 fi done + #manage SYNC issue after try_cnt + if [ $SYNC_STATUS -ne 0 ] + then + echo "SA 24PRB test NOT OK, NOT SYNC'ED" + SA_24PRB_STATUS=-1 + fi ########### end SA test sleep 30 @@ -2110,6 +2122,12 @@ function run_test_on_vm { try_cnt=$((try_cnt+10)) fi done + #manage SYNC issue after try_cnt + if [ $SYNC_STATUS -ne 0 ] + then + echo "RA FR2 test NOT OK, NOT SYNC'ED" + RA_FR2_STATUS=-1 + fi ########### end RA FR2 test sleep 30 @@ -2212,6 +2230,13 @@ function run_test_on_vm { try_cnt=$((try_cnt+10)) fi done + #manage SYNC issue after try_cnt + if [ $SYNC_STATUS -ne 0 ] + then + echo "RA FR1 test NOT OK, NOT SYNC'ED" + RA_FR1_STATUS=-1 + fi + done ########### end RA test @@ -2332,6 +2357,13 @@ function run_test_on_vm { try_cnt=$((try_cnt+10)) fi done + #manage SYNC issue after try_cnt + if [ $SYNC_STATUS -ne 0 ] + then + echo "PHY test NOT OK, NOT SYNC'ED" + IPERF_STATUS=-1 + fi + done ######### end of loop full_l2_sim_destroy @@ -2345,7 +2377,6 @@ function run_test_on_vm { if [ $SA_24PRB_STATUS -ne 0 ]; then NR_STATUS=-1; fi if [ $RA_FR2_STATUS -ne 0 ]; then NR_STATUS=-1; fi if [ $RA_FR1_STATUS -ne 0 ]; then NR_STATUS=-1; fi - if [ $SYNC_STATUS -ne 0 ]; then NR_STATUS=-1; fi if [ $PING_STATUS -ne 0 ]; then NR_STATUS=-1; fi if [ $IPERF_STATUS -ne 0 ]; then NR_STATUS=-1; fi if [ $NR_STATUS -eq 0 ] From 1485caa97ef6c6a625d0c4aa6df2a16139e83aeb Mon Sep 17 00:00:00 2001 From: francescomani Date: Thu, 7 Apr 2022 14:00:19 +0200 Subject: [PATCH 109/150] cleanup of episci config files --- ...pisci_gnb.band78.sa.fr1.106PRB.usrpn310.conf | 16 ---------------- .../episci_rcc.band78.tm1.106PRB.nfapi.conf | 15 --------------- ...proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf | 16 ---------------- .../proxy_rcc.band78.tm1.106PRB.nfapi.conf | 17 ----------------- 4 files changed, 64 deletions(-) diff --git a/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf index e498e2a5c8..40f6f911b1 100644 --- a/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf +++ b/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf @@ -33,9 +33,6 @@ gNBs = ////////// Physical parameters: ssb_SubcarrierOffset = 0; - pdsch_AntennaPorts = 1; - pusch_AntennaPorts = 1; - ul_prbblacklist = "51,52,53,54" min_rxtxtime = 6; pdcch_ConfigSIB1 = ( { @@ -127,19 +124,6 @@ gNBs = # 0=unrestricted, 1=restricted type A, 2=restricted type B restrictedSetConfig = 0, - # pusch-ConfigCommon (up to 16 elements) - initialULBWPk2_0 = 6; # used for UL slot - initialULBWPmappingType_0 = 1 - initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13 - - initialULBWPk2_1 = 6; # used for mixed slot - initialULBWPmappingType_1 = 1; - initialULBWPstartSymbolAndLength_1 = 52; # this is SS=10 L=4 - - initialULBWPk2_2 = 7; # used for Msg.3 during RA - initialULBWPmappingType_2 = 1; - initialULBWPstartSymbolAndLength_2 = 52; # this is SS=10 L=4 - msg3_DeltaPreamble = 1; p0_NominalWithGrant =-90; diff --git a/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf b/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf index f7e14591a0..eac0b74633 100644 --- a/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf +++ b/ci-scripts/conf_files/episci/episci_rcc.band78.tm1.106PRB.nfapi.conf @@ -22,10 +22,7 @@ gNBs = ////////// Physical parameters: ssb_SubcarrierOffset = 31; //0; - pdsch_AntennaPorts = 1; - pusch_AntennaPorts = 1; min_rxtxtime = 6; - sib1_tda = 0; pdcch_ConfigSIB1 = ( { @@ -116,18 +113,6 @@ gNBs = # restrictedSetConfig # 0=unrestricted, 1=restricted type A, 2=restricted type B restrictedSetConfig = 0, - # pusch-ConfigCommon (up to 16 elements) - initialULBWPk2_0 = 6; # used for UL slot - initialULBWPmappingType_0 = 1 - initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13 - - initialULBWPk2_1 = 6; # used for mixed slot - initialULBWPmappingType_1 = 1; - initialULBWPstartSymbolAndLength_1 = 52; # this is SS=10 L=4 - - initialULBWPk2_2 = 7; # used for Msg.3 during RA - initialULBWPmappingType_2 = 1; - initialULBWPstartSymbolAndLength_2 = 52; # this is SS=10 L=4 msg3_DeltaPreamble = 1; p0_NominalWithGrant =-90; diff --git a/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf index 93835f6a1c..edcd4f06ff 100644 --- a/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf +++ b/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf @@ -33,9 +33,6 @@ gNBs = ////////// Physical parameters: ssb_SubcarrierOffset = 0; - pdsch_AntennaPorts = 1; - pusch_AntennaPorts = 1; - ul_prbblacklist = "51,52,53,54" min_rxtxtime = 6; pdcch_ConfigSIB1 = ( @@ -128,19 +125,6 @@ gNBs = # 0=unrestricted, 1=restricted type A, 2=restricted type B restrictedSetConfig = 0, - # pusch-ConfigCommon (up to 16 elements) - initialULBWPk2_0 = 6; # used for UL slot - initialULBWPmappingType_0 = 1 - initialULBWPstartSymbolAndLength_0 = 41; # this is SS=0 L=13 - - initialULBWPk2_1 = 6; # used for mixed slot - initialULBWPmappingType_1 = 1; - initialULBWPstartSymbolAndLength_1 = 52; # this is SS=10 L=4 - - initialULBWPk2_2 = 7; # used for Msg.3 during RA - initialULBWPmappingType_2 = 1; - initialULBWPstartSymbolAndLength_2 = 52; # this is SS=10 L=4 - msg3_DeltaPreamble = 1; p0_NominalWithGrant =-90; diff --git a/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf b/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf index 32248559ce..f61039ff17 100644 --- a/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf +++ b/ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf @@ -22,7 +22,6 @@ gNBs = ////////// Physical parameters: ssb_SubcarrierOffset = 0; - pdsch_AntennaPorts = 1; min_rxtxtime = 6; servingCellConfigCommon = ( @@ -108,22 +107,6 @@ gNBs = # 0=unrestricted, 1=restricted type A, 2=restricted type B restrictedSetConfig = 0, - # pusch-ConfigCommon (up to 16 elements) - initialULBWPk2_0 = 6; - initialULBWPmappingType_0 = 1 - # this is SS=0 L=11 - initialULBWPstartSymbolAndLength_0 = 55; - - initialULBWPk2_1 = 6; - initialULBWPmappingType_1 = 1; - # this is SS=0 L=12 - initialULBWPstartSymbolAndLength_1 = 69; - - initialULBWPk2_2 = 7; - initialULBWPmappingType_2 = 1; - # this is SS=10 L=4 - initialULBWPstartSymbolAndLength_2 = 52; - msg3_DeltaPreamble = 1; p0_NominalWithGrant =-90; From 5669269ca98ef0f0184fbf8ecb17961f0b5db0b9 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 7 Apr 2022 21:11:56 +0200 Subject: [PATCH 110/150] Harmonize NSA 2x2 and LTE 2x2 eNB configs --- ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf b/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf index 480ba3952a..dfc9beda71 100644 --- a/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf +++ b/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf @@ -231,7 +231,7 @@ RUs = ( local_rf = "yes" nb_tx = 2 nb_rx = 2 - att_tx = 0 + att_tx = 10 att_rx = 5; bands = [38]; max_pdschReferenceSignalPower = -27; From 4869b109844974c1c2ceccfbfb5a94e2be7b7252 Mon Sep 17 00:00:00 2001 From: Manish Date: Wed, 6 Apr 2022 04:08:13 +0000 Subject: [PATCH 111/150] Second OAI UE added in CI docker validation Signed-off-by: Manish --- ci-scripts/xml_files/container_5g_rfsim.xml | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml index bab7f9637a..e0d0bb38a6 100644 --- a/ci-scripts/xml_files/container_5g_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_rfsim.xml @@ -31,8 +31,11 @@ 000001 000002 000003 + 000004 020001 020002 + 020003 + 020004 030001 030002 100001 @@ -71,6 +74,14 @@ 8 + + DeployGenObject + Deploy Second OAI 5G NR-UE RF sim SA + yaml_files/5g_rfsimulator + oai-nr-ue2 + 8 + + PingFromContainer Ping ext-dn from NR-UE @@ -87,6 +98,22 @@ 5 + + PingFromContainer + Ping ext-dn from Second NR-UE + rfsim5g-oai-nr-ue2 + -I oaitun_ue1 -c 20 192.168.72.135 + 5 + + + + PingFromContainer + Ping Second NR-UE from ext-dn + rfsim5g-oai-ext-dn + -c 20 12.1.1.3 + 5 + + IperfFromContainer Iperf UDP Downlink From 5e1e27699d242e542054c2a44a3e020e2e7f7686 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 8 Apr 2022 10:59:24 +0200 Subject: [PATCH 112/150] fix(ci): the PCAP file was getting too big -- Excluded the 2nd UE container IP address from capture -- Also added support for multiple UEs for dlsch_ulsch_stats Signed-off-by: Raphael Defosseux --- ci-scripts/cls_containerize.py | 50 ++++++++++++--------- ci-scripts/ran.py | 12 ++++- ci-scripts/xml_files/container_5g_rfsim.xml | 2 +- 3 files changed, 40 insertions(+), 24 deletions(-) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index d85659568b..e24a0325c3 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -723,9 +723,13 @@ class Containerize(): cmd = 'cd ' + self.yamlPath[0] + ' && docker-compose -f docker-compose-ci.yml config | grep com.docker.network.bridge.name | sed -e "s@^.*name: @@"' networkNames = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10) if re.search('4g.*rfsimulator', self.yamlPath[0]) is not None: + # Excluding any traffic from LTE-UE container (192.168.61.30) + # From the trf-gen, keeping only PING traffic cmd = 'sudo nohup tshark -f "(host 192.168.61.11 and icmp) or (not host 192.168.61.11 and not host 192.168.61.30 and not arp and not port 53 and not port 2152)"' elif re.search('5g.*rfsimulator', self.yamlPath[0]) is not None: - cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not host 192.168.71.150 and not arp and not port 53 and not port 2152 and not port 2153)"' + # Excluding any traffic from NR-UE containers (192.168.71.150 and 192.168.71.151) + # From the ext-dn, keeping only PING traffic + cmd = 'sudo nohup tshark -f "(host 192.168.72.135 and icmp) or (not host 192.168.72.135 and not host 192.168.71.150 and not host 192.168.71.151 and not arp and not port 53 and not port 2152 and not port 2153)"' else: return for name in networkNames.split('\n'): @@ -781,46 +785,48 @@ class Containerize(): # Analyzing log file(s)! listOfPossibleRanContainers = ['enb', 'gnb', 'cu', 'du'] for container in listOfPossibleRanContainers: - filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log' - cmd = 'ls ' + filename + filenames = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log' + cmd = 'ls ' + filenames containerStatus = True try: lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10) - filename = str(lsStatus).strip() + filenames = str(lsStatus).strip() except: containerStatus = False if not containerStatus: continue - logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m') - logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers) - if (logStatus < 0): - fullStatus = False - self.exitStatus = 1 - HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus) - else: - HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK) + for filename in filenames.split('\n'): + logging.debug('\u001B[1m Analyzing xNB logfile ' + filename + ' \u001B[0m') + logStatus = RAN.AnalyzeLogFile_eNB(filename, HTML, self.ran_checkers) + if (logStatus < 0): + fullStatus = False + self.exitStatus = 1 + HTML.CreateHtmlTestRow(RAN.runtime_stats, 'KO', logStatus) + else: + HTML.CreateHtmlTestRow(RAN.runtime_stats, 'OK', CONST.ALL_PROCESSES_OK) listOfPossibleUeContainers = ['lte-ue*', 'nr-ue*'] for container in listOfPossibleUeContainers: - filename = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log' - cmd = 'ls ' + filename + filenames = self.yamlPath[0] + '/rfsim?g-oai-' + container + '.log' + cmd = 'ls ' + filenames containerStatus = True try: lsStatus = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, universal_newlines=True, timeout=10) - filename = str(lsStatus).strip() + filenames = str(lsStatus).strip() except: containerStatus = False if not containerStatus: continue - logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m') - logStatus = UE.AnalyzeLogFile_UE(filename, HTML, RAN) - if (logStatus < 0): - fullStatus = False - HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus) - else: - HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK) + for filename in filenames.split('\n'): + logging.debug('\u001B[1m Analyzing UE logfile ' + filename + ' \u001B[0m') + logStatus = UE.AnalyzeLogFile_UE(filename, HTML, RAN) + if (logStatus < 0): + fullStatus = False + HTML.CreateHtmlTestRow('UE log Analysis', 'KO', logStatus) + else: + HTML.CreateHtmlTestRow('UE log Analysis', 'OK', CONST.ALL_PROCESSES_OK) cmd = 'rm ' + self.yamlPath[0] + '/*.log' logging.debug(cmd) diff --git a/ci-scripts/ran.py b/ci-scripts/ran.py index beb89370d2..f29ac405c2 100644 --- a/ci-scripts/ran.py +++ b/ci-scripts/ran.py @@ -999,8 +999,18 @@ class RANManagement(): for k in keys: result = re.search(k, line) if result is not None: + ue_prefix = 'ue0' + ue_res = re.search('UE ID 1|UE 1:', line) + if ue_res is not None: + ue_prefix = 'ue1' + ue_res = re.search('UE ID 2|UE 2:', line) + if ue_res is not None: + ue_prefix = 'ue2' + ue_res = re.search('UE ID 3|UE 3:', line) + if ue_res is not None: + ue_prefix = 'ue3' #remove 1- all useless char before relevant info (ulsch or dlsch) 2- trailing char - dlsch_ulsch_stats[k]=re.sub(r'^.*\]\s+', r'' , line.rstrip()) + dlsch_ulsch_stats[ue_prefix+k]=re.sub(r'^.*\]\s+', r'' , line.rstrip()) #count "problem receiving samples" msg diff --git a/ci-scripts/xml_files/container_5g_rfsim.xml b/ci-scripts/xml_files/container_5g_rfsim.xml index e0d0bb38a6..a1f50948a5 100644 --- a/ci-scripts/xml_files/container_5g_rfsim.xml +++ b/ci-scripts/xml_files/container_5g_rfsim.xml @@ -79,7 +79,7 @@ Deploy Second OAI 5G NR-UE RF sim SA yaml_files/5g_rfsimulator oai-nr-ue2 - 8 + 9 From 6ad71e290a6e8ae53e436b86c4ce13b06de0f7d3 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 8 Apr 2022 11:30:19 +0200 Subject: [PATCH 113/150] Comment unused function that have been introduced in this integration branch --- openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index 7abc1d33d9..26c60fbb9b 100644 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -68,10 +68,10 @@ queue_t nr_ul_tti_req_queue; static slot_rnti_mcs_s slot_rnti_mcs[NUM_NFAPI_SLOT]; -static int get_mcs_from_sinr(float sinr); -static int get_cqi_from_mcs(void); +//static int get_mcs_from_sinr(float sinr); +//static int get_cqi_from_mcs(void); static void read_channel_param(const nfapi_nr_dl_tti_pdsch_pdu_rel15_t * pdu, int sf, int index); -static bool did_drop_transport_block(int slot, uint16_t rnti); +//static bool did_drop_transport_block(int slot, uint16_t rnti); static float get_bler_val(uint8_t mcs, int sinr); static bool should_drop_transport_block(int slot, uint16_t rnti); static void save_pdsch_pdu_for_crnti(nfapi_nr_dl_tti_request_t *dl_tti_request); @@ -1341,6 +1341,7 @@ void RCconfig_nr_ue_L1(void) { } } +/* static int get_mcs_from_sinr(float sinr) { if (sinr < (nr_bler_data[0].bler_table[0][0])) @@ -1369,7 +1370,9 @@ static int get_mcs_from_sinr(float sinr) LOG_E(NR_MAC, "Unable to get an MCS value.\n"); abort(); } +*/ +/* static int get_cqi_from_mcs(void) { static const int mcs_to_cqi[] = {0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, @@ -1399,6 +1402,7 @@ static int get_cqi_from_mcs(void) LOG_E(NR_MAC, "Unable to get CQI value because no MCS found\n"); abort(); } +*/ static void read_channel_param(const nfapi_nr_dl_tti_pdsch_pdu_rel15_t * pdu, int slot, int index) { @@ -1431,6 +1435,7 @@ static void read_channel_param(const nfapi_nr_dl_tti_pdsch_pdu_rel15_t * pdu, in return; } +/* static bool did_drop_transport_block(int slot, uint16_t rnti) { int num_pdus = slot_rnti_mcs[slot].num_pdus; @@ -1450,6 +1455,7 @@ static bool did_drop_transport_block(int slot, uint16_t rnti) } return false; } +*/ static float get_bler_val(uint8_t mcs, int sinr) { From e1b9881c7815f6e4de929b1cb56da939878877bb Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Tue, 5 Apr 2022 19:26:05 +0200 Subject: [PATCH 114/150] fix memory errors --- openair1/PHY/INIT/nr_init_ue.c | 32 ++-- openair1/PHY/NR_UE_TRANSPORT/sss_nr.c | 3 + openair1/PHY/TOOLS/oai_dfts.c | 27 ++- openair1/PHY/TOOLS/tools_defs.h | 245 +++++++++++++------------- 4 files changed, 158 insertions(+), 149 deletions(-) diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index 142ef9b1d9..1417a16819 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -311,11 +311,26 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) } // DLSCH - for (gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) { + for (gNB_id = 0; gNB_id < ue->n_connected_gNB+1; gNB_id++) { for (th_id=0; th_idpdsch_vars[th_id][gNB_id] = (NR_UE_PDSCH *)malloc16_clear(sizeof(NR_UE_PDSCH)); } + for (th_id=0; th_idpdsch_vars[th_id][gNB_id], fp ); + } + int nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1; + for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->llr[i] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );//Q_m = 8 bits/Sym, Code_Rate=3, Number of Segments =8, Circular Buffer K_cb = 8448 + } + for (i=0; ipdsch_vars[th_id][gNB_id]->layer_llr[i] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );//Q_m = 8 bits/Sym, Code_Rate=3, Number of Segments =8, Circular Buffer K_cb = 8448 + } + } + } + + for (gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) { for (th_id=0; th_idpdcch_vars[th_id][gNB_id] = (NR_UE_PDCCH *)malloc16_clear(sizeof(NR_UE_PDCCH)); } @@ -342,21 +357,6 @@ int init_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) ue->nr_srs_info->srs_estimated_channel_time_shifted[i] = (int32_t *) malloc16_clear(fp->ofdm_symbol_size*MAX_NUM_NR_SRS_SYMBOLS*sizeof(int32_t)); } - - for (th_id=0; th_idpdsch_vars[th_id][gNB_id], fp ); - } - - int nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1; - for (th_id=0; th_idpdsch_vars[th_id][gNB_id]->llr[i] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );//Q_m = 8 bits/Sym, Code_Rate=3, Number of Segments =8, Circular Buffer K_cb = 8448 - } - for (i=0; ipdsch_vars[th_id][gNB_id]->layer_llr[i] = (int16_t *)malloc16_clear( (8*(3*8*8448))*sizeof(int16_t) );//Q_m = 8 bits/Sym, Code_Rate=3, Number of Segments =8, Circular Buffer K_cb = 8448 - } - } - // 100 PRBs * 12 REs/PRB * 4 PDCCH SYMBOLS * 2 LLRs/RE for (th_id=0; th_idpdcch_vars[th_id][gNB_id]->llr = (int16_t *)malloc16_clear( 2*4*100*12*sizeof(uint16_t) ); diff --git a/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c b/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c index dc73fe0add..88585e6094 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c +++ b/openair1/PHY/NR_UE_TRANSPORT/sss_nr.c @@ -558,6 +558,9 @@ int rx_sss_nr(PHY_VARS_NR_UE *ue, UE_nr_rxtx_proc_t *proc, int32_t *tot_metric, } //#endif + if (Nid1==N_ID_1_NUMBER) + return -1; + int re = 0; int im = 0; d = (int16_t *)&d_sss[Nid2][Nid1]; diff --git a/openair1/PHY/TOOLS/oai_dfts.c b/openair1/PHY/TOOLS/oai_dfts.c index 83207426fd..c266a7f82b 100644 --- a/openair1/PHY/TOOLS/oai_dfts.c +++ b/openair1/PHY/TOOLS/oai_dfts.c @@ -10606,15 +10606,30 @@ int dfts_autoinit(void) #ifndef MR_MAIN -void dft(uint8_t sizeidx, int16_t *sigF,int16_t *sig,unsigned char scale_flag){ - AssertFatal((sizeidx>=0 && sizeidx<(int)DFT_SIZE_IDXTABLESIZE),"Invalid dft size index %i\n",sizeidx); - dft_ftab[sizeidx](sigF,sig,scale_flag); +void dft(uint8_t sizeidx, int16_t *input,int16_t *output,unsigned char scale_flag){ + AssertFatal((sizeidx>=0 && sizeidx=0 && sizeidx<(int)IDFT_SIZE_IDXTABLESIZE),"Invalid idft size index %i\n",sizeidx); - idft_ftab[sizeidx](sigF,sig,scale_flag); +void idft(uint8_t sizeidx, int16_t *input,int16_t *output,unsigned char scale_flag){ + AssertFatal((sizeidx>=0 && sizeidx Date: Fri, 8 Apr 2022 18:22:38 +0200 Subject: [PATCH 115/150] fix code review remarks --- openair1/PHY/INIT/nr_init_ue.c | 6 ++- openair1/PHY/TOOLS/tools_defs.h | 62 ++++++++++++++------------ openair2/LAYER2/NR_MAC_gNB/mac_proto.h | 3 ++ 3 files changed, 41 insertions(+), 30 deletions(-) diff --git a/openair1/PHY/INIT/nr_init_ue.c b/openair1/PHY/INIT/nr_init_ue.c index 1417a16819..fe4eabb34e 100644 --- a/openair1/PHY/INIT/nr_init_ue.c +++ b/openair1/PHY/INIT/nr_init_ue.c @@ -468,16 +468,18 @@ void term_nr_ue_signal(PHY_VARS_NR_UE *ue, int nb_connected_gNB) } free_and_zero(ue->nr_gold_pdsch[0]); - for (int gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) { + for (int gNB_id = 0; gNB_id < ue->n_connected_gNB+1; gNB_id++) { // PDSCH for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++) { - free_and_zero(ue->pdsch_vars[th_id][gNB_id]->llr_shifts); free_and_zero(ue->pdsch_vars[th_id][gNB_id]->llr128_2ndstream); phy_term_nr_ue__PDSCH(ue->pdsch_vars[th_id][gNB_id], fp); free_and_zero(ue->pdsch_vars[th_id][gNB_id]); } + } + + for (int gNB_id = 0; gNB_id < ue->n_connected_gNB; gNB_id++) { for (int th_id = 0; th_id < RX_NB_TH_MAX; th_id++) { for (int i = 0; i < fp->nb_antennas_rx; i++) { diff --git a/openair1/PHY/TOOLS/tools_defs.h b/openair1/PHY/TOOLS/tools_defs.h index 30327cf689..7cee04fc59 100644 --- a/openair1/PHY/TOOLS/tools_defs.h +++ b/openair1/PHY/TOOLS/tools_defs.h @@ -272,58 +272,64 @@ This function performs optimized fixed-point radix-2 FFT/IFFT. SZ_DEF(36864) \ SZ_DEF(49152) \ SZ_DEF(73728) \ - SZ_DEF(98304) + SZ_DEF(98304) #ifdef OAIDFTS_MAIN -typedef void(*adftfunc_t)(int16_t *sigF,int16_t *sig,unsigned char scale_flag); -typedef void(*aidftfunc_t)(int16_t *sigF,int16_t *sig,unsigned char scale_flag); +typedef void(*adftfunc_t)(int16_t *sigF,int16_t *sig,unsigned char scale_flag); +typedef void(*aidftfunc_t)(int16_t *sigF,int16_t *sig,unsigned char scale_flag); #define SZ_FUNC(Sz) void dft ## Sz(int16_t *x,int16_t *y,uint8_t scale_flag); - FOREACH_DFTSZ(SZ_FUNC) +FOREACH_DFTSZ(SZ_FUNC) #define SZ_iFUNC(Sz) void idft ## Sz(int16_t *x,int16_t *y,uint8_t scale_flag); - FOREACH_IDFTSZ(SZ_iFUNC) +FOREACH_IDFTSZ(SZ_iFUNC) #else - typedef void(*dftfunc_t)(uint8_t sizeidx,int16_t *sigF,int16_t *sig,unsigned char scale_flag); - typedef void(*idftfunc_t)(uint8_t sizeidx,int16_t *sigF,int16_t *sig,unsigned char scale_flag); +typedef void(*dftfunc_t)(uint8_t sizeidx,int16_t *sigF,int16_t *sig,unsigned char scale_flag); +typedef void(*idftfunc_t)(uint8_t sizeidx,int16_t *sigF,int16_t *sig,unsigned char scale_flag); # ifdef OAIDFTS_LOADER - dftfunc_t dft; - idftfunc_t idft; +dftfunc_t dft; +idftfunc_t idft; # else - extern dftfunc_t dft; - extern idftfunc_t idft; - extern int load_dftslib(void); +extern dftfunc_t dft; +extern idftfunc_t idft; +extern int load_dftslib(void); # endif #endif - + #define SZ_ENUM(Sz) DFT_ ## Sz, - typedef enum dft_size_idx { - FOREACH_DFTSZ(SZ_ENUM) - DFT_SIZE_IDXTABLESIZE +typedef enum dft_size_idx { + FOREACH_DFTSZ(SZ_ENUM) + DFT_SIZE_IDXTABLESIZE } dft_size_idx_t; - + #define SZ_iENUM(Sz) IDFT_ ## Sz, - typedef enum idft_size_idx { +typedef enum idft_size_idx { FOREACH_IDFTSZ(SZ_iENUM) IDFT_SIZE_IDXTABLESIZE } idft_size_idx_t; - + #ifdef OAIDFTS_MAIN - + #define SZ_PTR(Sz) {dft ## Sz,Sz}, - struct {adftfunc_t func; int size;} dft_ftab[]={ - FOREACH_DFTSZ(SZ_PTR) - }; +struct { + adftfunc_t func; + int size; +} dft_ftab[]= { + FOREACH_DFTSZ(SZ_PTR) +}; #define SZ_iPTR(Sz) {idft ## Sz,Sz}, - struct {adftfunc_t func; int size;} idft_ftab[]={ - FOREACH_IDFTSZ(SZ_iPTR) - }; +struct { + adftfunc_t func; + int size; +} idft_ftab[]= { + FOREACH_IDFTSZ(SZ_iPTR) +}; #endif @@ -378,7 +384,7 @@ int32_t add_real_vector64(int16_t *x, uint32_t N); int32_t sub_real_vector64(int16_t *x, - int16_t* y, + int16_t *y, int16_t *z, uint32_t N); @@ -435,7 +441,7 @@ int32_t signal_energy_amp_shift(int32_t *input, uint32_t length); /*!\fn int32_t signal_energy(int *,uint32_t); \brief Computes the signal energy per subcarrier */ -int32_t subcarrier_energy(int32_t *,uint32_t, int32_t* subcarrier_energy, uint16_t rx_power_correction); +int32_t subcarrier_energy(int32_t *,uint32_t, int32_t *subcarrier_energy, uint16_t rx_power_correction); #endif /*!\fn int32_t signal_energy_nodc(int32_t *,uint32_t); diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h index 784a71f23f..399033abd0 100644 --- a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h +++ b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h @@ -519,4 +519,7 @@ bool nr_find_nb_rb(uint16_t Qm, void nr_sr_reporting(int Mod_idP, frame_t frameP, sub_frame_t slotP); void dump_mac_stats(gNB_MAC_INST *gNB, char *output, int strlen, bool reset_rsrp); + +void process_CellGroup(NR_CellGroupConfig_t *CellGroup, NR_UE_sched_ctrl_t *sched_ctrl); + #endif /*__LAYER2_NR_MAC_PROTO_H__*/ From 1a2be8fc892c3b2f2826ff3fc5c8835f6eec24e8 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Wed, 6 Apr 2022 21:48:01 +0200 Subject: [PATCH 116/150] fix dft modifications related to alignment --- openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h | 2 - .../PHY/LTE_UE_TRANSPORT/ulsch_modulation.c | 45 +++++------ openair1/PHY/MODULATION/slot_fep.c | 2 +- openair1/PHY/TOOLS/oai_dfts.c | 78 +++++++++++-------- openair1/PHY/TOOLS/tools_defs.h | 2 +- 5 files changed, 69 insertions(+), 60 deletions(-) diff --git a/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h b/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h index 6b84a5f969..b4ae44f6ea 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h +++ b/openair1/PHY/LTE_UE_TRANSPORT/transport_ue.h @@ -155,8 +155,6 @@ typedef struct { uint8_t h[MAX_NUM_CHANNEL_BITS]; /// Scrambled "b"-sequences (for definition see 36-211 V8.6 2009-03, p.14) uint8_t b_tilde[MAX_NUM_CHANNEL_BITS]; - /// Modulated "d"-sequences (for definition see 36-211 V8.6 2009-03, p.14) - int32_t d[MAX_NUM_RE]; /// Transform-coded "z"-sequences (for definition see 36-211 V8.6 2009-03, p.14-15) int32_t z[MAX_NUM_RE]; /// "q" sequences for CQI/PMI (for definition see 36-212 V8.6 2009-03, p.27) diff --git a/openair1/PHY/LTE_UE_TRANSPORT/ulsch_modulation.c b/openair1/PHY/LTE_UE_TRANSPORT/ulsch_modulation.c index 7ec3e7bfb6..6a663e8940 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/ulsch_modulation.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/ulsch_modulation.c @@ -42,7 +42,7 @@ //#define DEBUG_ULSCH_MODULATION -void dft_lte(int32_t *z,int32_t *d, int32_t Msc_PUSCH, uint8_t Nsymb) +void dft_lte(int32_t *z,struct complex16 *input, int32_t Msc_PUSCH, uint8_t Nsymb) { #if defined(__x86_64__) || defined(__i386__) @@ -66,7 +66,7 @@ void dft_lte(int32_t *z,int32_t *d, int32_t Msc_PUSCH, uint8_t Nsymb) #endif // printf("Doing lte_dft for Msc_PUSCH %d\n",Msc_PUSCH); - d0 = (uint32_t *)d; + d0 = (uint32_t *)input; d1 = d0+Msc_PUSCH; d2 = d1+Msc_PUSCH; d3 = d2+Msc_PUSCH; @@ -476,7 +476,8 @@ void ulsch_modulation(int32_t **txdataF, // Modulation ulsch_Msymb = G/Q_m; - + /// Modulated "d"-sequences (for definition see 36-211 V8.6 2009-03, p.14) + struct complex16 d[MAX_NUM_RE] __attribute__((aligned(32))); if(ulsch->cooperation_flag == 2) // For Distributed Alamouti Scheme in Collabrative Communication { @@ -488,14 +489,14 @@ void ulsch_modulation(int32_t **txdataF, //UE1, -x1* - ((int16_t*)&ulsch->d[i])[0] = (ulsch->b_tilde[j] == 1) ? (gain_lin_QPSK) : -gain_lin_QPSK; - ((int16_t*)&ulsch->d[i])[1] = (ulsch->b_tilde[j+1] == 1)? (-gain_lin_QPSK) : gain_lin_QPSK; + d[i].r = (ulsch->b_tilde[j] == 1) ? (gain_lin_QPSK) : -gain_lin_QPSK; + d[i].i = (ulsch->b_tilde[j+1] == 1)? (-gain_lin_QPSK) : gain_lin_QPSK; // if (id[i],((int16_t*)&ulsch->d[i])[0],((int16_t*)&ulsch->d[i])[1]); // UE1, x0* - ((int16_t*)&ulsch->d[i+1])[0] = (ulsch->b_tilde[j-2] == 1) ? (-gain_lin_QPSK) : gain_lin_QPSK; - ((int16_t*)&ulsch->d[i+1])[1] = (ulsch->b_tilde[j-1] == 1)? (gain_lin_QPSK) : -gain_lin_QPSK; + d[i+1].r = (ulsch->b_tilde[j-2] == 1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + d[i+1].i = (ulsch->b_tilde[j-1] == 1)? (gain_lin_QPSK) : -gain_lin_QPSK; break; @@ -521,8 +522,8 @@ void ulsch_modulation(int32_t **txdataF, qam16_table_offset_im+=1; - ((int16_t*)&ulsch->d[i])[0]=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - ((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); + d[i].r =-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + d[i].i =(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); //UE1,x0* qam16_table_offset_re = 0; @@ -544,8 +545,8 @@ void ulsch_modulation(int32_t **txdataF, // ((int16_t*)&ulsch->d[i+1])[0]=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); // ((int16_t*)&ulsch->d[i+1])[1]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); - ((int16_t*)&ulsch->d[i+1])[0]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - ((int16_t*)&ulsch->d[i+1])[1]=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); + d[i+1].r=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + d[i+1].i=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); break; @@ -578,8 +579,8 @@ void ulsch_modulation(int32_t **txdataF, qam64_table_offset_im+=1; - ((int16_t*)&ulsch->d[i])[0]=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); + d[i].r=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + d[i].i=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); //UE1,x0* qam64_table_offset_re = 0; @@ -605,8 +606,8 @@ void ulsch_modulation(int32_t **txdataF, qam64_table_offset_im+=1; - ((int16_t*)&ulsch->d[i+1])[0]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t*)&ulsch->d[i+1])[1]=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); + d[i+1].r=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + d[i+1].i=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); break; @@ -621,8 +622,8 @@ void ulsch_modulation(int32_t **txdataF, case 2: // TODO: this has to be updated!!! - ((int16_t*)&ulsch->d[i])[0] = (ulsch->b_tilde[j] == 1) ? (-gain_lin_QPSK) : gain_lin_QPSK; - ((int16_t*)&ulsch->d[i])[1] = (ulsch->b_tilde[j+1] == 1)? (-gain_lin_QPSK) : gain_lin_QPSK; + d[i].r = (ulsch->b_tilde[j] == 1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + d[i].i = (ulsch->b_tilde[j+1] == 1)? (-gain_lin_QPSK) : gain_lin_QPSK; // if (id[i],((int16_t*)&ulsch->d[i])[0],((int16_t*)&ulsch->d[i])[1]); @@ -646,8 +647,8 @@ void ulsch_modulation(int32_t **txdataF, qam16_table_offset_im+=1; - ((int16_t*)&ulsch->d[i])[0]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - ((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); + d[i].r=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + d[i].i=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); // printf("input(16qam) %d (%p): %d,%d\n", i,&ulsch->d[i],((int16_t*)&ulsch->d[i])[0],((int16_t*)&ulsch->d[i])[1]); break; @@ -676,8 +677,8 @@ void ulsch_modulation(int32_t **txdataF, qam64_table_offset_im+=1; - ((int16_t*)&ulsch->d[i])[0]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t*)&ulsch->d[i])[1]=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); + d[i].r=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + d[i].i=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); break; @@ -688,7 +689,7 @@ void ulsch_modulation(int32_t **txdataF, // Transform Precoding - dft_lte(ulsch->z,ulsch->d,Msc_PUSCH,ulsch->Nsymb_pusch); + dft_lte(ulsch->z,d,Msc_PUSCH,ulsch->Nsymb_pusch); DevAssert(txdataF); diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c index 8f41735f10..b2c7d934c6 100644 --- a/openair1/PHY/MODULATION/slot_fep.c +++ b/openair1/PHY/MODULATION/slot_fep.c @@ -91,7 +91,7 @@ int slot_fep(PHY_VARS_UE *ue, } // subframe_offset_F = frame_parms->ofdm_symbol_size * frame_parms->symbols_per_tti * (Ns>>1); - + if (l<0 || l>=7-frame_parms->Ncp) { printf("slot_fep: l must be between 0 and %d\n",7-frame_parms->Ncp); return(-1); diff --git a/openair1/PHY/TOOLS/oai_dfts.c b/openair1/PHY/TOOLS/oai_dfts.c index c266a7f82b..c2b6a55210 100644 --- a/openair1/PHY/TOOLS/oai_dfts.c +++ b/openair1/PHY/TOOLS/oai_dfts.c @@ -7082,43 +7082,40 @@ static inline void dft12f(simd_q15_t *x0, simd_q15_t tmp_dft12[12]; - simd_q15_t *tmp_dft12_ptr = &tmp_dft12[0]; - // msg("dft12\n"); bfly4_tw1(x0, x3, x6, x9, - tmp_dft12_ptr, - tmp_dft12_ptr+3, - tmp_dft12_ptr+6, - tmp_dft12_ptr+9); - + tmp_dft12, + tmp_dft12+3, + tmp_dft12+6, + tmp_dft12+9); bfly4_tw1(x1, x4, x7, x10, - tmp_dft12_ptr+1, - tmp_dft12_ptr+4, - tmp_dft12_ptr+7, - tmp_dft12_ptr+10); + tmp_dft12+1, + tmp_dft12+4, + tmp_dft12+7, + tmp_dft12+10); bfly4_tw1(x2, x5, x8, x11, - tmp_dft12_ptr+2, - tmp_dft12_ptr+5, - tmp_dft12_ptr+8, - tmp_dft12_ptr+11); + tmp_dft12+2, + tmp_dft12+5, + tmp_dft12+8, + tmp_dft12+11); // k2=0; - bfly3_tw1(tmp_dft12_ptr, - tmp_dft12_ptr+1, - tmp_dft12_ptr+2, + bfly3_tw1(tmp_dft12, + tmp_dft12+1, + tmp_dft12+2, y0, y4, y8); @@ -7126,9 +7123,9 @@ static inline void dft12f(simd_q15_t *x0, // k2=1; - bfly3(tmp_dft12_ptr+3, - tmp_dft12_ptr+4, - tmp_dft12_ptr+5, + bfly3(tmp_dft12+3, + tmp_dft12+4, + tmp_dft12+5, y1, y5, y9, @@ -7138,9 +7135,9 @@ static inline void dft12f(simd_q15_t *x0, // k2=2; - bfly3(tmp_dft12_ptr+6, - tmp_dft12_ptr+7, - tmp_dft12_ptr+8, + bfly3(tmp_dft12+6, + tmp_dft12+7, + tmp_dft12+8, y2, y6, y10, @@ -7148,9 +7145,9 @@ static inline void dft12f(simd_q15_t *x0, W4_12); // k2=3; - bfly3(tmp_dft12_ptr+9, - tmp_dft12_ptr+10, - tmp_dft12_ptr+11, + bfly3(tmp_dft12+9, + tmp_dft12+10, + tmp_dft12+11, y3, y7, y11, @@ -10607,11 +10604,19 @@ int dfts_autoinit(void) #ifndef MR_MAIN void dft(uint8_t sizeidx, int16_t *input,int16_t *output,unsigned char scale_flag){ - AssertFatal((sizeidx>=0 && sizeidx= 0 && sizeidx=0 && sizeidx Date: Thu, 7 Apr 2022 12:05:50 +0200 Subject: [PATCH 117/150] a small out of buffer access, likely only santize addr detection --- openair1/PHY/NR_TRANSPORT/nr_dlsch.c | 81 ++++++++++++++-------------- 1 file changed, 39 insertions(+), 42 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c index 47d6c48373..e242f989ea 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c @@ -98,7 +98,6 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, uint16_t nb_re = ((12*rel15->NrOfSymbols)-nb_re_dmrs*dmrs_len-xOverhead)*rel15->rbSize*rel15->nrOfLayers; uint8_t Qm = rel15->qamModOrder[0]; uint32_t encoded_length = nb_re*Qm; - uint32_t scrambled_output[rel15->NrOfCodewords][(encoded_length>>5)+1]; int16_t mod_dmrs[n_dmrs<<1] __attribute__ ((aligned(16))); /* PTRS */ @@ -147,63 +146,61 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, printf("\n"); #endif - /// scrambling - start_meas(dlsch_scrambling_stats); for (int q=0; qNrOfCodewords; q++) { - memset((void*)scrambled_output[q], 0, ((encoded_length>>5)+1)*sizeof(uint32_t)); + /// scrambling + start_meas(dlsch_scrambling_stats); + uint32_t scrambled_output[(encoded_length>>5)+4]; // modulator acces by 4 bytes in some cases + memset(scrambled_output, 0, sizeof(scrambled_output)); + if ( encoded_length > rel15->rbSize * NR_SYMBOLS_PER_SLOT * NR_NB_SC_PER_RB * Qm * rel15->nrOfLayers) abort(); nr_pdsch_codeword_scrambling(output, encoded_length, q, rel15->dataScramblingId, rel15->rnti, - scrambled_output[q]); - } - - stop_meas(dlsch_scrambling_stats); + scrambled_output); #ifdef DEBUG_DLSCH - printf("PDSCH scrambling:\n"); - for (int i=0; i>8; i++) { - for (int j=0; j<8; j++) - printf("0x%08x\t", scrambled_output[0][(i<<3)+j]); - printf("\n"); - } -#endif - - /// Modulation - start_meas(dlsch_modulation_stats); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_MODULATION, 1); - for (int q=0; qNrOfCodewords; q++) - nr_modulation(scrambled_output[q], - encoded_length, - Qm, - mod_symbs[q]); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_MODULATION, 0); - stop_meas(dlsch_modulation_stats); -#ifdef DEBUG_DLSCH - printf("PDSCH Modulation: Qm %d(%d)\n", Qm, nb_re); - for (int i=0; i>3; i++) { - for (int j=0; j<8; j++) { - printf("%d %d\t", mod_symbs[0][((i<<3)+j)<<1], mod_symbs[0][(((i<<3)+j)<<1)+1]); + printf("PDSCH scrambling:\n"); + for (int i=0; i>8; i++) { + for (int j=0; j<8; j++) + printf("0x%08x\t", scrambled_output[(i<<3)+j]); + printf("\n"); } - printf("\n"); - } #endif + stop_meas(dlsch_scrambling_stats); + /// Modulation + start_meas(dlsch_modulation_stats); + nr_modulation(scrambled_output, + encoded_length, + Qm, + mod_symbs[q]); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_PDSCH_MODULATION, 0); + stop_meas(dlsch_modulation_stats); +#ifdef DEBUG_DLSCH + printf("PDSCH Modulation: Qm %d(%d)\n", Qm, nb_re); + for (int i=0; i>3; i++) { + for (int j=0; j<8; j++) { + printf("%d %d\t", mod_symbs[0][((i<<3)+j)<<1], mod_symbs[0][(((i<<3)+j)<<1)+1]); + } + printf("\n"); + } +#endif + } start_meas(&gNB->dlsch_layer_mapping_stats); /// Layer mapping nr_layer_mapping(mod_symbs, - rel15->nrOfLayers, - nb_re, - tx_layers); + rel15->nrOfLayers, + nb_re, + tx_layers); #ifdef DEBUG_DLSCH printf("Layer mapping (%d layers):\n", rel15->nrOfLayers); for (int l=0; lnrOfLayers; l++) for (int i=0; i<(nb_re/rel15->nrOfLayers)>>3; i++) { - printf("layer %d, Re %d..%d : ",l,i<<3,(i<<3)+7); - for (int j=0; j<8; j++) { - printf("l%d %d\t", tx_layers[l][((i<<3)+j)<<1], tx_layers[l][(((i<<3)+j)<<1)+1]); - } - printf("\n"); + printf("layer %d, Re %d..%d : ",l,i<<3,(i<<3)+7); + for (int j=0; j<8; j++) { + printf("l%d %d\t", tx_layers[l][((i<<3)+j)<<1], tx_layers[l][(((i<<3)+j)<<1)+1]); + } + printf("\n"); } #endif @@ -222,7 +219,7 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, #ifdef DEBUG_DLSCH_MAPPING printf("PDSCH resource mapping started (start SC %d\tstart symbol %d\tN_PRB %d\tnb_re %d,nb_layers %d)\n", - start_sc, rel15->StartSymbolIndex, rel15->rbSize, nb_re,rel15->nrOfLayers); + start_sc, rel15->StartSymbolIndex, rel15->rbSize, nb_re,rel15->nrOfLayers); #endif start_meas(&gNB->dlsch_resource_mapping_stats); From f2e6537195b2bb553f291c914923da0f7a9f8ecf Mon Sep 17 00:00:00 2001 From: Laurent Thomas Date: Sun, 10 Apr 2022 22:11:37 +0200 Subject: [PATCH 118/150] roolback regression --- openair1/PHY/defs_UE.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/openair1/PHY/defs_UE.h b/openair1/PHY/defs_UE.h index a634a0d585..4f9bc076ff 100644 --- a/openair1/PHY/defs_UE.h +++ b/openair1/PHY/defs_UE.h @@ -168,6 +168,19 @@ typedef struct { struct sched_param sched_param_ue; /// pthread descriptor main UE thread pthread_t pthread_ue; + /// \brief Instance count for synch thread. + /// \internal This variable is protected by \ref mutex_synch. + int instance_cnt_synch; + /// pthread attributes for synch processing thread + pthread_attr_t attr_synch; + /// scheduling parameters for synch thread + struct sched_param sched_param_synch; + /// pthread descriptor synch thread + pthread_t pthread_synch; + /// condition variable for UE synch thread; + pthread_cond_t cond_synch; + /// mutex for UE synch thread + pthread_mutex_t mutex_synch; /// instance count for eNBs int instance_cnt_eNBs; /// set of scheduling variables RXn-TXnp4 threads From b860d76cd62ecdb1dba5d8743482cd92c3a2f09e Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Mon, 11 Apr 2022 09:39:16 +0200 Subject: [PATCH 119/150] fix lte-ue.c main loop with 5G common vars --- targets/RT/USER/lte-ue.c | 1003 ++++++++++++++++++-------------------- 1 file changed, 482 insertions(+), 521 deletions(-) diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 9010a40bf9..8565e36e87 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -87,7 +87,7 @@ extern void multicast_link_start(void (*rx_handlerP) (unsigned int, char *), extern int multicast_link_write_sock(int groupP, char *dataP, uint32_t sizeP); -int tx_req_num_elems; +int tx_req_num_elems; extern uint16_t sf_ahead; //extern int tx_req_UE_MAC1(); @@ -176,6 +176,7 @@ PHY_VARS_UE *init_ue_vars(LTE_DL_FRAME_PARMS *frame_parms, { PHY_VARS_UE *ue = (PHY_VARS_UE *)calloc(1,sizeof(PHY_VARS_UE)); AssertFatal(ue,""); + if (frame_parms!=(LTE_DL_FRAME_PARMS *)NULL) { // if we want to give initial frame parms, allocate the PHY_VARS_UE structure and put them in memcpy(&(ue->frame_parms), frame_parms, sizeof(LTE_DL_FRAME_PARMS)); } @@ -204,8 +205,7 @@ void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_t *cpuset, - char *name) -{ + char *name) { #ifdef DEADLINE_SCHEDULER if (sched_runtime!=0) { @@ -266,8 +266,7 @@ void init_UE(int nb_inst, runmode_t mode, int rxgain, int txpowermax, - LTE_DL_FRAME_PARMS *fp0) -{ + LTE_DL_FRAME_PARMS *fp0) { PHY_VARS_UE *UE; int inst; int ret; @@ -283,9 +282,7 @@ void init_UE(int nb_inst, if (PHY_vars_UE_g[inst]==NULL) PHY_vars_UE_g[inst] = (PHY_VARS_UE **)calloc(1+MAX_NUM_CCs,sizeof(PHY_VARS_UE *)); LOG_I(PHY,"Allocating UE context %d\n",inst); - PHY_vars_UE_g[inst][0] = init_ue_vars(fp0,inst,0); - // turn off timing control loop in UE PHY_vars_UE_g[inst][0]->no_timing_correction = timing_correction; UE = PHY_vars_UE_g[inst][0]; @@ -362,7 +359,6 @@ void init_UE(int nb_inst, LOG_I(PHY,"Intializing UE Threads for instance %d (%p,%p)...\n",inst,PHY_vars_UE_g[inst],PHY_vars_UE_g[inst][0]); init_UE_threads(inst); - ret = openair0_device_load(&(UE->rfdevice), &openair0_cfg[0]); if (ret !=0) { @@ -385,8 +381,7 @@ void init_UE(int nb_inst, void init_UE_stub_single_thread(int nb_inst, int eMBMS_active, int uecap_xer_in, - char *emul_iface) -{ + char *emul_iface) { int inst; LOG_I(PHY,"UE : Calling Layer 2 for initialization, nb_inst: %d \n", nb_inst); l2_init_ue(eMBMS_active,(uecap_xer_in==1)?uecap_xer:NULL, @@ -411,24 +406,23 @@ void init_UE_stub_single_thread(int nb_inst, } } -void init_UE_standalone_thread(int ue_idx) -{ +void init_UE_standalone_thread(int ue_idx) { int standalone_tx_port = 3211 + ue_idx * 2; int standalone_rx_port = 3212 + ue_idx * 2; ue_init_standalone_socket(standalone_tx_port, standalone_rx_port); - pthread_t thread; + if (pthread_create(&thread, NULL, ue_standalone_pnf_task, NULL) != 0) { LOG_E(MAC, "pthread_create failed for calling ue_standalone_pnf_task"); } + pthread_setname_np(thread, "oai:ue-stand"); } void init_UE_stub(int nb_inst, int eMBMS_active, int uecap_xer_in, - char *emul_iface) -{ + char *emul_iface) { int inst; LOG_I(PHY,"UE : Calling Layer 2 for initialization\n"); l2_init_ue(eMBMS_active,(uecap_xer_in==1)?uecap_xer:NULL, @@ -462,8 +456,7 @@ void init_UE_stub(int nb_inst, * \returns a pointer to an int. The storage is not on the heap and must not be freed. */ -static void *UE_thread_synch(void *arg) -{ +static void *UE_thread_synch(void *arg) { static int UE_thread_synch_retval; int i ; PHY_VARS_UE *UE = (PHY_VARS_UE *) arg; @@ -478,6 +471,7 @@ static void *UE_thread_synch(void *arg) printf("UE_thread_sync in with PHY_vars_UE %p\n",arg); cpu_set_t cpuset; CPU_ZERO(&cpuset); + if ( threads.sync != -1 ) CPU_SET(threads.sync, &cpuset); @@ -757,8 +751,7 @@ static void *UE_thread_synch(void *arg) * \param arg is a pointer to a \ref PHY_VARS_UE structure. * \returns a pointer to an int. The storage is not on the heap and must not be freed. */ -const char *get_connectionloss_errstr(int errcode) -{ +const char *get_connectionloss_errstr(int errcode) { switch (errcode) { case CONNECTION_LOST: return "RRC Connection lost, returning to PRACH"; @@ -773,8 +766,7 @@ const char *get_connectionloss_errstr(int errcode) return "UNKNOWN RETURN CODE"; } -static void *UE_thread_rxn_txnp4(void *arg) -{ +static void *UE_thread_rxn_txnp4(void *arg) { static __thread int UE_thread_rxtx_retval; struct rx_tx_thread_data *rtd = arg; UE_rxtx_proc_t *proc = rtd->proc; @@ -867,13 +859,11 @@ static void *UE_thread_rxn_txnp4(void *arg) if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) || (UE->frame_parms.frame_type == FDD) ) - if (UE->mode != loop_through_memory) - phy_procedures_UE_TX(UE,proc,0,0,UE->mode); + phy_procedures_UE_TX(UE,proc,0,0,UE->mode); if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_S) && (UE->frame_parms.frame_type == TDD)) - if (UE->mode != loop_through_memory) - phy_procedures_UE_S_TX(UE,0,0); + phy_procedures_UE_S_TX(UE,0,0); proc->instance_cnt_rxtx--; @@ -895,8 +885,7 @@ static void *UE_thread_rxn_txnp4(void *arg) unsigned int emulator_absSF; void ue_stub_rx_handler(unsigned int num_bytes, - char *rx_buffer) -{ + char *rx_buffer) { PHY_VARS_UE *UE; UE = PHY_vars_UE_g[0][0]; UE_tport_t *pdu = (UE_tport_t *)rx_buffer; @@ -951,14 +940,14 @@ void ue_stub_rx_handler(unsigned int num_bytes, } } -uint64_t clock_usec(void) -{ - struct timespec t; - if (clock_gettime(CLOCK_MONOTONIC, &t) == -1) - { - abort(); - } - return (uint64_t)t.tv_sec * 1000000 + (t.tv_nsec / 1000); +uint64_t clock_usec(void) { + struct timespec t; + + if (clock_gettime(CLOCK_MONOTONIC, &t) == -1) { + abort(); + } + + return (uint64_t)t.tv_sec * 1000000 + (t.tv_nsec / 1000); } /*! * \brief This is the UE thread for RX subframe n and TX subframe n+4. @@ -968,23 +957,21 @@ uint64_t clock_usec(void) * \returns a pointer to an int. The storage is not on the heap and must not be freed. */ -static void *UE_phy_stub_standalone_pnf_task(void *arg) -{ +static void *UE_phy_stub_standalone_pnf_task(void *arg) { #if 1 { struct sched_param sparam = { .sched_priority = 79, }; - if (pthread_setschedparam(pthread_self(), SCHED_RR, &sparam) != 0) - { + + if (pthread_setschedparam(pthread_self(), SCHED_RR, &sparam) != 0) { LOG_E(PHY,"pthread_setschedparam: %s\n", strerror(errno)); } } #else thread_top_init("UE_phy_stub_thread_rxn_txnp4", 1, 870000L, 1000000L, 1000000L); #endif - // for multipule UE's L2-emulator //module_id_t Mod_id = 0; //int init_ra_UE = -1; // This counter is used to initiate the RA of each UE in different SFrames @@ -1004,9 +991,7 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) PHY_VARS_UE *UE = NULL; int ret; proc = &PHY_vars_UE_g[0][0]->proc.proc_rxtx[0]; - UE = rtd->UE; - UL_INFO = (UL_IND_t *)calloc(1, sizeof(UL_IND_t)); UL_INFO->rx_ind.rx_indication_body.rx_pdu_list = calloc(NFAPI_RX_IND_MAX_PDU, sizeof(nfapi_rx_indication_pdu_t)); UL_INFO->rx_ind.rx_indication_body.number_of_pdus = 0; @@ -1019,19 +1004,15 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) UL_INFO->cqi_ind.cqi_indication_body.cqi_pdu_list = calloc(NFAPI_CQI_IND_MAX_PDU, sizeof(nfapi_cqi_indication_pdu_t)); UL_INFO->cqi_ind.cqi_indication_body.cqi_raw_pdu_list = calloc(NFAPI_CQI_IND_MAX_PDU, sizeof(nfapi_cqi_indication_raw_pdu_t)); UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis = 0; - proc->subframe_rx = proc->sub_frame_start; proc->subframe_tx = -1; proc->frame_rx = -1; proc->frame_tx = -1; // Initializations for nfapi-L2-emulator mode sync_var = 0; - //PANOS: CAREFUL HERE! wait_sync("UE_phy_stub_standalone_pnf_task"); - int last_sfn_sf = -1; - LOG_I(MAC, "Clearing Queues\n"); reset_queue(&dl_config_req_tx_req_queue); reset_queue(&ul_config_req_queue); @@ -1039,72 +1020,77 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) while (!oai_exit) { bool sent_any = false; + if (sem_wait(&sfn_semaphore) != 0) { LOG_E(MAC, "sem_wait() error\n"); abort(); } int sfn_sf = current_sfn_sf; - if (sfn_sf == last_sfn_sf) - { + + if (sfn_sf == last_sfn_sf) { LOG_W(MAC, "repeated sfn_sf = %d.%d\n", sfn_sf >> 4, sfn_sf & 15); continue; } - last_sfn_sf = sfn_sf; + last_sfn_sf = sfn_sf; nfapi_dl_config_req_tx_req_t *dl_config_req_tx_req = get_queue(&dl_config_req_tx_req_queue); nfapi_ul_config_request_t *ul_config_req = get_queue(&ul_config_req_queue); nfapi_hi_dci0_request_t *hi_dci0_req = get_queue(&hi_dci0_req_queue); - LOG_I(MAC, "received from proxy frame %d subframe %d\n", NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf)); if (ul_config_req != NULL) { uint8_t ul_num_pdus = ul_config_req->ul_config_request_body.number_of_pdus; + if (ul_num_pdus > 0) { char *ul_str = nfapi_ul_config_req_to_string(ul_config_req); LOG_I(MAC, "ul_config_req: %s\n", ul_str); free(ul_str); } } + if (hi_dci0_req != NULL) { LOG_D(MAC, "hi_dci0_req pdus: %u Frame: %d Subframe: %d\n", - hi_dci0_req->hi_dci0_request_body.number_of_dci, - NFAPI_SFNSF2SFN(hi_dci0_req->sfn_sf), NFAPI_SFNSF2SF(hi_dci0_req->sfn_sf)); + hi_dci0_req->hi_dci0_request_body.number_of_dci, + NFAPI_SFNSF2SFN(hi_dci0_req->sfn_sf), NFAPI_SFNSF2SF(hi_dci0_req->sfn_sf)); } if (dl_config_req_tx_req != NULL) { - nfapi_tx_req_pdu_list_t *tx_req_pdu_list = dl_config_req_tx_req->tx_req_pdu_list; nfapi_dl_config_request_t *dl_config_req = dl_config_req_tx_req->dl_config_req; - uint16_t dl_num_pdus = dl_config_req->dl_config_request_body.number_pdu; LOG_I(MAC, "(OAI UE) Received dl_config_req from proxy at Frame: %d, Subframe: %d," " with number of PDUs: %u\n", NFAPI_SFNSF2SFN(dl_config_req->sfn_sf), NFAPI_SFNSF2SF(dl_config_req->sfn_sf), dl_num_pdus); + if (dl_num_pdus > 0) { char *dl_str = nfapi_dl_config_req_to_string(dl_config_req); LOG_I(MAC, "dl_config_req: %s\n", dl_str); free(dl_str); } - LOG_D(MAC, "tx_req pdus: %d\n", tx_req_pdu_list->num_pdus); + LOG_D(MAC, "tx_req pdus: %d\n", tx_req_pdu_list->num_pdus); // Handling dl_config_req and tx_req: nfapi_dl_config_request_body_t *dl_config_req_body = &dl_config_req->dl_config_request_body; + for (int i = 0; i < dl_config_req_body->number_pdu; ++i) { nfapi_dl_config_request_pdu_t *pdu = &dl_config_req_body->dl_config_pdu_list[i]; + if (pdu->pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE) { i += 1; AssertFatal(i < dl_config_req->dl_config_request_body.number_pdu, "Need PDU following DCI at index %d, but not found\n", i); nfapi_dl_config_request_pdu_t *dlsch = &dl_config_req_body->dl_config_pdu_list[i]; + if (dlsch->pdu_type != NFAPI_DL_CONFIG_DLSCH_PDU_TYPE) { LOG_E(MAC, "expected DLSCH PDU at index %d\n", i); continue; } + dl_config_req_UE_MAC_dci(NFAPI_SFNSF2SFN(dl_config_req->sfn_sf), NFAPI_SFNSF2SF(dl_config_req->sfn_sf), pdu, @@ -1125,8 +1111,10 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) } } } + if (hi_dci0_req) { nfapi_hi_dci0_request_body_t *hi_dci0_body = &hi_dci0_req->hi_dci0_request_body; + for (int i = 0; i < hi_dci0_body->number_of_dci + hi_dci0_body->number_of_hi; i++) { nfapi_hi_dci0_request_pdu_t *pdu = &hi_dci0_body->hi_dci0_pdu_list[i]; hi_dci0_req_UE_MAC(NFAPI_SFNSF2SFN(hi_dci0_req->sfn_sf), @@ -1139,13 +1127,13 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) for (ue_index = 0; ue_index < ue_num; ue_index++) { ue_Mod_id = ue_thread_id + NB_THREAD_INST * ue_index; // Always 0 in standalone pnf mode UE = PHY_vars_UE_g[ue_Mod_id][0]; - #if UE_TIMING_TRACE start_meas(&UE->generic_stat); #endif int rx_frame = NFAPI_SFNSF2SF(sfn_sf) < 4 ? (NFAPI_SFNSF2SFN(sfn_sf) + 1023) % 1024 : NFAPI_SFNSF2SFN(sfn_sf); // subtracting 4 from subframe_tx int rx_subframe = NFAPI_SFNSF2SF(sfn_sf) < 4 ? NFAPI_SFNSF2SF(sfn_sf) + 6 : NFAPI_SFNSF2SF(sfn_sf) - 4; LOG_D(MAC, "rx_frame %d rx_subframe %d\n", rx_frame, rx_subframe); + if (UE->mac_enabled == 1) { ret = ue_scheduler(ue_Mod_id, rx_frame, @@ -1168,178 +1156,171 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) // Prepare the future Tx data if ((subframe_select(&UE->frame_parms, NFAPI_SFNSF2SF(sfn_sf)) == SF_UL) || - (UE->frame_parms.frame_type == FDD)) - { - if (UE->mode != loop_through_memory) - { - // We make the start of RA between consecutive UEs differ by 20 frames - //if ((UE_mac_inst[Mod_id].UE_mode[0] == PRACH && Mod_id == 0) || (UE_mac_inst[Mod_id].UE_mode[0] == PRACH && Mod_id>0 && rx_frame >= UE_mac_inst[Mod_id-1].ra_frame + 20) ) { - if (UE_mac_inst[ue_Mod_id].UE_mode[0] == RA_RESPONSE && - is_prach_subframe(&UE->frame_parms, NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf))) - { - UE_mac_inst[ue_Mod_id].UE_mode[0] = PRACH; - } - LOG_D(MAC, "UE_mode: %d\n", UE_mac_inst[ue_Mod_id].UE_mode[0]); - if (UE_mac_inst[ue_Mod_id].UE_mode[0] == PRACH) - { //&& ue_Mod_id == next_Mod_id) { - next_ra_frame++; - if (next_ra_frame > 500) - { - // check if we have PRACH opportunity - if (is_prach_subframe(&UE->frame_parms, NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf)) && UE_mac_inst[ue_Mod_id].SI_Decoded == 1) - { - // The one working strangely... - //if (is_prach_subframe(&UE->frame_parms,NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf) && Mod_id == (module_id_t) init_ra_UE) ) { - PRACH_RESOURCES_t *prach_resources = ue_get_rach(ue_Mod_id, 0, NFAPI_SFNSF2SFN(sfn_sf), 0, NFAPI_SFNSF2SF(sfn_sf)); - if (prach_resources != NULL) - { - LOG_I(MAC, "preamble_received_tar_power: %d\n", - prach_resources->ra_PREAMBLE_RECEIVED_TARGET_POWER); - UE_mac_inst[ue_Mod_id].ra_frame = NFAPI_SFNSF2SFN(sfn_sf); - LOG_D(MAC, "UE_phy_stub_thread_rxn_txnp4 before RACH, Mod_id: %d frame %d subframe %d\n", ue_Mod_id, NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf)); - fill_rach_indication_UE_MAC(ue_Mod_id, NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf), UL_INFO, prach_resources->ra_PreambleIndex, prach_resources->ra_RNTI); - sent_any = true; - Msg1_transmitted(ue_Mod_id, 0, NFAPI_SFNSF2SFN(sfn_sf), 0); - UE_mac_inst[ue_Mod_id].UE_mode[0] = RA_RESPONSE; - next_Mod_id = ue_Mod_id + 1; - //next_ra_frame = (rx_frame + 20)%1000; - next_ra_frame = 0; - } - //ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode); + (UE->frame_parms.frame_type == FDD)) { + // We make the start of RA between consecutive UEs differ by 20 frames + //if ((UE_mac_inst[Mod_id].UE_mode[0] == PRACH && Mod_id == 0) || (UE_mac_inst[Mod_id].UE_mode[0] == PRACH && Mod_id>0 && rx_frame >= UE_mac_inst[Mod_id-1].ra_frame + 20) ) { + if (UE_mac_inst[ue_Mod_id].UE_mode[0] == RA_RESPONSE && + is_prach_subframe(&UE->frame_parms, NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf))) { + UE_mac_inst[ue_Mod_id].UE_mode[0] = PRACH; + } + + LOG_D(MAC, "UE_mode: %d\n", UE_mac_inst[ue_Mod_id].UE_mode[0]); + + if (UE_mac_inst[ue_Mod_id].UE_mode[0] == PRACH) { + //&& ue_Mod_id == next_Mod_id) { + next_ra_frame++; + + if (next_ra_frame > 500) { + // check if we have PRACH opportunity + if (is_prach_subframe(&UE->frame_parms, NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf)) && UE_mac_inst[ue_Mod_id].SI_Decoded == 1) { + // The one working strangely... + //if (is_prach_subframe(&UE->frame_parms,NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf) && Mod_id == (module_id_t) init_ra_UE) ) { + PRACH_RESOURCES_t *prach_resources = ue_get_rach(ue_Mod_id, 0, NFAPI_SFNSF2SFN(sfn_sf), 0, NFAPI_SFNSF2SF(sfn_sf)); + + if (prach_resources != NULL) { + LOG_I(MAC, "preamble_received_tar_power: %d\n", + prach_resources->ra_PREAMBLE_RECEIVED_TARGET_POWER); + UE_mac_inst[ue_Mod_id].ra_frame = NFAPI_SFNSF2SFN(sfn_sf); + LOG_D(MAC, "UE_phy_stub_thread_rxn_txnp4 before RACH, Mod_id: %d frame %d subframe %d\n", ue_Mod_id, NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf)); + fill_rach_indication_UE_MAC(ue_Mod_id, NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf), UL_INFO, prach_resources->ra_PreambleIndex, prach_resources->ra_RNTI); + sent_any = true; + Msg1_transmitted(ue_Mod_id, 0, NFAPI_SFNSF2SFN(sfn_sf), 0); + UE_mac_inst[ue_Mod_id].UE_mode[0] = RA_RESPONSE; + next_Mod_id = ue_Mod_id + 1; + //next_ra_frame = (rx_frame + 20)%1000; + next_ra_frame = 0; } + + //ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode); } - } // mode is PRACH - - // Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger - // UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB). - // Generate UL_indications which correspond to UL traffic. - if (ul_config_req != NULL) - { //&& UE_mac_inst[Mod_id].ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL){ - ul_config_req_UE_MAC(ul_config_req, NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf), ue_Mod_id); } - } + } // mode is PRACH - phy_procedures_UE_SL_RX(UE, proc); - } - else - { - LOG_I(MAC, "Skipping subframe select statement proxy SFN.SF: %d.%d\n", - NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf)); - if (ul_config_req != NULL) - { - LOG_I(MAC, "Skipping subframe select statement ul_config_req SFN.SF: %d.%d\n", - NFAPI_SFNSF2SFN(ul_config_req->sfn_sf), NFAPI_SFNSF2SF(ul_config_req->sfn_sf)); + // Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger + // UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB). + // Generate UL_indications which correspond to UL traffic. + if (ul_config_req != NULL) { + //&& UE_mac_inst[Mod_id].ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL){ + ul_config_req_UE_MAC(ul_config_req, NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf), ue_Mod_id); } } - } //for (Mod_id=0; Mod_idcrc_ind.crc_indication_body.number_of_crcs > 0) { - //LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.number_of_crcs:%d CRC_IND:SFN/SF:%d\n", UL_info->crc_ind.crc_indication_body.number_of_crcs, NFAPI_SFNSF2DEC(UL_info->crc_ind.sfn_sf)); - //LOG_I(MAC, "ul_config_req_UE_MAC 2.2, SFN/SF of PNF counter:%d.%d, number_of_crcs: %d \n", timer_frame, timer_subframe, UL_INFO->crc_ind.crc_indication_body.number_of_crcs); - send_standalone_msg(UL_INFO, UL_INFO->crc_ind.header.message_id); - sent_any = true; - //LOG_I(MAC, "ul_config_req_UE_MAC 2.21 \n"); - UL_INFO->crc_ind.crc_indication_body.number_of_crcs = 0; - } + phy_procedures_UE_SL_RX(UE, proc); + } else { + LOG_I(MAC, "Skipping subframe select statement proxy SFN.SF: %d.%d\n", + NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf)); - if (UL_INFO->rx_ind.rx_indication_body.number_of_pdus > 0) { - - //LOG_D(PHY,"UL_info->rx_ind.number_of_pdus:%d RX_IND:SFN/SF:%d\n", UL_info->rx_ind.rx_indication_body.number_of_pdus, NFAPI_SFNSF2DEC(UL_info->rx_ind.sfn_sf)); - //LOG_I(MAC, "ul_config_req_UE_MAC 2.3, SFN/SF of PNF counter:%d.%d, number_of_pdus: %d \n", timer_frame, timer_subframe, UL_INFO->rx_ind.rx_indication_body.number_of_pdus); - send_standalone_msg(UL_INFO, UL_INFO->rx_ind.header.message_id); - sent_any = true; - - //LOG_I(MAC, "ul_config_req_UE_MAC 2.31 \n"); - UL_INFO->rx_ind.rx_indication_body.number_of_pdus = 0; - } - - if (UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis > 0) { - send_standalone_msg(UL_INFO, UL_INFO->cqi_ind.header.message_id); - sent_any = true; - UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis = 0; - } - - if (UL_INFO->harq_ind.harq_indication_body.number_of_harqs > 0) { - //LOG_D(MAC, "ul_config_req_UE_MAC 2.4, SFN/SF of PNF counter:%d.%d, number_of_harqs: %d \n", timer_frame, timer_subframe, UL_INFO->harq_ind.harq_indication_body.number_of_harqs); - send_standalone_msg(UL_INFO, UL_INFO->harq_ind.header.message_id); - sent_any = true; - //LOG_I(MAC, "ul_config_req_UE_MAC 2.41 \n"); - UL_INFO->harq_ind.harq_indication_body.number_of_harqs = 0; - } - - if (UL_INFO->sr_ind.sr_indication_body.number_of_srs > 0) { - //LOG_I(MAC, "ul_config_req_UE_MAC 2.5, SFN/SF of PNF counter:%d.%d, number_of_srs: %d \n", timer_frame, timer_subframe, UL_INFO->sr_ind.sr_indication_body.number_of_srs); - send_standalone_msg(UL_INFO, UL_INFO->sr_ind.header.message_id); - sent_any = true; - //LOG_I(MAC, "ul_config_req_UE_MAC 2.51 \n"); - UL_INFO->sr_ind.sr_indication_body.number_of_srs = 0; - } - - // De-allocate memory of nfapi requests copies before next subframe round - if (dl_config_req_tx_req != NULL) { - if (dl_config_req_tx_req->dl_config_req->vendor_extension != NULL) { - free(dl_config_req_tx_req->dl_config_req->vendor_extension); - dl_config_req_tx_req->dl_config_req->vendor_extension = NULL; + if (ul_config_req != NULL) { + LOG_I(MAC, "Skipping subframe select statement ul_config_req SFN.SF: %d.%d\n", + NFAPI_SFNSF2SFN(ul_config_req->sfn_sf), NFAPI_SFNSF2SF(ul_config_req->sfn_sf)); } - - if (dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list != NULL) { - free(dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list); - dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list = NULL; - } - nfapi_free_tx_req_pdu_list(dl_config_req_tx_req->tx_req_pdu_list); - dl_config_req_tx_req->tx_req_pdu_list = NULL; - - free(dl_config_req_tx_req->dl_config_req); - dl_config_req_tx_req->dl_config_req = NULL; - - free(dl_config_req_tx_req); - dl_config_req_tx_req = NULL; } + } //for (Mod_id=0; Mod_idul_config_request_body.ul_config_pdu_list != NULL) { - free(ul_config_req->ul_config_request_body.ul_config_pdu_list); - ul_config_req->ul_config_request_body.ul_config_pdu_list = NULL; - } - - free(ul_config_req); - ul_config_req = NULL; - } - - if (hi_dci0_req != NULL) { - if (hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list != NULL) { - free(hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list); - hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list = NULL; - } - - free(hi_dci0_req); - hi_dci0_req = NULL; - } - if (!sent_any) - { - send_standalone_dummy(); - } + if (UL_INFO->crc_ind.crc_indication_body.number_of_crcs > 0) { + //LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.number_of_crcs:%d CRC_IND:SFN/SF:%d\n", UL_info->crc_ind.crc_indication_body.number_of_crcs, NFAPI_SFNSF2DEC(UL_info->crc_ind.sfn_sf)); + //LOG_I(MAC, "ul_config_req_UE_MAC 2.2, SFN/SF of PNF counter:%d.%d, number_of_crcs: %d \n", timer_frame, timer_subframe, UL_INFO->crc_ind.crc_indication_body.number_of_crcs); + send_standalone_msg(UL_INFO, UL_INFO->crc_ind.header.message_id); + sent_any = true; + //LOG_I(MAC, "ul_config_req_UE_MAC 2.21 \n"); + UL_INFO->crc_ind.crc_indication_body.number_of_crcs = 0; } - // Free UL_INFO messages - free(UL_INFO->cqi_ind.cqi_indication_body.cqi_raw_pdu_list); - UL_INFO->cqi_ind.cqi_indication_body.cqi_raw_pdu_list = NULL; - free(UL_INFO->cqi_ind.cqi_indication_body.cqi_pdu_list); - UL_INFO->cqi_ind.cqi_indication_body.cqi_pdu_list = NULL; - free(UL_INFO->sr_ind.sr_indication_body.sr_pdu_list); - UL_INFO->sr_ind.sr_indication_body.sr_pdu_list = NULL; - free(UL_INFO->harq_ind.harq_indication_body.harq_pdu_list); - UL_INFO->harq_ind.harq_indication_body.harq_pdu_list = NULL; - free(UL_INFO->crc_ind.crc_indication_body.crc_pdu_list); - UL_INFO->crc_ind.crc_indication_body.crc_pdu_list = NULL; - free(UL_INFO->rx_ind.rx_indication_body.rx_pdu_list); - UL_INFO->rx_ind.rx_indication_body.rx_pdu_list = NULL; - free(UL_INFO); - UL_INFO = NULL; + if (UL_INFO->rx_ind.rx_indication_body.number_of_pdus > 0) { + //LOG_D(PHY,"UL_info->rx_ind.number_of_pdus:%d RX_IND:SFN/SF:%d\n", UL_info->rx_ind.rx_indication_body.number_of_pdus, NFAPI_SFNSF2DEC(UL_info->rx_ind.sfn_sf)); + //LOG_I(MAC, "ul_config_req_UE_MAC 2.3, SFN/SF of PNF counter:%d.%d, number_of_pdus: %d \n", timer_frame, timer_subframe, UL_INFO->rx_ind.rx_indication_body.number_of_pdus); + send_standalone_msg(UL_INFO, UL_INFO->rx_ind.header.message_id); + sent_any = true; + //LOG_I(MAC, "ul_config_req_UE_MAC 2.31 \n"); + UL_INFO->rx_ind.rx_indication_body.number_of_pdus = 0; + } - // thread finished - free(arg); - return NULL; + if (UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis > 0) { + send_standalone_msg(UL_INFO, UL_INFO->cqi_ind.header.message_id); + sent_any = true; + UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis = 0; + } + + if (UL_INFO->harq_ind.harq_indication_body.number_of_harqs > 0) { + //LOG_D(MAC, "ul_config_req_UE_MAC 2.4, SFN/SF of PNF counter:%d.%d, number_of_harqs: %d \n", timer_frame, timer_subframe, UL_INFO->harq_ind.harq_indication_body.number_of_harqs); + send_standalone_msg(UL_INFO, UL_INFO->harq_ind.header.message_id); + sent_any = true; + //LOG_I(MAC, "ul_config_req_UE_MAC 2.41 \n"); + UL_INFO->harq_ind.harq_indication_body.number_of_harqs = 0; + } + + if (UL_INFO->sr_ind.sr_indication_body.number_of_srs > 0) { + //LOG_I(MAC, "ul_config_req_UE_MAC 2.5, SFN/SF of PNF counter:%d.%d, number_of_srs: %d \n", timer_frame, timer_subframe, UL_INFO->sr_ind.sr_indication_body.number_of_srs); + send_standalone_msg(UL_INFO, UL_INFO->sr_ind.header.message_id); + sent_any = true; + //LOG_I(MAC, "ul_config_req_UE_MAC 2.51 \n"); + UL_INFO->sr_ind.sr_indication_body.number_of_srs = 0; + } + + // De-allocate memory of nfapi requests copies before next subframe round + if (dl_config_req_tx_req != NULL) { + if (dl_config_req_tx_req->dl_config_req->vendor_extension != NULL) { + free(dl_config_req_tx_req->dl_config_req->vendor_extension); + dl_config_req_tx_req->dl_config_req->vendor_extension = NULL; + } + + if (dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list != NULL) { + free(dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list); + dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list = NULL; + } + + nfapi_free_tx_req_pdu_list(dl_config_req_tx_req->tx_req_pdu_list); + dl_config_req_tx_req->tx_req_pdu_list = NULL; + free(dl_config_req_tx_req->dl_config_req); + dl_config_req_tx_req->dl_config_req = NULL; + free(dl_config_req_tx_req); + dl_config_req_tx_req = NULL; + } + + if (ul_config_req != NULL) { + if (ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL) { + free(ul_config_req->ul_config_request_body.ul_config_pdu_list); + ul_config_req->ul_config_request_body.ul_config_pdu_list = NULL; + } + + free(ul_config_req); + ul_config_req = NULL; + } + + if (hi_dci0_req != NULL) { + if (hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list != NULL) { + free(hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list); + hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list = NULL; + } + + free(hi_dci0_req); + hi_dci0_req = NULL; + } + + if (!sent_any) { + send_standalone_dummy(); + } +} + +// Free UL_INFO messages +free(UL_INFO->cqi_ind.cqi_indication_body.cqi_raw_pdu_list); +UL_INFO->cqi_ind.cqi_indication_body.cqi_raw_pdu_list = NULL; +free(UL_INFO->cqi_ind.cqi_indication_body.cqi_pdu_list); +UL_INFO->cqi_ind.cqi_indication_body.cqi_pdu_list = NULL; +free(UL_INFO->sr_ind.sr_indication_body.sr_pdu_list); +UL_INFO->sr_ind.sr_indication_body.sr_pdu_list = NULL; +free(UL_INFO->harq_ind.harq_indication_body.harq_pdu_list); +UL_INFO->harq_ind.harq_indication_body.harq_pdu_list = NULL; +free(UL_INFO->crc_ind.crc_indication_body.crc_pdu_list); +UL_INFO->crc_ind.crc_indication_body.crc_pdu_list = NULL; +free(UL_INFO->rx_ind.rx_indication_body.rx_pdu_list); +UL_INFO->rx_ind.rx_indication_body.rx_pdu_list = NULL; +free(UL_INFO); +UL_INFO = NULL; + +// thread finished +free(arg); +return NULL; } /*! @@ -1350,8 +1331,7 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) * \returns a pointer to an int. The storage is not on the heap and must not be freed. */ -static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) -{ +static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) { #if 0 // TODO: doesn't currently compile, obviated by multi-ue proxy thread_top_init("UE_phy_stub_thread_rxn_txnp4",1,870000L,1000000L,1000000L); // for multipule UE's L2-emulator @@ -1377,7 +1357,6 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) proc = &PHY_vars_UE_g[0][0]->proc.proc_rxtx[0]; phy_stub_ticking->num_single_thread[ue_thread_id] = -1; UE = rtd->UE; - UL_INFO = (UL_IND_t *)malloc(sizeof(UL_IND_t)); UL_INFO->rx_ind.rx_indication_body.rx_pdu_list = calloc(NB_UE_INST, sizeof(nfapi_rx_indication_pdu_t)); UL_INFO->rx_ind.rx_indication_body.number_of_pdus = 0; @@ -1489,19 +1468,23 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) } if (dl_config_req && tx_req_pdu_list) { - nfapi_dl_config_request_body_t* dl_config_req_body = &dl_config_req->dl_config_request_body; + nfapi_dl_config_request_body_t *dl_config_req_body = &dl_config_req->dl_config_request_body; + for (int i = 0; i < dl_config_req_body->number_pdu; ++i) { - nfapi_dl_config_request_pdu_t* pdu = &dl_config_req_body->dl_config_pdu_list[i]; + nfapi_dl_config_request_pdu_t *pdu = &dl_config_req_body->dl_config_pdu_list[i]; + if (pdu->pdu_type == NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE) { i += 1; AssertFatal(i < dl_config_req->dl_config_request_body.number_pdu, "Need PDU following DCI at index %d, but not found\n", i); nfapi_dl_config_request_pdu_t *dlsch = &dl_config_req_body->dl_config_pdu_list[i]; + if (dlsch->pdu_type != NFAPI_DL_CONFIG_DLSCH_PDU_TYPE) { LOG_E(MAC, "expected DLSCH PDU at index %d\n", i); continue; } + dl_config_req_UE_MAC_dci(NFAPI_SFNSF2SFN(dl_config_req->sfn_sf), NFAPI_SFNSF2SF(dl_config_req->sfn_sf), pdu, @@ -1523,8 +1506,9 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) if (hi_dci0_req) { nfapi_hi_dci0_request_body_t *hi_dci0_body = &hi_dci0_req->hi_dci0_request_body; + for (int i = 0; i < hi_dci0_body->number_of_dci + hi_dci0_body->number_of_hi; i++) { - nfapi_hi_dci0_request_pdu_t* pdu = &hi_dci0_body->hi_dci0_pdu_list[i]; + nfapi_hi_dci0_request_pdu_t *pdu = &hi_dci0_body->hi_dci0_pdu_list[i]; hi_dci0_req_UE_MAC(NFAPI_SFNSF2SFN(hi_dci0_req->sfn_sf), NFAPI_SFNSF2SF(hi_dci0_req->sfn_sf), pdu, @@ -1592,44 +1576,41 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) || (UE->frame_parms.frame_type == FDD) ) - if (UE->mode != loop_through_memory) { - // We make the start of RA between consecutive UEs differ by 20 frames - //if ((UE_mac_inst[Mod_id].UE_mode[0] == PRACH && Mod_id == 0) || (UE_mac_inst[Mod_id].UE_mode[0] == PRACH && Mod_id>0 && proc->frame_rx >= UE_mac_inst[Mod_id-1].ra_frame + 20) ) { - if (UE_mac_inst[ue_Mod_id].UE_mode[0] == PRACH && ue_Mod_id == next_Mod_id) { - next_ra_frame++; - if(next_ra_frame > 500) { - // check if we have PRACH opportunity - if (is_prach_subframe(&UE->frame_parms,proc->frame_tx, proc->subframe_tx) && UE_mac_inst[ue_Mod_id].SI_Decoded == 1) { - // The one working strangely... - //if (is_prach_subframe(&UE->frame_parms,proc->frame_tx, proc->subframe_tx && Mod_id == (module_id_t) init_ra_UE) ) { - PRACH_RESOURCES_t *prach_resources = ue_get_rach(ue_Mod_id, 0, proc->frame_tx, 0, proc->subframe_tx); + // We make the start of RA between consecutive UEs differ by 20 frames + //if ((UE_mac_inst[Mod_id].UE_mode[0] == PRACH && Mod_id == 0) || (UE_mac_inst[Mod_id].UE_mode[0] == PRACH && Mod_id>0 && proc->frame_rx >= UE_mac_inst[Mod_id-1].ra_frame + 20) ) { + if (UE_mac_inst[ue_Mod_id].UE_mode[0] == PRACH && ue_Mod_id == next_Mod_id) { + next_ra_frame++; - if(prach_resources!=NULL ) { - UE_mac_inst[ue_Mod_id].ra_frame = proc->frame_rx; - LOG_D(MAC, "UE_phy_stub_thread_rxn_txnp4 before RACH, Mod_id: %d frame %d subframe %d\n", ue_Mod_id,proc->frame_tx, proc->subframe_tx); - fill_rach_indication_UE_MAC(ue_Mod_id, proc->frame_tx,proc->subframe_tx, UL_INFO, prach_resources->ra_PreambleIndex, prach_resources->ra_RNTI); - Msg1_transmitted(ue_Mod_id, 0, proc->frame_tx, 0); - UE_mac_inst[ue_Mod_id].UE_mode[0] = RA_RESPONSE; - next_Mod_id = ue_Mod_id + 1; - //next_ra_frame = (proc->frame_rx + 20)%1000; - next_ra_frame = 0; - } + if(next_ra_frame > 500) { + // check if we have PRACH opportunity + if (is_prach_subframe(&UE->frame_parms,proc->frame_tx, proc->subframe_tx) && UE_mac_inst[ue_Mod_id].SI_Decoded == 1) { + // The one working strangely... + //if (is_prach_subframe(&UE->frame_parms,proc->frame_tx, proc->subframe_tx && Mod_id == (module_id_t) init_ra_UE) ) { + PRACH_RESOURCES_t *prach_resources = ue_get_rach(ue_Mod_id, 0, proc->frame_tx, 0, proc->subframe_tx); - //ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode); + if(prach_resources!=NULL ) { + UE_mac_inst[ue_Mod_id].ra_frame = proc->frame_rx; + LOG_D(MAC, "UE_phy_stub_thread_rxn_txnp4 before RACH, Mod_id: %d frame %d subframe %d\n", ue_Mod_id,proc->frame_tx, proc->subframe_tx); + fill_rach_indication_UE_MAC(ue_Mod_id, proc->frame_tx,proc->subframe_tx, UL_INFO, prach_resources->ra_PreambleIndex, prach_resources->ra_RNTI); + Msg1_transmitted(ue_Mod_id, 0, proc->frame_tx, 0); + UE_mac_inst[ue_Mod_id].UE_mode[0] = RA_RESPONSE; + next_Mod_id = ue_Mod_id + 1; + //next_ra_frame = (proc->frame_rx + 20)%1000; + next_ra_frame = 0; } + + //ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode); } - } // mode is PRACH - - // Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger - // UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB). - // Generate UL_indications which correspond to UL traffic. - if(ul_config_req!=NULL) { //&& UE_mac_inst[Mod_id].ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL){ - ul_config_req_UE_MAC(ul_config_req, timer_frame, timer_subframe, ue_Mod_id); } - } + } // mode is PRACH - phy_procedures_UE_SL_RX(UE,proc); + // Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger + // UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB). + // Generate UL_indications which correspond to UL traffic. + if(ul_config_req!=NULL) { //&& UE_mac_inst[Mod_id].ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL){ + ul_config_req_UE_MAC(ul_config_req, timer_frame, timer_subframe, ue_Mod_id); + } } //for (Mod_id=0; Mod_idnum_single_thread[ue_thread_id] = -1; @@ -1709,6 +1690,7 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) tx_req_pdu_list[i].segments[j].segment_data = NULL; } } + tx_req_num_elems = 0; free(tx_req_pdu_list); tx_req_pdu_list = NULL; @@ -1752,7 +1734,6 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) free(UL_INFO); UL_INFO = NULL; #endif // disabled UE_phy_stub_single_thread_rxn_txnp4 - // thread finished free(arg); return NULL; @@ -1767,9 +1748,8 @@ static void *UE_phy_stub_single_thread_rxn_txnp4(void *arg) * \returns a pointer to an int. The storage is not on the heap and must not be freed. */ -static void *UE_phy_stub_thread_rxn_txnp4(void *arg) -{ - #if 0 +static void *UE_phy_stub_thread_rxn_txnp4(void *arg) { +#if 0 thread_top_init("UE_phy_stub_thread_rxn_txnp4",1,870000L,1000000L,1000000L); module_id_t Mod_id = 0; static __thread int UE_thread_rxtx_retval; @@ -1880,45 +1860,42 @@ static void *UE_phy_stub_thread_rxn_txnp4(void *arg) if ((subframe_select( &UE->frame_parms, proc->subframe_tx) == SF_UL) || (UE->frame_parms.frame_type == FDD) ) - if (UE->mode != loop_through_memory) { - if ((UE_mac_inst[Mod_id].UE_mode[0] == PRACH) ) { - // check if we have PRACH opportunity - if (is_prach_subframe(&UE->frame_parms,proc->frame_tx, proc->subframe_tx)) { - PRACH_RESOURCES_t *prach_resources = ue_get_rach(Mod_id, 0, proc->frame_tx, 0, proc->subframe_tx); + if ((UE_mac_inst[Mod_id].UE_mode[0] == PRACH) ) { + // check if we have PRACH opportunity + if (is_prach_subframe(&UE->frame_parms,proc->frame_tx, proc->subframe_tx)) { + PRACH_RESOURCES_t *prach_resources = ue_get_rach(Mod_id, 0, proc->frame_tx, 0, proc->subframe_tx); - if(prach_resources!=NULL) { - fill_rach_indication_UE_MAC(Mod_id, proc->frame_tx,proc->subframe_tx, UL_INFO, prach_resources->ra_PreambleIndex, prach_resources->ra_RNTI); - Msg1_transmitted(Mod_id, 0, proc->frame_tx, 0); - UE_mac_inst[Mod_id].UE_mode[0] = RA_RESPONSE; - } - - //ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode); - } - } // mode is PRACH - - // Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger - // UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB). - // Generate UL_indications which correspond to UL traffic. - if(ul_config_req!= NULL && ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL) { - //LOG_I(MAC, "UE_phy_stub_thread_rxn_txnp4 ul_config_req is not NULL \n"); - ul_config_req_UE_MAC(ul_config_req, timer_frame, timer_subframe, Mod_id); - - if(ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL) { - free(ul_config_req->ul_config_request_body.ul_config_pdu_list); - ul_config_req->ul_config_request_body.ul_config_pdu_list = NULL; + if(prach_resources!=NULL) { + fill_rach_indication_UE_MAC(Mod_id, proc->frame_tx,proc->subframe_tx, UL_INFO, prach_resources->ra_PreambleIndex, prach_resources->ra_RNTI); + Msg1_transmitted(Mod_id, 0, proc->frame_tx, 0); + UE_mac_inst[Mod_id].UE_mode[0] = RA_RESPONSE; } - free(ul_config_req); - ul_config_req = NULL; - } else if(ul_config_req!=NULL) { - free(ul_config_req); - ul_config_req = NULL; + //ue_prach_procedures(ue,proc,eNB_id,abstraction_flag,mode); } + } // mode is PRACH + + // Substitute call to phy_procedures Tx with call to phy_stub functions in order to trigger + // UE Tx procedures directly at the MAC layer, based on the received ul_config requests from the vnf (eNB). + // Generate UL_indications which correspond to UL traffic. + if(ul_config_req!= NULL && ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL) { + //LOG_I(MAC, "UE_phy_stub_thread_rxn_txnp4 ul_config_req is not NULL \n"); + ul_config_req_UE_MAC(ul_config_req, timer_frame, timer_subframe, Mod_id); + + if(ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL) { + free(ul_config_req->ul_config_request_body.ul_config_pdu_list); + ul_config_req->ul_config_request_body.ul_config_pdu_list = NULL; } - phy_procedures_UE_SL_RX(UE,proc); + free(ul_config_req); + ul_config_req = NULL; + } else if(ul_config_req!=NULL) { + free(ul_config_req); + ul_config_req = NULL; + } } - #endif // disabled + +#endif // disabled // thread finished free(arg); return NULL; //return &UE_thread_rxtx_retval; @@ -1940,20 +1917,19 @@ void write_dummy(PHY_VARS_UE *UE, openair0_timestamp timestamp) { // struct complex16 v= {0}; void *samplesVoid[UE->frame_parms.nb_antennas_tx]; - + for ( int i=0; i < UE->frame_parms.nb_antennas_tx; i++) samplesVoid[i]=(void *)&v; - + AssertFatal( 1 == UE->rfdevice.trx_write_func(&UE->rfdevice, - timestamp+2*UE->frame_parms.samples_per_tti, - samplesVoid, - 1, - UE->frame_parms.nb_antennas_tx, - 1),""); + timestamp+2*UE->frame_parms.samples_per_tti, + samplesVoid, + 1, + UE->frame_parms.nb_antennas_tx, + 1),""); } -void *UE_thread(void *arg) -{ +void *UE_thread(void *arg) { PHY_VARS_UE *UE = (PHY_VARS_UE *) arg; // int tx_enabled = 0; int dummy_rx[UE->frame_parms.nb_antennas_rx][UE->frame_parms.samples_per_tti] __attribute__((aligned(32))); @@ -1966,10 +1942,11 @@ void *UE_thread(void *arg) int ret; cpu_set_t cpuset; CPU_ZERO(&cpuset); + if ( threads.main != -1 ) CPU_SET(threads.main, &cpuset); - init_thread(100000, 500000, FIFO_PRIORITY, &cpuset, "UHD Threads"); + init_thread(100000, 500000, FIFO_PRIORITY, &cpuset, "UHD Threads"); /* while (sync_var<0) pthread_cond_wait(&sync_cond, &sync_mutex); @@ -1996,46 +1973,45 @@ void *UE_thread(void *arg) int instance_cnt_synch = UE->proc.instance_cnt_synch; int is_synchronized = UE->is_synchronized; AssertFatal ( 0== pthread_mutex_unlock(&UE->proc.mutex_synch), ""); - + if (is_synchronized == 0) { if (instance_cnt_synch < 0) { // we can invoke the synch - // we shift in time flow because the UE doesn't detect sync when frame alignment is not easy - for (int i=0; iframe_parms.nb_antennas_rx; i++) - rxp[i] = (void *)&dummy_rx[i][0]; - UE->rfdevice.trx_read_func(&UE->rfdevice, - ×tamp, - rxp, - UE->frame_parms.samples_per_tti/2, - UE->frame_parms.nb_antennas_rx); - + // we shift in time flow because the UE doesn't detect sync when frame alignment is not easy + for (int i=0; iframe_parms.nb_antennas_rx; i++) + rxp[i] = (void *)&dummy_rx[i][0]; + + UE->rfdevice.trx_read_func(&UE->rfdevice, + ×tamp, + rxp, + UE->frame_parms.samples_per_tti/2, + UE->frame_parms.nb_antennas_rx); + // grab 10 ms of signal and wakeup synch thread - - if (UE->mode != loop_through_memory) { - if (IS_SOFTMODEM_RFSIM ) { - for(int sf=0; sf<10; sf++) { - for (int i=0; iframe_parms.nb_antennas_rx; i++) - rxp[i] = (void *)&UE->common_vars.rxdata[i][UE->frame_parms.samples_per_tti*sf]; - - AssertFatal(UE->frame_parms.samples_per_tti == UE->rfdevice.trx_read_func(&UE->rfdevice, - ×tamp, - rxp, - UE->frame_parms.samples_per_tti, - UE->frame_parms.nb_antennas_rx), ""); - write_dummy(UE, timestamp); - } - } else { - for (int i=0; iframe_parms.nb_antennas_rx; i++) - rxp[i] = (void *)&UE->common_vars.rxdata[i][0]; - - AssertFatal( UE->frame_parms.samples_per_tti*10 == - UE->rfdevice.trx_read_func(&UE->rfdevice, - ×tamp, - rxp, - UE->frame_parms.samples_per_tti*10, - UE->frame_parms.nb_antennas_rx), ""); - } - } + + if (IS_SOFTMODEM_RFSIM ) { + for(int sf=0; sf<10; sf++) { + for (int i=0; iframe_parms.nb_antennas_rx; i++) + rxp[i] = (void *)&UE->common_vars.rxdata[i][UE->frame_parms.samples_per_tti*sf]; + + AssertFatal(UE->frame_parms.samples_per_tti == UE->rfdevice.trx_read_func(&UE->rfdevice, + ×tamp, + rxp, + UE->frame_parms.samples_per_tti, + UE->frame_parms.nb_antennas_rx), ""); + write_dummy(UE, timestamp); + } + } else { + for (int i=0; iframe_parms.nb_antennas_rx; i++) + rxp[i] = (void *)&UE->common_vars.rxdata[i][0]; + + AssertFatal( UE->frame_parms.samples_per_tti*10 == + UE->rfdevice.trx_read_func(&UE->rfdevice, + ×tamp, + rxp, + UE->frame_parms.samples_per_tti*10, + UE->frame_parms.nb_antennas_rx), ""); + } AssertFatal ( 0== pthread_mutex_lock(&UE->proc.mutex_synch), ""); instance_cnt_synch = ++UE->proc.instance_cnt_synch; @@ -2049,69 +2025,62 @@ void *UE_thread(void *arg) AssertFatal ( 0== pthread_mutex_unlock(&UE->proc.mutex_synch), ""); } else { -#if OAISIM - (void)dummy_rx; /* avoid gcc warnings */ - usleep(500); -#else // grab 10 ms of signal into dummy buffer - if (UE->mode != loop_through_memory) { - for (int i=0; iframe_parms.nb_antennas_rx; i++) - rxp[i] = (void *)&dummy_rx[i][0]; + for (int i=0; iframe_parms.nb_antennas_rx; i++) + rxp[i] = (void *)&dummy_rx[i][0]; - for (int sf=0; sf<10; sf++) { - // printf("Reading dummy sf %d\n",sf); - UE->rfdevice.trx_read_func(&UE->rfdevice, - ×tamp, - rxp, - UE->frame_parms.samples_per_tti, - UE->frame_parms.nb_antennas_rx); - if (IS_SOFTMODEM_RFSIM ) - write_dummy(UE, timestamp); - } - } -#endif + for (int sf=0; sf<10; sf++) { + // printf("Reading dummy sf %d\n",sf); + UE->rfdevice.trx_read_func(&UE->rfdevice, + ×tamp, + rxp, + UE->frame_parms.samples_per_tti, + UE->frame_parms.nb_antennas_rx); + + if (IS_SOFTMODEM_RFSIM ) + write_dummy(UE, timestamp); + } } } // UE->is_synchronized==0 else { if (start_rx_stream==0) { start_rx_stream=1; - if (UE->mode != loop_through_memory) { - if (UE->no_timing_correction==0) { - LOG_I(PHY,"Resynchronizing RX by %d samples (mode = %d)\n",UE->rx_offset,UE->mode); - while ( UE->rx_offset ) { - size_t s=min(UE->rx_offset,UE->frame_parms.samples_per_tti); - AssertFatal(s == UE->rfdevice.trx_read_func(&UE->rfdevice, - ×tamp, - (void **)UE->common_vars.rxdata, - s, - UE->frame_parms.nb_antennas_rx),""); - if (IS_SOFTMODEM_RFSIM ) - write_dummy(UE, timestamp); - UE->rx_offset-=s; - } + if (UE->no_timing_correction==0) { + LOG_I(PHY,"Resynchronizing RX by %d samples (mode = %d)\n",UE->rx_offset,UE->mode); + + while ( UE->rx_offset ) { + size_t s=min(UE->rx_offset,UE->frame_parms.samples_per_tti); + AssertFatal(s == UE->rfdevice.trx_read_func(&UE->rfdevice, + ×tamp, + (void **)UE->common_vars.rxdata, + s, + UE->frame_parms.nb_antennas_rx),""); + + if (IS_SOFTMODEM_RFSIM ) + write_dummy(UE, timestamp); + + UE->rx_offset-=s; } + } - UE->rx_offset=0; - UE->time_sync_cell=0; + UE->rx_offset=0; + UE->time_sync_cell=0; - //UE->proc.proc_rxtx[0].frame_rx++; - //UE->proc.proc_rxtx[1].frame_rx++; - for (th_id=0; th_id < RX_NB_TH; th_id++) { - UE->proc.proc_rxtx[th_id].frame_rx++; - } + //UE->proc.proc_rxtx[0].frame_rx++; + //UE->proc.proc_rxtx[1].frame_rx++; + for (th_id=0; th_id < RX_NB_TH; th_id++) { + UE->proc.proc_rxtx[th_id].frame_rx++; + } - // read in first symbol - AssertFatal (UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0 == - UE->rfdevice.trx_read_func(&UE->rfdevice, - ×tamp, - (void **)UE->common_vars.rxdata, - UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0, - UE->frame_parms.nb_antennas_rx),""); - slot_fep(UE,0, 0, 0, 0, 0); - } //UE->mode != loop_through_memory - else - rt_sleep_ns(1000*1000); + // read in first symbol + AssertFatal (UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0 == + UE->rfdevice.trx_read_func(&UE->rfdevice, + ×tamp, + (void **)UE->common_vars.rxdata, + UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0, + UE->frame_parms.nb_antennas_rx),""); + slot_fep(UE,0, 0, 0, 0, 0); } else { sub_frame++; sub_frame%=10; @@ -2130,7 +2099,8 @@ void *UE_thread(void *arg) pthread_mutex_unlock(&proc->mutex_rxtx); } - usleep(300); + + usleep(300); } LOG_D(PHY,"Process Subframe %d thread Idx %d \n", sub_frame, UE->current_thread_id[sub_frame]); @@ -2139,130 +2109,129 @@ void *UE_thread(void *arg) if(thread_idx>=RX_NB_TH) thread_idx = 0; - if (UE->mode != loop_through_memory) { - for (i=0; iframe_parms.nb_antennas_rx; i++) - rxp[i] = (void *)&UE->common_vars.rxdata[i][UE->frame_parms.ofdm_symbol_size+ - UE->frame_parms.nb_prefix_samples0+ - sub_frame*UE->frame_parms.samples_per_tti]; + for (i=0; iframe_parms.nb_antennas_rx; i++) + rxp[i] = (void *)&UE->common_vars.rxdata[i][UE->frame_parms.ofdm_symbol_size+ + UE->frame_parms.nb_prefix_samples0+ + sub_frame*UE->frame_parms.samples_per_tti]; - for (i=0; iframe_parms.nb_antennas_tx; i++) - txp[i] = (void *)&UE->common_vars.txdata[i][((sub_frame+2)%10)*UE->frame_parms.samples_per_tti]; + for (i=0; iframe_parms.nb_antennas_tx; i++) + txp[i] = (void *)&UE->common_vars.txdata[i][((sub_frame+2)%10)*UE->frame_parms.samples_per_tti]; - int readBlockSize, writeBlockSize; + int readBlockSize, writeBlockSize; - if (sub_frame<9) { - readBlockSize=UE->frame_parms.samples_per_tti; - writeBlockSize=UE->frame_parms.samples_per_tti; - } else { - // set TO compensation to zero - UE->rx_offset_diff = 0; - - // compute TO compensation that should be applied for this frame - - if (UE->no_timing_correction == 0) { - if ( UE->rx_offset < 5*UE->frame_parms.samples_per_tti && - UE->rx_offset > 0 ) - UE->rx_offset_diff = -1 ; - - if ( UE->rx_offset > 5*UE->frame_parms.samples_per_tti && - UE->rx_offset < 10*UE->frame_parms.samples_per_tti ) - UE->rx_offset_diff = 1; - } - - LOG_D(PHY,"AbsSubframe %d.%d SET rx_off_diff to %d rx_offset %d \n",proc->frame_rx,sub_frame,UE->rx_offset_diff,UE->rx_offset); - readBlockSize=UE->frame_parms.samples_per_tti - - UE->frame_parms.ofdm_symbol_size - - UE->frame_parms.nb_prefix_samples0 - - UE->rx_offset_diff; - writeBlockSize=UE->frame_parms.samples_per_tti - - UE->rx_offset_diff; - } - - AssertFatal(readBlockSize == - UE->rfdevice.trx_read_func(&UE->rfdevice, - ×tamp, - rxp, - readBlockSize, - UE->frame_parms.nb_antennas_rx),""); - AssertFatal( writeBlockSize == - UE->rfdevice.trx_write_func(&UE->rfdevice, - timestamp+ - (2*UE->frame_parms.samples_per_tti) - - UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0 - - openair0_cfg[0].tx_sample_advance, - txp, - writeBlockSize, - UE->frame_parms.nb_antennas_tx, - 1),""); - - if( sub_frame==9) { - // read in first symbol of next frame and adjust for timing drift - int first_symbols=writeBlockSize-readBlockSize; - - if ( first_symbols > 0 ) - AssertFatal(first_symbols == - UE->rfdevice.trx_read_func(&UE->rfdevice, - ×tamp1, - (void **)UE->common_vars.rxdata, - first_symbols, - UE->frame_parms.nb_antennas_rx),""); - - if ( first_symbols <0 ) - LOG_E(PHY,"can't compensate: diff =%d\n", first_symbols); - } - - /* no timeout in IS_SOFTMODEM_RFSIM mode */ - if (IS_SOFTMODEM_RFSIM) { - ret = pthread_mutex_lock(&proc->mutex_rxtx); - } else { - struct timespec tv; - if (clock_gettime(CLOCK_REALTIME, &tv) != 0) { - perror("clock_gettime"); - exit(1); - } - tv.tv_nsec += 10*1000; - if (tv.tv_nsec >= 1000 * 1000 * 1000) { - tv.tv_sec++; - tv.tv_nsec -= 1000 * 1000 * 1000; - } - ret = pthread_mutex_timedlock(&proc->mutex_rxtx, &tv); - } - - // operate on thread sf mod 2 - if (ret != 0) { - if (ret == ETIMEDOUT) { - LOG_E(PHY,"Missed real time\n"); - continue; - } else { - LOG_E(PHY,"System error %s (%d)\n",strerror(errno),errno); - abort(); - } - } - - // usleep(3000); - if(sub_frame == 0) { - //UE->proc.proc_rxtx[0].frame_rx++; - //UE->proc.proc_rxtx[1].frame_rx++; - for (th_id=0; th_id < RX_NB_TH; th_id++) { - UE->proc.proc_rxtx[th_id].frame_rx++; - } - } - - proc->subframe_rx=sub_frame; - proc->subframe_tx=(sub_frame+4)%10; - proc->frame_tx = proc->frame_rx + (proc->subframe_rx>5?1:0); - proc->timestamp_tx = timestamp+ - (4*UE->frame_parms.samples_per_tti)- - UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0; - proc->instance_cnt_rxtx++; - LOG_D( PHY, "[SCHED][UE %d] UE RX instance_cnt_rxtx %d subframe %d !!\n", UE->Mod_id, proc->instance_cnt_rxtx,proc->subframe_rx); - T(T_UE_MASTER_TICK, T_INT(0), T_INT(proc->frame_rx%1024), T_INT(proc->subframe_rx)); - AssertFatal (pthread_cond_signal(&proc->cond_rxtx) ==0,""); - AssertFatal(pthread_mutex_unlock(&proc->mutex_rxtx) ==0,""); + if (sub_frame<9) { + readBlockSize=UE->frame_parms.samples_per_tti; + writeBlockSize=UE->frame_parms.samples_per_tti; } else { - printf("Processing subframe %d",proc->subframe_rx); - getchar(); + // set TO compensation to zero + UE->rx_offset_diff = 0; + + // compute TO compensation that should be applied for this frame + + if (UE->no_timing_correction == 0) { + if ( UE->rx_offset < 5*UE->frame_parms.samples_per_tti && + UE->rx_offset > 0 ) + UE->rx_offset_diff = -1 ; + + if ( UE->rx_offset > 5*UE->frame_parms.samples_per_tti && + UE->rx_offset < 10*UE->frame_parms.samples_per_tti ) + UE->rx_offset_diff = 1; + } + + LOG_D(PHY,"AbsSubframe %d.%d SET rx_off_diff to %d rx_offset %d \n",proc->frame_rx,sub_frame,UE->rx_offset_diff,UE->rx_offset); + readBlockSize=UE->frame_parms.samples_per_tti - + UE->frame_parms.ofdm_symbol_size - + UE->frame_parms.nb_prefix_samples0 - + UE->rx_offset_diff; + writeBlockSize=UE->frame_parms.samples_per_tti - + UE->rx_offset_diff; } + + AssertFatal(readBlockSize == + UE->rfdevice.trx_read_func(&UE->rfdevice, + ×tamp, + rxp, + readBlockSize, + UE->frame_parms.nb_antennas_rx),""); + AssertFatal( writeBlockSize == + UE->rfdevice.trx_write_func(&UE->rfdevice, + timestamp+ + (2*UE->frame_parms.samples_per_tti) - + UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0 - + openair0_cfg[0].tx_sample_advance, + txp, + writeBlockSize, + UE->frame_parms.nb_antennas_tx, + 1),""); + + if( sub_frame==9) { + // read in first symbol of next frame and adjust for timing drift + int first_symbols=writeBlockSize-readBlockSize; + + if ( first_symbols > 0 ) + AssertFatal(first_symbols == + UE->rfdevice.trx_read_func(&UE->rfdevice, + ×tamp1, + (void **)UE->common_vars.rxdata, + first_symbols, + UE->frame_parms.nb_antennas_rx),""); + + if ( first_symbols <0 ) + LOG_E(PHY,"can't compensate: diff =%d\n", first_symbols); + } + + /* no timeout in IS_SOFTMODEM_RFSIM mode */ + if (IS_SOFTMODEM_RFSIM) { + ret = pthread_mutex_lock(&proc->mutex_rxtx); + } else { + struct timespec tv; + + if (clock_gettime(CLOCK_REALTIME, &tv) != 0) { + perror("clock_gettime"); + exit(1); + } + + tv.tv_nsec += 10*1000; + + if (tv.tv_nsec >= 1000 * 1000 * 1000) { + tv.tv_sec++; + tv.tv_nsec -= 1000 * 1000 * 1000; + } + + ret = pthread_mutex_timedlock(&proc->mutex_rxtx, &tv); + } + + // operate on thread sf mod 2 + if (ret != 0) { + if (ret == ETIMEDOUT) { + LOG_E(PHY,"Missed real time\n"); + continue; + } else { + LOG_E(PHY,"System error %s (%d)\n",strerror(errno),errno); + abort(); + } + } + + // usleep(3000); + if(sub_frame == 0) { + //UE->proc.proc_rxtx[0].frame_rx++; + //UE->proc.proc_rxtx[1].frame_rx++; + for (th_id=0; th_id < RX_NB_TH; th_id++) { + UE->proc.proc_rxtx[th_id].frame_rx++; + } + } + + proc->subframe_rx=sub_frame; + proc->subframe_tx=(sub_frame+4)%10; + proc->frame_tx = proc->frame_rx + (proc->subframe_rx>5?1:0); + proc->timestamp_tx = timestamp+ + (4*UE->frame_parms.samples_per_tti)- + UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0; + proc->instance_cnt_rxtx++; + LOG_D( PHY, "[SCHED][UE %d] UE RX instance_cnt_rxtx %d subframe %d !!\n", UE->Mod_id, proc->instance_cnt_rxtx,proc->subframe_rx); + T(T_UE_MASTER_TICK, T_INT(0), T_INT(proc->frame_rx%1024), T_INT(proc->subframe_rx)); + AssertFatal (pthread_cond_signal(&proc->cond_rxtx) ==0,""); + AssertFatal(pthread_mutex_unlock(&proc->mutex_rxtx) ==0,""); } // start_rx_stream==1 } // UE->is_synchronized==1 } // while !oai_exit @@ -2283,8 +2252,7 @@ void *UE_thread(void *arg) * - UE_thread_dlsch_proc_slot1 * and the locking between them. */ -void init_UE_threads(int inst) -{ +void init_UE_threads(int inst) { struct rx_tx_thread_data *rtd; PHY_VARS_UE *UE; AssertFatal(PHY_vars_UE_g!=NULL,"PHY_vars_UE_g is NULL\n"); @@ -2339,8 +2307,7 @@ void init_UE_threads(int inst) * - UE_thread_dlsch_proc_slot1 * and the locking between them. */ -void init_UE_single_thread_stub(int nb_inst) -{ +void init_UE_single_thread_stub(int nb_inst) { struct rx_tx_thread_data *rtd; PHY_VARS_UE *UE; @@ -2368,8 +2335,8 @@ void init_UE_single_thread_stub(int nb_inst) // In phy_stub_UE mode due to less heavy processing operations we don't need two threads //int nb_threads=RX_NB_TH; int nb_threads=1; + void *(*task_func)(void *); - void* (*task_func)(void*); if (NFAPI_MODE == NFAPI_MODE_STANDALONE_PNF) { task_func = UE_phy_stub_standalone_pnf_task; } else { @@ -2413,8 +2380,7 @@ void init_UE_single_thread_stub(int nb_inst) * - UE_thread_dlsch_proc_slot1 * and the locking between them. */ -void init_UE_threads_stub(int inst) -{ +void init_UE_threads_stub(int inst) { struct rx_tx_thread_data *rtd; PHY_VARS_UE *UE; AssertFatal(PHY_vars_UE_g!=NULL,"PHY_vars_UE_g is NULL\n"); @@ -2451,8 +2417,7 @@ void init_UE_threads_stub(int inst) } -void fill_ue_band_info(void) -{ +void fill_ue_band_info(void) { LTE_UE_EUTRA_Capability_t *UE_EUTRA_Capability = UE_rrc_inst[0].UECap->UE_EUTRA_Capability; int i,j; bands_to_scan.nbands = UE_EUTRA_Capability->rf_Parameters.supportedBandListEUTRA.list.count; @@ -2477,8 +2442,7 @@ void fill_ue_band_info(void) } int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, - openair0_config_t *openair0_cfg) -{ + openair0_config_t *openair0_cfg) { int i, CC_id; LTE_DL_FRAME_PARMS *frame_parms; @@ -2520,8 +2484,7 @@ int setup_ue_buffers(PHY_VARS_UE **phy_vars_ue, // playing the role of nfapi-pnf. //02/02/2018 -static void *timer_thread( void *param ) -{ +static void *timer_thread( void *param ) { thread_top_init("timer_thread",1,870000L,1000000L,1000000L); timer_subframe =9; timer_frame =1023; @@ -2647,8 +2610,7 @@ static void *timer_thread( void *param ) } -int init_timer_thread(void) -{ +int init_timer_thread(void) { //PHY_VARS_UE *UE=PHY_vars_UE_g[0]; PHY_VARS_UE *UE=PHY_vars_UE_g[0][0]; phy_stub_ticking = (SF_ticking *)malloc(sizeof(SF_ticking)); @@ -2670,8 +2632,7 @@ int init_timer_thread(void) */ int8_t find_dlsch(uint16_t rnti, PHY_VARS_eNB *eNB, - find_type_t type) -{ + find_type_t type) { printf("you cannot read this\n"); abort(); } From 9bf8c0e00985bf9f595c16125595c59fa388f1c6 Mon Sep 17 00:00:00 2001 From: francescomani Date: Mon, 11 Apr 2022 10:00:49 +0200 Subject: [PATCH 120/150] config file cleanup --- ci-scripts/conf_files/gNB_SA_CU.conf | 2 -- .../conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf | 1 - ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf | 2 -- 3 files changed, 5 deletions(-) diff --git a/ci-scripts/conf_files/gNB_SA_CU.conf b/ci-scripts/conf_files/gNB_SA_CU.conf index 33cc3a51a7..9d64ae1976 100644 --- a/ci-scripts/conf_files/gNB_SA_CU.conf +++ b/ci-scripts/conf_files/gNB_SA_CU.conf @@ -45,8 +45,6 @@ gNBs = remote_s_portc = 500; remote_s_portd = 2152; ssb_SubcarrierOffset = 0; - pdsch_AntennaPorts = 1; - pusch_AntennaPorts = 1; min_rxtxtime = 6; pdcch_ConfigSIB1 = ( diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf index 0feb0bb811..60fb16318f 100644 --- a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf +++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf @@ -42,7 +42,6 @@ gNBs = ////////// Physical parameters: ssb_SubcarrierOffset = 0; - pdsch_AntennaPorts = 1; pusch_AntennaPorts = 2; ul_prbblacklist = "51,52,53,54" do_SRS = 1; diff --git a/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf b/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf index f667959f15..e26fc3030d 100644 --- a/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf +++ b/ci-scripts/conf_files/gnb.sa.band66.fr1.106PRB.usrpn300.conf @@ -33,8 +33,6 @@ gNBs = ////////// Physical parameters: ssb_SubcarrierOffset = 0; - pdsch_AntennaPorts = 1; - pusch_AntennaPorts = 1; min_rxtxtime = 6; pdcch_ConfigSIB1 = ( From 421603534c7db096fd7b4c21da302bfb28b712a2 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Mon, 11 Apr 2022 10:52:53 +0200 Subject: [PATCH 121/150] fix regression --- targets/RT/USER/lte-ue.c | 204 +++++++++++++++++++-------------------- 1 file changed, 100 insertions(+), 104 deletions(-) diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 8565e36e87..2b3a680713 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -1203,124 +1203,120 @@ static void *UE_phy_stub_standalone_pnf_task(void *arg) { //&& UE_mac_inst[Mod_id].ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL){ ul_config_req_UE_MAC(ul_config_req, NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf), ue_Mod_id); } + } else { + LOG_I(MAC, "Skipping subframe select statement proxy SFN.SF: %d.%d\n", + NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf)); + + if (ul_config_req != NULL) { + LOG_I(MAC, "Skipping subframe select statement ul_config_req SFN.SF: %d.%d\n", + NFAPI_SFNSF2SFN(ul_config_req->sfn_sf), NFAPI_SFNSF2SF(ul_config_req->sfn_sf)); + } + } + } //for (Mod_id=0; Mod_idcrc_ind.crc_indication_body.number_of_crcs > 0) { + //LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.number_of_crcs:%d CRC_IND:SFN/SF:%d\n", UL_info->crc_ind.crc_indication_body.number_of_crcs, NFAPI_SFNSF2DEC(UL_info->crc_ind.sfn_sf)); + //LOG_I(MAC, "ul_config_req_UE_MAC 2.2, SFN/SF of PNF counter:%d.%d, number_of_crcs: %d \n", timer_frame, timer_subframe, UL_INFO->crc_ind.crc_indication_body.number_of_crcs); + send_standalone_msg(UL_INFO, UL_INFO->crc_ind.header.message_id); + sent_any = true; + //LOG_I(MAC, "ul_config_req_UE_MAC 2.21 \n"); + UL_INFO->crc_ind.crc_indication_body.number_of_crcs = 0; + } + + if (UL_INFO->rx_ind.rx_indication_body.number_of_pdus > 0) { + //LOG_D(PHY,"UL_info->rx_ind.number_of_pdus:%d RX_IND:SFN/SF:%d\n", UL_info->rx_ind.rx_indication_body.number_of_pdus, NFAPI_SFNSF2DEC(UL_info->rx_ind.sfn_sf)); + //LOG_I(MAC, "ul_config_req_UE_MAC 2.3, SFN/SF of PNF counter:%d.%d, number_of_pdus: %d \n", timer_frame, timer_subframe, UL_INFO->rx_ind.rx_indication_body.number_of_pdus); + send_standalone_msg(UL_INFO, UL_INFO->rx_ind.header.message_id); + sent_any = true; + //LOG_I(MAC, "ul_config_req_UE_MAC 2.31 \n"); + UL_INFO->rx_ind.rx_indication_body.number_of_pdus = 0; + } + + if (UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis > 0) { + send_standalone_msg(UL_INFO, UL_INFO->cqi_ind.header.message_id); + sent_any = true; + UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis = 0; + } + + if (UL_INFO->harq_ind.harq_indication_body.number_of_harqs > 0) { + //LOG_D(MAC, "ul_config_req_UE_MAC 2.4, SFN/SF of PNF counter:%d.%d, number_of_harqs: %d \n", timer_frame, timer_subframe, UL_INFO->harq_ind.harq_indication_body.number_of_harqs); + send_standalone_msg(UL_INFO, UL_INFO->harq_ind.header.message_id); + sent_any = true; + //LOG_I(MAC, "ul_config_req_UE_MAC 2.41 \n"); + UL_INFO->harq_ind.harq_indication_body.number_of_harqs = 0; + } + + if (UL_INFO->sr_ind.sr_indication_body.number_of_srs > 0) { + //LOG_I(MAC, "ul_config_req_UE_MAC 2.5, SFN/SF of PNF counter:%d.%d, number_of_srs: %d \n", timer_frame, timer_subframe, UL_INFO->sr_ind.sr_indication_body.number_of_srs); + send_standalone_msg(UL_INFO, UL_INFO->sr_ind.header.message_id); + sent_any = true; + //LOG_I(MAC, "ul_config_req_UE_MAC 2.51 \n"); + UL_INFO->sr_ind.sr_indication_body.number_of_srs = 0; + } + + // De-allocate memory of nfapi requests copies before next subframe round + if (dl_config_req_tx_req != NULL) { + if (dl_config_req_tx_req->dl_config_req->vendor_extension != NULL) { + free(dl_config_req_tx_req->dl_config_req->vendor_extension); + dl_config_req_tx_req->dl_config_req->vendor_extension = NULL; } - phy_procedures_UE_SL_RX(UE, proc); - } else { - LOG_I(MAC, "Skipping subframe select statement proxy SFN.SF: %d.%d\n", - NFAPI_SFNSF2SFN(sfn_sf), NFAPI_SFNSF2SF(sfn_sf)); - - if (ul_config_req != NULL) { - LOG_I(MAC, "Skipping subframe select statement ul_config_req SFN.SF: %d.%d\n", - NFAPI_SFNSF2SFN(ul_config_req->sfn_sf), NFAPI_SFNSF2SF(ul_config_req->sfn_sf)); + if (dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list != NULL) { + free(dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list); + dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list = NULL; } - } - } //for (Mod_id=0; Mod_idcrc_ind.crc_indication_body.number_of_crcs > 0) { - //LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.number_of_crcs:%d CRC_IND:SFN/SF:%d\n", UL_info->crc_ind.crc_indication_body.number_of_crcs, NFAPI_SFNSF2DEC(UL_info->crc_ind.sfn_sf)); - //LOG_I(MAC, "ul_config_req_UE_MAC 2.2, SFN/SF of PNF counter:%d.%d, number_of_crcs: %d \n", timer_frame, timer_subframe, UL_INFO->crc_ind.crc_indication_body.number_of_crcs); - send_standalone_msg(UL_INFO, UL_INFO->crc_ind.header.message_id); - sent_any = true; - //LOG_I(MAC, "ul_config_req_UE_MAC 2.21 \n"); - UL_INFO->crc_ind.crc_indication_body.number_of_crcs = 0; - } - - if (UL_INFO->rx_ind.rx_indication_body.number_of_pdus > 0) { - //LOG_D(PHY,"UL_info->rx_ind.number_of_pdus:%d RX_IND:SFN/SF:%d\n", UL_info->rx_ind.rx_indication_body.number_of_pdus, NFAPI_SFNSF2DEC(UL_info->rx_ind.sfn_sf)); - //LOG_I(MAC, "ul_config_req_UE_MAC 2.3, SFN/SF of PNF counter:%d.%d, number_of_pdus: %d \n", timer_frame, timer_subframe, UL_INFO->rx_ind.rx_indication_body.number_of_pdus); - send_standalone_msg(UL_INFO, UL_INFO->rx_ind.header.message_id); - sent_any = true; - //LOG_I(MAC, "ul_config_req_UE_MAC 2.31 \n"); - UL_INFO->rx_ind.rx_indication_body.number_of_pdus = 0; - } - - if (UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis > 0) { - send_standalone_msg(UL_INFO, UL_INFO->cqi_ind.header.message_id); - sent_any = true; - UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis = 0; - } - - if (UL_INFO->harq_ind.harq_indication_body.number_of_harqs > 0) { - //LOG_D(MAC, "ul_config_req_UE_MAC 2.4, SFN/SF of PNF counter:%d.%d, number_of_harqs: %d \n", timer_frame, timer_subframe, UL_INFO->harq_ind.harq_indication_body.number_of_harqs); - send_standalone_msg(UL_INFO, UL_INFO->harq_ind.header.message_id); - sent_any = true; - //LOG_I(MAC, "ul_config_req_UE_MAC 2.41 \n"); - UL_INFO->harq_ind.harq_indication_body.number_of_harqs = 0; - } - - if (UL_INFO->sr_ind.sr_indication_body.number_of_srs > 0) { - //LOG_I(MAC, "ul_config_req_UE_MAC 2.5, SFN/SF of PNF counter:%d.%d, number_of_srs: %d \n", timer_frame, timer_subframe, UL_INFO->sr_ind.sr_indication_body.number_of_srs); - send_standalone_msg(UL_INFO, UL_INFO->sr_ind.header.message_id); - sent_any = true; - //LOG_I(MAC, "ul_config_req_UE_MAC 2.51 \n"); - UL_INFO->sr_ind.sr_indication_body.number_of_srs = 0; - } - - // De-allocate memory of nfapi requests copies before next subframe round - if (dl_config_req_tx_req != NULL) { - if (dl_config_req_tx_req->dl_config_req->vendor_extension != NULL) { - free(dl_config_req_tx_req->dl_config_req->vendor_extension); - dl_config_req_tx_req->dl_config_req->vendor_extension = NULL; + nfapi_free_tx_req_pdu_list(dl_config_req_tx_req->tx_req_pdu_list); + dl_config_req_tx_req->tx_req_pdu_list = NULL; + free(dl_config_req_tx_req->dl_config_req); + dl_config_req_tx_req->dl_config_req = NULL; + free(dl_config_req_tx_req); + dl_config_req_tx_req = NULL; } - if (dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list != NULL) { - free(dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list); - dl_config_req_tx_req->dl_config_req->dl_config_request_body.dl_config_pdu_list = NULL; + if (ul_config_req != NULL) { + if (ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL) { + free(ul_config_req->ul_config_request_body.ul_config_pdu_list); + ul_config_req->ul_config_request_body.ul_config_pdu_list = NULL; + } + + free(ul_config_req); + ul_config_req = NULL; } - nfapi_free_tx_req_pdu_list(dl_config_req_tx_req->tx_req_pdu_list); - dl_config_req_tx_req->tx_req_pdu_list = NULL; - free(dl_config_req_tx_req->dl_config_req); - dl_config_req_tx_req->dl_config_req = NULL; - free(dl_config_req_tx_req); - dl_config_req_tx_req = NULL; - } + if (hi_dci0_req != NULL) { + if (hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list != NULL) { + free(hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list); + hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list = NULL; + } - if (ul_config_req != NULL) { - if (ul_config_req->ul_config_request_body.ul_config_pdu_list != NULL) { - free(ul_config_req->ul_config_request_body.ul_config_pdu_list); - ul_config_req->ul_config_request_body.ul_config_pdu_list = NULL; + free(hi_dci0_req); + hi_dci0_req = NULL; } - free(ul_config_req); - ul_config_req = NULL; - } - - if (hi_dci0_req != NULL) { - if (hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list != NULL) { - free(hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list); - hi_dci0_req->hi_dci0_request_body.hi_dci0_pdu_list = NULL; + if (!sent_any) { + send_standalone_dummy(); } - - free(hi_dci0_req); - hi_dci0_req = NULL; } - if (!sent_any) { - send_standalone_dummy(); - } -} - -// Free UL_INFO messages -free(UL_INFO->cqi_ind.cqi_indication_body.cqi_raw_pdu_list); -UL_INFO->cqi_ind.cqi_indication_body.cqi_raw_pdu_list = NULL; -free(UL_INFO->cqi_ind.cqi_indication_body.cqi_pdu_list); -UL_INFO->cqi_ind.cqi_indication_body.cqi_pdu_list = NULL; -free(UL_INFO->sr_ind.sr_indication_body.sr_pdu_list); -UL_INFO->sr_ind.sr_indication_body.sr_pdu_list = NULL; -free(UL_INFO->harq_ind.harq_indication_body.harq_pdu_list); -UL_INFO->harq_ind.harq_indication_body.harq_pdu_list = NULL; -free(UL_INFO->crc_ind.crc_indication_body.crc_pdu_list); -UL_INFO->crc_ind.crc_indication_body.crc_pdu_list = NULL; -free(UL_INFO->rx_ind.rx_indication_body.rx_pdu_list); -UL_INFO->rx_ind.rx_indication_body.rx_pdu_list = NULL; -free(UL_INFO); -UL_INFO = NULL; - -// thread finished -free(arg); -return NULL; + // Free UL_INFO messages + free(UL_INFO->cqi_ind.cqi_indication_body.cqi_raw_pdu_list); + UL_INFO->cqi_ind.cqi_indication_body.cqi_raw_pdu_list = NULL; + free(UL_INFO->cqi_ind.cqi_indication_body.cqi_pdu_list); + UL_INFO->cqi_ind.cqi_indication_body.cqi_pdu_list = NULL; + free(UL_INFO->sr_ind.sr_indication_body.sr_pdu_list); + UL_INFO->sr_ind.sr_indication_body.sr_pdu_list = NULL; + free(UL_INFO->harq_ind.harq_indication_body.harq_pdu_list); + UL_INFO->harq_ind.harq_indication_body.harq_pdu_list = NULL; + free(UL_INFO->crc_ind.crc_indication_body.crc_pdu_list); + UL_INFO->crc_ind.crc_indication_body.crc_pdu_list = NULL; + free(UL_INFO->rx_ind.rx_indication_body.rx_pdu_list); + UL_INFO->rx_ind.rx_indication_body.rx_pdu_list = NULL; + free(UL_INFO); + UL_INFO = NULL; + // thread finished + free(arg); + return NULL; } /*! From b738f8a6a98976c04c01b8f7a230193523a341fd Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Mon, 11 Apr 2022 17:27:11 +0200 Subject: [PATCH 122/150] tackle code review remarks --- executables/nr-softmodem-common.h | 1 - executables/nr-ue.c | 14 ++------------ executables/softmodem-common.h | 1 - targets/RT/USER/lte-ru.c | 5 ++--- 4 files changed, 4 insertions(+), 17 deletions(-) diff --git a/executables/nr-softmodem-common.h b/executables/nr-softmodem-common.h index 47fd816db5..6e36dcf6c7 100644 --- a/executables/nr-softmodem-common.h +++ b/executables/nr-softmodem-common.h @@ -51,7 +51,6 @@ #define CONFIG_HLP_UEFO "set UE to enable estimation and compensation of frequency offset\n" #define CONFIG_HLP_DUMPFRAME "dump UE received frame to rxsig_frame0.dat and exit\n" #define CONFIG_HLP_DLSHIFT "dynamic shift for LLR compuation for TM3/4 (default 0)\n" -#define CONFIG_HLP_UELOOP "get softmodem (UE) to loop through memory instead of acquiring from HW\n" #define CONFIG_HLP_PHYTST "test UE phy layer, mac disabled\n" #define CONFIG_HLP_DORA "test gNB and UE with RA procedures\n" #define CONFIG_HLP_DMAMAP "sets flag for improved EXMIMO UE performance\n" diff --git a/executables/nr-ue.c b/executables/nr-ue.c index aef0370e53..02e92cbe0b 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -655,14 +655,6 @@ static void UE_synch(void *arg) { openair0_cfg[UE->rf_map.card].tx_freq[0]); UE->rfdevice.trx_set_freq_func(&UE->rfdevice,&openair0_cfg[0],0); - //UE->rfdevice.trx_set_gains_func(&openair0,&openair0_cfg[0]); - //UE->rfdevice.trx_stop_func(&UE->rfdevice); - // sleep(1); - /*if (UE->rfdevice.trx_start_func(&UE->rfdevice) != 0 ) { - LOG_E(HW,"Could not start the device\n"); - oai_exit=1; - }*/ - if (UE->UE_scan_carrier == 1) { UE->UE_scan_carrier = 0; } else { @@ -815,9 +807,9 @@ void processSlotRX(void *arg) { void dummyWrite(PHY_VARS_NR_UE *UE,openair0_timestamp timestamp, int writeBlockSize) { void *dummy_tx[UE->frame_parms.nb_antennas_tx]; - + int16_t dummy_tx_data[UE->frame_parms.nb_antennas_tx][2*writeBlockSize]; // 2 because the function we call use pairs of int16_t implicitly as complex numbers for (int i=0; iframe_parms.nb_antennas_tx; i++) - dummy_tx[i]=malloc16_clear(writeBlockSize*4); + dummy_tx[i]=dummy_tx_data[i]; AssertFatal( writeBlockSize == UE->rfdevice.trx_write_func(&UE->rfdevice, @@ -827,8 +819,6 @@ void dummyWrite(PHY_VARS_NR_UE *UE,openair0_timestamp timestamp, int writeBlockS UE->frame_parms.nb_antennas_tx, 4),""); - for (int i=0; iframe_parms.nb_antennas_tx; i++) - free(dummy_tx[i]); } void readFrame(PHY_VARS_NR_UE *UE, openair0_timestamp *timestamp, bool toTrash) { diff --git a/executables/softmodem-common.h b/executables/softmodem-common.h index 48ce73149f..eb0c1a54f7 100644 --- a/executables/softmodem-common.h +++ b/executables/softmodem-common.h @@ -53,7 +53,6 @@ extern "C" #define CONFIG_HLP_DUMPFRAME "dump UE received frame to rxsig_frame0.dat and exit\n" -#define CONFIG_HLP_UELOOP "get softmodem (UE) to loop through memory instead of acquiring from HW\n" #define CONFIG_HLP_PHYTST "test UE phy layer, mac disabled\n" #define CONFIG_HLP_DORA "test gNB and UE with RA procedures\n" #define CONFIG_HLP_SA "run gNB in standalone mode\n" diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index f6cf51f101..c1ffd7a292 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -835,8 +835,9 @@ void tx_rf(RU_t *ru, // in case of rfsim, we always enable tx because we need to feed rx of the opposite side // we write 1 single I/Q sample to trigger Rx (rfsim will fill gaps with 0 I/Q) void *dummy_tx[ru->frame_parms->nb_antennas_tx]; + int16_t dummy_tx_data[ru->frame_parms->nb_antennas_tx][2]; // 2 because the function we call use pairs of int16_t implicitly as complex numbers for (int i=0; iframe_parms->nb_antennas_tx; i++) - dummy_tx[i]=malloc16_clear(4); + dummy_tx[i]= dummy_tx_data[i]; AssertFatal( 1 == ru->rfdevice.trx_write_func(&ru->rfdevice, @@ -846,8 +847,6 @@ void tx_rf(RU_t *ru, ru->frame_parms->nb_antennas_tx, 4),""); - for (int i=0; iframe_parms->nb_antennas_tx; i++) - free(dummy_tx[i]); } } From 4ad71064b8a51176ec4c9536c2173ffda71df708 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Mon, 11 Apr 2022 19:29:45 +0200 Subject: [PATCH 123/150] review comments --- openair1/PHY/CODING/nr_rate_matching.c | 8 +-- .../PHY/NR_UE_TRANSPORT/nr_dlsch_decoding.c | 2 +- openair2/LAYER2/NR_MAC_COMMON/nr_mac.h | 7 +- openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c | 13 ++-- .../LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c | 2 +- .../LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 66 ++++--------------- targets/ARCH/rfsimulator/apply_channelmod.c | 3 +- targets/ARCH/rfsimulator/rfsimulator.h | 2 +- 8 files changed, 31 insertions(+), 72 deletions(-) diff --git a/openair1/PHY/CODING/nr_rate_matching.c b/openair1/PHY/CODING/nr_rate_matching.c index fbad79cad7..8c105c37e6 100644 --- a/openair1/PHY/CODING/nr_rate_matching.c +++ b/openair1/PHY/CODING/nr_rate_matching.c @@ -313,14 +313,12 @@ void nr_deinterleaving_ldpc(uint32_t E, uint8_t Qm, int16_t *e,int16_t *f) switch(Qm) { case 2: { - AssertFatal(E%4==0,""); + AssertFatal(E%2==0,""); int16_t *e1=e+(E/2); - int16_t *end=f+E-3; + int16_t *end=f+E-1; while( fF && pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) + return false; if (s->F) { *mac_subheader_len = sizeof(*l); *mac_ce_len = ntohs(l->L); @@ -128,6 +132,7 @@ static inline void getMacLen(uint8_t* pdu, uint16_t *mac_ce_len, uint16_t *mac_s *mac_subheader_len = sizeof(*s); *mac_ce_len = s->L; } + return true; } // BSR MAC CEs diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 47a6682f63..ab63303629 100644 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -3364,13 +3364,14 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info, uint8_t rx_lcid = ((NR_MAC_SUBHEADER_FIXED *)pduP)->LCID; LOG_D(MAC, "[UE] LCID %d, PDU length %d\n", rx_lcid, pdu_len); + bool ret; switch(rx_lcid){ // MAC CE case DL_SCH_LCID_CCCH: // MSG4 RRC Setup 38.331 // variable length - getMacLen(pduP, &mac_len, &mac_subheader_len); - AssertFatal(pdu_len > mac_len, "The mac_len (%d) has an invalid size. PDU len = %d! \n", + ret=get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len); + AssertFatal(ret, "The mac_len (%d) has an invalid size. PDU len = %d! \n", mac_len, pdu_len); // Check if it is a valid CCCH message, we get all 00's messages very often @@ -3404,7 +3405,7 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info, // 38.321 Ch6.1.3.14 // varialbe length - getMacLen(pduP, &mac_len, &mac_subheader_len); + get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len); break; case DL_SCH_LCID_RECOMMENDED_BITRATE: @@ -3508,10 +3509,8 @@ void nr_ue_process_mac_pdu(nr_downlink_indication_t *dl_info, // check if LCID is valid at current time. default: { - // check if LCID is valid at current time. - if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) - return; - getMacLen(pduP, &mac_len, &mac_subheader_len); + if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len)) + return; LOG_D(NR_MAC, "[UE %d] %4d.%2d : DLSCH -> DL-DTCH %d (gNB %d, %d bytes)\n", module_idP, frameP, slot, rx_lcid, gNB_index, mac_len); #if defined(ENABLE_MAC_PAYLOAD_DEBUG) diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c index 422e40af7e..7e3f6c857a 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c @@ -1426,7 +1426,7 @@ void nr_schedule_ue_spec(module_id_t module_id, /* limit requested number of bytes to what preprocessor specified, or * such that TBS is full */ const rlc_buffer_occupancy_t ndata = min(sched_ctrl->rlc_status[lcid].bytes_in_buffer, - bufEnd-buf-+sizeof(NR_MAC_SUBHEADER_LONG)); + bufEnd-buf-sizeof(NR_MAC_SUBHEADER_LONG)); tbs_size_t len = mac_rlc_data_req(module_id, rnti, module_id, diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 67ab8aacc5..1955d91af6 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -213,6 +213,7 @@ int nr_process_mac_pdu(module_id_t module_idP, int pdu_len) { + uint8_t done = 0; NR_UE_info_t *UE_info = &RC.nrmac[module_idP]->UE_info; @@ -279,16 +280,8 @@ int nr_process_mac_pdu(module_id_t module_idP, to be a partial PDU at the end of this buffer, so here we gracefully ignore that by returning 0. See: https://gitlab.eurecom.fr/oai/openairinterface5g/-/issues/534 */ - if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) - return 0; - mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - if (pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) - return 0; - mac_ce_len= ntohs((NR_MAC_SUBHEADER_LONG *)pduP)->L); - mac_subheader_len = 3; - } + if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len)) + return 0; /* Extract long BSR value */ ce_ptr = &pduP[mac_subheader_len]; NR_BSR_LONG *bsr_l = (NR_BSR_LONG *) ce_ptr; @@ -362,32 +355,16 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_MULTI_ENTRY_PHR_1_OCT: //38.321 section 6.1.3.9 // varialbe length - if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) - return 0; - mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - if (pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) - return 0; - mac_ce_len = ntohs((NR_MAC_SUBHEADER_LONG *)pduP)->L); - mac_subheader_len = 3; - } + if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len)) + return 0; /* Extract MULTI ENTRY PHR elements from single octet bitmap for PHR calculation */ break; case UL_SCH_LCID_MULTI_ENTRY_PHR_4_OCT: //38.321 section 6.1.3.9 // varialbe length - if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) - return 0; - mac_ce_len |= (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - if (pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) - return 0; - mac_ce_len = ntohs((NR_MAC_SUBHEADER_LONG *)pduP)->L); - mac_subheader_len = 3; - } + if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len)) + return 0; /* Extract MULTI ENTRY PHR elements from four octets bitmap for PHR calculation */ break; @@ -398,18 +375,8 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_SRB1: case UL_SCH_LCID_SRB2: - if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) - return 0; - if(((NR_MAC_SUBHEADER_SHORT *)pduP)->F){ - //mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - if (pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) - return 0; - mac_subheader_len = 3; - mac_sdu_len = ntohs(NR_MAC_SUBHEADER_LONG *) pduP)->L); - } else { - mac_sdu_len = (uint16_t)((NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - } + if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len)) + return 0; rnti_t crnti = UE_info->rnti[UE_id]; int UE_idx = UE_id; @@ -486,19 +453,8 @@ int nr_process_mac_pdu(module_id_t module_idP, case UL_SCH_LCID_DTCH: // check if LCID is valid at current time. - if (pdu_len < sizeof(NR_MAC_SUBHEADER_SHORT)) - return 0; - if (((NR_MAC_SUBHEADER_SHORT *)pduP)->F) { - // mac_sdu_len |= (uint16_t)(((NR_MAC_SUBHEADER_LONG *)pduP)->L2)<<8; - if (pdu_len < sizeof(NR_MAC_SUBHEADER_LONG)) - return 0; - mac_subheader_len = 3; - mac_sdu_len = ntohs((NR_MAC_SUBHEADER_LONG *)pduP)->L); - - } else { - mac_sdu_len = (NR_MAC_SUBHEADER_SHORT *)pduP)->L; - mac_subheader_len = 2; - } + if (!get_mac_len(pduP, pdu_len, &mac_len, &mac_subheader_len)) + return 0; LOG_D(NR_MAC, "In %s: [UE %d] %d.%d : ULSCH -> UL-%s %d (gNB %d, %d bytes)\n", __func__, diff --git a/targets/ARCH/rfsimulator/apply_channelmod.c b/targets/ARCH/rfsimulator/apply_channelmod.c index 6e26120e29..4ff5321e4d 100644 --- a/targets/ARCH/rfsimulator/apply_channelmod.c +++ b/targets/ARCH/rfsimulator/apply_channelmod.c @@ -52,7 +52,8 @@ either we regenerate the channel (call again random_channel(desc,0)), or we keep it over subframes legacy: we regenerate each sub frame in UL, and each frame only in DL */ -void rxAddInput( c16_t *input_sig, c16_t *after_channel_sig, +void rxAddInput( const c16_t *input_sig, + c16_t *after_channel_sig, int rxAnt, channel_desc_t *channelDesc, int nbSamples, diff --git a/targets/ARCH/rfsimulator/rfsimulator.h b/targets/ARCH/rfsimulator/rfsimulator.h index 33583f2d32..e69d41fa6c 100644 --- a/targets/ARCH/rfsimulator/rfsimulator.h +++ b/targets/ARCH/rfsimulator/rfsimulator.h @@ -25,7 +25,7 @@ #define __RFSIMULATOR_H double gaussZiggurat(double mean, double variance); void tableNor(unsigned long seed); -void rxAddInput( c16_t *input_sig, +void rxAddInput( const c16_t *input_sig, c16_t *after_channel_sig, int rxAnt, channel_desc_t *channelDesc, From ef6ea331cf137afbadd42dc8eda947560d72cc62 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Tue, 12 Apr 2022 11:48:42 +0000 Subject: [PATCH 124/150] Update TESTING_5GSA_setup.md --- doc/TESTING_5GSA_setup.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/TESTING_5GSA_setup.md b/doc/TESTING_5GSA_setup.md index f8c85bf2ca..9b27549df4 100644 --- a/doc/TESTING_5GSA_setup.md +++ b/doc/TESTING_5GSA_setup.md @@ -36,6 +36,8 @@ At the moment of writing this document interoperability with the following COTS - [Quectel RM500Q-GL](https://www.quectel.com/product/5g-rm500q-gl/) - [Simcom SIMCOM8200EA](https://www.simcom.com/product/SIM8200EA_M2.html) - Huawei Mate 30 Pro + - Oneplus 8 + - Google Pixel 5 End-to-end control plane signaling to achieve a 5G SA connection, UE registration and PDU session establishment with the CN, as well as some basic user-plane traffic tests have been validated so far using SIMCOM/Quectel modules and Huawei Mate 30 pro. In terms of interoperability with different 5G Core Networks, so far this setup has been tested with: From 2373b0215011357aa853bb9d53804a536977d226 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Tue, 12 Apr 2022 20:52:40 +0200 Subject: [PATCH 125/150] review remarks --- executables/nr-ue.c | 1 + targets/RT/USER/lte-ru.c | 1 + 2 files changed, 2 insertions(+) diff --git a/executables/nr-ue.c b/executables/nr-ue.c index 02e92cbe0b..aff56f583a 100644 --- a/executables/nr-ue.c +++ b/executables/nr-ue.c @@ -808,6 +808,7 @@ void processSlotRX(void *arg) { void dummyWrite(PHY_VARS_NR_UE *UE,openair0_timestamp timestamp, int writeBlockSize) { void *dummy_tx[UE->frame_parms.nb_antennas_tx]; int16_t dummy_tx_data[UE->frame_parms.nb_antennas_tx][2*writeBlockSize]; // 2 because the function we call use pairs of int16_t implicitly as complex numbers + memset(dummy_tx_data, 0, sizeof(dummy_tx_data)); for (int i=0; iframe_parms.nb_antennas_tx; i++) dummy_tx[i]=dummy_tx_data[i]; diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c index c1ffd7a292..cee15ef48b 100644 --- a/targets/RT/USER/lte-ru.c +++ b/targets/RT/USER/lte-ru.c @@ -836,6 +836,7 @@ void tx_rf(RU_t *ru, // we write 1 single I/Q sample to trigger Rx (rfsim will fill gaps with 0 I/Q) void *dummy_tx[ru->frame_parms->nb_antennas_tx]; int16_t dummy_tx_data[ru->frame_parms->nb_antennas_tx][2]; // 2 because the function we call use pairs of int16_t implicitly as complex numbers + memset(dummy_tx_data,0,sizeof(dummy_tx_data)); for (int i=0; iframe_parms->nb_antennas_tx; i++) dummy_tx[i]= dummy_tx_data[i]; From 31319e80635065fe789560b88cee54a269a98f2f Mon Sep 17 00:00:00 2001 From: rmagueta Date: Wed, 13 Apr 2022 16:54:09 +0100 Subject: [PATCH 126/150] Fix pdcch_est_size --- openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c index a1e2b1ee7c..3e710c7c33 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_initial_sync.c @@ -539,8 +539,8 @@ int nr_initial_sync(UE_nr_rxtx_proc_t *proc, int coreset_start_rb=0; // Hold the channel estimates in frequency domain. - int32_t pdcch_est_size = fp->symbols_per_slot*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH); - int32_t pdcch_dl_ch_estimates[4*fp->nb_antennas_rx][pdcch_est_size]; + int32_t pdcch_est_size = ((((fp->symbols_per_slot*(fp->ofdm_symbol_size+LTE_CE_FILTER_LENGTH))+15)/16)*16); + __attribute__ ((aligned(16))) int32_t pdcch_dl_ch_estimates[4*fp->nb_antennas_rx][pdcch_est_size]; for(int n_ss = 0; n_ss Date: Thu, 14 Apr 2022 17:43:02 +0200 Subject: [PATCH 127/150] fixes for SR in pucch0 --- openair1/PHY/NR_TRANSPORT/pucch_rx.c | 20 ++++++++++++++------ openair1/PHY/defs_gNB.h | 2 -- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c index 50c3b62f50..d1f7ff7c6c 100644 --- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c +++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c @@ -298,7 +298,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, xr[aa][l][n2+1]+=(int16_t)(((int32_t)x_re[l][n]*r[n2+1]-(int32_t)x_im[l][n]*r[n2])>>15); #ifdef DEBUG_NR_PUCCH_RX printf("x (%d,%d), r%d.%d (%d,%d), xr (%d,%d)\n", - x_re[l][n],x_im[l][n],l2,re_offset[l],r[n2],r[n2+1],xr[aa][l][n2],xr[aa][l][n2+1]); + x_re[l][n],x_im[l][n],l2,re_offset[l],r[n2],r[n2+1],xr[aa][l][n2],xr[aa][l][n2+1]); #endif } } @@ -390,7 +390,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, index=maxpos; uci_stats->pucch0_n00 = gNB->measurements.n0_subband_power_tot_dB[prb_offset[0]]; uci_stats->pucch0_n01 = gNB->measurements.n0_subband_power_tot_dB[prb_offset[1]]; - LOG_D(PHY,"n00[%d] = %d, n01[%d] = %d\n",prb_offset[0],uci_stats->pucch0_n00,prb_offset[1],uci_stats->pucch0_n01); + LOG_I(PHY,"n00[%d] = %d, n01[%d] = %d\n",prb_offset[0],uci_stats->pucch0_n00,prb_offset[1],uci_stats->pucch0_n01); // estimate CQI for MAC (from antenna port 0 only) int max_n0 = uci_stats->pucch0_n00>uci_stats->pucch0_n01 ? uci_stats->pucch0_n00:uci_stats->pucch0_n01; int SNRtimes10,sigenergy=0; @@ -422,11 +422,12 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, if (pucch_pdu->bit_len_harq==0) { uci_pdu->harq = NULL; uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr)); - uci_pdu->sr->sr_confidence_level = no_conf ? 1 : 0; + uci_pdu->sr->sr_confidence_level = (SNRtimes10 > uci_stats->pucch0_thres) ? 1 : 0; uci_stats->pucch0_sr_trials++; - if (xrtmag_dBtimes10>(10*gNB->measurements.n0_power_tot_dB)) { + if (xrtmag_dBtimes10>10*max_n0) { uci_pdu->sr->sr_indication = 1; uci_stats->pucch0_positive_SR++; + LOG_D(PHY,"PUCCH0 got positive SR. Cumulative number of positive SR %d\n", uci_stats->pucch0_positive_SR); } else { uci_pdu->sr->sr_indication = 0; } @@ -445,7 +446,10 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr)); uci_pdu->sr->sr_indication = (index>1) ? 1 : 0; uci_pdu->sr->sr_confidence_level = no_conf ? 1 : 0; - uci_stats->pucch0_positive_SR++; + if(uci_pdu->sr->sr_indication == 1 && uci_pdu->sr->sr_confidence_level == 0) { + uci_stats->pucch0_positive_SR++; + LOG_D(PHY,"PUCCH0 got positive SR. Cumulative number of positive SR %d\n", uci_stats->pucch0_positive_SR); + } } uci_stats->pucch01_trials++; } @@ -463,6 +467,10 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr)); uci_pdu->sr->sr_indication = (index>3) ? 1 : 0; uci_pdu->sr->sr_confidence_level = (no_conf) ? 1 : 0; + if(uci_pdu->sr->sr_indication == 1 && uci_pdu->sr->sr_confidence_level == 0) { + uci_stats->pucch0_positive_SR++; + LOG_D(PHY,"PUCCH0 got positive SR. Cumulative number of positive SR %d\n", uci_stats->pucch0_positive_SR); + } } } } @@ -1671,7 +1679,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB, LOG_D(PHY,"metric %d dB\n",corr_dB); } - // estimate CQI for MAC (from antenna port 0 only) + // estimate CQI for MAC (from antenna port 0 only) int SNRtimes10 = dB_fixed_times10(signal_energy_nodc(&rxdataF[0][soffset+(l2*frame_parms->ofdm_symbol_size)+re_offset[0]], 12*pucch_pdu->prb_size)) - (10*gNB->measurements.n0_power_tot_dB); diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index 7b655c023a..f382de73aa 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -661,8 +661,6 @@ typedef struct { unsigned int n0_power_tot; //! estimated avg noise power (dB) unsigned int n0_power_tot_dB; - //! estimated avg noise power (dB) - int n0_power_tot_dBm; //! estimated avg noise power per RB per RX ant (lin) unsigned int n0_subband_power[MAX_NUM_RU_PER_gNB][275]; //! estimated avg noise power per RB per RX ant (dB) From ca51ba7d3f860df32b256df2a4b5c2b55d14b929 Mon Sep 17 00:00:00 2001 From: francescomani Date: Thu, 14 Apr 2022 19:30:22 +0200 Subject: [PATCH 128/150] ignoring PUCCH2 TPC for now --- openair1/PHY/NR_TRANSPORT/pucch_rx.c | 3 ++- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c index d1f7ff7c6c..bcf743b560 100644 --- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c +++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c @@ -390,7 +390,7 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, index=maxpos; uci_stats->pucch0_n00 = gNB->measurements.n0_subband_power_tot_dB[prb_offset[0]]; uci_stats->pucch0_n01 = gNB->measurements.n0_subband_power_tot_dB[prb_offset[1]]; - LOG_I(PHY,"n00[%d] = %d, n01[%d] = %d\n",prb_offset[0],uci_stats->pucch0_n00,prb_offset[1],uci_stats->pucch0_n01); + LOG_D(PHY,"n00[%d] = %d, n01[%d] = %d\n",prb_offset[0],uci_stats->pucch0_n00,prb_offset[1],uci_stats->pucch0_n01); // estimate CQI for MAC (from antenna port 0 only) int max_n0 = uci_stats->pucch0_n00>uci_stats->pucch0_n01 ? uci_stats->pucch0_n00:uci_stats->pucch0_n01; int SNRtimes10,sigenergy=0; @@ -1680,6 +1680,7 @@ void nr_decode_pucch2(PHY_VARS_gNB *gNB, } // estimate CQI for MAC (from antenna port 0 only) + // TODO this computation is wrong -> to be ignored at MAC for now int SNRtimes10 = dB_fixed_times10(signal_energy_nodc(&rxdataF[0][soffset+(l2*frame_parms->ofdm_symbol_size)+re_offset[0]], 12*pucch_pdu->prb_size)) - (10*gNB->measurements.n0_power_tot_dB); diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c index e21d1e50f7..3eda061959 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c @@ -1493,10 +1493,11 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id, NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id]; // tpc (power control) - sched_ctrl->tpc1 = nr_get_tpc(RC.nrmac[mod_id]->pucch_target_snrx10, - uci_234->ul_cqi, - 30); - sched_ctrl->pucch_snrx10 = uci_234->ul_cqi * 5 - 640; + // TODO PUCCH2 SNR computation is not correct -> ignore the following + //sched_ctrl->tpc1 = nr_get_tpc(RC.nrmac[mod_id]->pucch_target_snrx10, + // uci_234->ul_cqi, + // 30); + //sched_ctrl->pucch_snrx10 = uci_234->ul_cqi * 5 - 640; if ((uci_234->pduBitmap >> 1) & 0x01) { // iterate over received harq bits From 8b0be9cf87708f9f5976ff239daa8d719d17dae4 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Thu, 20 Jan 2022 15:45:43 +0100 Subject: [PATCH 129/150] nr rlc: speedup ack/nack reception The code completely changed, expect problems. --- openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c | 850 +++++++++++---------- openair2/LAYER2/nr_rlc/nr_rlc_entity_am.h | 3 - openair2/LAYER2/nr_rlc/nr_rlc_sdu.c | 11 +- openair2/LAYER2/nr_rlc/nr_rlc_sdu.h | 7 +- openair2/LAYER2/nr_rlc/tests/test14.txt.gz | Bin 792 -> 799 bytes openair2/LAYER2/nr_rlc/tests/test15.txt.gz | Bin 546 -> 554 bytes 6 files changed, 441 insertions(+), 430 deletions(-) diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c b/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c index af8cb5715a..e86e7c7d05 100644 --- a/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c +++ b/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c @@ -103,36 +103,6 @@ static int segment_already_received(nr_rlc_entity_am_t *entity, return size <= 0; } -static void consider_retransmission(nr_rlc_entity_am_t *entity, - nr_rlc_sdu_segment_t *cur, int update_retx) -{ - if (update_retx) - cur->sdu->retx_count++; - - /* let's report max RETX reached for all retx_count >= max_retx_threshold - * (specs say to report if retx_count == max_retx_threshold). - * Upper layers should react (radio link failure), so no big deal actually. - */ - if (update_retx && cur->sdu->retx_count >= entity->max_retx_threshold) { - entity->common.max_retx_reached(entity->common.max_retx_reached_data, - (nr_rlc_entity_t *)entity); - } - - /* let's put in retransmit list even if we are over max_retx_threshold. - * upper layers should deal with this condition, internally it's better - * for the RLC code to keep going with this segment (we only remove - * a segment that was ACKed) - */ - LOG_D(RLC, "RLC segment to be added at the ReTx list \n"); - nr_rlc_sdu_segment_list_append(&entity->retransmit_list, - &entity->retransmit_end, - cur); - - /* update buffer status */ - entity->common.bstatus.retx_size += compute_pdu_header_size(entity, cur) - + cur->size; -} - /* checks that all the bytes of the SDU sn have been received (but SDU * has not been already processed) */ @@ -315,81 +285,6 @@ static void reception_actions(nr_rlc_entity_am_t *entity, nr_rlc_pdu_t *pdu) } } -static void process_received_ack(nr_rlc_entity_am_t *entity, int ack_sn) -{ - nr_rlc_sdu_segment_t head; - nr_rlc_sdu_segment_t *cur; - nr_rlc_sdu_segment_t *prev; - unsigned char sn_set[32768]; /* used to dec retx_count only once per sdu */ - - memset(sn_set, 0, 32768); - -#define IS_SN_SET(b) (sn_set[(b)/8] & (1 << ((b) % 8))) -#define SET_SN(b) do { sn_set[(b)/8] |= (1 << ((b) % 8)); } while (0) - - /* put SDUs from wait and retransmit lists with SN < 'ack_sn' to ack_list */ - - /* process wait list */ - head.next = entity->wait_list; - prev = &head; - cur = entity->wait_list; - while (cur != NULL) { - if (sn_compare_tx(entity, cur->sdu->sn, ack_sn) < 0) { - /* remove from wait list */ - prev->next = cur->next; - /* put the PDU in the ack list */ - entity->ack_list = nr_rlc_sdu_segment_list_add(sn_compare_tx, entity, - entity->ack_list, cur); - entity->wait_end = prev; - cur = prev->next; - } else { - entity->wait_end = cur; - prev = cur; - cur = cur->next; - } - } - entity->wait_list = head.next; - if (entity->wait_list == NULL) - entity->wait_end = NULL; - - /* process retransmit list */ - head.next = entity->retransmit_list; - prev = &head; - cur = entity->retransmit_list; - while (cur != NULL) { - if (sn_compare_tx(entity, cur->sdu->sn, ack_sn) < 0) { - /* dec. retx_count in case we put this segment back in retransmit list - * in 'process_received_nack' - * do it only once per SDU - */ - if (!IS_SN_SET(cur->sdu->sn)) { - cur->sdu->retx_count--; - SET_SN(cur->sdu->sn); - } - /* remove from retransmit list */ - prev->next = cur->next; - /* update buffer status */ - entity->common.bstatus.retx_size -= compute_pdu_header_size(entity, cur) - + cur->size; - /* put the PDU in the ack list */ - entity->ack_list = nr_rlc_sdu_segment_list_add(sn_compare_tx, entity, - entity->ack_list, cur); - entity->retransmit_end = prev; - cur = prev->next; - } else { - entity->retransmit_end = cur; - prev = cur; - cur = cur->next; - } - } - entity->retransmit_list = head.next; - if (entity->retransmit_list == NULL) - entity->retransmit_end = NULL; - -#undef IS_BIT_SET -#undef SET_BIT -} - static int so_overlap(int s1, int e1, int s2, int e2) { if (s1 < s2) { @@ -402,136 +297,375 @@ static int so_overlap(int s1, int e1, int s2, int e2) return 0; } -static void process_nack_sn(nr_rlc_entity_am_t *entity, int nack_sn, - int so_start, int so_end, unsigned char *sn_set) -{ - /* put all SDU segments with SN == 'sn' and with an overlapping so start/end - * to the retransmit list - * source lists are ack list and wait list. - * Not sure if we should consider wait list, isn't the other end supposed - * to only NACK SNs lower than the ACK SN sent in the status PDU, in which - * case all potential SDU segments should all be in ack list when calling - * the current function? in doubt let's accept anything and thus process - * also wait list. - */ - nr_rlc_sdu_segment_t head; - nr_rlc_sdu_segment_t *cur; - nr_rlc_sdu_segment_t *prev; - -#define IS_SN_SET(b) (sn_set[(b)/8] & (1 << ((b) % 8))) -#define SET_SN(b) do { sn_set[(b)/8] |= (1 << ((b) % 8)); } while (0) - - /* check that tx_next_ack <= sn < tx_next */ - if (!(sn_compare_tx(entity, entity->tx_next_ack, nack_sn) <= 0 && - sn_compare_tx(entity, nack_sn, entity->tx_next) < 0)) - return; - - /* process wait list */ - head.next = entity->wait_list; - prev = &head; - cur = entity->wait_list; - while (cur != NULL) { - if (cur->sdu->sn == nack_sn && - so_overlap(so_start, so_end, cur->so, cur->so + cur->size - 1)) { - /* remove from wait list */ - prev->next = cur->next; - cur->next = NULL; - /* consider the SDU segment for retransmission */ - consider_retransmission(entity, cur, !IS_SN_SET(cur->sdu->sn)); - SET_SN(cur->sdu->sn); - entity->wait_end = prev; - cur = prev->next; - } else { - entity->wait_end = cur; - prev = cur; - cur = cur->next; - } - } - entity->wait_list = head.next; - if (entity->wait_list == NULL) - entity->wait_end = NULL; - - /* process ack list */ - head.next = entity->ack_list; - prev = &head; - cur = entity->ack_list; - while (cur != NULL) { - if (cur->sdu->sn == nack_sn && - so_overlap(so_start, so_end, cur->so, cur->so + cur->size - 1)) { - /* remove from ack list */ - prev->next = cur->next; - cur->next = NULL; - /* consider the SDU segment for retransmission */ - consider_retransmission(entity, cur, !IS_SN_SET(cur->sdu->sn)); - SET_SN(cur->sdu->sn); - cur = prev->next; - } else { - prev = cur; - cur = cur->next; - } - } - entity->ack_list = head.next; - -#undef IS_BIT_SET -#undef SET_BIT -} - -static void process_received_nack(nr_rlc_entity_am_t *entity, int nack_sn, - int so_start, int so_end, int range, - unsigned char *sn_set) +static void process_control_pdu(nr_rlc_entity_am_t *entity, + char *buffer, int size) { +#define R(d) do { if (nr_rlc_pdu_decoder_in_error(&d)) goto err; } while (0) + nr_rlc_pdu_decoder_t decoder; int i; + int cpt; + int ack_sn; + int nack_sn; + int e1; + int e2; + int e3; + int so_start; + int so_end; + int range; + int prev_nack_sn = -1; + int prev_so_start; + int prev_so_end; + int tx_next_ack; + nr_rlc_sdu_segment_t *cur_wait_list; + nr_rlc_sdu_segment_t *prev_wait_list; + nr_rlc_sdu_segment_t *end_wait_list = NULL; + nr_rlc_sdu_segment_t head_wait_list; + nr_rlc_sdu_segment_t *cur_retransmit_list; + nr_rlc_sdu_segment_t *new_retransmit_list; + nr_rlc_sdu_segment_t head_retransmit_list; - for (i = 0; i < range; i++) - process_nack_sn(entity, (nack_sn + i) % entity->sn_modulus, - i == 0 ? so_start : 0, - i == range - 1 ? so_end : -1, - sn_set); -} + head_wait_list.next = entity->wait_list; + cur_wait_list = entity->wait_list; + prev_wait_list = &head_wait_list; -static int sdu_segment_in_ack_list_full(nr_rlc_sdu_segment_t *sdu) -{ - int target_count = sdu->sdu->ref_count; - int actual_count = 0; - int sn = sdu->sdu->sn; + head_retransmit_list.next = NULL; + cur_retransmit_list = entity->retransmit_list; + new_retransmit_list = &head_retransmit_list; - while (sdu != NULL && sdu->sdu->sn == sn) { - actual_count++; - sdu = sdu->next; + nr_rlc_pdu_decoder_init(&decoder, buffer, size); + nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); /* dc */ + + cpt = nr_rlc_pdu_decoder_get_bits(&decoder, 3); R(decoder); + if (cpt != 0) { + LOG_E(RLC, "%s:%d:%s: warning: discard PDU, CPT not 0 (%d)\n", + __FILE__, __LINE__, __FUNCTION__, cpt); + goto err; + } + ack_sn = nr_rlc_pdu_decoder_get_bits(&decoder, entity->sn_field_length); R(decoder); + e1 = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); + /* r bits */ + if (entity->sn_field_length == 18) { + nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); + } else { + nr_rlc_pdu_decoder_get_bits(&decoder, 7); R(decoder); } - return actual_count == target_count; -} - -static void finalize_ack_nack_processing(nr_rlc_entity_am_t *entity) -{ - nr_rlc_sdu_segment_t *cur = entity->ack_list; - int sn; - - /* - send indication of successful delivery for all consecutive acked SDUs - * starting from tx_next_ack. Also free them. - * - update tx_next_ack to the next SN not acked yet + /* 38.322 5.3.3.3 says to stop t_poll_retransmit if a ACK or NACK is + * received for the SN 'poll_sn' - check ACK case (NACK done below) */ - /* todo: send indication of successful delivery as soon as possible as - * the specs say (38.322 5.2.3.1.1). As the code is, if we receive - * ack for SN+2 we won't indicate successful delivery before - * SN+1 has been indicated. + if (sn_compare_tx(entity, entity->poll_sn, ack_sn) < 0) + entity->t_poll_retransmit_start = 0; + + while (e1) { + nack_sn = nr_rlc_pdu_decoder_get_bits(&decoder, entity->sn_field_length); R(decoder); + e1 = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); + e2 = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); + e3 = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); + /* r bits */ + if (entity->sn_field_length == 18) { + nr_rlc_pdu_decoder_get_bits(&decoder, 3); R(decoder); + } else { + nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); + } + if (e2) { + so_start = nr_rlc_pdu_decoder_get_bits(&decoder, 16); R(decoder); + so_end = nr_rlc_pdu_decoder_get_bits(&decoder, 16); R(decoder); + } else { + so_start = 0; + so_end = 0xffff; + } + if (e3) { + range = nr_rlc_pdu_decoder_get_bits(&decoder, 8); R(decoder); + } else { + range = 1; + } + /* special value 0xffff indicates 'all bytes to the end' */ + if (so_end == 0xffff) + so_end = -1; + + /* process nacks */ + for (i = 0; i < range; i++) { + int cur_nack_sn = (nack_sn + i) % entity->sn_modulus; + int cur_so_start = i == 0 ? so_start : 0; + int cur_so_end = i == range - 1 ? so_end : -1; + + /* check that current nack is > previous nack and <= ack + * if not then skip it and all following nacks, and + * do not touch t_poll_retransmit + */ + if (prev_nack_sn != -1) { + int cmp = sn_compare_tx(entity, cur_nack_sn, prev_nack_sn); + if (cmp < 0 + || (cmp == 0 + && (prev_so_end == -1 + || cur_so_start <= prev_so_end))) { + LOG_E(RLC, "%s:%d:%s: bad NACK (nack sn %d so start/end %d/%d, previous nack sn %d so start/end %d/%d), skip it and all following NACKs\n", + __FILE__, __LINE__, __FUNCTION__, + cur_nack_sn, cur_so_start, cur_so_end, + prev_nack_sn, prev_so_start, prev_so_end); + goto nacks_done; + } + } + if (sn_compare_tx(entity, cur_nack_sn, ack_sn) > 0) { + LOG_E(RLC, "%s:%d:%s: bad NACK (nack %d ack %d), skip it and all following NACKs\n", + __FILE__, __LINE__, __FUNCTION__, + cur_nack_sn, ack_sn); + goto nacks_done; + } + +process_next_pdu: + /* process smallest SN either from wait_list or retransmit list */ + if (cur_wait_list == NULL && cur_retransmit_list == NULL) + goto lists_over; + if (cur_wait_list == NULL) + goto process_retransmit_list_head; + if (cur_retransmit_list == NULL) + goto process_wait_list_head; + if (cur_wait_list->sdu->sn < cur_retransmit_list->sdu->sn + || (cur_wait_list->sdu->sn == cur_retransmit_list->sdu->sn && + cur_wait_list->so < cur_retransmit_list->so)) + goto process_wait_list_head; + goto process_retransmit_list_head; + +process_wait_list_head: + /* if nack overlaps with current segment, put it in retransmit list */ + if (cur_wait_list->sdu->sn == cur_nack_sn + && so_overlap(cur_so_start, cur_so_end, + cur_wait_list->so, + cur_wait_list->so + cur_wait_list->size - 1)) { + prev_wait_list->next = cur_wait_list->next; + if (cur_wait_list == entity->wait_end) + end_wait_list = prev_wait_list; + cur_wait_list->next = NULL; + new_retransmit_list->next = cur_wait_list; + new_retransmit_list = cur_wait_list; + /* increase retx count. Don't care about segmentation, so maybe we + * increase too much. + */ + cur_wait_list->sdu->retx_count++; + /* report max RETX reached for all retx_count >= max_retx_threshold + * (specs say to report if retx_count == max_retx_threshold). + * Upper layers should react (radio link failure), so no big deal. + * We deal with segmentation by requiring + * retx_count >= max_retx_threshold * number of segments. + * We may report max RETX reached too late/early. To be refined if + * this is a problem. + */ + if (cur_wait_list->sdu->retx_count + >= entity->max_retx_threshold * cur_wait_list->sdu->ref_count) + entity->common.max_retx_reached(entity->common.max_retx_reached_data, + (nr_rlc_entity_t *)entity); + /* update buffer status */ + entity->common.bstatus.retx_size += compute_pdu_header_size(entity, cur_wait_list) + + cur_wait_list->size; + /* and go process the next pdu, still for the current nack */ + cur_wait_list = prev_wait_list->next; + goto process_next_pdu; + } + + /* if current segment SN > current NACK, we can't classify it yet */ + if (sn_compare_tx(entity, cur_wait_list->sdu->sn, cur_nack_sn) > 0 + || (cur_wait_list->sdu->sn == cur_nack_sn + && cur_wait_list->so > cur_so_start)) + goto done_nack; + + /* if current segment is acked, free it, indicate successful delivery + * if fully acked + */ + if (sn_compare_tx(entity, cur_wait_list->sdu->sn, ack_sn) < 0) { + nr_rlc_sdu_segment_t *cur = cur_wait_list; + int upper_layer_id = cur->sdu->upper_layer_id; + int sdu_size = cur->sdu->size; + cur_wait_list = cur_wait_list->next; + prev_wait_list->next = cur_wait_list; + if (cur_wait_list == entity->wait_end) + end_wait_list = prev_wait_list; + if (nr_rlc_free_sdu_segment(cur)) { + entity->tx_size -= sdu_size; + entity->common.sdu_successful_delivery( + entity->common.sdu_successful_delivery_data, + (nr_rlc_entity_t *)entity, upper_layer_id); + } + goto process_next_pdu; + } + + /* if current segment SN > ack_sn, we're done with this list */ + if (sn_compare_tx(entity, cur_wait_list->sdu->sn, ack_sn) > 0) { + cur_wait_list = NULL; + goto process_next_pdu; + } + + /* current segment SN == ack_sn, skip this segment and move to the next. + * Not sure if correct, can we get a nack_sn == ack_sn? 38.322 5.3.4 says + * "set the ACK_SN to the SN of the next not received RLC SDU which is + * not indicated as missing in the resulting STATUS PDU." Is it okay to + * receive some NACK for a given SN and an ACK == this SN? I can see a + * case where it's possible (only parts of an SN were received and the + * TB is too small to report the several NACKs for this SN, then we + * can't set ACK = SN+1 but in this case, shouldn't we skip sending + * NACKs for this SN and only send ACK = SN? our current implementation + * does send both NACKs and ACK, see function generate_status()). + */ + prev_wait_list = cur_wait_list; + cur_wait_list = cur_wait_list->next; + goto process_next_pdu; + +process_retransmit_list_head: + /* if nack overlaps with current segment, leave it in retransmit list */ + if (cur_retransmit_list->sdu->sn == cur_nack_sn + && so_overlap(cur_so_start, cur_so_end, + cur_retransmit_list->so, + cur_retransmit_list->so + cur_retransmit_list->size - 1)) { + new_retransmit_list->next = cur_retransmit_list; + cur_retransmit_list = cur_retransmit_list->next; + new_retransmit_list = new_retransmit_list->next; + new_retransmit_list->next = NULL; + /* go process the next pdu, still for the current nack */ + goto process_next_pdu; + } + + /* if current segment SN > current NACK, we can't classify it yet */ + if (sn_compare_tx(entity, cur_retransmit_list->sdu->sn, cur_nack_sn) > 0 + || (cur_retransmit_list->sdu->sn == cur_nack_sn + && cur_retransmit_list->so > cur_so_start)) + goto done_nack; + + /* if current segment is acked, free it, indicate successful delivery + * if fully acked + */ + if (sn_compare_tx(entity, cur_retransmit_list->sdu->sn, ack_sn) < 0) { + nr_rlc_sdu_segment_t *cur = cur_retransmit_list; + int upper_layer_id = cur->sdu->upper_layer_id; + int sdu_size = cur->sdu->size; + cur_retransmit_list = cur_retransmit_list->next; + /* update buffer status */ + entity->common.bstatus.retx_size -= compute_pdu_header_size(entity, cur) + + cur->size; + if (nr_rlc_free_sdu_segment(cur)) { + entity->tx_size -= sdu_size; + entity->common.sdu_successful_delivery( + entity->common.sdu_successful_delivery_data, + (nr_rlc_entity_t *)entity, upper_layer_id); + } + goto process_next_pdu; + } + + /* current segment SN >= ack_sn + * if the wait list is empty, then put the remaining retransmit list at + * the end of the new retransmit list (just a speedup) + * if not, put only this segment + */ + if (cur_wait_list == NULL) { + new_retransmit_list->next = cur_retransmit_list; + cur_retransmit_list = NULL; + goto lists_over; + } + new_retransmit_list->next = cur_retransmit_list; + cur_retransmit_list = cur_retransmit_list->next; + new_retransmit_list = new_retransmit_list->next; + new_retransmit_list->next = NULL; + goto process_next_pdu; + +done_nack: + prev_nack_sn = cur_nack_sn; + prev_so_start = cur_so_start; + prev_so_end = cur_so_end; + } /* for (i = 0; i < range; i++) */ + +lists_over: + /* 38.322 5.3.3.3 says to stop t_poll_retransmit if a ACK or NACK is + * received for the SN 'poll_sn' - check NACK case (ACK done above) + */ + if (sn_compare_tx(entity, nack_sn, entity->poll_sn) <= 0 && + sn_compare_tx(entity, entity->poll_sn, (nack_sn + range) % entity->sn_modulus) < 0) + entity->t_poll_retransmit_start = 0; + } /* while (e1) */ + +nacks_done: + /* nacks done, finish with ack */ + /* we may report successful delivery out of order, if it's a problem + * then we can have a single loop and deal with the smallest sn of + * the current head of wait list and the current head of retransmit list. + * (It's simpler to process those two lists the one after the other.) */ - while (cur != NULL && cur->sdu->sn == entity->tx_next_ack && - sdu_segment_in_ack_list_full(cur)) { - entity->tx_size -= cur->sdu->size; - sn = cur->sdu->sn; - entity->common.sdu_successful_delivery( - entity->common.sdu_successful_delivery_data, - (nr_rlc_entity_t *)entity, cur->sdu->upper_layer_id); - while (cur != NULL && cur->sdu->sn == sn) { - nr_rlc_sdu_segment_t *s = cur; - cur = cur->next; - nr_rlc_free_sdu_segment(s); + /* deal with wait list */ + while (cur_wait_list != NULL + && sn_compare_tx(entity, cur_wait_list->sdu->sn, ack_sn) < 0) { + /* current segment is acked, free it, indicate successful delivery + * if fully acked + */ + nr_rlc_sdu_segment_t *cur = cur_wait_list; + int upper_layer_id = cur->sdu->upper_layer_id; + int sdu_size = cur->sdu->size; + prev_wait_list->next = cur_wait_list->next; + if (cur_wait_list == entity->wait_end) + end_wait_list = prev_wait_list; + cur_wait_list = cur_wait_list->next; + if (nr_rlc_free_sdu_segment(cur)) { + entity->tx_size -= sdu_size; + entity->common.sdu_successful_delivery( + entity->common.sdu_successful_delivery_data, + (nr_rlc_entity_t *)entity, upper_layer_id); } - entity->ack_list = cur; - entity->tx_next_ack = (entity->tx_next_ack + 1) % entity->sn_modulus; } + /* deal with retransmit list */ + while (cur_retransmit_list != NULL + && sn_compare_tx(entity, cur_retransmit_list->sdu->sn, ack_sn) < 0) { + /* current segment is acked, free it, indicate successful delivery + * if fully acked + */ + nr_rlc_sdu_segment_t *cur = cur_retransmit_list; + int upper_layer_id = cur->sdu->upper_layer_id; + int sdu_size = cur->sdu->size; + cur_retransmit_list = cur_retransmit_list->next; + /* update buffer status */ + entity->common.bstatus.retx_size -= compute_pdu_header_size(entity, cur) + + cur->size; + if (nr_rlc_free_sdu_segment(cur)) { + entity->tx_size -= sdu_size; + entity->common.sdu_successful_delivery( + entity->common.sdu_successful_delivery_data, + (nr_rlc_entity_t *)entity, upper_layer_id); + } + } + + new_retransmit_list->next = cur_retransmit_list; + + entity->wait_list = head_wait_list.next; + entity->retransmit_list = head_retransmit_list.next; + + if (end_wait_list != NULL) { + if (end_wait_list == &head_wait_list) + entity->wait_end = NULL; + else + entity->wait_end = end_wait_list; + } + + /* update tx_next_ack */ + /* 38.322 5.2.3.1.1 says "set TX_Next_Ack equal to the SN of the RLC SDU + * with the smallest SN, whose SN falls within the range + * TX_Next_Ack <= SN <= TX_Next and for which a positive acknowledgment + * has not been received yet. + */ + /* let's start from highest possible value and go down as needed */ + tx_next_ack = entity->tx_next; + if (entity->wait_list != NULL + && sn_compare_tx(entity, entity->wait_list->sdu->sn, tx_next_ack) < 0) + tx_next_ack = entity->wait_list->sdu->sn; + if (entity->retransmit_list != NULL + && sn_compare_tx(entity, entity->retransmit_list->sdu->sn, tx_next_ack) < 0) + tx_next_ack = entity->retransmit_list->sdu->sn; + if (sn_compare_tx(entity, ack_sn, tx_next_ack) < 0) + tx_next_ack = ack_sn; + entity->tx_next_ack = tx_next_ack; + + return; + +err: + LOG_E(RLC, "%s:%d:%s: error decoding PDU, NR RLC entity in inconsistent state\n", + __FILE__, __LINE__, __FUNCTION__); + +#undef R } void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *_entity, @@ -540,7 +674,6 @@ void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *_entity, #define R(d) do { if (nr_rlc_pdu_decoder_in_error(&d)) goto err; } while (0) nr_rlc_entity_am_t *entity = (nr_rlc_entity_am_t *)_entity; nr_rlc_pdu_decoder_t decoder; - nr_rlc_pdu_decoder_t control_decoder; nr_rlc_pdu_t *pdu; int dc; int p = 0; @@ -551,23 +684,11 @@ void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *_entity, int is_first; int is_last; - int cpt; - int e1; - int e2; - int e3; - int ack_sn; - int nack_sn; - int so_start; - int so_end; - int range; - int control_e1; - int control_e2; - int control_e3; - unsigned char sn_set[32768]; /* used to dec retx_count only once per sdu */ - nr_rlc_pdu_decoder_init(&decoder, buffer, size); dc = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); - if (dc == 0) goto control; + + if (dc == 0) + return process_control_pdu(entity, buffer, size); /* data PDU */ p = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); @@ -596,20 +717,20 @@ void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *_entity, /* dicard PDU if no data */ if (data_size <= 0) { - LOG_W(RLC, "%s:%d:%s: warning: discard PDU, no data\n", + LOG_D(RLC, "%s:%d:%s: warning: discard PDU, no data\n", __FILE__, __LINE__, __FUNCTION__); goto discard; } /* dicard PDU if rx buffer is full */ if (entity->rx_size + data_size > entity->rx_maxsize) { - LOG_W(RLC, "%s:%d:%s: warning: discard PDU, RX buffer full\n", + LOG_D(RLC, "%s:%d:%s: warning: discard PDU, RX buffer full\n", __FILE__, __LINE__, __FUNCTION__); goto discard; } if (!sn_in_recv_window(entity, sn)) { - LOG_W(RLC, "%s:%d:%s: warning: discard PDU, sn out of window (sn %d rx_next %d)\n", + LOG_D(RLC, "%s:%d:%s: warning: discard PDU, sn out of window (sn %d rx_next %d)\n", __FILE__, __LINE__, __FUNCTION__, sn, entity->rx_next); goto discard; @@ -617,7 +738,7 @@ void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *_entity, /* discard segment if all the bytes of the segment are already there */ if (segment_already_received(entity, sn, so, data_size)) { - LOG_W(RLC, "%s:%d:%s: warning: discard PDU, already received\n", + LOG_D(RLC, "%s:%d:%s: warning: discard PDU, already received\n", __FILE__, __LINE__, __FUNCTION__); goto discard; } @@ -650,118 +771,6 @@ void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *_entity, return; -control: - cpt = nr_rlc_pdu_decoder_get_bits(&decoder, 3); R(decoder); - if (cpt != 0) { - LOG_W(RLC, "%s:%d:%s: warning: discard PDU, CPT not 0 (%d)\n", - __FILE__, __LINE__, __FUNCTION__, cpt); - goto discard; - } - ack_sn = nr_rlc_pdu_decoder_get_bits(&decoder, entity->sn_field_length); R(decoder); - e1 = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); - /* r bits */ - if (entity->sn_field_length == 18) { - nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); - } else { - nr_rlc_pdu_decoder_get_bits(&decoder, 7); R(decoder); - } - - /* let's try to parse the control PDU once to check consistency */ - control_decoder = decoder; - control_e1 = e1; - while (control_e1) { - nack_sn = nr_rlc_pdu_decoder_get_bits(&control_decoder, entity->sn_field_length); R(control_decoder); - control_e1 = nr_rlc_pdu_decoder_get_bits(&control_decoder, 1); R(control_decoder); - control_e2 = nr_rlc_pdu_decoder_get_bits(&control_decoder, 1); R(control_decoder); - control_e3 = nr_rlc_pdu_decoder_get_bits(&control_decoder, 1); R(control_decoder); - /* r bits */ - if (entity->sn_field_length == 18) { - nr_rlc_pdu_decoder_get_bits(&control_decoder, 3); R(control_decoder); - } else { - nr_rlc_pdu_decoder_get_bits(&control_decoder, 1); R(control_decoder); - } - /* check range and so_start/so_end consistency */ - if (control_e2) { - so_start = nr_rlc_pdu_decoder_get_bits(&control_decoder, 16); R(control_decoder); - so_end = nr_rlc_pdu_decoder_get_bits(&control_decoder, 16); R(control_decoder); - } else { - so_start = 0; - so_end = 0xffff; - } - if (control_e3) { - range = nr_rlc_pdu_decoder_get_bits(&control_decoder, 8); R(control_decoder); - } else { - range = 1; - } - if (range < 1) { - LOG_E(RLC, "%s:%d:%s: error, bad 'range' in RLC NACK (sn %d)\n", - __FILE__, __LINE__, __FUNCTION__, nack_sn); - goto err; - } - /* so_start can be > so_end if more than one range; they don't refer - * to the same PDU then - */ - if (range == 1 && so_end < so_start) { - LOG_E(RLC, "%s:%d:%s: error, bad so start/end (sn %d)\n", - __FILE__, __LINE__, __FUNCTION__, nack_sn); - goto err; - } - } - - /* 38.322 5.3.3.3 says to stop t_poll_retransmit if a ACK or NACK is - * received for the SN 'poll_sn' - check ACK case (NACK done below) - */ - if (sn_compare_tx(entity, entity->poll_sn, ack_sn) < 0) - entity->t_poll_retransmit_start = 0; - - /* at this point, accept the PDU even if the actual values - * may be incorrect (eg. if so_start > so_end) - */ - process_received_ack(entity, ack_sn); - - if (e1) - memset(sn_set, 0, 32768); - - while (e1) { - nack_sn = nr_rlc_pdu_decoder_get_bits(&decoder, entity->sn_field_length); R(decoder); - e1 = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); - e2 = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); - e3 = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); - /* r bits */ - if (entity->sn_field_length == 18) { - nr_rlc_pdu_decoder_get_bits(&decoder, 3); R(decoder); - } else { - nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder); - } - if (e2) { - so_start = nr_rlc_pdu_decoder_get_bits(&decoder, 16); R(decoder); - so_end = nr_rlc_pdu_decoder_get_bits(&decoder, 16); R(decoder); - } else { - so_start = 0; - so_end = 0xffff; - } - if (e3) { - range = nr_rlc_pdu_decoder_get_bits(&decoder, 8); R(decoder); - } else { - range = 1; - } - /* special value 0xffff indicates 'all bytes to the end' */ - if (so_end == 0xffff) - so_end = -1; - process_received_nack(entity, nack_sn, so_start, so_end, range, sn_set); - - /* 38.322 5.3.3.3 says to stop t_poll_retransmit if a ACK or NACK is - * received for the SN 'poll_sn' - check NACK case (ACK done above) - */ - if (sn_compare_tx(entity, nack_sn, entity->poll_sn) <= 0 && - sn_compare_tx(entity, entity->poll_sn, (nack_sn + range) % entity->sn_modulus) < 0) - entity->t_poll_retransmit_start = 0; - } - - finalize_ack_nack_processing(entity); - - return; - err: LOG_W(RLC, "%s:%d:%s: error decoding PDU, discarding\n", __FILE__, __LINE__, __FUNCTION__); goto discard; @@ -1225,7 +1234,7 @@ static int generate_missing(nr_rlc_entity_am_t *entity, static int generate_status(nr_rlc_entity_am_t *entity, char *buffer, int size) { int ack_sn = entity->rx_next; - missing_data_t m; + missing_data_t m; nr_rlc_pdu_t *cur; int nack_count = 0; nr_rlc_pdu_encoder_t encoder; @@ -1427,8 +1436,6 @@ static int generate_retx_pdu(nr_rlc_entity_am_t *entity, char *buffer, return 0; entity->retransmit_list = entity->retransmit_list->next; - if (entity->retransmit_list == NULL) - entity->retransmit_end = NULL; sdu->next = NULL; @@ -1444,15 +1451,24 @@ static int generate_retx_pdu(nr_rlc_entity_am_t *entity, char *buffer, /* put the second SDU back at the head of the retransmit list */ next_sdu->next = entity->retransmit_list; entity->retransmit_list = next_sdu; - if (entity->retransmit_end == NULL) - entity->retransmit_end = entity->retransmit_list; /* update buffer status */ entity->common.bstatus.retx_size += compute_pdu_header_size(entity, next_sdu) + next_sdu->size; } /* put SDU/SDU segment in the wait list */ - nr_rlc_sdu_segment_list_append(&entity->wait_list, &entity->wait_end, sdu); + /* speedup: check end of wait list, maybe the new sdu comes after */ + if (entity->wait_end == NULL + || sn_compare_tx(entity, sdu->sdu->sn, entity->wait_end->sdu->sn) > 0 + || (sn_compare_tx(entity, sdu->sdu->sn, entity->wait_end->sdu->sn) == 0 + && sdu->so > entity->wait_end->so)) + nr_rlc_sdu_segment_list_append(&entity->wait_list, &entity->wait_end, sdu); + else { + entity->wait_list = nr_rlc_sdu_segment_list_add(sn_compare_tx, entity, + entity->wait_list, sdu); + if (entity->wait_list->next == NULL) + entity->wait_end = entity->wait_list; + } p = check_poll_after_pdu_assembly(entity); @@ -1519,7 +1535,18 @@ static int generate_tx_pdu(nr_rlc_entity_am_t *entity, char *buffer, int size) entity->tx_next = (entity->tx_next + 1) % entity->sn_modulus; /* put SDU/SDU segment in the wait list */ - nr_rlc_sdu_segment_list_append(&entity->wait_list, &entity->wait_end, sdu); + /* speedup: check end of wait list, probably the new sdu comes after */ + if (entity->wait_end == NULL + || sn_compare_tx(entity, sdu->sdu->sn, entity->wait_end->sdu->sn) > 0 + || (sn_compare_tx(entity, sdu->sdu->sn, entity->wait_end->sdu->sn) == 0 + && sdu->so > entity->wait_end->so)) + nr_rlc_sdu_segment_list_append(&entity->wait_list, &entity->wait_end, sdu); + else { + entity->wait_list = nr_rlc_sdu_segment_list_add(sn_compare_tx, entity, + entity->wait_list, sdu); + if (entity->wait_list->next == NULL) + entity->wait_end = entity->wait_list; + } /* polling actions for a new PDU */ entity->pdu_without_poll++; @@ -1629,11 +1656,7 @@ void nr_rlc_entity_am_recv_sdu(nr_rlc_entity_t *_entity, static void check_t_poll_retransmit(nr_rlc_entity_am_t *entity) { - nr_rlc_sdu_segment_t head; nr_rlc_sdu_segment_t *cur; - nr_rlc_sdu_segment_t *prev; - int sn; - int old_retx_count; /* 38.322 5.3.3.4 */ /* did t_poll_retransmit expire? */ @@ -1659,74 +1682,58 @@ static void check_t_poll_retransmit(nr_rlc_entity_am_t *entity) */ entity->force_poll = 1; - LOG_W(RLC, "%s:%d:%s: warning: t_poll_retransmit expired\n", + LOG_D(RLC, "%s:%d:%s: warning: t_poll_retransmit expired\n", __FILE__, __LINE__, __FUNCTION__); /* do we meet conditions of 38.322 5.3.3.4? */ if (!check_poll_after_pdu_assembly(entity)) return; - /* search wait list for SDU with highest SN */ - /* this code may be incorrect: in LTE we had to look for PDU - * with SN = VT(S) - 1, but for NR the specs say "highest SN among the - * ones submitted to lower layers" not 'tx_next - 1'. So we should look - * for the highest SN in the wait list. But that's no big deal. If the - * program runs this code, then the connection is in a bad state and we - * can retransmit whatever we want. At some point we will receive a status - * report and retransmit what we really have to. Actually we could just - * retransmit the head of wait list (the specs have this 'or'). - * (Actually, maybe this interpretation is not correct and what the code - * does is correct. The specs are confusing.) + /* retransmit the head of wait list, this is the case + * "consider any RLC SDU which has not been positively acknowledged for + * retransmission" of 36.322 5.3.3.4. + * We don't search for the highest SN, it's simpler to just take the head + * of wait list. This can be changed if needed. */ - sn = (entity->tx_next - 1 + entity->sn_modulus) % entity->sn_modulus; - - head.next = entity->wait_list; cur = entity->wait_list; - prev = &head; - - while (cur != NULL) { - if (cur->sdu->sn == sn) - break; - prev = cur; - cur = cur->next; - } - - /* SDU with highest SN not found? take the head of wait list */ - if (cur == NULL) { - cur = entity->wait_list; - prev = &head; - sn = cur->sdu->sn; - } /* todo: do we need to for check cur == NULL? * It seems that no, the wait list should not be empty here, but not sure. */ - old_retx_count = cur->sdu->retx_count; + entity->wait_list = cur->next; + if (entity->wait_list == NULL) + entity->wait_end = NULL; - /* 38.322 says "SDU", not "SDU segment", so let's retransmit all - * SDU segments with this SN + /* 38.322 says "SDU", not "SDU segment", but let's retransmit only + * the 'cur' SDU segment. To be changed if needed. (Maybe we have + * to retransmit all SDU segments with the same SN that are in the + * wait list.) */ - /* todo: maybe we could simply retransmit the current SDU segment, - * so that we don't have to run through the full wait list. + + /* increase retx count. Don't care about segmentation, so maybe we + * increase too much. */ - while (cur != NULL) { - if (cur->sdu->sn == sn) { - prev->next = cur->next; - cur->next = NULL; - /* put in retransmit list */ - consider_retransmission(entity, cur, - old_retx_count == cur->sdu->retx_count); - } else { - prev = cur; - } - cur = prev->next; - } - entity->wait_list = head.next; - /* reset wait_end (todo: optimize?) */ - entity->wait_end = entity->wait_list; - while (entity->wait_end != NULL && entity->wait_end->next != NULL) - entity->wait_end = entity->wait_end->next; + cur->sdu->retx_count++; + /* report max RETX reached for all retx_count >= max_retx_threshold + * (specs say to report if retx_count == max_retx_threshold). + * Upper layers should react (radio link failure), so no big deal. + * We deal with segmentation by requiring + * retx_count >= max_retx_threshold * number of segments. + * We may report max RETX reached too late/early. To be refined if + * this is a problem. + */ + if (cur->sdu->retx_count + >= entity->max_retx_threshold * cur->sdu->ref_count) + entity->common.max_retx_reached(entity->common.max_retx_reached_data, + (nr_rlc_entity_t *)entity); + /* update buffer status */ + entity->common.bstatus.retx_size += compute_pdu_header_size(entity, cur) + + cur->size; + + /* put in retransmit list */ + entity->retransmit_list = nr_rlc_sdu_segment_list_add(sn_compare_tx, entity, + entity->retransmit_list, cur); } static void check_t_reassembly(nr_rlc_entity_am_t *entity) @@ -1815,6 +1822,7 @@ void nr_rlc_entity_am_discard_sdu(nr_rlc_entity_t *_entity, int sdu_id) entity->common.bstatus.tx_size -= compute_pdu_header_size(entity, cur) + cur->size; + entity->tx_size -= cur->sdu->size; nr_rlc_free_sdu_segment(cur); } @@ -1857,7 +1865,6 @@ static void clear_entity(nr_rlc_entity_am_t *entity) nr_rlc_free_sdu_segment_list(entity->tx_list); nr_rlc_free_sdu_segment_list(entity->wait_list); nr_rlc_free_sdu_segment_list(entity->retransmit_list); - nr_rlc_free_sdu_segment_list(entity->ack_list); entity->tx_list = NULL; entity->tx_end = NULL; @@ -1867,9 +1874,6 @@ static void clear_entity(nr_rlc_entity_am_t *entity) entity->wait_end = NULL; entity->retransmit_list = NULL; - entity->retransmit_end = NULL; - - entity->ack_list = NULL; entity->common.bstatus.tx_size = 0; entity->common.bstatus.retx_size = 0; diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.h b/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.h index 453fe87026..57ae1a3485 100644 --- a/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.h +++ b/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.h @@ -84,9 +84,6 @@ typedef struct { nr_rlc_sdu_segment_t *wait_end; nr_rlc_sdu_segment_t *retransmit_list; - nr_rlc_sdu_segment_t *retransmit_end; - - nr_rlc_sdu_segment_t *ack_list; } nr_rlc_entity_am_t; void nr_rlc_entity_am_recv_sdu(nr_rlc_entity_t *entity, diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_sdu.c b/openair2/LAYER2/nr_rlc/nr_rlc_sdu.c index ef0d52558a..ef64389ac5 100644 --- a/openair2/LAYER2/nr_rlc/nr_rlc_sdu.c +++ b/openair2/LAYER2/nr_rlc/nr_rlc_sdu.c @@ -58,14 +58,19 @@ oom: exit(1); } -void nr_rlc_free_sdu_segment(nr_rlc_sdu_segment_t *sdu) +int nr_rlc_free_sdu_segment(nr_rlc_sdu_segment_t *sdu) { - sdu->sdu->ref_count--; - if (sdu->sdu->ref_count == 0) { + int ret = 0; + + sdu->sdu->free_count++; + if (sdu->sdu->free_count == sdu->sdu->ref_count) { free(sdu->sdu->data); free(sdu->sdu); + ret = 1; } free(sdu); + + return ret; } void nr_rlc_sdu_segment_list_append(nr_rlc_sdu_segment_t **list, diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_sdu.h b/openair2/LAYER2/nr_rlc/nr_rlc_sdu.h index f4585fb7d6..20cc90f185 100644 --- a/openair2/LAYER2/nr_rlc/nr_rlc_sdu.h +++ b/openair2/LAYER2/nr_rlc/nr_rlc_sdu.h @@ -30,6 +30,10 @@ typedef struct nr_rlc_sdu_t { int retx_count; int ref_count; /* incremented each time the SDU is segmented */ + int free_count; /* incremented each time a segment is freed + * when it equals ref_count we can free the SDU + * completely + */ } nr_rlc_sdu_t; typedef struct nr_rlc_sdu_segment_t { @@ -44,7 +48,8 @@ typedef struct nr_rlc_sdu_segment_t { nr_rlc_sdu_segment_t *nr_rlc_new_sdu( char *buffer, int size, int upper_layer_id); -void nr_rlc_free_sdu_segment(nr_rlc_sdu_segment_t *sdu); +/* return 1 if the SDU has been freed too, 0 if not (more segments to free) */ +int nr_rlc_free_sdu_segment(nr_rlc_sdu_segment_t *sdu); void nr_rlc_sdu_segment_list_append(nr_rlc_sdu_segment_t **list, nr_rlc_sdu_segment_t **end, nr_rlc_sdu_segment_t *sdu); diff --git a/openair2/LAYER2/nr_rlc/tests/test14.txt.gz b/openair2/LAYER2/nr_rlc/tests/test14.txt.gz index 53616dae3d10b71375cea41ca9061d4304f64dcf..45e54651eb317c3b7695cfcab7428fe43172227b 100644 GIT binary patch delta 727 zcmV;|0x12M2A>9hABzYGOnK#D0t0kqb96B@E_8Tw0Ns{LYhyM4NCCm^MOEKZ=bSpax9>mP-mu=3)#kg~ z{rThj8|)3M(LUX+`va@j9?Uh<1qmfF$t3~1yeB%vosFO z#2T!{I;>z7>#+eFu?d^81zWKV+pz;XaRz5`4ktLpd0fCnT*75s!Bt$tb=<&B#31&! zL;SywKgOzT#@(NN`vhKg;G5awH34cl-io5)8o-96^ro zpHsnJ_7p$=^5cGtJ|6BrjTIk$`uLMT0at$vP`7iA)!mX%o9%j^RLk>jKZUUQ`|)I! zIsZ8yU2wvJ@)Tmb-w|Qw9P6%ww$qNiXy`iu^vJPt=-3>{k(|hxT*#H&$eldMlVT{A z;wVBZySmsfn7Yg<7eN+Npy&cMfQl=4gLH zQ<|p*T0Ed$-|AR>on!U9W92$%JMGxZhwk61xPQ6g`}*+g3(d1H+*#%={g3gIP9hHf zB3?d{PR8rfxRclNS6Q>(wl>!5xqW!}{G|Tq?@rXaSJulb>i-AdiJFg6Qx8+KC0eEx zTBS8wrw!Vq8@i=Cy3m#G>46^UiJpJygt< zMrRDhWE!SrI;Jp{>6w8UnTeT?2RNsLUiKJ|DVDz#W0#M8XO(ASA-o{R%-L87Cu3pP zxT8y7xVC4Yo=z|?M>kyg;_oR>{y$RwjmE1a;Pl2_0rqh2kKgKnX5n#7%(Dw?@)b>e JEYZ;s0009vZy5jp delta 720 zcmV;>0x$ia2ABqaABzYG$u*{70t0kqb96B@E_8Tw0Ns{5ZyZMugmeFjFSHY5X1eFa zP>|rviKxghhZ@~X5=8Fzp5?Gt#}fp2Dy-&}qd?nniDsDd~|5Jfx^kccECBL%5QLpm~$i5k?R z4i!{Uj|MbCq6y7tK`YwOjt+D#=i@EjEsWt6@9_a2@d=;t1z+(E-|-8WNiYOUa0EHR ze@+E^*zjQWeLUQM9xL9z{qU1O0at%CP`7iA)!mX%o9%j^RLlEr--WRG>v3h4 zKL1%C9dN>e@)Tmb=ZLU#j&;{T+iAyMH1wSSdgNF+bZidfNKWKTF62sXuXU`x%&~gjv2q=>op$WyL-(&$+<(8~`}*+gh344{cb0k0{>OMpClQB# z5idVUC*w8!FaFCkAElHYrc_I`Oe?fXYqU-qv`IH~OLugkE8WurJ<=0B(+j=Q8@(^H zK%Wf5unfl#hB7=OFd`!{GNUjmqcMLvV=yMuFfG$Dg{e%>49v((%zWIyIUV$}+jvZk z{H@ryeC#``JTr#jJ95LE9m8;P49{GBIsv>Kop9xYyr(ev|489CHeMwGrzhwNu!nOW zPOAr+E%mz|4S$w3>uqaey`I~Lhc8bQjQ;b9di%n9_riL4VZA?BT%gc&;HC?*=-Ux2N2b{wRPH`S*xPXhegv+>s>u^18z)gh>HzE!ZL=le| z5|D@_BqIgskRBP3iZo=W>c_jtnx ze8eYw#ut2t@9_h^;v0U%9444z9y2Up5ldLc3f5sgHeeNN*f{kk2tf&+V1z)3gha@M zLg)xRVIWk(1ZE^Uq7aqn4-(LQ0?~+p7>S9PiG|n^d*VQ>#6}!RjwB={d6JO=DUuQ? zlM1OL^`wDRNsTm;9a+dq_GBXmawI2mCKqx??#TnWk{fxXIEqk|;weT6zY_S=KDT9e z-7db=^%lKt&`*`_=XyFL?cvjV@kyTXb$9U1=6k&V{Bid3#4g;!XUEygmi=FtHymfL zPi)~meDMJLw!?SJ{&CJfKiM>|?dtNTEjfLAz6;&{nH)eRcJ1CuOUz_X^}+rFTP29vb2E|M*M~ sWUv0;muI7`KBVol{*!mmkK|+cZ5A^}_s6#07RbSZA0L&&0<;ML09iH+!vFvP literal 546 zcmV+-0^R)|iwFqSHKt(#19W9`bTKt9ba-?C&6P`QlR*@Q_x_4!sT-MdnOl}(ap$J( zN~C<3`J_-plBS}+-Xu+=(U?%dS{Q~|%o(2d%=^w85xL?J5Ch)#^eM9joOti+Dk z69?i*T)|AFKoXLY?5F_U7m%D3Nr{w6g;Yr$sV5Djk<>^NIgo{{WFtE{k`pmKl}&G&f!*=hCi#4g<9^V8~OtNt&{8&9j(C${h& zUpk_`?fCB1KhF7=XPd*vc5{8#=A6I1+=ceJXLd_|pe?q0@z>+w_Vs-pYNI?TXxqgq zp!fY;&#R#8z8mFVg>l0vf4Y(9|BtyIiPHFgACgUP^-sNh)?e%n{e<0z-|k|qG4Qop kuviX5TP&vK&CR!63)=YlP=P$QK#vyu0JKzLn6wE10El1~J^%m! From 33663e68b093ffdb28ff5e31f9dd3f360eb9dbf7 Mon Sep 17 00:00:00 2001 From: francescomani Date: Tue, 19 Apr 2022 18:37:14 +0200 Subject: [PATCH 130/150] rename frame_type --- common/utils/nr/nr_common.c | 4 ++-- common/utils/nr/nr_common.h | 2 +- openair1/PHY/LTE_TRANSPORT/prach.c | 2 +- openair1/PHY/LTE_TRANSPORT/prach_common.c | 2 +- openair1/PHY/LTE_TRANSPORT/prach_extern.h | 2 +- openair1/PHY/LTE_TRANSPORT/transport_common_proto.h | 4 ++-- openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c | 10 +++++----- openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c | 2 +- openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h | 4 ++-- openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h | 4 ++-- openair1/PHY/defs_common.h | 4 ++-- openair1/PHY/defs_nr_common.h | 2 +- openair1/SCHED/phy_procedures_lte_common.c | 2 +- openair1/SCHED/sched_common.h | 2 +- openair1/SCHED/sched_eNB.h | 2 +- openair1/SCHED_UE/phy_procedures_lte_ue.c | 2 +- openair1/SCHED_UE/sched_UE.h | 2 +- openair1/SIMULATION/LTE_PHY/pdcchsim.c | 2 +- openair2/COMMON/m2ap_messages_types.h | 4 ++-- openair2/COMMON/m3ap_messages_types.h | 2 +- openair2/COMMON/phy_messages_types.h | 2 +- openair2/COMMON/rrc_messages_types.h | 4 ++-- openair2/COMMON/x2ap_messages_types.h | 2 +- openair2/ENB_APP/RRC_config_tools.h | 2 +- openair2/ENB_APP/flexran_agent_ran_api.c | 2 +- openair2/ENB_APP/flexran_agent_ran_api.h | 2 +- openair2/GNB_APP/gnb_config.c | 2 +- openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c | 2 +- openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h | 2 +- openair2/LAYER2/NR_MAC_UE/config_ue.c | 2 +- openair2/LAYER2/NR_MAC_UE/mac_defs.h | 2 +- openair2/LAYER2/NR_MAC_gNB/config.c | 2 +- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c | 6 +++--- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c | 2 +- openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c | 2 +- openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h | 2 +- openair2/M2AP/m2ap_MCE_defs.h | 2 +- openair2/M2AP/m2ap_eNB_defs.h | 2 +- openair2/RRC/LTE/rrc_eNB_S1AP.c | 2 +- openair2/RRC/NR/nr_rrc_config.c | 4 ++-- openair2/UTIL/OCG/OCG.h | 2 +- openair2/X2AP/x2ap_eNB_defs.h | 2 +- openair3/M3AP/m3ap_MCE_defs.h | 2 +- openair3/M3AP/m3ap_MME_defs.h | 2 +- targets/RT/USER/lte-ue.c | 2 +- 45 files changed, 59 insertions(+), 59 deletions(-) diff --git a/common/utils/nr/nr_common.c b/common/utils/nr/nr_common.c index 49743b3bdc..0aeeaf3afd 100644 --- a/common/utils/nr/nr_common.c +++ b/common/utils/nr/nr_common.c @@ -336,9 +336,9 @@ int get_dmrs_port(int nl, uint16_t dmrs_ports) { return p; } -lte_frame_type_t get_frame_type(uint16_t current_band, uint8_t scs_index) +frame_type_t get_frame_type(uint16_t current_band, uint8_t scs_index) { - lte_frame_type_t current_type; + frame_type_t current_type; int32_t delta_duplex = get_delta_duplex(current_band, scs_index); if (delta_duplex == 0) diff --git a/common/utils/nr/nr_common.h b/common/utils/nr/nr_common.h index 0150cf59f8..a09532a565 100644 --- a/common/utils/nr/nr_common.h +++ b/common/utils/nr/nr_common.h @@ -63,7 +63,7 @@ void get_coreset_rballoc(uint8_t *FreqDomainResource,int *n_rb,int *rb_offset); uint16_t config_bandwidth(int mu, int nb_rb, int nr_band); int get_nr_table_idx(int nr_bandP, uint8_t scs_index); int32_t get_delta_duplex(int nr_bandP, uint8_t scs_index); -lte_frame_type_t get_frame_type(uint16_t nr_bandP, uint8_t scs_index); +frame_type_t get_frame_type(uint16_t nr_bandP, uint8_t scs_index); uint16_t get_band(uint64_t downlink_frequency, int32_t delta_duplex); int NRRIV2BW(int locationAndBandwidth,int N_RB); int NRRIV2PRBOFFSET(int locationAndBandwidth,int N_RB); diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c index eb46a8d663..91c419ebe3 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach.c +++ b/openair1/PHY/LTE_TRANSPORT/prach.c @@ -56,7 +56,7 @@ void rx_prach0(PHY_VARS_eNB *eNB, uint8_t ce_level ) { int i; - lte_frame_type_t frame_type; + frame_type_t frame_type; uint16_t rootSequenceIndex; uint8_t prach_ConfigIndex; uint8_t Ncs_config; diff --git a/openair1/PHY/LTE_TRANSPORT/prach_common.c b/openair1/PHY/LTE_TRANSPORT/prach_common.c index e366e8edbc..f3409a90e3 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach_common.c +++ b/openair1/PHY/LTE_TRANSPORT/prach_common.c @@ -399,7 +399,7 @@ void compute_prach_seq(uint16_t rootSequenceIndex, uint8_t prach_ConfigIndex, uint8_t zeroCorrelationZoneConfig, uint8_t highSpeedFlag, - lte_frame_type_t frame_type, + frame_type_t frame_type, uint32_t X_u[64][839]) { // Compute DFT of x_u => X_u[k] = x_u(inv(u)*k)^* X_u[k] = exp(j\pi u*inv(u)*k*(inv(u)*k+1)/N_ZC) unsigned int k,inv_u,i,NCS=0,num_preambles; diff --git a/openair1/PHY/LTE_TRANSPORT/prach_extern.h b/openair1/PHY/LTE_TRANSPORT/prach_extern.h index 3404646923..3403861011 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach_extern.h +++ b/openair1/PHY/LTE_TRANSPORT/prach_extern.h @@ -81,7 +81,7 @@ void compute_prach_seq(uint16_t rootSequenceIndex, uint8_t prach_ConfigIndex, uint8_t zeroCorrelationZoneConfig, uint8_t highSpeedFlag, - lte_frame_type_t frame_type, + frame_type_t frame_type, uint32_t X_u[64][839]); #endif diff --git a/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h b/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h index af8e63c3ed..74a38e58db 100644 --- a/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h +++ b/openair1/PHY/LTE_TRANSPORT/transport_common_proto.h @@ -224,7 +224,7 @@ uint8_t get_num_prach_tdd(module_id_t Mod_id); @returns 0-1 accordingly */ /* -uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,lte_frame_type_t frame_type); +uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,frame_type_t frame_type); */ /*! @@ -247,7 +247,7 @@ void compute_prach_seq(uint16_t rootSequenceIndex, uint8_t prach_ConfigIndex, uint8_t zeroCorrelationZoneConfig, uint8_t highSpeedFlag, - lte_frame_type_t frame_type, + frame_type_t frame_type, uint32_t X_u[64][839]); diff --git a/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c index efde277203..088e2c0a5e 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/dci_tools_ue.c @@ -64,7 +64,7 @@ extern uint16_t beta_cqi[16]; extern uint16_t beta_ri[16]; extern uint16_t beta_ack[16]; -void extract_dci1A_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted) +void extract_dci1A_info(uint8_t N_RB_DL, frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted) { uint8_t harq_pid=0; uint32_t rballoc=0; @@ -182,7 +182,7 @@ void extract_dci1A_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_ pdci_info_extarcted->dai = dai; } -void extract_dci1C_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted) +void extract_dci1C_info(uint8_t N_RB_DL, frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted) { uint32_t rballoc=0; @@ -222,7 +222,7 @@ void extract_dci1C_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_ pdci_info_extarcted->Ngap = Ngap; } -void extract_dci1_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted) +void extract_dci1_info(uint8_t N_RB_DL, frame_type_t frame_type, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted) { uint32_t rballoc=0; @@ -329,7 +329,7 @@ void extract_dci1_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, void *dci_p } -void extract_dci2_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, uint8_t nb_antenna_ports_eNB, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted) +void extract_dci2_info(uint8_t N_RB_DL, frame_type_t frame_type, uint8_t nb_antenna_ports_eNB, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted) { uint32_t rballoc=0; @@ -615,7 +615,7 @@ void extract_dci2_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, uint8_t nb_ } -void extract_dci2A_info(uint8_t N_RB_DL, lte_frame_type_t frame_type, uint8_t nb_antenna_ports_eNB, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted) +void extract_dci2A_info(uint8_t N_RB_DL, frame_type_t frame_type, uint8_t nb_antenna_ports_eNB, void *dci_pdu, DCI_INFO_EXTRACTED_t *pdci_info_extarcted) { uint32_t rballoc=0; diff --git a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c index 82120dc3c3..4faa8367c3 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c @@ -46,7 +46,7 @@ //#define PRACH_DEBUG 1 int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint16_t Nf ) { - lte_frame_type_t frame_type = ue->frame_parms.frame_type; + frame_type_t frame_type = ue->frame_parms.frame_type; //uint8_t tdd_config = ue->frame_parms.tdd_config; uint16_t rootSequenceIndex = ue->frame_parms.prach_config_common.rootSequenceIndex; uint8_t prach_ConfigIndex = ue->frame_parms.prach_config_common.prach_ConfigInfo.prach_ConfigIndex; diff --git a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h index c5d096ceb7..05a5904971 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h +++ b/openair1/PHY/LTE_UE_TRANSPORT/transport_proto_ue.h @@ -1669,7 +1669,7 @@ uint8_t get_num_prach_tdd(module_id_t Mod_id); @param frame_type 0-FDD, 1-TDD @returns 0-1 accordingly */ -uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,lte_frame_type_t frame_type); +uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,frame_type_t frame_type); /*! \brief Helper for MAC, returns frequency index of PRACH resource in TDD for a particular configuration index @@ -1691,7 +1691,7 @@ void compute_prach_seq(uint16_t rootSequenceIndex, uint8_t prach_ConfigIndex, uint8_t zeroCorrelationZoneConfig, uint8_t highSpeedFlag, - lte_frame_type_t frame_type, + frame_type_t frame_type, uint32_t X_u[64][839]); 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 dc0f38f096..65c0ec9381 100644 --- a/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h +++ b/openair1/PHY/NR_UE_TRANSPORT/nr_transport_proto_ue.h @@ -1567,7 +1567,7 @@ uint8_t get_num_prach_tdd(module_id_t Mod_id); @param frame_type 0-FDD, 1-TDD @returns 0-1 accordingly */ -uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,lte_frame_type_t frame_type); +uint8_t get_prach_fmt(uint8_t prach_ConfigIndex,frame_type_t frame_type); /*! \brief Helper for MAC, returns frequency index of PRACH resource in TDD for a particular configuration index @@ -1589,7 +1589,7 @@ void compute_prach_seq(uint16_t rootSequenceIndex, uint8_t prach_ConfigIndex, uint8_t zeroCorrelationZoneConfig, uint8_t highSpeedFlag, - lte_frame_type_t frame_type, + frame_type_t frame_type, uint32_t X_u[64][839]); diff --git a/openair1/PHY/defs_common.h b/openair1/PHY/defs_common.h index 86df85db5c..d13fe260de 100644 --- a/openair1/PHY/defs_common.h +++ b/openair1/PHY/defs_common.h @@ -99,7 +99,7 @@ #define NB_RX_ANTENNAS_MAX 64 -typedef enum {TDD=1,FDD=0} lte_frame_type_t; +typedef enum {TDD=1,FDD=0} frame_type_t; typedef enum {EXTENDED=1,NORMAL=0} lte_prefix_type_t; @@ -597,7 +597,7 @@ typedef struct LTE_DL_FRAME_PARMS { /// shift of pilot position in one RB uint8_t nushift; /// Frame type (0 FDD, 1 TDD) - lte_frame_type_t frame_type; + frame_type_t frame_type; /// TDD subframe assignment (0-7) (default = 3) (254=RX only, 255=TX only) uint8_t tdd_config; /// TDD S-subframe configuration (0-9) diff --git a/openair1/PHY/defs_nr_common.h b/openair1/PHY/defs_nr_common.h index 7c78d20ae5..756e6b7210 100644 --- a/openair1/PHY/defs_nr_common.h +++ b/openair1/PHY/defs_nr_common.h @@ -280,7 +280,7 @@ struct NR_DL_FRAME_PARMS { uint32_t att_rx; /// total Number of Resource Block Groups: this is ceil(N_PRB/P) /// Frame type (0 FDD, 1 TDD) - lte_frame_type_t frame_type; + frame_type_t frame_type; uint8_t tdd_config; /// Cell ID uint16_t Nid_cell; diff --git a/openair1/SCHED/phy_procedures_lte_common.c b/openair1/SCHED/phy_procedures_lte_common.c index 7033c52701..9de453da94 100644 --- a/openair1/SCHED/phy_procedures_lte_common.c +++ b/openair1/SCHED/phy_procedures_lte_common.c @@ -994,7 +994,7 @@ int is_srs_occasion_common(LTE_DL_FRAME_PARMS *frame_parms,int frame_tx,int subf return(isSubframeSRS); } -void compute_srs_pos(lte_frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset) +void compute_srs_pos(frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset) { if(TDD == frameType) { diff --git a/openair1/SCHED/sched_common.h b/openair1/SCHED/sched_common.h index c9fc338686..9f3e6695b6 100644 --- a/openair1/SCHED/sched_common.h +++ b/openair1/SCHED/sched_common.h @@ -339,7 +339,7 @@ void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe, unsig int is_srs_occasion_common(LTE_DL_FRAME_PARMS *frame_parms,int frame_tx,int subframe_tx); -void compute_srs_pos(lte_frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset); +void compute_srs_pos(frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset); /* from here: prototype added to remove compilation warnings, doc to be written by the author of the function */ diff --git a/openair1/SCHED/sched_eNB.h b/openair1/SCHED/sched_eNB.h index de987b0ac7..efdb1bd199 100644 --- a/openair1/SCHED/sched_eNB.h +++ b/openair1/SCHED/sched_eNB.h @@ -215,7 +215,7 @@ int16_t get_target_pucch_rx_power(module_id_t module_idP, uint8_t CC_id); int is_srs_occasion_common(LTE_DL_FRAME_PARMS *frame_parms,int frame_tx,int subframe_tx); -void compute_srs_pos(lte_frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset); +void compute_srs_pos(frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset); void release_rnti_of_phy(module_id_t mod_id); /*@}*/ diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c index b02f24e04e..67513b9c59 100644 --- a/openair1/SCHED_UE/phy_procedures_lte_ue.c +++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c @@ -574,7 +574,7 @@ void get_cqipmiri_params(PHY_VARS_UE *ue, } } -PUCCH_FMT_t get_pucch_format(lte_frame_type_t frame_type, +PUCCH_FMT_t get_pucch_format(frame_type_t frame_type, lte_prefix_type_t cyclic_prefix_type, uint8_t SR_payload, uint8_t nb_cw, diff --git a/openair1/SCHED_UE/sched_UE.h b/openair1/SCHED_UE/sched_UE.h index 32702b1148..0dbb779630 100644 --- a/openair1/SCHED_UE/sched_UE.h +++ b/openair1/SCHED_UE/sched_UE.h @@ -278,7 +278,7 @@ void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe, unsig int is_srs_occasion_common(LTE_DL_FRAME_PARMS *frame_parms,int frame_tx,int subframe_tx); -void compute_srs_pos(lte_frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset); +void compute_srs_pos(frame_type_t frameType,uint16_t isrs,uint16_t *psrsPeriodicity,uint16_t *psrsOffset); /*@}*/ diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c index bd2c2d66b9..50910290c3 100644 --- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c @@ -415,7 +415,7 @@ int main(int argc, char **argv) { uint8_t harq_pid; uint8_t phich_ACK; uint8_t num_phich_interf = 0; - lte_frame_type_t frame_type=TDD; + frame_type_t frame_type=TDD; // int re_offset; // uint32_t *txptr; int aarx; diff --git a/openair2/COMMON/m2ap_messages_types.h b/openair2/COMMON/m2ap_messages_types.h index c70c50fc64..460dbfc4bb 100644 --- a/openair2/COMMON/m2ap_messages_types.h +++ b/openair2/COMMON/m2ap_messages_types.h @@ -354,7 +354,7 @@ typedef struct m2ap_register_mce_req_s { int32_t uplink_frequency_offset[MAX_NUM_CCs]; uint32_t Nid_cell[MAX_NUM_CCs]; int16_t N_RB_DL[MAX_NUM_CCs]; - lte_frame_type_t frame_type[MAX_NUM_CCs]; + frame_type_t frame_type[MAX_NUM_CCs]; uint32_t fdd_earfcn_DL[MAX_NUM_CCs]; uint32_t fdd_earfcn_UL[MAX_NUM_CCs]; int num_cc; @@ -427,7 +427,7 @@ typedef struct m2ap_register_enb_req_s { int32_t uplink_frequency_offset[MAX_NUM_CCs]; uint32_t Nid_cell[MAX_NUM_CCs]; int16_t N_RB_DL[MAX_NUM_CCs]; - lte_frame_type_t frame_type[MAX_NUM_CCs]; + frame_type_t frame_type[MAX_NUM_CCs]; uint32_t fdd_earfcn_DL[MAX_NUM_CCs]; uint32_t fdd_earfcn_UL[MAX_NUM_CCs]; int num_cc; diff --git a/openair2/COMMON/m3ap_messages_types.h b/openair2/COMMON/m3ap_messages_types.h index 21e24dd449..36ac8fcc9a 100644 --- a/openair2/COMMON/m3ap_messages_types.h +++ b/openair2/COMMON/m3ap_messages_types.h @@ -123,7 +123,7 @@ typedef struct m3ap_register_mce_req_s { int32_t uplink_frequency_offset[MAX_NUM_CCs]; uint32_t Nid_cell[MAX_NUM_CCs]; int16_t N_RB_DL[MAX_NUM_CCs]; - lte_frame_type_t frame_type[MAX_NUM_CCs]; + frame_type_t frame_type[MAX_NUM_CCs]; uint32_t fdd_earfcn_DL[MAX_NUM_CCs]; uint32_t fdd_earfcn_UL[MAX_NUM_CCs]; int num_cc; diff --git a/openair2/COMMON/phy_messages_types.h b/openair2/COMMON/phy_messages_types.h index 1f040a0a77..40e4678228 100644 --- a/openair2/COMMON/phy_messages_types.h +++ b/openair2/COMMON/phy_messages_types.h @@ -70,7 +70,7 @@ typedef struct CellInfo_s { //-------------------------------------------------------------------------------------------// // eNB: ENB_APP -> PHY messages typedef struct PhyConfigurationReq_s { - lte_frame_type_t frame_type[MAX_NUM_CCs]; + frame_type_t frame_type[MAX_NUM_CCs]; lte_prefix_type_t prefix_type[MAX_NUM_CCs]; uint32_t downlink_frequency[MAX_NUM_CCs]; int32_t uplink_frequency_offset[MAX_NUM_CCs]; diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index ac70dee092..5b214cf95a 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -188,7 +188,7 @@ typedef struct RrcConfigurationReq_s { uint32_t rrc_inactivity_timer_thres; // for testing, maybe change later paging_drx_t default_drx; int16_t nb_cc; - lte_frame_type_t frame_type[MAX_NUM_CCs]; + frame_type_t frame_type[MAX_NUM_CCs]; uint8_t tdd_config[MAX_NUM_CCs]; uint8_t tdd_config_s[MAX_NUM_CCs]; lte_prefix_type_t prefix_type[MAX_NUM_CCs]; @@ -339,7 +339,7 @@ typedef struct NbIoTRrcConfigurationReq_s { uint16_t mcc; uint16_t mnc; uint8_t mnc_digit_length; - lte_frame_type_t frame_type; + frame_type_t frame_type; uint8_t tdd_config; uint8_t tdd_config_s; lte_prefix_type_t prefix_type; diff --git a/openair2/COMMON/x2ap_messages_types.h b/openair2/COMMON/x2ap_messages_types.h index 9339ab12f3..cd092b6ca8 100644 --- a/openair2/COMMON/x2ap_messages_types.h +++ b/openair2/COMMON/x2ap_messages_types.h @@ -138,7 +138,7 @@ typedef struct x2ap_register_enb_req_s { int32_t uplink_frequency_offset[MAX_NUM_CCs]; uint32_t Nid_cell[MAX_NUM_CCs]; int16_t N_RB_DL[MAX_NUM_CCs]; - lte_frame_type_t frame_type[MAX_NUM_CCs]; + frame_type_t frame_type[MAX_NUM_CCs]; uint32_t fdd_earfcn_DL[MAX_NUM_CCs]; uint32_t fdd_earfcn_UL[MAX_NUM_CCs]; uint32_t subframeAssignment[MAX_NUM_CCs]; diff --git a/openair2/ENB_APP/RRC_config_tools.h b/openair2/ENB_APP/RRC_config_tools.h index 488441ff59..89cefeaa1f 100644 --- a/openair2/ENB_APP/RRC_config_tools.h +++ b/openair2/ENB_APP/RRC_config_tools.h @@ -38,7 +38,7 @@ typedef struct eutra_band_s { uint32_t ul_max; uint32_t dl_min; uint32_t dl_max; - lte_frame_type_t frame_type; + frame_type_t frame_type; } eutra_band_t; diff --git a/openair2/ENB_APP/flexran_agent_ran_api.c b/openair2/ENB_APP/flexran_agent_ran_api.c index 68d1f3311f..9926ec9e20 100644 --- a/openair2/ENB_APP/flexran_agent_ran_api.c +++ b/openair2/ENB_APP/flexran_agent_ran_api.c @@ -1352,7 +1352,7 @@ void flexran_agent_set_operating_bandwidth(mid_t mod_id, uint8_t cc_id, uint8_t } } -void flexran_agent_set_operating_frame_type(mid_t mod_id, uint8_t cc_id, lte_frame_type_t frame_type) { +void flexran_agent_set_operating_frame_type(mid_t mod_id, uint8_t cc_id, frame_type_t frame_type) { if (phy_is_present(mod_id, cc_id)) { RC.eNB[mod_id][cc_id]->frame_parms.frame_type = frame_type; } else { diff --git a/openair2/ENB_APP/flexran_agent_ran_api.h b/openair2/ENB_APP/flexran_agent_ran_api.h index 79115b0a16..c15865ccfd 100644 --- a/openair2/ENB_APP/flexran_agent_ran_api.h +++ b/openair2/ENB_APP/flexran_agent_ran_api.h @@ -433,7 +433,7 @@ void flexran_agent_set_operating_eutra_band(mid_t mod_id, uint8_t cc_id, uint8_t void flexran_agent_set_operating_bandwidth(mid_t mod_id, uint8_t cc_id, uint8_t N_RB); /*set frame type*/ -void flexran_agent_set_operating_frame_type(mid_t mod_id, uint8_t cc_id, lte_frame_type_t frame_type); +void flexran_agent_set_operating_frame_type(mid_t mod_id, uint8_t cc_id, frame_type_t frame_type); /*RRC status flexRAN*/ uint8_t flexran_get_rrc_status(mid_t mod_id, rnti_t rnti); diff --git a/openair2/GNB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c index 434a2896de..2c486ec832 100644 --- a/openair2/GNB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -346,7 +346,7 @@ void fix_scc(NR_ServingCellConfigCommon_t *scc,uint64_t ssbmap) { // prepare DL Allocation lists nr_rrc_config_dl_tda(scc); - lte_frame_type_t frame_type = get_frame_type((int)*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); + frame_type_t frame_type = get_frame_type((int)*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); if (frame_type == FDD) { ASN_STRUCT_FREE(asn_DEF_NR_TDD_UL_DL_ConfigCommon, scc->tdd_UL_DL_ConfigurationCommon); scc->tdd_UL_DL_ConfigurationCommon = NULL; diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c index b25efbb5d8..581930b83d 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.c @@ -3092,7 +3092,7 @@ int is_nr_DL_slot(NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon,slo else return(slot_in_period <= slots1+tdd_UL_DL_ConfigurationCommon->pattern2->nrofDownlinkSlots ? 1 : 0); } -int is_nr_UL_slot(NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon, slot_t slot, lte_frame_type_t frame_type) { +int is_nr_UL_slot(NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon, slot_t slot, frame_type_t frame_type) { int period,period1,period2=0; diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h index 0f2cb42b88..e8a3af2498 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac_common.h @@ -45,7 +45,7 @@ int16_t fill_dmrs_mask(NR_PDSCH_Config_t *pdsch_Config,int dmrs_TypeA_Position,i int is_nr_DL_slot(NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon,slot_t slotP); -int is_nr_UL_slot(NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon, slot_t slotP, lte_frame_type_t frame_type); +int is_nr_UL_slot(NR_TDD_UL_DL_ConfigCommon_t *tdd_UL_DL_ConfigurationCommon, slot_t slotP, frame_type_t frame_type); uint16_t nr_dci_size(const NR_BWP_DownlinkCommon_t *initialDLBWP, const NR_BWP_UplinkCommon_t *initialULBWP, diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c index 3b10167e03..bd693e4d88 100644 --- a/openair2/LAYER2/NR_MAC_UE/config_ue.c +++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c @@ -323,7 +323,7 @@ void config_common_ue(NR_UE_MAC_INST_t *mac, uint32_t band = *scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0]; mac->frequency_range = band<100?FR1:FR2; - lte_frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); + frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); // cell config diff --git a/openair2/LAYER2/NR_MAC_UE/mac_defs.h b/openair2/LAYER2/NR_MAC_UE/mac_defs.h index fc2c2d2c8b..99cbdf3292 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_defs.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_defs.h @@ -369,7 +369,7 @@ typedef struct { NR_ControlResourceSet_t *coreset[MAX_NUM_BWP][FAPI_NR_MAX_CORESET_PER_BWP]; NR_SearchSpace_t *SSpace[MAX_NUM_BWP][FAPI_NR_MAX_SS]; - lte_frame_type_t frame_type; + frame_type_t frame_type; /*BWP*/ // dedicated active DL BWP diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c index 6ba8629718..a2cbd4807f 100644 --- a/openair2/LAYER2/NR_MAC_gNB/config.c +++ b/openair2/LAYER2/NR_MAC_gNB/config.c @@ -233,7 +233,7 @@ void config_common(int Mod_idP, int ssb_SubcarrierOffset, rrc_pdsch_AntennaPorts uint32_t band = *scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0]; frequency_range_t frequency_range = band<100?FR1:FR2; - lte_frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); + frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); RC.nrmac[Mod_idP]->common_channels[0].frame_type = frame_type; // Cell configuration diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c index ca197b224d..3d17e966a9 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_RA.c @@ -399,7 +399,7 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP void nr_schedule_msg2(uint16_t rach_frame, uint16_t rach_slot, uint16_t *msg2_frame, uint16_t *msg2_slot, NR_ServingCellConfigCommon_t *scc, - lte_frame_type_t frame_type, + frame_type_t frame_type, uint16_t monitoring_slot_period, uint16_t monitoring_offset,uint8_t beam_index, uint8_t num_active_ssb, @@ -525,7 +525,7 @@ void nr_initiate_ra_proc(module_id_t module_idP, gNB_MAC_INST *nr_mac = RC.nrmac[module_idP]; NR_COMMON_channels_t *cc = &nr_mac->common_channels[CC_id]; NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon; - lte_frame_type_t frame_type = cc->frame_type; + frame_type_t frame_type = cc->frame_type; uint8_t total_RApreambles = MAX_NUM_NR_PRACH_PREAMBLES; uint8_t num_ssb_per_RO = scc->uplinkConfigCommon->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present; @@ -933,7 +933,7 @@ void nr_get_Msg3alloc(module_id_t module_id, uint16_t msg3_nb_rb = 8; // sdu has 6 or 8 bytes - lte_frame_type_t frame_type = RC.nrmac[module_id]->common_channels->frame_type; + frame_type_t frame_type = RC.nrmac[module_id]->common_channels->frame_type; int mu = ubwp ? ubwp->bwp_Common->genericParameters.subcarrierSpacing : diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c index 5aace1d0dc..7806d6011d 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c @@ -62,7 +62,7 @@ void calculate_preferred_dl_tda(module_id_t module_id, const NR_BWP_Downlink_t * /* there is a mixed slot only when in TDD */ NR_ServingCellConfigCommon_t *scc = nrmac->common_channels->ServingCellConfigCommon; - lte_frame_type_t frame_type = nrmac->common_channels->frame_type; + frame_type_t frame_type = nrmac->common_channels->frame_type; const int n = nr_slots_per_frame[*scc->ssbSubcarrierSpacing]; const NR_TDD_UL_DL_Pattern_t *tdd = scc->tdd_UL_DL_ConfigurationCommon ? &scc->tdd_UL_DL_ConfigurationCommon->pattern1 : NULL; diff --git a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c index 9273c38de3..7342864763 100644 --- a/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c +++ b/openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_ulsch.c @@ -55,7 +55,7 @@ void calculate_preferred_ul_tda(module_id_t module_id, const NR_BWP_Uplink_t *ub /* there is a mixed slot only when in TDD */ NR_ServingCellConfigCommon_t *scc = nrmac->common_channels->ServingCellConfigCommon; - lte_frame_type_t frame_type = nrmac->common_channels->frame_type; + frame_type_t frame_type = nrmac->common_channels->frame_type; const int n = nr_slots_per_frame[*scc->ssbSubcarrierSpacing]; NR_ServingCellConfigCommonSIB_t *scc_sib1 = get_softmodem_params()->sa ? diff --git a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h index 0f538131dd..0ed70444b1 100644 --- a/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h +++ b/openair2/LAYER2/NR_MAC_gNB/nr_mac_gNB.h @@ -202,7 +202,7 @@ typedef struct { int p_gNB; int Ncp; int nr_band; - lte_frame_type_t frame_type; + frame_type_t frame_type; uint64_t dl_CarrierFreq; NR_BCCH_BCH_Message_t *mib; NR_BCCH_DL_SCH_Message_t *sib1; diff --git a/openair2/M2AP/m2ap_MCE_defs.h b/openair2/M2AP/m2ap_MCE_defs.h index 5267232d69..73183e89c2 100644 --- a/openair2/M2AP/m2ap_MCE_defs.h +++ b/openair2/M2AP/m2ap_MCE_defs.h @@ -170,7 +170,7 @@ typedef struct m2ap_MCE_instance_s { int32_t uplink_frequency_offset[MAX_NUM_CCs]; uint32_t Nid_cell[MAX_NUM_CCs]; int16_t N_RB_DL[MAX_NUM_CCs]; - lte_frame_type_t frame_type[MAX_NUM_CCs]; + frame_type_t frame_type[MAX_NUM_CCs]; uint32_t fdd_earfcn_DL[MAX_NUM_CCs]; uint32_t fdd_earfcn_UL[MAX_NUM_CCs]; int num_cc; diff --git a/openair2/M2AP/m2ap_eNB_defs.h b/openair2/M2AP/m2ap_eNB_defs.h index b8f7e4b3c6..0b30c33d80 100644 --- a/openair2/M2AP/m2ap_eNB_defs.h +++ b/openair2/M2AP/m2ap_eNB_defs.h @@ -181,7 +181,7 @@ typedef struct m2ap_eNB_instance_s { int32_t uplink_frequency_offset[MAX_NUM_CCs]; uint32_t Nid_cell[MAX_NUM_CCs]; int16_t N_RB_DL[MAX_NUM_CCs]; - lte_frame_type_t frame_type[MAX_NUM_CCs]; + frame_type_t frame_type[MAX_NUM_CCs]; uint32_t fdd_earfcn_DL[MAX_NUM_CCs]; uint32_t fdd_earfcn_UL[MAX_NUM_CCs]; int num_cc; diff --git a/openair2/RRC/LTE/rrc_eNB_S1AP.c b/openair2/RRC/LTE/rrc_eNB_S1AP.c index 9b9e267828..f24c9ab1b6 100644 --- a/openair2/RRC/LTE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LTE/rrc_eNB_S1AP.c @@ -1757,7 +1757,7 @@ int rrc_eNB_process_PAGING_IND(MessageDef *msg_p, const char *msg_name, instance && RC.rrc[instance]->configuration.mnc[j] == S1AP_PAGING_IND(msg_p).plmn_identity[tai_size].mnc && RC.rrc[instance]->configuration.tac == S1AP_PAGING_IND(msg_p).tac[tai_size]) { for (uint8_t CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - lte_frame_type_t frame_type = RC.eNB[instance][CC_id]->frame_parms.frame_type; + frame_type_t frame_type = RC.eNB[instance][CC_id]->frame_parms.frame_type; /* get nB from configuration */ /* get default DRX cycle from configuration */ Tc = (uint8_t)RC.rrc[instance]->configuration.radioresourceconfig[CC_id].pcch_defaultPagingCycle; diff --git a/openair2/RRC/NR/nr_rrc_config.c b/openair2/RRC/NR/nr_rrc_config.c index bb2a180146..54fb5a168b 100644 --- a/openair2/RRC/NR/nr_rrc_config.c +++ b/openair2/RRC/NR/nr_rrc_config.c @@ -216,7 +216,7 @@ void prepare_sim_uecap(NR_UE_NR_Capability_t *cap, void nr_rrc_config_dl_tda(NR_ServingCellConfigCommon_t *scc){ - lte_frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); + frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); int curr_bwp = scc->downlinkConfigCommon->frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->carrierBandwidth; // coreset duration setting to be improved in the framework of RRC harmonization, potentially using a common function int len_coreset = 1; @@ -253,7 +253,7 @@ void nr_rrc_config_ul_tda(NR_ServingCellConfigCommon_t *scc, int min_fb_delay){ uint8_t DELTA[4]= {2,3,4,6}; // Delta parameter for Msg3 int mu = scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.subcarrierSpacing; - lte_frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); + frame_type_t frame_type = get_frame_type(*scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0], *scc->ssbSubcarrierSpacing); struct NR_PUSCH_TimeDomainResourceAllocation *pusch_timedomainresourceallocation = CALLOC(1,sizeof(struct NR_PUSCH_TimeDomainResourceAllocation)); pusch_timedomainresourceallocation->k2 = CALLOC(1,sizeof(long)); diff --git a/openair2/UTIL/OCG/OCG.h b/openair2/UTIL/OCG/OCG.h index 58cc7184e7..452581bb17 100644 --- a/openair2/UTIL/OCG/OCG.h +++ b/openair2/UTIL/OCG/OCG.h @@ -700,7 +700,7 @@ typedef struct { unsigned int n_frames_flag; // if set, then let the emulation goes to infinity node_function_t node_function[MAX_NUM_CCs]; node_timing_t node_timing[MAX_NUM_CCs]; - unsigned char frame_type[MAX_NUM_CCs]; //! LTE frame type (TDD=1, FDD=0). \note this should be converted to \ref lte_frame_type_t (header file reorganization needed) + unsigned char frame_type[MAX_NUM_CCs]; //! LTE frame type (TDD=1, FDD=0). \note this should be converted to \ref frame_type_t (header file reorganization needed) char *frame_type_name[MAX_NUM_CCs]; unsigned char tdd_config[MAX_NUM_CCs]; unsigned char tdd_config_S[MAX_NUM_CCs]; diff --git a/openair2/X2AP/x2ap_eNB_defs.h b/openair2/X2AP/x2ap_eNB_defs.h index 063302d03a..bd6092e0cb 100644 --- a/openair2/X2AP/x2ap_eNB_defs.h +++ b/openair2/X2AP/x2ap_eNB_defs.h @@ -172,7 +172,7 @@ typedef struct x2ap_eNB_instance_s { int32_t uplink_frequency_offset[MAX_NUM_CCs]; uint32_t Nid_cell[MAX_NUM_CCs]; int16_t N_RB_DL[MAX_NUM_CCs]; - lte_frame_type_t frame_type[MAX_NUM_CCs]; + frame_type_t frame_type[MAX_NUM_CCs]; uint32_t fdd_earfcn_DL[MAX_NUM_CCs]; uint32_t fdd_earfcn_UL[MAX_NUM_CCs]; uint32_t subframeAssignment[MAX_NUM_CCs]; diff --git a/openair3/M3AP/m3ap_MCE_defs.h b/openair3/M3AP/m3ap_MCE_defs.h index 18ad70a408..4dcb2b4db0 100644 --- a/openair3/M3AP/m3ap_MCE_defs.h +++ b/openair3/M3AP/m3ap_MCE_defs.h @@ -170,7 +170,7 @@ typedef struct m3ap_MCE_instance_s { int32_t uplink_frequency_offset[MAX_NUM_CCs]; uint32_t Nid_cell[MAX_NUM_CCs]; int16_t N_RB_DL[MAX_NUM_CCs]; - lte_frame_type_t frame_type[MAX_NUM_CCs]; + frame_type_t frame_type[MAX_NUM_CCs]; uint32_t fdd_earfcn_DL[MAX_NUM_CCs]; uint32_t fdd_earfcn_UL[MAX_NUM_CCs]; int num_cc; diff --git a/openair3/M3AP/m3ap_MME_defs.h b/openair3/M3AP/m3ap_MME_defs.h index 3b5725655d..6608587cc3 100644 --- a/openair3/M3AP/m3ap_MME_defs.h +++ b/openair3/M3AP/m3ap_MME_defs.h @@ -170,7 +170,7 @@ typedef struct m3ap_MME_instance_s { int32_t uplink_frequency_offset[MAX_NUM_CCs]; uint32_t Nid_cell[MAX_NUM_CCs]; int16_t N_RB_DL[MAX_NUM_CCs]; - lte_frame_type_t frame_type[MAX_NUM_CCs]; + frame_type_t frame_type[MAX_NUM_CCs]; uint32_t fdd_earfcn_DL[MAX_NUM_CCs]; uint32_t fdd_earfcn_UL[MAX_NUM_CCs]; int num_cc; diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 9010a40bf9..eaeb22d096 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -111,7 +111,7 @@ typedef struct eutra_band_s { uint32_t ul_max; uint32_t dl_min; uint32_t dl_max; - lte_frame_type_t frame_type; + frame_type_t frame_type; } eutra_band_t; typedef struct band_info_s { From 32b2f76c578ae6f2443d6cb9f3aac6f63a9a6625 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 20 Apr 2022 14:30:13 +0200 Subject: [PATCH 131/150] fix(ci): first port to the new Eurecom infrastructure: * Proxy no longer required for git cloning * Most of the IP addresses have been changed - Remaining --> 192.168.18.89 for amariue Signed-off-by: Raphael Defosseux --- ci-scripts/build_fr1_template.yaml | 2 +- ci-scripts/ci_ueinfra.yaml | 6 +-- ci-scripts/cls_containerize.py | 46 +++++++++---------- .../enb.band38.lte_2x2.100PRB.usrpn310.conf | 2 +- ...nb.band38.lte_2x2_tm2.100PRB.usrpn310.conf | 2 +- .../enb.band38.nsa_2x2.100PRB.usrpn310.conf | 2 +- ...sci_gnb.band78.sa.fr1.106PRB.usrpn310.conf | 2 +- ...oxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf | 2 +- .../gNB_SA_n78_106PRB.2x2_usrpn310.conf | 6 +-- .../gNB_SA_n78_133PRB.2x2_usrpn310.conf | 6 +-- .../gnb.band78.nsa_2x2.106PRB.usrpn310.conf | 2 +- ...and78.sa.fr1.106PRB.2x2.usrpn310.asue.conf | 2 +- ...gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf | 2 +- .../gnb.band78.sa.fr1.106PRB.usrpn310.conf | 2 +- ...gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf | 2 +- ci-scripts/main.py | 14 +++--- ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml | 4 +- .../fr1_nsa_2x2_quectel_attach_detach.xml | 4 +- .../xml_files/fr1_sa_amarisoft_ue_1x.xml | 2 +- ci-scripts/xml_files/fr1_sa_oaiue_b200.xml | 2 +- ci-scripts/xml_files/fr1_sa_oaiue_n310.xml | 4 +- ci-scripts/xml_files/fr1_sa_oaiue_x300.xml | 2 +- ci-scripts/xml_files/fr1_sa_quectel.xml | 2 +- .../xml_files/fr1_sa_quectel_162prb.xml | 2 +- .../xml_files/fr1_sa_quectel_stages.xml | 2 +- .../fr1_sa_quectel_stages_162prb.xml | 2 +- ci-scripts/xml_files/lte_2x2_tm1_quectel.xml | 2 +- ci-scripts/xml_files/lte_2x2_tm2_quectel.xml | 2 +- .../4g_rfsimulator_fdd_05MHz/README.md | 2 +- .../docker-compose.yml | 2 +- .../docker-compose.yml | 2 +- .../docker-compose.yml | 2 +- .../docker-compose.yml | 2 +- .../5g_f1_rfsimulator/docker-compose.yaml | 2 +- .../5g_fdd_rfsimulator/docker-compose.yaml | 2 +- ci-scripts/yaml_files/5g_l2sim_tdd/README.md | 8 ++-- .../5g_l2sim_tdd/docker-compose.yaml | 6 +-- .../5g_rfsimulator/docker-compose.yaml | 2 +- .../fr1_epc_20897/docker-compose.yml | 2 +- .../magma_nsa_20897/docker-compose.yml | 2 +- .../nsa_b200_enb/docker-compose.yml | 4 +- .../nsa_b200_gnb/docker-compose.yml | 4 +- 42 files changed, 86 insertions(+), 86 deletions(-) diff --git a/ci-scripts/build_fr1_template.yaml b/ci-scripts/build_fr1_template.yaml index 02e49bc4b5..5c7b2fc6f4 100755 --- a/ci-scripts/build_fr1_template.yaml +++ b/ci-scripts/build_fr1_template.yaml @@ -14,7 +14,7 @@ steps: ADB: #on Caracal - ADBIPAddress : 192.168.18.196 + ADBIPAddress : 172.21.16.132 ADBUserName : oaici ADBPassword : KkexF6CErOi1fNuebCPsuIVK diff --git a/ci-scripts/ci_ueinfra.yaml b/ci-scripts/ci_ueinfra.yaml index 89bda5fa92..b58e14ff6a 100644 --- a/ci-scripts/ci_ueinfra.yaml +++ b/ci-scripts/ci_ueinfra.yaml @@ -12,7 +12,7 @@ idefix: LogStore : /media/usb-drive/ci_qlogs PLMN : 22201 UENetwork : wwan0 - HostIPAddress : 192.168.18.188 + HostIPAddress : 172.21.16.135 HostUsername : oaicicd HostPassword : oaicicd HostSourceCodePath : none @@ -32,7 +32,7 @@ nrmodule2_quectel: LogStore : /media/ci_qlogs PLMN : 20897 UENetwork : wwan0 - HostIPAddress : 192.168.18.189 + HostIPAddress : 172.21.16.139 HostUsername : nrmodule2 HostPassword : linux HostSourceCodePath : none @@ -97,7 +97,7 @@ dummy: DetachScript : '' PLMN : 22201 UENetwork : wwan0 - HostIPAddress : 192.168.18.188 + HostIPAddress : 172.21.16.135 HostUsername : oaicicd HostPassword : oaicicd HostSourceCodePath : none diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 8092febe39..89a3ac586d 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -243,7 +243,7 @@ class Containerize(): # Build the base image only on Push Events (not on Merge Requests) # On when the base image docker file is being modified. if forceBaseImageBuild: - mySSH.command(self.cli + ' build ' + self.cliBuildOptions + ' --target ' + baseImage + ' --tag ' + baseImage + ':' + baseTag + ' --file docker/Dockerfile.base' + self.dockerfileprefix + ' --build-arg NEEDED_GIT_PROXY="http://proxy.eurecom.fr:8080" . > cmake_targets/log/ran-base.log 2>&1', '\$', 1600) + mySSH.command(self.cli + ' build ' + self.cliBuildOptions + ' --target ' + baseImage + ' --tag ' + baseImage + ':' + baseTag + ' --file docker/Dockerfile.base' + self.dockerfileprefix + ' . > cmake_targets/log/ran-base.log 2>&1', '\$', 1600) # First verify if the base image was properly created. status = True mySSH.command(self.cli + ' image inspect --format=\'Size = {{.Size}} bytes\' ' + baseImage + ':' + baseTag, '\$', 5) @@ -1146,19 +1146,19 @@ class Containerize(): mySSH.open(ipAddr, userName, password) # Check if route to asterix gnb exists mySSH.command('ip route | grep --colour=never "192.168.68.64/26"', '\$', 10) - result = re.search('192.168.18.194', mySSH.getBefore()) + result = re.search('172.21.16.127', mySSH.getBefore()) if result is None: - mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.64/26 via 192.168.18.194 dev eno1', '\$', 10) + mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.64/26 via 172.21.16.127 dev eno1', '\$', 10) # Check if route to obelix enb exists mySSH.command('ip route | grep --colour=never "192.168.68.128/26"', '\$', 10) - result = re.search('192.168.18.193', mySSH.getBefore()) + result = re.search('172.21.16.128', mySSH.getBefore()) if result is None: - mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 192.168.18.193 dev eno1', '\$', 10) + mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 172.21.16.128 dev eno1', '\$', 10) # Check if route to nepes gnb exists mySSH.command('ip route | grep --colour=never "192.168.68.192/26"', '\$', 10) - result = re.search('192.168.18.209', mySSH.getBefore()) + result = re.search('172.21.16.137', mySSH.getBefore()) if result is None: - mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.192/26 via 192.168.18.209 dev eno1', '\$', 10) + mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.192/26 via 172.21.16.137 dev eno1', '\$', 10) # Check if forwarding is enabled mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10) result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore()) @@ -1174,19 +1174,19 @@ class Containerize(): mySSH.open(ipAddr, userName, password) # Check if route to porcepix epc exists mySSH.command('ip route | grep --colour=never "192.168.61.192/26"', '\$', 10) - result = re.search('192.168.18.210', mySSH.getBefore()) + result = re.search('172.21.16.136', mySSH.getBefore()) if result is None: - mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 192.168.18.210 dev em1', '\$', 10) + mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 172.21.16.136 dev em1', '\$', 10) # Check if route to porcepix cn5g exists mySSH.command('ip route | grep --colour=never "192.168.70.128/26"', '\$', 10) - result = re.search('192.168.18.210', mySSH.getBefore()) + result = re.search('172.21.16.136', mySSH.getBefore()) if result is None: - mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.70.128/26 via 192.168.18.210 dev em1', '\$', 10) + mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.70.128/26 via 172.21.16.136 dev em1', '\$', 10) # Check if X2 route to obelix enb exists mySSH.command('ip route | grep --colour=never "192.168.68.128/26"', '\$', 10) - result = re.search('192.168.18.193', mySSH.getBefore()) + result = re.search('172.21.16.128', mySSH.getBefore()) if result is None: - mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 192.168.18.193 dev em1', '\$', 10) + mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 172.21.16.128 dev em1', '\$', 10) # Check if forwarding is enabled mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10) result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore()) @@ -1202,19 +1202,19 @@ class Containerize(): mySSH.open(ipAddr, userName, password) # Check if route to porcepix epc exists mySSH.command('ip route | grep --colour=never "192.168.61.192/26"', '\$', 10) - result = re.search('192.168.18.210', mySSH.getBefore()) + result = re.search('172.21.16.136', mySSH.getBefore()) if result is None: - mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 192.168.18.210 dev eno1', '\$', 10) + mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 172.21.16.136 dev eno1', '\$', 10) # Check if X2 route to asterix gnb exists mySSH.command('ip route | grep --colour=never "192.168.68.64/26"', '\$', 10) - result = re.search('192.168.18.194', mySSH.getBefore()) + result = re.search('172.21.16.127', mySSH.getBefore()) if result is None: - mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.64/26 via 192.168.18.194 dev eno1', '\$', 10) + mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.64/26 via 172.21.16.127 dev eno1', '\$', 10) # Check if X2 route to nepes gnb exists mySSH.command('ip route | grep --colour=never "192.168.68.192/26"', '\$', 10) - result = re.search('192.168.18.209', mySSH.getBefore()) + result = re.search('172.21.16.137', mySSH.getBefore()) if result is None: - mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.192/26 via 192.168.18.209 dev eno1', '\$', 10) + mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.192/26 via 172.21.16.137 dev eno1', '\$', 10) # Check if forwarding is enabled mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10) result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore()) @@ -1230,14 +1230,14 @@ class Containerize(): mySSH.open(ipAddr, userName, password) # Check if route to porcepix epc exists mySSH.command('ip route | grep --colour=never "192.168.61.192/26"', '\$', 10) - result = re.search('192.168.18.210', mySSH.getBefore()) + result = re.search('172.21.16.136', mySSH.getBefore()) if result is None: - mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 192.168.18.210 dev enp0s31f6', '\$', 10) + mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.61.192/26 via 172.21.16.136 dev enp0s31f6', '\$', 10) # Check if X2 route to obelix enb exists mySSH.command('ip route | grep --colour=never "192.168.68.128/26"', '\$', 10) - result = re.search('192.168.18.193', mySSH.getBefore()) + result = re.search('172.21.16.128', mySSH.getBefore()) if result is None: - mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 192.168.18.193 dev enp0s31f6', '\$', 10) + mySSH.command('echo ' + password + ' | sudo -S ip route add 192.168.68.128/26 via 172.21.16.128 dev enp0s31f6', '\$', 10) # Check if forwarding is enabled mySSH.command('sysctl net.ipv4.conf.all.forwarding', '\$', 10) result = re.search('net.ipv4.conf.all.forwarding = 1', mySSH.getBefore()) diff --git a/ci-scripts/conf_files/enb.band38.lte_2x2.100PRB.usrpn310.conf b/ci-scripts/conf_files/enb.band38.lte_2x2.100PRB.usrpn310.conf index fe2e031acb..a7100a97e3 100644 --- a/ci-scripts/conf_files/enb.band38.lte_2x2.100PRB.usrpn310.conf +++ b/ci-scripts/conf_files/enb.band38.lte_2x2.100PRB.usrpn310.conf @@ -237,7 +237,7 @@ RUs = ( max_pdschReferenceSignalPower = -27; max_rxgain = 75; eNB_instances = [0]; - sdr_addrs = "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2"; + sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.20.2,second_addr=192.168.10.2"; } ); diff --git a/ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf b/ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf index a0742c57a6..1f358c1571 100644 --- a/ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf +++ b/ci-scripts/conf_files/enb.band38.lte_2x2_tm2.100PRB.usrpn310.conf @@ -237,7 +237,7 @@ RUs = ( max_pdschReferenceSignalPower = -27; max_rxgain = 75; eNB_instances = [0]; - sdr_addrs = "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2"; + sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.20.2,second_addr=192.168.10.2"; } ); diff --git a/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf b/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf index dfc9beda71..f7088aee52 100644 --- a/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf +++ b/ci-scripts/conf_files/enb.band38.nsa_2x2.100PRB.usrpn310.conf @@ -237,7 +237,7 @@ RUs = ( max_pdschReferenceSignalPower = -27; max_rxgain = 75; eNB_instances = [0]; - sdr_addrs = "mgmt_addr=192.168.18.241,addr=192.168.20.2,second_addr=192.168.10.2"; + sdr_addrs = "mgmt_addr=172.21.19.13,addr=192.168.20.2,second_addr=192.168.10.2"; } ); diff --git a/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf index 40f6f911b1..51ffb1d5cd 100644 --- a/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf +++ b/ci-scripts/conf_files/episci/episci_gnb.band78.sa.fr1.106PRB.usrpn310.conf @@ -239,7 +239,7 @@ RUs = ( #beamforming 1x4 matrix: bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000]; #clock_src = "external"; - sdr_addrs = "mgmt_addr=192.168.18.240,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" + sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" } ); diff --git a/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf index edcd4f06ff..f80ce3751a 100644 --- a/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf +++ b/ci-scripts/conf_files/episci/proxy_gnb.band78.sa.fr1.106PRB.usrpn310.conf @@ -240,7 +240,7 @@ RUs = ( #beamforming 1x4 matrix: bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000]; #clock_src = "external"; - sdr_addrs = "mgmt_addr=192.168.18.240,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" + sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" } ); diff --git a/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf b/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf index 33ab30887f..d6edc09286 100644 --- a/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf +++ b/ci-scripts/conf_files/gNB_SA_n78_106PRB.2x2_usrpn310.conf @@ -209,9 +209,9 @@ gNBs = { GNB_INTERFACE_NAME_FOR_NG_AMF = "em1"; - GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.18.194/24"; + GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.127/24"; GNB_INTERFACE_NAME_FOR_NGU = "em1"; - GNB_IPV4_ADDRESS_FOR_NGU = "192.168.18.194/24"; + GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.127/24"; GNB_PORT_FOR_S1U = 2152; # Spec 2152 }; @@ -258,7 +258,7 @@ RUs = ( ## beamforming 4x4 matrix: #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff]; - sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" + sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" } ); diff --git a/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf b/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf index 4a5eaec89b..7f4b11c35d 100644 --- a/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf +++ b/ci-scripts/conf_files/gNB_SA_n78_133PRB.2x2_usrpn310.conf @@ -206,9 +206,9 @@ gNBs = { GNB_INTERFACE_NAME_FOR_NG_AMF = "em1"; - GNB_IPV4_ADDRESS_FOR_NG_AMF = "192.168.18.194/24"; + GNB_IPV4_ADDRESS_FOR_NG_AMF = "172.21.16.127/24"; GNB_INTERFACE_NAME_FOR_NGU = "em1"; - GNB_IPV4_ADDRESS_FOR_NGU = "192.168.18.194/24"; + GNB_IPV4_ADDRESS_FOR_NGU = "172.21.16.127/24"; GNB_PORT_FOR_S1U = 2152; # Spec 2152 }; @@ -254,7 +254,7 @@ RUs = ( ## beamforming 4x4 matrix: #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff]; - sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" + sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" } ); diff --git a/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf index 21863dcfc7..e3bd49e7fc 100644 --- a/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf +++ b/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf @@ -230,7 +230,7 @@ RUs = ( bf_weights = [0x00007fff, 0x00007fff]; #clock_src = "external"; sf_extension = 0 - sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" + sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" } ); diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf index 60fb16318f..5e6b3fb217 100644 --- a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf +++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.asue.conf @@ -264,7 +264,7 @@ RUs = ( ## beamforming 4x4 matrix: #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff]; sf_extension = 0 - sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" + sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" } ); diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf index 1d7c4b57f0..8489008300 100644 --- a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf +++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.2x2.usrpn310.conf @@ -261,7 +261,7 @@ RUs = ( ## beamforming 4x4 matrix: #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff]; sf_extension = 0 - sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" + sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" } ); diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf index e2b331939b..9e1f499f03 100644 --- a/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf +++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.106PRB.usrpn310.conf @@ -263,7 +263,7 @@ RUs = ( ## beamforming 4x4 matrix: #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff]; sf_extension = 0 - sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" + sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" } ); diff --git a/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf index 324b3d2ce1..ce63578dd3 100644 --- a/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf +++ b/ci-scripts/conf_files/gnb.band78.sa.fr1.162PRB.2x2.usrpn310.conf @@ -262,7 +262,7 @@ RUs = ( ## beamforming 4x4 matrix: #bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff]; sf_extension = 0 - sdr_addrs = "mgmt_addr=192.168.18.252,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" + sdr_addrs = "mgmt_addr=172.21.19.14,addr=192.168.10.2,second_addr=192.168.20.2,clock_source=internal,time_source=internal" } ); diff --git a/ci-scripts/main.py b/ci-scripts/main.py index c838c3740d..65f9fbb0da 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -779,19 +779,19 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re HTML.CreateHtmlTabHeader() # On CI bench w/ containers, we need to validate if IP routes are set - if EPC.IPAddress == '192.168.18.210': + if EPC.IPAddress == '172.21.16.136': CONTAINERS.CheckAndAddRoute('porcepix', EPC.IPAddress, EPC.UserName, EPC.Password) - if CONTAINERS.eNBIPAddress == '192.168.18.194': + if CONTAINERS.eNBIPAddress == '172.21.16.127': CONTAINERS.CheckAndAddRoute('asterix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword) - if CONTAINERS.eNB1IPAddress == '192.168.18.194': + if CONTAINERS.eNB1IPAddress == '172.21.16.127': CONTAINERS.CheckAndAddRoute('asterix', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password) - if CONTAINERS.eNBIPAddress == '192.168.18.193': + if CONTAINERS.eNBIPAddress == '172.21.16.128': CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword) - if CONTAINERS.eNB1IPAddress == '192.168.18.193': + if CONTAINERS.eNB1IPAddress == '172.21.16.128': CONTAINERS.CheckAndAddRoute('obelix', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password) - if CONTAINERS.eNBIPAddress == '192.168.18.209': + if CONTAINERS.eNBIPAddress == '172.21.16.137': CONTAINERS.CheckAndAddRoute('nepes', CONTAINERS.eNBIPAddress, CONTAINERS.eNBUserName, CONTAINERS.eNBPassword) - if CONTAINERS.eNB1IPAddress == '192.168.18.209': + if CONTAINERS.eNB1IPAddress == '172.21.16.137': CONTAINERS.CheckAndAddRoute('nepes', CONTAINERS.eNB1IPAddress, CONTAINERS.eNB1UserName, CONTAINERS.eNB1Password) CiTestObj.FailReportCnt = 0 diff --git a/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml b/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml index 56694920ba..a4dcb58e8b 100644 --- a/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml +++ b/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml @@ -68,7 +68,7 @@ lte yes yes - 192.168.18.241 + 172.21.19.13 @@ -81,7 +81,7 @@ nr yes datalog_rt_stats.2x2.yaml - 192.168.18.252 + 172.21.19.14 diff --git a/ci-scripts/xml_files/fr1_nsa_2x2_quectel_attach_detach.xml b/ci-scripts/xml_files/fr1_nsa_2x2_quectel_attach_detach.xml index 840521481e..335fe873a1 100644 --- a/ci-scripts/xml_files/fr1_nsa_2x2_quectel_attach_detach.xml +++ b/ci-scripts/xml_files/fr1_nsa_2x2_quectel_attach_detach.xml @@ -87,7 +87,7 @@ lte yes yes - 192.168.18.241 + 172.21.19.13 @@ -100,7 +100,7 @@ nr yes datalog_rt_stats.2x2.yaml - 192.168.18.252 + 172.21.19.14 diff --git a/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml b/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml index 194ed4e453..ea031a0174 100644 --- a/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml +++ b/ci-scripts/xml_files/fr1_sa_amarisoft_ue_1x.xml @@ -52,7 +52,7 @@ yes yes datalog_rt_stats.2x2.yaml - 192.168.18.252 + 172.21.19.14 diff --git a/ci-scripts/xml_files/fr1_sa_oaiue_b200.xml b/ci-scripts/xml_files/fr1_sa_oaiue_b200.xml index 55268b909d..5995f75a64 100644 --- a/ci-scripts/xml_files/fr1_sa_oaiue_b200.xml +++ b/ci-scripts/xml_files/fr1_sa_oaiue_b200.xml @@ -60,7 +60,7 @@ nr yes yes - 192.168.18.252 + 172.21.19.14 diff --git a/ci-scripts/xml_files/fr1_sa_oaiue_n310.xml b/ci-scripts/xml_files/fr1_sa_oaiue_n310.xml index 53b696c6eb..468005f54f 100644 --- a/ci-scripts/xml_files/fr1_sa_oaiue_n310.xml +++ b/ci-scripts/xml_files/fr1_sa_oaiue_n310.xml @@ -42,7 +42,7 @@ Initialize_OAI_UE Initialize OAI UE (N310) nr - --sa -O ../../../ci-scripts/conf_files/ue.sa.conf --usrp-args "mgmt_addr=192.168.18.241,addr=192.168.10.2" --numerology 1 -r 106 --band 78 -C 3319680000 --nokrnmod 1 --ue-txgain 0 --ue-rxgain 70 --ue-fo-compensation --log_config.global_log_options level,nocolor,time + --sa -O ../../../ci-scripts/conf_files/ue.sa.conf --usrp-args "mgmt_addr=172.21.19.13,addr=192.168.10.2" --numerology 1 -r 106 --band 78 -C 3319680000 --nokrnmod 1 --ue-txgain 0 --ue-rxgain 70 --ue-fo-compensation --log_config.global_log_options level,nocolor,time @@ -60,7 +60,7 @@ nr yes yes - 192.168.18.252 + 172.21.19.14 diff --git a/ci-scripts/xml_files/fr1_sa_oaiue_x300.xml b/ci-scripts/xml_files/fr1_sa_oaiue_x300.xml index 8c2f7052e4..ef001a7518 100644 --- a/ci-scripts/xml_files/fr1_sa_oaiue_x300.xml +++ b/ci-scripts/xml_files/fr1_sa_oaiue_x300.xml @@ -60,7 +60,7 @@ nr yes yes - 192.168.18.252 + 172.21.19.14 diff --git a/ci-scripts/xml_files/fr1_sa_quectel.xml b/ci-scripts/xml_files/fr1_sa_quectel.xml index 576456ebc9..4d4edab56b 100644 --- a/ci-scripts/xml_files/fr1_sa_quectel.xml +++ b/ci-scripts/xml_files/fr1_sa_quectel.xml @@ -70,7 +70,7 @@ yes yes datalog_rt_stats.2x2.yaml - 192.168.18.252 + 172.21.19.14 diff --git a/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml b/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml index c5f2ddad5f..23eaccfcfd 100644 --- a/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml +++ b/ci-scripts/xml_files/fr1_sa_quectel_162prb.xml @@ -68,7 +68,7 @@ yes yes datalog_rt_stats.2x2.yaml - 192.168.18.252 + 172.21.19.14 diff --git a/ci-scripts/xml_files/fr1_sa_quectel_stages.xml b/ci-scripts/xml_files/fr1_sa_quectel_stages.xml index 2707fd4ebf..603f3f919b 100644 --- a/ci-scripts/xml_files/fr1_sa_quectel_stages.xml +++ b/ci-scripts/xml_files/fr1_sa_quectel_stages.xml @@ -74,7 +74,7 @@ yes yes datalog_rt_stats.2x2.yaml - 192.168.18.252 + 172.21.19.14 diff --git a/ci-scripts/xml_files/fr1_sa_quectel_stages_162prb.xml b/ci-scripts/xml_files/fr1_sa_quectel_stages_162prb.xml index 661bcb32fe..9371e46ec9 100644 --- a/ci-scripts/xml_files/fr1_sa_quectel_stages_162prb.xml +++ b/ci-scripts/xml_files/fr1_sa_quectel_stages_162prb.xml @@ -74,7 +74,7 @@ yes yes datalog_rt_stats.2x2.yaml - 192.168.18.252 + 172.21.19.14 diff --git a/ci-scripts/xml_files/lte_2x2_tm1_quectel.xml b/ci-scripts/xml_files/lte_2x2_tm1_quectel.xml index 11c4abce1b..6aa53200c8 100644 --- a/ci-scripts/xml_files/lte_2x2_tm1_quectel.xml +++ b/ci-scripts/xml_files/lte_2x2_tm1_quectel.xml @@ -65,7 +65,7 @@ lte yes yes - 192.168.18.241 + 172.21.19.13 diff --git a/ci-scripts/xml_files/lte_2x2_tm2_quectel.xml b/ci-scripts/xml_files/lte_2x2_tm2_quectel.xml index 714cf51a9b..84aa87aa23 100644 --- a/ci-scripts/xml_files/lte_2x2_tm2_quectel.xml +++ b/ci-scripts/xml_files/lte_2x2_tm2_quectel.xml @@ -65,7 +65,7 @@ lte yes yes - 192.168.18.241 + 172.21.19.13 diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md index 400559d269..be0d63838b 100644 --- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md +++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md @@ -505,7 +505,7 @@ In my traffic test, I was able to ping outside of my local network. in SPGW-C config: ```yaml - DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129 + DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100 DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4 PUSH_PROTOCOL_OPTION: 'true' ``` diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml index b15e794c10..a260857a34 100644 --- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml +++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/docker-compose.yml @@ -115,7 +115,7 @@ services: TZ: Europe/Paris SGW_INTERFACE_NAME_FOR_S11: eth0 PGW_INTERFACE_NAME_FOR_SX: eth0 - DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129 + DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100 DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4 PUSH_PROTOCOL_OPTION: 'true' APN_NI_1: oai.ipv4 diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml index e1e992c94c..3f63953b0e 100644 --- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml +++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_10MHz/docker-compose.yml @@ -115,7 +115,7 @@ services: TZ: Europe/Paris SGW_INTERFACE_NAME_FOR_S11: eth0 PGW_INTERFACE_NAME_FOR_SX: eth0 - DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129 + DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100 DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4 PUSH_PROTOCOL_OPTION: 'true' APN_NI_1: oai.ipv4 diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml index ad665813f2..1165400273 100644 --- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml +++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_20MHz/docker-compose.yml @@ -115,7 +115,7 @@ services: TZ: Europe/Paris SGW_INTERFACE_NAME_FOR_S11: eth0 PGW_INTERFACE_NAME_FOR_SX: eth0 - DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129 + DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100 DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4 PUSH_PROTOCOL_OPTION: 'true' APN_NI_1: oai.ipv4 diff --git a/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml b/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml index ffa92bac49..86f6c80b59 100644 --- a/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml +++ b/ci-scripts/yaml_files/4g_rfsimulator_tdd_05MHz/docker-compose.yml @@ -115,7 +115,7 @@ services: TZ: Europe/Paris SGW_INTERFACE_NAME_FOR_S11: eth0 PGW_INTERFACE_NAME_FOR_SX: eth0 - DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129 + DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100 DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4 PUSH_PROTOCOL_OPTION: 'true' APN_NI_1: oai.ipv4 diff --git a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml index 74a23905f0..d52b228ec6 100644 --- a/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_f1_rfsimulator/docker-compose.yaml @@ -120,7 +120,7 @@ services: - SMF_INTERFACE_PORT_FOR_SBI=80 - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - SMF_API_VERSION=v1 - - DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129 + - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - AMF_IPV4_ADDRESS=0.0.0.0 - AMF_PORT=80 diff --git a/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml index 3e46adb9e7..7758c39592 100644 --- a/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_fdd_rfsimulator/docker-compose.yaml @@ -120,7 +120,7 @@ services: - SMF_INTERFACE_PORT_FOR_SBI=80 - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - SMF_API_VERSION=v1 - - DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129 + - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - AMF_IPV4_ADDRESS=0.0.0.0 - AMF_PORT=80 diff --git a/ci-scripts/yaml_files/5g_l2sim_tdd/README.md b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md index 531f2406ef..f1e1287995 100644 --- a/ci-scripts/yaml_files/5g_l2sim_tdd/README.md +++ b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md @@ -326,16 +326,16 @@ Removing network l2sim-oai-traffic-net In the `SMF` section, provide your own DNS IP address: ```yaml - DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129 + DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 ``` -In the `gNB` section, provide your docker-host primary IP address and interface name: in our case `192.168.18.193` and `eno1`. +In the `gNB` section, provide your docker-host primary IP address and interface name: in our case `172.21.16.128` and `eno1`. ```yaml GNB_NGA_IF_NAME: eno1 - GNB_NGA_IP_ADDRESS: 192.168.18.193 + GNB_NGA_IP_ADDRESS: 172.21.16.128 GNB_NGU_IF_NAME: eno1 - GNB_NGU_IP_ADDRESS: 192.168.18.193 + GNB_NGU_IP_ADDRESS: 172.21.16.128 ``` Same thing in the `nr-ue` section: diff --git a/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml b/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml index c899f8cc7e..a28b640e1a 100644 --- a/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_l2sim_tdd/docker-compose.yaml @@ -120,7 +120,7 @@ services: - SMF_INTERFACE_PORT_FOR_SBI=80 - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - SMF_API_VERSION=v1 - - DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129 + - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - AMF_IPV4_ADDRESS=0.0.0.0 - AMF_PORT=80 @@ -241,9 +241,9 @@ services: NSSAI_SD1: 112233 AMF_IP_ADDRESS: 192.168.71.132 GNB_NGA_IF_NAME: eno1 - GNB_NGA_IP_ADDRESS: 192.168.18.193 + GNB_NGA_IP_ADDRESS: 172.21.16.128 GNB_NGU_IF_NAME: eno1 - GNB_NGU_IP_ADDRESS: 192.168.18.193 + GNB_NGU_IP_ADDRESS: 172.21.16.128 LOCAL_S_IF_NAME: 'lo:' REMOTE_S_ADDRESS: 127.0.0.1 LOCAL_S_ADDRESS: 127.0.0.2 diff --git a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml index f27ec3050d..696d8c6698 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml +++ b/ci-scripts/yaml_files/5g_rfsimulator/docker-compose.yaml @@ -120,7 +120,7 @@ services: - SMF_INTERFACE_PORT_FOR_SBI=80 - SMF_INTERFACE_HTTP2_PORT_FOR_SBI=9090 - SMF_API_VERSION=v1 - - DEFAULT_DNS_IPV4_ADDRESS=192.168.18.129 + - DEFAULT_DNS_IPV4_ADDRESS=172.21.3.100 - DEFAULT_DNS_SEC_IPV4_ADDRESS=4.4.4.4 - AMF_IPV4_ADDRESS=0.0.0.0 - AMF_PORT=80 diff --git a/ci-scripts/yaml_files/fr1_epc_20897/docker-compose.yml b/ci-scripts/yaml_files/fr1_epc_20897/docker-compose.yml index a3675dc78e..91d15b5251 100644 --- a/ci-scripts/yaml_files/fr1_epc_20897/docker-compose.yml +++ b/ci-scripts/yaml_files/fr1_epc_20897/docker-compose.yml @@ -132,7 +132,7 @@ services: TZ: Europe/Paris SGW_INTERFACE_NAME_FOR_S11: eth0 PGW_INTERFACE_NAME_FOR_SX: eth0 - DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129 + DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100 DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4 PUSH_PROTOCOL_OPTION: 'true' APN_NI_1: oai.ipv4 diff --git a/ci-scripts/yaml_files/magma_nsa_20897/docker-compose.yml b/ci-scripts/yaml_files/magma_nsa_20897/docker-compose.yml index df14e900e7..f320e7e3df 100644 --- a/ci-scripts/yaml_files/magma_nsa_20897/docker-compose.yml +++ b/ci-scripts/yaml_files/magma_nsa_20897/docker-compose.yml @@ -116,7 +116,7 @@ services: TZ: Europe/Paris SGW_INTERFACE_NAME_FOR_S11: eth0 PGW_INTERFACE_NAME_FOR_SX: eth0 - DEFAULT_DNS_IPV4_ADDRESS: 192.168.18.129 + DEFAULT_DNS_IPV4_ADDRESS: 172.21.3.100 DEFAULT_DNS_SEC_IPV4_ADDRESS: 8.8.4.4 PUSH_PROTOCOL_OPTION: 'true' APN_NI_1: oai.ipv4 diff --git a/ci-scripts/yaml_files/nsa_b200_enb/docker-compose.yml b/ci-scripts/yaml_files/nsa_b200_enb/docker-compose.yml index 92ccdf8a0a..2df5eac61b 100644 --- a/ci-scripts/yaml_files/nsa_b200_enb/docker-compose.yml +++ b/ci-scripts/yaml_files/nsa_b200_enb/docker-compose.yml @@ -20,7 +20,7 @@ services: NB_PRB: 25 ENABLE_MEASUREMENT_REPORTS: 'yes' ENABLE_X2: 'yes' - MME_S1C_IP_ADDRESS: 192.168.18.210 + MME_S1C_IP_ADDRESS: 172.21.16.136 ENB_S1C_IF_NAME: eth0 ENB_S1C_IP_ADDRESS: 192.168.68.130 ENB_S1U_IF_NAME: eth0 @@ -29,7 +29,7 @@ services: RRC_INACTIVITY_THRESHOLD: 0 FLEXRAN_ENABLED: 'no' FLEXRAN_INTERFACE_NAME: eth0 - FLEXRAN_IPV4_ADDRESS: 192.168.18.210 + FLEXRAN_IPV4_ADDRESS: 172.21.16.136 THREAD_PARALLEL_CONFIG: PARALLEL_SINGLE_THREAD USE_ADDITIONAL_OPTIONS: --log_config.global_log_options level,nocolor,time,line_num,function volumes: diff --git a/ci-scripts/yaml_files/nsa_b200_gnb/docker-compose.yml b/ci-scripts/yaml_files/nsa_b200_gnb/docker-compose.yml index c6096956a8..61266aa2b1 100644 --- a/ci-scripts/yaml_files/nsa_b200_gnb/docker-compose.yml +++ b/ci-scripts/yaml_files/nsa_b200_gnb/docker-compose.yml @@ -15,7 +15,7 @@ services: TAC: 1 ENABLE_X2: 'yes' ENB_X2_IP_ADDRESS: 192.168.68.130 - MME_S1C_IP_ADDRESS: 192.168.18.210 + MME_S1C_IP_ADDRESS: 172.21.16.136 GNB_S1C_IF_NAME: eth0 GNB_S1C_IP_ADDRESS: 192.168.68.194 GNB_S1U_IF_NAME: eth0 @@ -24,7 +24,7 @@ services: RRC_INACTIVITY_THRESHOLD: 0 FLEXRAN_ENABLED: 'no' FLEXRAN_INTERFACE_NAME: eth0 - FLEXRAN_IPV4_ADDRESS: 192.168.18.210 + FLEXRAN_IPV4_ADDRESS: 172.21.16.136 THREAD_PARALLEL_CONFIG: PARALLEL_RU_L1_TRX_SPLIT USE_ADDITIONAL_OPTIONS: -E -q --RUs.[0].sdr_addrs serial=30C51D4 --log_config.global_log_options level,nocolor,time,line_num,function volumes: From d592b1ff5bcb8743129006bb43a5a2501b5a14ec Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 20 Apr 2022 17:56:25 +0200 Subject: [PATCH 132/150] fix(ci): dummy commit to re-trigger Signed-off-by: Raphael Defosseux --- ci-scripts/ci_ueinfra.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/ci-scripts/ci_ueinfra.yaml b/ci-scripts/ci_ueinfra.yaml index b58e14ff6a..b888f6bb59 100644 --- a/ci-scripts/ci_ueinfra.yaml +++ b/ci-scripts/ci_ueinfra.yaml @@ -40,6 +40,7 @@ nrmodule2_quectel: - sudo -S ip link set dev wwan1 mtu 1500 MTU : 1500 +# CAUTION: 192.168.18.89 address has to be changed when the server is moved #single UE single ping amarisoft_ue_1: ID: amarisoft_ue_1 From b8ac9d5db9a171424000ae9015abb500f89ae853 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Thu, 21 Apr 2022 12:30:08 +0200 Subject: [PATCH 133/150] fix(ci): fix helm charts for phy-sim testing on cluster new infra Signed-off-by: Raphael Defosseux --- charts/physims/charts/dlsim/values.yaml | 4 +-- charts/physims/charts/ldpctest/values.yaml | 4 +-- charts/physims/charts/nr-dlschsim/values.yaml | 4 +-- charts/physims/charts/nr-dlsim/values.yaml | 4 +-- charts/physims/charts/nr-pbchsim/values.yaml | 4 +-- charts/physims/charts/nr-prachsim/values.yaml | 4 +-- charts/physims/charts/nr-pucchsim/values.yaml | 4 +-- charts/physims/charts/nr-ulschsim/values.yaml | 4 +-- charts/physims/charts/nr-ulsim/values.yaml | 4 +-- charts/physims/charts/polartest/values.yaml | 4 +-- .../physims/charts/smallblocktest/values.yaml | 4 +-- charts/physims/charts/ulsim/values.yaml | 4 +-- charts/physims/templates/rbac.yaml | 30 ++++++++++++++----- charts/physims/values.yaml | 4 +-- ci-scripts/cls_physim1.py | 30 +++++++++++++------ 15 files changed, 69 insertions(+), 43 deletions(-) diff --git a/charts/physims/charts/dlsim/values.yaml b/charts/physims/charts/dlsim/values.yaml index d78fbb7409..7f45b42f72 100644 --- a/charts/physims/charts/dlsim/values.yaml +++ b/charts/physims/charts/dlsim/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/charts/ldpctest/values.yaml b/charts/physims/charts/ldpctest/values.yaml index e2e6467923..b3cc476cf8 100644 --- a/charts/physims/charts/ldpctest/values.yaml +++ b/charts/physims/charts/ldpctest/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/charts/nr-dlschsim/values.yaml b/charts/physims/charts/nr-dlschsim/values.yaml index 8944e7e724..b7ef28f47a 100644 --- a/charts/physims/charts/nr-dlschsim/values.yaml +++ b/charts/physims/charts/nr-dlschsim/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/charts/nr-dlsim/values.yaml b/charts/physims/charts/nr-dlsim/values.yaml index 573e8630de..2a35912fee 100644 --- a/charts/physims/charts/nr-dlsim/values.yaml +++ b/charts/physims/charts/nr-dlsim/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/charts/nr-pbchsim/values.yaml b/charts/physims/charts/nr-pbchsim/values.yaml index 28c4678334..9a25d2810d 100644 --- a/charts/physims/charts/nr-pbchsim/values.yaml +++ b/charts/physims/charts/nr-pbchsim/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/charts/nr-prachsim/values.yaml b/charts/physims/charts/nr-prachsim/values.yaml index 9e3c68b54d..dba6cc16c0 100644 --- a/charts/physims/charts/nr-prachsim/values.yaml +++ b/charts/physims/charts/nr-prachsim/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/charts/nr-pucchsim/values.yaml b/charts/physims/charts/nr-pucchsim/values.yaml index 449670f713..77fe0963ac 100644 --- a/charts/physims/charts/nr-pucchsim/values.yaml +++ b/charts/physims/charts/nr-pucchsim/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/charts/nr-ulschsim/values.yaml b/charts/physims/charts/nr-ulschsim/values.yaml index a3afc090e8..efb011a7f6 100644 --- a/charts/physims/charts/nr-ulschsim/values.yaml +++ b/charts/physims/charts/nr-ulschsim/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/charts/nr-ulsim/values.yaml b/charts/physims/charts/nr-ulsim/values.yaml index 2bf96498e8..71c455b69c 100644 --- a/charts/physims/charts/nr-ulsim/values.yaml +++ b/charts/physims/charts/nr-ulsim/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/charts/polartest/values.yaml b/charts/physims/charts/polartest/values.yaml index e0a532fdd8..e0751e8ec4 100644 --- a/charts/physims/charts/polartest/values.yaml +++ b/charts/physims/charts/polartest/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/charts/smallblocktest/values.yaml b/charts/physims/charts/smallblocktest/values.yaml index f2f113d9b6..f933a978fd 100644 --- a/charts/physims/charts/smallblocktest/values.yaml +++ b/charts/physims/charts/smallblocktest/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/charts/ulsim/values.yaml b/charts/physims/charts/ulsim/values.yaml index 35dc14d596..d25b6fc2a5 100644 --- a/charts/physims/charts/ulsim/values.yaml +++ b/charts/physims/charts/ulsim/values.yaml @@ -4,11 +4,11 @@ replicaCount: 1 -namespace: "oaicicd-ran-tmp" +namespace: "OAICICD_PROJECT" image: registry: local - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: temp # pullPolicy: IfNotPresent or Never or Always pullPolicy: Always diff --git a/charts/physims/templates/rbac.yaml b/charts/physims/templates/rbac.yaml index 35f956a203..b341744796 100644 --- a/charts/physims/templates/rbac.yaml +++ b/charts/physims/templates/rbac.yaml @@ -1,12 +1,26 @@ -apiVersion: rbac.authorization.k8s.io/v1beta1 -kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role metadata: - name: {{ .Chart.Name }}-{{ .Values.global.namespace }}-rbac -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cluster-admin + name: {{ .Chart.Name }}-{{ .Release.Namespace }}-role +rules: +- apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - use +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ .Chart.Name }}-{{ .Release.Namespace }}-binding subjects: - kind: ServiceAccount name: {{ .Values.global.serviceAccountName }} - namespace: {{ .Values.global.namespace }} + namespace: {{ .Release.Namespace }} +roleRef: + kind: Role + name: {{ .Chart.Name }}-{{ .Release.Namespace }}-role + apiGroup: rbac.authorization.k8s.io diff --git a/charts/physims/values.yaml b/charts/physims/values.yaml index b348e822bb..d5253c7812 100644 --- a/charts/physims/values.yaml +++ b/charts/physims/values.yaml @@ -4,9 +4,9 @@ global: serviceAccountName: oai-physim-sa - namespace: "oaicicd-ran-tmp" + namespace: "OAICICD_PROJECT" image: - repository: image-registry.openshift-image-registry.svc:5000/oaicicd-ran-tmp/oai-physim + repository: image-registry.openshift-image-registry.svc:5000/OAICICD_PROJECT/oai-physim version: TAG ## Declaring values specific to coressponding physim to overwrite diff --git a/ci-scripts/cls_physim1.py b/ci-scripts/cls_physim1.py index 83fb74b7cb..54329790cd 100644 --- a/ci-scripts/cls_physim1.py +++ b/ci-scripts/cls_physim1.py @@ -153,6 +153,7 @@ class PhySim: mySSH.command(f'oc project {ocProjectName}', '\$', 30) if mySSH.getBefore().count(f'Already on project "{ocProjectName}"') == 0 and mySSH.getBefore().count(f'Now using project "{self.OCProjectName}"') == 0: logging.error(f'\u001B[1m Unable to access OC project {ocProjectName}\u001B[0m') + mySSH.command('oc logout', '\$', 30) mySSH.close() HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PROJECT_FAIL) RAN.prematureExit = True @@ -161,9 +162,10 @@ class PhySim: logging.debug(f'\u001B[1m Now using project {ocProjectName}\u001B[0m') # Tag the image and push to the OC cluster - mySSH.command('oc whoami -t | sudo podman login -u ' + ocUserName + ' --password-stdin https://default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/ --tls-verify=false', '\$', 30) + mySSH.command('oc whoami -t | sudo podman login -u ' + ocUserName + ' --password-stdin https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/ --tls-verify=false', '\$', 30) if mySSH.getBefore().count('Login Succeeded!') == 0: logging.error('\u001B[1m Podman Login to OC Cluster Registry Failed\u001B[0m') + mySSH.command('oc logout', '\$', 30) mySSH.close() HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_LOGIN_FAIL) RAN.prematureExit = True @@ -171,9 +173,11 @@ class PhySim: else: logging.debug('\u001B[1m Podman Login to OC Cluster Registry Successfully\u001B[0m') time.sleep(2) - mySSH.command('oc create -f openshift/oai-physim-image-stream.yml', '\$', 30) + mySSH.command('oc create -f openshift/oai-physim-image-stream.yml || true', '\$', 30) if mySSH.getBefore().count('(AlreadyExists):') == 0 and mySSH.getBefore().count('created') == 0: logging.error(f'\u001B[1m Image Stream "oai-physim" Creation Failed on OC Cluster {ocProjectName}\u001B[0m') + mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6) + mySSH.command('oc logout', '\$', 30) mySSH.close() HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL) RAN.prematureExit = True @@ -181,11 +185,13 @@ class PhySim: else: logging.debug(f'\u001B[1m Image Stream "oai-physim" created on OC project {ocProjectName}\u001B[0m') time.sleep(2) - mySSH.command(f'sudo podman tag oai-physim:{imageTag} default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30) + mySSH.command(f'sudo podman tag oai-physim:{imageTag} default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30) time.sleep(2) - mySSH.command(f'sudo podman push default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag} --tls-verify=false', '\$', 180) + mySSH.command(f'sudo podman push default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag} --tls-verify=false', '\$', 180) if mySSH.getBefore().count('Storing signatures') == 0: logging.error('\u001B[1m Image "oai-physim" push to OC Cluster Registry Failed\u001B[0m') + mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6) + mySSH.command('oc logout', '\$', 30) mySSH.close() HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_IS_FAIL) RAN.prematureExit = True @@ -195,8 +201,9 @@ class PhySim: # Using helm charts deployment time.sleep(5) + mySSH.command(f'grep -rl OAICICD_PROJECT ./charts/ | xargs sed -i -e "s#OAICICD_PROJECT#{ocProjectName}#"', '\$', 30) mySSH.command(f'sed -i -e "s#TAG#{imageTag}#g" ./charts/physims/values.yaml', '\$', 6) - mySSH.command('helm install physim ./charts/physims/ | tee -a cmake_targets/log/physim_helm_summary.txt 2>&1', '\$', 30) + mySSH.command('helm install physim ./charts/physims/ 2>&1 | tee -a cmake_targets/log/physim_helm_summary.txt', '\$', 30) if mySSH.getBefore().count('STATUS: deployed') == 0: logging.error('\u001B[1m Deploying PhySim Failed using helm chart on OC Cluster\u001B[0m') mySSH.command('helm uninstall physim >> cmake_targets/log/physim_helm_summary.txt 2>&1', '\$', 30) @@ -206,8 +213,10 @@ class PhySim: mySSH.command('oc get pods -l app.kubernetes.io/instance=physim', '\$', 6, resync=True) if re.search('No resources found', mySSH.getBefore()): isFinished1 = True - mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30) + mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 30) mySSH.command('oc delete is oai-physim', '\$', 30) + mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6) + mySSH.command('oc logout', '\$', 30) mySSH.close() self.AnalyzeLogFile_phySim(HTML) RAN.prematureExit = True @@ -227,7 +236,7 @@ class PhySim: if isRunning == False: logging.error('\u001B[1m Some PODS Running FAILED \u001B[0m') mySSH.command('oc get pods -l app.kubernetes.io/instance=physim 2>&1 | tee -a cmake_targets/log/physim_pods_summary.txt', '\$', 6) - mySSH.command('helm uninstall physim >> cmake_targets/log/physim_helm_summary.txt 2>&1', '\$', 6) + mySSH.command('helm uninstall physim 2>&1 >> cmake_targets/log/physim_helm_summary.txt', '\$', 6) self.AnalyzeLogFile_phySim(HTML) isFinished1 = False while(isFinished1 == False): @@ -235,8 +244,10 @@ class PhySim: mySSH.command('oc get pods -l app.kubernetes.io/instance=physim', '\$', 6, resync=True) if re.search('No resources found', mySSH.getBefore()): isFinished1 = True - mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6) + mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6) mySSH.command('oc delete is oai-physim', '\$', 6) + mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6) + mySSH.command('oc logout', '\$', 30) HTML.CreateHtmlTestRow('N/A', 'KO', CONST.OC_PHYSIM_DEPLOY_FAIL) HTML.CreateHtmlTestRowPhySimTestResult(self.testSummary,self.testResult) RAN.prematureExit = True @@ -293,9 +304,10 @@ class PhySim: isFinished1 = True if isFinished1 == True: logging.debug('\u001B[1m UnDeployed PhySim Successfully on OC Cluster\u001B[0m') - mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.5glab.nsa.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6) + mySSH.command(f'sudo podman rmi default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/{self.OCProjectName}/oai-physim:{imageTag}', '\$', 6) mySSH.command('oc delete is oai-physim', '\$', 6) logging.debug('\u001B[1m Deleted the Image and ImageStream\u001B[0m') + mySSH.command('sudo podman logout https://default-route-openshift-image-registry.apps.oai.cs.eurecom.fr/', '\$', 6) mySSH.command('oc logout', '\$', 6) mySSH.close() self.AnalyzeLogFile_phySim(HTML) From 9327e9915210ee6480b66bcf88567b4bea501948 Mon Sep 17 00:00:00 2001 From: francescomani Date: Thu, 21 Apr 2022 16:29:22 +0200 Subject: [PATCH 134/150] additional fixes for SR --- openair1/PHY/NR_TRANSPORT/pucch_rx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c index bcf743b560..5026354afd 100644 --- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c +++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c @@ -422,9 +422,9 @@ void nr_decode_pucch0(PHY_VARS_gNB *gNB, if (pucch_pdu->bit_len_harq==0) { uci_pdu->harq = NULL; uci_pdu->sr = calloc(1,sizeof(*uci_pdu->sr)); - uci_pdu->sr->sr_confidence_level = (SNRtimes10 > uci_stats->pucch0_thres) ? 1 : 0; + uci_pdu->sr->sr_confidence_level = (SNRtimes10 < uci_stats->pucch0_thres); uci_stats->pucch0_sr_trials++; - if (xrtmag_dBtimes10>10*max_n0) { + if (xrtmag_dBtimes10>(10*max_n0+100)) { uci_pdu->sr->sr_indication = 1; uci_stats->pucch0_positive_SR++; LOG_D(PHY,"PUCCH0 got positive SR. Cumulative number of positive SR %d\n", uci_stats->pucch0_positive_SR); From 4b4e419aba60c857ca4f9ecaee4eba87ef283c85 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Thu, 14 Apr 2022 16:42:38 +0200 Subject: [PATCH 135/150] nr rlc: fix NR RLC AM status generation Several problems were found and fixed. --- openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c | 107 +++++++++++++--------- 1 file changed, 63 insertions(+), 44 deletions(-) diff --git a/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c b/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c index af8cb5715a..bfc8abbf73 100644 --- a/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c +++ b/openair2/LAYER2/nr_rlc/nr_rlc_entity_am.c @@ -908,8 +908,6 @@ typedef struct { int so_start; int sn_end; int so_end; - /* data for maximum ack */ - int ack_sn; /* -1 if not to be used */ /* pdu to use for next call to 'next_missing' */ nr_rlc_pdu_t *next; } missing_data_t; @@ -924,13 +922,12 @@ static missing_data_t next_missing(nr_rlc_entity_am_t *entity, int max_so = 0; int last_reached = 0; - ret.ack_sn = -1; - /* special case: missing part before the head of RX list */ if (check_head) { if (cur->sn != entity->rx_next || !cur->is_first) { /* don't report if out of reporting window */ - if (sn_compare_rx(entity, entity->rx_highest_status, cur->sn) <= 0) { + if (sn_compare_rx(entity, entity->rx_highest_status, + entity->rx_next) <= 0) { ret.sn_start = -1; return ret; } @@ -954,10 +951,6 @@ next_pdu: max_so = cur_max_so; last_reached = last_reached | cur->is_last; - /* if cur already processed, it can be the acked SDU */ - if (cur->data == NULL) - ret.ack_sn = (cur->sn + 1) % entity->sn_modulus; - /* no next? */ if (cur->next == NULL) { /* inform the caller that work is over */ @@ -1033,32 +1026,36 @@ next_pdu: } /* discontinuity between different SDUs */ - ret.sn_start = sn; + if (last_reached) { + ret.sn_start = (sn + 1) % entity->sn_modulus; + ret.so_start = 0; + } else { + ret.sn_start = sn; + ret.so_start = max_so + 1; + } /* don't report if out of reporting window */ if (sn_compare_rx(entity, entity->rx_highest_status, ret.sn_start) <= 0) { ret.sn_start = -1; return ret; } - ret.so_start = max_so + 1; set_end_different_sdu: - /* don't go more than rx_highest_status - 1 */ - if (sn_compare_rx(entity, entity->rx_highest_status, cur->sn) <= 0) { - ret.sn_end = (entity->rx_highest_status - 1 + entity->sn_modulus) % - entity->sn_modulus; - ret.so_end = 0xffff; - return ret; - } - /* if cur is the head of a SDU, then use cur-1 */ if (cur->is_first) { ret.sn_end = (cur->sn - 1 + entity->sn_modulus) % entity->sn_modulus; ret.so_end = 0xffff; - return ret; + } else { + ret.sn_end = cur->sn; + ret.so_end = cur->so - 1; + } + /* don't go more than rx_highest_status - 1 */ + if (sn_compare_rx(entity, entity->rx_highest_status, ret.sn_end) <= 0) { + ret.sn_end = (entity->rx_highest_status - 1 + entity->sn_modulus) % + entity->sn_modulus; + ret.so_end = 0xffff; + ret.next = NULL; } - ret.sn_end = cur->sn; - ret.so_end = cur->so - 1; return ret; } @@ -1098,21 +1095,20 @@ static void get_e1_position(nr_rlc_entity_am_t *entity, } } -/* returns the number of nacks serialized. - * In most cases it is 1, it can be more if the - * missing data consists of a range that is more - * than 255 SNs in which case it has to be cut in - * smaller ranges. +/* returns the last nack SN generated, -1 if nothing generated. * If there is no more room in the status buffer, * will set m->next = NULL (and may serialize - * less nacks than required by 'm'). + * less nacks than required by 'm'), also + * sets *generation_truncated to 1. */ static int generate_missing(nr_rlc_entity_am_t *entity, nr_rlc_pdu_encoder_t *encoder, - missing_data_t *m, int *e1_byte, int *e1_bit) + missing_data_t *m, int *e1_byte, int *e1_bit, + int *generation_truncated, + unsigned char **so_end_address) { int r_bits = entity->sn_field_length == 18 ? 3 : 1; - int range_count = 0; + int last_nack_generated = -1; int sn_start; int so_start; int sn_end; @@ -1164,6 +1160,7 @@ static int generate_missing(nr_rlc_entity_am_t *entity, m_nack.so_end = so_end; if (encoder->byte + nack_size(entity, &m_nack) > encoder->size) { m->next = NULL; + *generation_truncated = 1; break; } @@ -1197,6 +1194,7 @@ static int generate_missing(nr_rlc_entity_am_t *entity, /* nack_sn */ nr_rlc_pdu_encoder_put_bits(encoder, sn_start, entity->sn_field_length); + last_nack_generated = sn_start; /* e1 = 0 (set later if needed) */ nr_rlc_pdu_encoder_put_bits(encoder, 0, 1); /* e2 */ @@ -1208,34 +1206,44 @@ static int generate_missing(nr_rlc_entity_am_t *entity, /* so_start/so_end */ if (e2) { nr_rlc_pdu_encoder_put_bits(encoder, so_start, 16); + *so_end_address = (unsigned char *)encoder->buffer + encoder->byte; nr_rlc_pdu_encoder_put_bits(encoder, so_end, 16); - } + } else + *so_end_address = NULL; /* nack range */ - if (e3) + if (e3) { nr_rlc_pdu_encoder_put_bits(encoder, cur_sn_count, 8); + last_nack_generated += cur_sn_count - 1; + } sn_count -= cur_sn_count; sn_start = (sn_start + cur_sn_count) % entity->sn_modulus; - range_count++; } - return range_count; + return last_nack_generated; } static int generate_status(nr_rlc_entity_am_t *entity, char *buffer, int size) { - int ack_sn = entity->rx_next; - missing_data_t m; + int last_nack; + int ack_sn; + missing_data_t m; nr_rlc_pdu_t *cur; - int nack_count = 0; + int check_head = 1; nr_rlc_pdu_encoder_t encoder; int e1_byte; int e1_bit; + int generation_truncated; + int ln; + unsigned char *so_end_address = NULL; /* if not enough room, do nothing */ if (size < 3) return 0; + /* initial last_nack is rx_next - 1 */ + last_nack = (entity->rx_next - 1 + entity->sn_modulus) % entity->sn_modulus; + nr_rlc_pdu_encoder_init(&encoder, buffer, size); /* first 3 bytes, ack_sn and e1 will be set later */ @@ -1250,22 +1258,33 @@ static int generate_status(nr_rlc_entity_am_t *entity, char *buffer, int size) e1_bit = entity->sn_field_length == 18 ? 1 : 7; while (cur != NULL) { - m = next_missing(entity, cur, nack_count == 0); - - /* update ack_sn if the returned value is valid */ - if (m.ack_sn != -1) - ack_sn = m.ack_sn; + m = next_missing(entity, cur, check_head); + check_head = 0; /* stop here if no more nack to report */ if (m.sn_start == -1) break; - nack_count += generate_missing(entity, &encoder, &m, &e1_byte, &e1_bit); + generation_truncated = 0; + ln = generate_missing(entity, &encoder, &m, &e1_byte, &e1_bit, + &generation_truncated, &so_end_address); + /* remember the last nack put, if any */ + if (ln != -1) + last_nack = ln; + /* if generation was truncated and so_end was put, we force its value to + * 0xffff (end of SDU) because we don't know what missing nack information + * was supposed to be put, so we nack until the end of the PDU to be sure + */ + if (generation_truncated && so_end_address != NULL) { + so_end_address[0] = 0xff; + so_end_address[1] = 0xff; + } cur = m.next; } - /* put ack_sn */ + /* put ack_sn, which is last_nack + 1 */ + ack_sn = (last_nack + 1) % entity->sn_modulus; if (entity->sn_field_length == 12) { buffer[0] = ack_sn >> 8; buffer[1] = ack_sn & 255; From 4c4cbc963b99080682ea10c00c31cd7540e8ebd2 Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 22 Apr 2022 12:28:04 +0200 Subject: [PATCH 136/150] fix(ci): little fixes after migration to new infra: - Better mechanism for qlog cleaning - Faster attachment check - html.py is confusing for some python3 installation -- renaming it Signed-off-by: Raphael Defosseux --- ci-scripts/cls_log_mgt.py | 23 ++++++++++++++--------- ci-scripts/cls_module_ue.py | 7 ++++--- ci-scripts/{html.py => cls_oai_html.py} | 0 ci-scripts/cls_oaicitest.py | 4 ++-- ci-scripts/cls_physim.py | 2 +- ci-scripts/cls_physim1.py | 2 +- ci-scripts/main.py | 4 ++-- 7 files changed, 24 insertions(+), 18 deletions(-) rename ci-scripts/{html.py => cls_oai_html.py} (100%) diff --git a/ci-scripts/cls_log_mgt.py b/ci-scripts/cls_log_mgt.py index 905a105512..e29e9168b7 100644 --- a/ci-scripts/cls_log_mgt.py +++ b/ci-scripts/cls_log_mgt.py @@ -64,10 +64,10 @@ class Log_Mgt: if m is not None: return int(m.group(1)) - def __RemoveOldest(self): + def __RemoveOldest(self, days): mySSH = sshconnection.SSHConnection() mySSH.open(self.IPAddress, self.Username, self.Password) - COMMAND='echo ' + self.Password + ' | sudo -S find ' + self.path + ' -type f -mtime +14 -delete' + COMMAND='echo ' + self.Password + ' | sudo -S find ' + self.path + ' -type f -mtime +' + str(days) + ' -delete' mySSH.command(COMMAND,'\$',20) mySSH.close() @@ -79,13 +79,18 @@ class Log_Mgt: def LogRotation(self): - used_space = self.__CheckUsedSpace() #avail space in target folder - if used_space > 80 : - logging.debug('\u001B[1;37;41m Used Disk > 80%, on ' + self.Username+'@'+self.IPAddress + '\u001B[0m') - logging.debug('\u001B[1;37;41m Removing Artifacts older than 14 days \u001B[0m') - self.__RemoveOldest() - else: - logging.debug('Used Disk < 80%, on ' + self.Username+'@'+self.IPAddress +', no cleaning required') + doLoop = True + nbDays = 14 + while doLoop and nbDays > 2: + used_space = self.__CheckUsedSpace() #avail space in target folder + if used_space > 80 : + logging.debug('\u001B[1;37;41m Used Disk (' + str(used_space) + '%) > 80%, on ' + self.Username+'@'+self.IPAddress + '\u001B[0m') + logging.debug('\u001B[1;37;41m Removing Artifacts older than ' + nbDays + ' days \u001B[0m') + self.__RemoveOldest(nbDays) + nbDays -= 1 + else: + logging.debug('Used Disk (' + str(used_space) + '%) < 80%, on ' + self.Username+'@'+self.IPAddress +', no cleaning required') + doLoop = False diff --git a/ci-scripts/cls_module_ue.py b/ci-scripts/cls_module_ue.py index fb10700798..dcf75a34fc 100644 --- a/ci-scripts/cls_module_ue.py +++ b/ci-scripts/cls_module_ue.py @@ -107,14 +107,15 @@ class Module_UE: def GetModuleIPAddress(self): HOST=self.HostUsername+'@'+self.HostIPAddress response= [] - tentative = 3 + tentative = 8 while (len(response)==0) and (tentative>0): COMMAND="ip a show dev " + self.UENetwork + " | grep --colour=never inet | grep " + self.UENetwork - logging.debug(COMMAND) + if tentative == 8: + logging.debug(COMMAND) ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) response = ssh.stdout.readlines() tentative-=1 - time.sleep(10) + time.sleep(2) if (tentative==0) and (len(response)==0): logging.debug('\u001B[1;37;41m Module IP Address Not Found! Time expired \u001B[0m') return -1 diff --git a/ci-scripts/html.py b/ci-scripts/cls_oai_html.py similarity index 100% rename from ci-scripts/html.py rename to ci-scripts/cls_oai_html.py diff --git a/ci-scripts/cls_oaicitest.py b/ci-scripts/cls_oaicitest.py index 33910f1f9b..9d5ae84038 100644 --- a/ci-scripts/cls_oaicitest.py +++ b/ci-scripts/cls_oaicitest.py @@ -439,7 +439,7 @@ class OaiCiTest(): while cnt < 4: Module_UE.Command("wup") logging.debug("Waiting for IP address to be assigned") - time.sleep(20) + time.sleep(5) logging.debug("Retrieve IP address") status=Module_UE.GetModuleIPAddress() if status==0: @@ -1111,7 +1111,7 @@ class OaiCiTest(): while cnt < 4: Module_UE.Command("wup") logging.debug("Waiting for IP address to be assigned") - time.sleep(20) + time.sleep(5) logging.debug("Retrieve IP address") status=Module_UE.GetModuleIPAddress() if status==0: diff --git a/ci-scripts/cls_physim.py b/ci-scripts/cls_physim.py index 33792f6ca4..ecd8f63af1 100644 --- a/ci-scripts/cls_physim.py +++ b/ci-scripts/cls_physim.py @@ -32,7 +32,7 @@ import logging #to create a SSH object locally in the methods import sshconnection #to update the HTML object -import html +import cls_oai_html from multiprocessing import SimpleQueue #for log folder maintenance import os diff --git a/ci-scripts/cls_physim1.py b/ci-scripts/cls_physim1.py index 54329790cd..3907fc2a34 100644 --- a/ci-scripts/cls_physim1.py +++ b/ci-scripts/cls_physim1.py @@ -33,7 +33,7 @@ #----------------------------------------------------------- import logging import sshconnection as SSH -import html +import cls_oai_html import os import re import time diff --git a/ci-scripts/main.py b/ci-scripts/main.py index 65f9fbb0da..03947bdfc9 100644 --- a/ci-scripts/main.py +++ b/ci-scripts/main.py @@ -49,7 +49,7 @@ import cls_physim1 #class PhySim for physical simulators deploy and run import sshconnection import epc import ran -import html +import cls_oai_html #----------------------------------------------------------- @@ -518,7 +518,7 @@ CiTestObj = cls_oaicitest.OaiCiTest() SSH = sshconnection.SSHConnection() EPC = epc.EPCManagement() RAN = ran.RANManagement() -HTML = html.HTMLManagement() +HTML = cls_oai_html.HTMLManagement() CONTAINERS = cls_containerize.Containerize() SCA = cls_static_code_analysis.StaticCodeAnalysis() PHYSIM = cls_physim1.PhySim() From 532bb0da965417617e4e7ed2612b1208814bae3c Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Fri, 22 Apr 2022 17:54:41 +0200 Subject: [PATCH 137/150] Remove useless comments --- openair2/LAYER2/NR_MAC_COMMON/nr_mac.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h index 63f21ec382..9123afd324 100644 --- a/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h +++ b/openair2/LAYER2/NR_MAC_COMMON/nr_mac.h @@ -107,10 +107,10 @@ typedef struct { } __attribute__ ((__packed__)) NR_MAC_SUBHEADER_SHORT; typedef struct { - uint8_t LCID: 6; // octet 1 [5:0] - uint8_t F: 1; // octet 1 [6] - uint8_t R: 1; // octet 1 [7] - uint16_t L: 16; // octet 2 [7:0] + uint8_t LCID: 6; + uint8_t F: 1; + uint8_t R: 1; + uint16_t L: 16; } __attribute__ ((__packed__)) NR_MAC_SUBHEADER_LONG; typedef struct { From 3c6a628b747cd6e78ae2b30072f19b9fbabbe202 Mon Sep 17 00:00:00 2001 From: Laurent Thomas Date: Mon, 25 Apr 2022 23:34:48 +0200 Subject: [PATCH 138/150] fix 2 bugs: one new introduced by merge develop, one introduced by extra change asked in code review --- openair1/PHY/CODING/nr_segmentation.c | 2 +- openair1/SCHED_NR_UE/harq_nr.c | 4 +++- openair1/SIMULATION/NR_PHY/dlschsim.c | 7 +------ 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/openair1/PHY/CODING/nr_segmentation.c b/openair1/PHY/CODING/nr_segmentation.c index 281e61cda5..f43813a6ca 100644 --- a/openair1/PHY/CODING/nr_segmentation.c +++ b/openair1/PHY/CODING/nr_segmentation.c @@ -87,7 +87,7 @@ if ((Kprime%Kb) > 0) else Z = (Kprime/Kb); - LOG_D(PHY,"nr segmetation B %u Bprime %u Kprime %u z %u \n", B, Bprime, Kprime, Z); + LOG_D(PHY,"nr segmentation B %u Bprime %u Kprime %u z %u \n", B, Bprime, Kprime, Z); if (Z <= 2) { *K = 2; diff --git a/openair1/SCHED_NR_UE/harq_nr.c b/openair1/SCHED_NR_UE/harq_nr.c index c0f7c08771..a9ff01d78a 100644 --- a/openair1/SCHED_NR_UE/harq_nr.c +++ b/openair1/SCHED_NR_UE/harq_nr.c @@ -357,8 +357,10 @@ void downlink_harq_process(NR_DL_UE_HARQ_t *dl_harq, int harq_pid, int ndi, int if (ndi!=dl_harq->DCINdi) { dl_harq->first_rx = true; dl_harq->DLround = 0; - } else + } else { + dl_harq->first_rx = false; dl_harq->DLround++; + } dl_harq->status = ACTIVE; diff --git a/openair1/SIMULATION/NR_PHY/dlschsim.c b/openair1/SIMULATION/NR_PHY/dlschsim.c index 64e377b896..6f747b36a6 100644 --- a/openair1/SIMULATION/NR_PHY/dlschsim.c +++ b/openair1/SIMULATION/NR_PHY/dlschsim.c @@ -478,13 +478,10 @@ int main(int argc, char **argv) harq_process->n_dmrs_cdm_groups = 1; printf("harq process ue mcs = %d Qm = %d, symb %d\n", harq_process->mcs, harq_process->Qm, nb_symb_sch); - unsigned char *test_input; - test_input = (unsigned char *) malloc16(sizeof(unsigned char) * TBS / 8); + unsigned char *test_input=dlsch->harq_process.pdu; //unsigned char test_input[TBS / 8] __attribute__ ((aligned(16))); for (i = 0; i < TBS / 8; i++) test_input[i] = (unsigned char) rand(); - dlsch->harq_process.pdu=test_input; - //estimated_output = harq_process->b; #ifdef DEBUG_NR_DLSCHSIM for (i = 0; i < TBS / 8; i++) printf("test_input[i]=%hhu \n",test_input[i]); @@ -618,8 +615,6 @@ int main(int argc, char **argv) } }*/ - //free(test_input); it must not be free as it is in DLSCH_struct -> free_gNB_dlsch () -> free(harq->pdu) with no checks or control - free_channel_desc_scm(gNB2UE); reset_DLSCH_struct(gNB, &msgDataTx); From b805e6db47bbb42dd97a735984e75860ddd8274e Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 26 Apr 2022 17:40:42 +0200 Subject: [PATCH 139/150] Use --continuous-tx for B210-based gNB (TDD) --- ci-scripts/xml_files/fr1_nsa_quectel.xml | 2 +- ci-scripts/yaml_files/nsa_b200_gnb/docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-scripts/xml_files/fr1_nsa_quectel.xml b/ci-scripts/xml_files/fr1_nsa_quectel.xml index 55f6f4376e..44aab6e892 100644 --- a/ci-scripts/xml_files/fr1_nsa_quectel.xml +++ b/ci-scripts/xml_files/fr1_nsa_quectel.xml @@ -74,7 +74,7 @@ Initialize_eNB Initialize gNB - -O ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf -E -q --RUs.[0].sdr_addrs "serial=30C51D4" --log_config.global_log_options level,nocolor,time,line_num,function + -O ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf -E -q --RUs.[0].sdr_addrs "serial=30C51D4" --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function 1 1 nr diff --git a/ci-scripts/yaml_files/nsa_b200_gnb/docker-compose.yml b/ci-scripts/yaml_files/nsa_b200_gnb/docker-compose.yml index 61266aa2b1..208e1564cd 100644 --- a/ci-scripts/yaml_files/nsa_b200_gnb/docker-compose.yml +++ b/ci-scripts/yaml_files/nsa_b200_gnb/docker-compose.yml @@ -26,7 +26,7 @@ services: FLEXRAN_INTERFACE_NAME: eth0 FLEXRAN_IPV4_ADDRESS: 172.21.16.136 THREAD_PARALLEL_CONFIG: PARALLEL_RU_L1_TRX_SPLIT - USE_ADDITIONAL_OPTIONS: -E -q --RUs.[0].sdr_addrs serial=30C51D4 --log_config.global_log_options level,nocolor,time,line_num,function + USE_ADDITIONAL_OPTIONS: -E -q --RUs.[0].sdr_addrs serial=30C51D4 --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function volumes: - /dev:/dev networks: From 57d1b22ca4296ba3e92a990ad41432e895f83ceb Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 26 Apr 2022 17:48:23 +0200 Subject: [PATCH 140/150] Improve B210 gNB configuration --- .../conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf index af58145322..f2bf69d2f7 100644 --- a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf +++ b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf @@ -203,7 +203,7 @@ MACRLCs = ( tr_n_preference = "local_RRC"; pusch_TargetSNRx10 = 200; pucch_TargetSNRx10 = 200; - ulsch_max_frame_inactivity = 1; + ulsch_max_frame_inactivity = 0; } ); @@ -221,11 +221,11 @@ RUs = ( local_rf = "yes" nb_tx = 1 nb_rx = 1 - att_tx = 3 - att_rx = 0; + att_tx = 16 + att_rx = 16; bands = [7]; max_pdschReferenceSignalPower = -27; - max_rxgain = 111; + max_rxgain = 114; eNB_instances = [0]; # sdr_addrs = "serial=30C51D4"; # clock_src = "external"; From 4389fdea4ef82dba502271235ab65d5b446d5432 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 26 Apr 2022 18:16:19 +0200 Subject: [PATCH 141/150] Harmonize NSA DMRS AdditionalPosition with SA --- openair2/RRC/NR/rrc_gNB_reconfig.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair2/RRC/NR/rrc_gNB_reconfig.c b/openair2/RRC/NR/rrc_gNB_reconfig.c index 36113fb7ee..4e9245cf46 100644 --- a/openair2/RRC/NR/rrc_gNB_reconfig.c +++ b/openair2/RRC/NR/rrc_gNB_reconfig.c @@ -223,7 +223,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS=NULL; secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = calloc(1,sizeof(*secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition)); - *secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0; + *secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1; secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->pdsch_Config->choice.setup->tci_StatesToAddModList=calloc(1,sizeof(*secondaryCellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP->pdsch_Config->choice.setup->tci_StatesToAddModList)); @@ -572,7 +572,7 @@ void fill_default_secondaryCellGroup(NR_ServingCellConfigCommon_t *servingcellco bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->phaseTrackingRS=NULL; } bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition)); - *bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos0; + *bwp->bwp_Dedicated->pdsch_Config->choice.setup->dmrs_DownlinkForPDSCH_MappingTypeA->choice.setup->dmrs_AdditionalPosition = NR_DMRS_DownlinkConfig__dmrs_AdditionalPosition_pos1; bwp->bwp_Dedicated->pdsch_Config->choice.setup->tci_StatesToAddModList=calloc(1,sizeof(*bwp->bwp_Dedicated->pdsch_Config->choice.setup->tci_StatesToAddModList)); From 89e7923652c0f28ce1dd2538c3cb562ffc6dc962 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 26 Apr 2022 17:56:50 +0200 Subject: [PATCH 142/150] Increase NSA B210 throughput requirements --- .../xml_files/container_nsa_b200_quectel.xml | 8 ++++---- ci-scripts/xml_files/fr1_nsa_quectel.xml | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ci-scripts/xml_files/container_nsa_b200_quectel.xml b/ci-scripts/xml_files/container_nsa_b200_quectel.xml index 610f0b019a..80ed3f5cfc 100644 --- a/ci-scripts/xml_files/container_nsa_b200_quectel.xml +++ b/ci-scripts/xml_files/container_nsa_b200_quectel.xml @@ -138,12 +138,12 @@ Iperf - iperf (DL/40Mbps/UDP)(60 sec)(single-ue profile) - -u -b 40M -t 60 -i 1 -fm + iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile) + -u -b 125M -t 60 -i 1 -fm DL idefix - 20 - 85 + 1 + 95 single-ue diff --git a/ci-scripts/xml_files/fr1_nsa_quectel.xml b/ci-scripts/xml_files/fr1_nsa_quectel.xml index 44aab6e892..f8ecaae0fd 100644 --- a/ci-scripts/xml_files/fr1_nsa_quectel.xml +++ b/ci-scripts/xml_files/fr1_nsa_quectel.xml @@ -117,29 +117,29 @@ -u -b 30M -t 30 DL idefix - 5 + 1 95 single-ue Iperf - iperf (DL/40Mbps/UDP)(30 sec)(single-ue profile) - -u -b 40M -t 30 + iperf (DL/90Mbps/UDP)(30 sec)(single-ue profile) + -u -b 90M -t 30 DL idefix - 5 + 1 95 single-ue Iperf - iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile) - -u -b 60M -t 60 + iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile) + -u -b 125M -t 60 DL idefix - 5 + 1 95 single-ue From a4f3d431f5a52e876c26f61ea7159c039250b145 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 27 Apr 2022 16:31:35 +0200 Subject: [PATCH 143/150] Further improve B210/NSA gNB configuration file --- ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf index f2bf69d2f7..f3515d3882 100644 --- a/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf +++ b/ci-scripts/conf_files/gnb.band78.tm1.fr1.106PRB.usrpb210.conf @@ -221,8 +221,8 @@ RUs = ( local_rf = "yes" nb_tx = 1 nb_rx = 1 - att_tx = 16 - att_rx = 16; + att_tx = 12 + att_rx = 12; bands = [7]; max_pdschReferenceSignalPower = -27; max_rxgain = 114; From c265cbda8a272dd245dd7635cce12a70f62409e0 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 27 Apr 2022 16:36:16 +0200 Subject: [PATCH 144/150] NSA-B200(-Container) test: increase UL traffic requirements --- ci-scripts/xml_files/container_nsa_b200_quectel.xml | 4 ++-- ci-scripts/xml_files/fr1_nsa_quectel.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ci-scripts/xml_files/container_nsa_b200_quectel.xml b/ci-scripts/xml_files/container_nsa_b200_quectel.xml index 80ed3f5cfc..47a939f63c 100644 --- a/ci-scripts/xml_files/container_nsa_b200_quectel.xml +++ b/ci-scripts/xml_files/container_nsa_b200_quectel.xml @@ -149,8 +149,8 @@ Iperf - iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile) - -u -b 3M -t 60 -i 1 -fm + iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile) + -u -b 8M -t 60 -i 1 -fm UL idefix 1 diff --git a/ci-scripts/xml_files/fr1_nsa_quectel.xml b/ci-scripts/xml_files/fr1_nsa_quectel.xml index f8ecaae0fd..0f8c90abdf 100644 --- a/ci-scripts/xml_files/fr1_nsa_quectel.xml +++ b/ci-scripts/xml_files/fr1_nsa_quectel.xml @@ -146,8 +146,8 @@ Iperf - iperf (UL/3Mbps/UDP)(60 sec)(single-ue profile) - -u -b 3M -t 60 + iperf (UL/8Mbps/UDP)(60 sec)(single-ue profile) + -u -b 8M -t 60 UL idefix 1 From 629b04dc80800af8ec7351a88e88547a126488ba Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 27 Apr 2022 15:25:43 +0200 Subject: [PATCH 145/150] fix(ci): typo when printing Signed-off-by: Raphael Defosseux --- ci-scripts/cls_log_mgt.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci-scripts/cls_log_mgt.py b/ci-scripts/cls_log_mgt.py index e29e9168b7..f1dbf6b8ec 100644 --- a/ci-scripts/cls_log_mgt.py +++ b/ci-scripts/cls_log_mgt.py @@ -81,11 +81,11 @@ class Log_Mgt: def LogRotation(self): doLoop = True nbDays = 14 - while doLoop and nbDays > 2: + while doLoop and nbDays > 1: used_space = self.__CheckUsedSpace() #avail space in target folder if used_space > 80 : logging.debug('\u001B[1;37;41m Used Disk (' + str(used_space) + '%) > 80%, on ' + self.Username+'@'+self.IPAddress + '\u001B[0m') - logging.debug('\u001B[1;37;41m Removing Artifacts older than ' + nbDays + ' days \u001B[0m') + logging.debug('\u001B[1;37;41m Removing Artifacts older than ' + str(nbDays) + ' days \u001B[0m') self.__RemoveOldest(nbDays) nbDays -= 1 else: From e98afec56753f15427c29866626dbeb3c6e7a914 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 27 Apr 2022 17:40:53 +0200 Subject: [PATCH 146/150] NSA-2x2 test: improve gNB configuration --- .../gnb.band78.nsa_2x2.106PRB.usrpn310.conf | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf b/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf index e3bd49e7fc..fa7c190538 100644 --- a/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf +++ b/ci-scripts/conf_files/gnb.band78.nsa_2x2.106PRB.usrpn310.conf @@ -199,12 +199,12 @@ gNBs = ); MACRLCs = ( - { - num_cc = 1; - tr_s_preference = "local_L1"; - tr_n_preference = "local_RRC"; - ulsch_max_frame_inactivity = 1; - } +{ + num_cc = 1; + tr_s_preference = "local_L1"; + tr_n_preference = "local_RRC"; + ulsch_max_frame_inactivity = 0; +} ); L1s = ( @@ -213,6 +213,7 @@ L1s = ( tr_n_preference = "local_mac"; thread_pool_size = 8; prach_dtx_threshold = 120; + pucch0_dtx_threshold = 80; } ); From 730fa472ae361b5e3e7ab973c5c763b0cd74c046 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 27 Apr 2022 17:46:17 +0200 Subject: [PATCH 147/150] NSA-2x2 test: increase DL traffic requirements --- ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml b/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml index a4dcb58e8b..332af80d22 100644 --- a/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml +++ b/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml @@ -115,11 +115,11 @@ Iperf - iperf (DL/60Mbps/UDP)(60 sec)(single-ue profile) - -u -b 60M -t 60 + iperf (DL/125Mbps/UDP)(60 sec)(single-ue profile) + -u -b 125M -t 60 DL nrmodule2_quectel - 5 + 15 single-ue From b089469935673c3101db6eb26edc74290a2491d3 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 27 Apr 2022 18:15:46 +0200 Subject: [PATCH 148/150] Reduce nr_dlsim 256QAM MCS 27 test case to MCS 26, see #543 --- cmake_targets/autotests/test_case_list.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index ce1b9dcdf4..b55228bdc9 100755 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -1093,7 +1093,7 @@ (Test8: 217 PRB 100 PDSCH-PRBs 110 PDSCH-Offset), (Test9: 106 PRBs 50 PDSCH-PRBs MCS Index 27), (Test10: 106 PRBs 50 PDSCH-PRBs MCS Index 16), - (Test11: 106 MCS-TABLE 256 QAM MCS Index 27), + (Test11: 106 MCS-TABLE 256 QAM MCS Index 26), (Test12: HARQ test 25% TP 4 rounds), (Test13: HARQ test 33% TP 3 rounds), (Test14: HARQ test 50% TP 2 rounds), @@ -1121,7 +1121,7 @@ -n100 -R217 -a110 -s5 -b100 -n100 -e27 -s30 -n100 -e16 -s10 - -n100 -q1 -e27 -s30 + -n100 -q1 -e26 -s30 -n100 -s1 -t25 -n100 -s1 -t33 -n100 -s1 -t50 From ced2a66f6e57e3afd77a7d547f0fc32e96fb2eaf Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Wed, 27 Apr 2022 18:36:01 +0200 Subject: [PATCH 149/150] fix(ci): changing the Docker Hub account to push to Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-push-registry | 13 +++++--- ci-scripts/provideUniqueImageTag.py | 6 ++-- .../4g_rfsimulator_fdd_05MHz/README.md | 28 ++++++++-------- ci-scripts/yaml_files/5g_l2sim_tdd/README.md | 32 +++++++++---------- .../yaml_files/5g_rfsimulator/README.md | 28 ++++++++-------- 5 files changed, 52 insertions(+), 55 deletions(-) diff --git a/ci-scripts/Jenkinsfile-push-registry b/ci-scripts/Jenkinsfile-push-registry index f5847ff0aa..bc1a80ba61 100644 --- a/ci-scripts/Jenkinsfile-push-registry +++ b/ci-scripts/Jenkinsfile-push-registry @@ -26,6 +26,9 @@ def nodeExecutor = params.nodeExecutor // Name of the phone resource def ciServerResource = params.serverResource +// Docker Hub account to push to +def DH_Account = "oaisoftwarealliance" + pipeline { agent { label nodeExecutor @@ -66,11 +69,11 @@ pipeline { def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue"] sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1" listOfImages.eachWithIndex { item, iindex -> - sh "docker image tag ${item}:develop ${DH_Username}/${item}:develop" - sh "docker image tag ${item}:develop ${DH_Username}/${item}:${WEEK_TAG}" - sh "docker push --quiet ${DH_Username}/${item}:${WEEK_TAG}" - sh "docker push --quiet ${DH_Username}/${item}:develop" - sh "docker rmi ${DH_Username}/${item}:${WEEK_TAG} ${DH_Username}/${item}:develop" + sh "docker image tag ${item}:develop ${DH_Account}/${item}:develop" + sh "docker image tag ${item}:develop ${DH_Account}/${item}:${WEEK_TAG}" + sh "docker push --quiet ${DH_Account}/${item}:${WEEK_TAG}" + sh "docker push --quiet ${DH_Account}/${item}:develop" + sh "docker rmi ${DH_Account}/${item}:${WEEK_TAG} ${DH_Account}/${item}:develop" } sh "docker logout > /dev/null 2>&1" } diff --git a/ci-scripts/provideUniqueImageTag.py b/ci-scripts/provideUniqueImageTag.py index ee8306402f..88d51ca6f8 100644 --- a/ci-scripts/provideUniqueImageTag.py +++ b/ci-scripts/provideUniqueImageTag.py @@ -5,15 +5,15 @@ import subprocess import sys AUTH_SERVICE = 'registry.docker.io' -AUTH_SCOPE = 'repository:rdefosseoai/oai-enb:pull' +AUTH_SCOPE = 'repository:oaisoftwarealliance/oai-enb:pull' def main() -> None: args = _parse_args() - cmd = 'curl -fsSL "https://auth.docker.io/token?service=' + AUTH_SERVICE + '&scope=' + AUTH_SCOPE + '" | jq --raw-output ".token"' + cmd = 'curl -fsSL "https://auth.docker.io/token?service=' + AUTH_SERVICE + '&scope=' + AUTH_SCOPE + '" 2>/dev/null | jq --raw-output ".token"' token = subprocess.check_output(cmd, shell=True, universal_newlines=True) token = str(token).strip() - cmd = 'curl -fsSL -H "Authorization: Bearer ' + token + '" "https://index.docker.io/v2/rdefosseoai/oai-enb/tags/list" | jq .' + cmd = 'curl -fsSL -H "Authorization: Bearer ' + token + '" "https://index.docker.io/v2/oaisoftwarealliance/oai-enb/tags/list" 2>/dev/null | jq .' listOfTags = subprocess.check_output(cmd, shell=True, universal_newlines=True) foundTag = False diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md index be0d63838b..1a947d0389 100644 --- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md +++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md @@ -31,9 +31,7 @@ This page is only valid for an `Ubuntu18` host. # 1. Retrieving the images on Docker-Hub # -Currently the images are hosted under the user account `rdefosseoai`. - -This may change in the future. +Currently the images are hosted under the team account `oaisoftwarealliance`. They were previously hosted under the user account `rdefosseoai`. Once again you may need to log on [docker-hub](https://hub.docker.com/) if your organization has reached pulling limit as `anonymous`. @@ -49,13 +47,13 @@ Now pull images. ```bash $ docker pull cassandra:2.1 $ docker pull redis:6.0.5 -$ docker pull rdefosseoai/oai-hss:latest -$ docker pull rdefosseoai/magma-mme:latest -$ docker pull rdefosseoai/oai-spgwc:latest -$ docker pull rdefosseoai/oai-spgwu-tiny:latest +$ docker pull oaisoftwarealliance/oai-hss:latest +$ docker pull oaisoftwarealliance/magma-mme:latest +$ docker pull oaisoftwarealliance/oai-spgwc:latest +$ docker pull oaisoftwarealliance/oai-spgwu-tiny:latest -$ docker pull rdefosseoai/oai-enb:develop -$ docker pull rdefosseoai/oai-lte-ue:develop +$ docker pull oaisoftwarealliance/oai-enb:develop +$ docker pull oaisoftwarealliance/oai-lte-ue:develop ``` If the `redis` tag is not available, pick the newest available `6.0.x` tag at [Docker Hub Redis Tags](https://hub.docker.com/_/redis?tab=tags). @@ -63,13 +61,13 @@ If the `redis` tag is not available, pick the newest available `6.0.x` tag at [D And **re-tag** them for tutorials' docker-compose file to work. ```bash -$ docker image tag rdefosseoai/oai-spgwc:latest oai-spgwc:latest -$ docker image tag rdefosseoai/oai-hss:latest oai-hss:latest -$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest -$ docker image tag rdefosseoai/magma-mme:latest magma-mme:latest +$ docker image tag oaisoftwarealliance/oai-spgwc:latest oai-spgwc:latest +$ docker image tag oaisoftwarealliance/oai-hss:latest oai-hss:latest +$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:latest +$ docker image tag oaisoftwarealliance/magma-mme:latest magma-mme:latest -$ docker image tag rdefosseoai/oai-enb:develop oai-enb:develop -$ docker image tag rdefosseoai/oai-lte-ue:develop oai-lte-ue:develop +$ docker image tag oaisoftwarealliance/oai-enb:develop oai-enb:develop +$ docker image tag oaisoftwarealliance/oai-lte-ue:develop oai-lte-ue:develop ``` ```bash diff --git a/ci-scripts/yaml_files/5g_l2sim_tdd/README.md b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md index f1e1287995..c3f631cf76 100644 --- a/ci-scripts/yaml_files/5g_l2sim_tdd/README.md +++ b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md @@ -18,9 +18,7 @@ This tutorial is only valid once this file is merged into the `develop` branch. # 1. Retrieving the images on Docker-Hub # -Currently the images are hosted under the user account `rdefosseoai`. - -This may change in the future. +Currently the images are hosted under the team account `oaisoftwarealliance`. They were previously hosted under the user account `rdefosseoai`. Once again you may need to log on [docker-hub](https://hub.docker.com/) if your organization has reached pulling limit as `anonymous`. @@ -35,27 +33,27 @@ Now pull images. ```bash $ docker pull mysql:5.7 -$ docker pull rdefosseoai/oai-amf:latest -$ docker pull rdefosseoai/oai-nrf:latest -$ docker pull rdefosseoai/oai-smf:latest -$ docker pull rdefosseoai/oai-spgwu-tiny:latest +$ docker pull oaisoftwarealliance/oai-amf:latest +$ docker pull oaisoftwarealliance/oai-nrf:latest +$ docker pull oaisoftwarealliance/oai-smf:latest +$ docker pull oaisoftwarealliance/oai-spgwu-tiny:latest -$ docker pull rdefosseoai/oai-gnb:develop -$ docker pull rdefosseoai/oai-nr-ue:develop -$ docker pull rdefosseoai/proxy:latest +$ docker pull oaisoftwarealliance/oai-gnb:develop +$ docker pull oaisoftwarealliance/oai-nr-ue:develop +$ docker pull oaisoftwarealliance/proxy:latest ``` And **re-tag** them for tutorials' docker-compose file to work. ```bash -$ docker image tag rdefosseoai/oai-amf:latest oai-amf:latest -$ docker image tag rdefosseoai/oai-nrf:latest oai-nrf:latest -$ docker image tag rdefosseoai/oai-smf:latest oai-smf:latest -$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest +$ docker image tag oaisoftwarealliance/oai-amf:latest oai-amf:latest +$ docker image tag oaisoftwarealliance/oai-nrf:latest oai-nrf:latest +$ docker image tag oaisoftwarealliance/oai-smf:latest oai-smf:latest +$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:latest -$ docker image tag rdefosseoai/oai-gnb:develop oai-gnb:develop -$ docker image tag rdefosseoai/oai-nr-ue:develop oai-nr-ue:develop -$ docker image tag rdefosseoai/proxy:latest oai-lte-multi-ue-proxy:latest +$ docker image tag oaisoftwarealliance/oai-gnb:develop oai-gnb:develop +$ docker image tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue:develop +$ docker image tag oaisoftwarealliance/proxy:latest oai-lte-multi-ue-proxy:latest ``` ```bash diff --git a/ci-scripts/yaml_files/5g_rfsimulator/README.md b/ci-scripts/yaml_files/5g_rfsimulator/README.md index 64c9084500..aa18571776 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator/README.md +++ b/ci-scripts/yaml_files/5g_rfsimulator/README.md @@ -35,9 +35,7 @@ This page is only valid for an `Ubuntu18` host. # 1. Retrieving the images on Docker-Hub # -Currently the images are hosted under the user account `rdefosseoai`. - -This may change in the future. +Currently the images are hosted under the team account `oaisoftwarealliance`. They were previously hosted under the user account `rdefosseoai`. Once again you may need to log on [docker-hub](https://hub.docker.com/) if your organization has reached pulling limit as `anonymous`. @@ -52,25 +50,25 @@ Now pull images. ```bash $ docker pull mysql:5.7 -$ docker pull rdefosseoai/oai-amf:latest -$ docker pull rdefosseoai/oai-nrf:latest -$ docker pull rdefosseoai/oai-smf:latest -$ docker pull rdefosseoai/oai-spgwu-tiny:latest +$ docker pull oaisoftwarealliance/oai-amf:latest +$ docker pull oaisoftwarealliance/oai-nrf:latest +$ docker pull oaisoftwarealliance/oai-smf:latest +$ docker pull oaisoftwarealliance/oai-spgwu-tiny:latest -$ docker pull rdefosseoai/oai-gnb:develop -$ docker pull rdefosseoai/oai-nr-ue:develop +$ docker pull oaisoftwarealliance/oai-gnb:develop +$ docker pull oaisoftwarealliance/oai-nr-ue:develop ``` And **re-tag** them for tutorials' docker-compose file to work. ```bash -$ docker image tag rdefosseoai/oai-amf:latest oai-amf:latest -$ docker image tag rdefosseoai/oai-nrf:latest oai-nrf:latest -$ docker image tag rdefosseoai/oai-smf:latest oai-smf:latest -$ docker image tag rdefosseoai/oai-spgwu-tiny:latest oai-spgwu-tiny:latest +$ docker image tag oaisoftwarealliance/oai-amf:latest oai-amf:latest +$ docker image tag oaisoftwarealliance/oai-nrf:latest oai-nrf:latest +$ docker image tag oaisoftwarealliance/oai-smf:latest oai-smf:latest +$ docker image tag oaisoftwarealliance/oai-spgwu-tiny:latest oai-spgwu-tiny:latest -$ docker image tag rdefosseoai/oai-gnb:develop oai-gnb:develop -$ docker image tag rdefosseoai/oai-nr-ue:develop oai-nr-ue:develop +$ docker image tag oaisoftwarealliance/oai-gnb:develop oai-gnb:develop +$ docker image tag oaisoftwarealliance/oai-nr-ue:develop oai-nr-ue:develop ``` ```bash From 8d43b9c4770b64b47f9f1fc89bf923e630c4741c Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Thu, 28 Apr 2022 09:47:05 +0200 Subject: [PATCH 150/150] NSA 2x2: Set bitrate threshold to mark test green (setup problem) --- ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml b/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml index 332af80d22..2ef2b7d7ce 100644 --- a/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml +++ b/ci-scripts/xml_files/fr1_nsa_2x2_quectel.xml @@ -120,6 +120,7 @@ DL nrmodule2_quectel 15 + 85 single-ue