From 5adc20ca0623f7d5341cbfadc2f785b4fa6f3012 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 18 Aug 2015 17:17:46 +0200 Subject: [PATCH 001/132] patch difference of TM7 dev with svn r7530 to git branch --- cmake_targets/CMakeLists.txt | 1 + common/utils/Makefile.inc | 2 +- openair1/PHY/INIT/lte_init.c | 42 +- .../LTE_ESTIMATION/bf_freq_domain_filters.m | 59 + openair1/PHY/LTE_ESTIMATION/defs.h | 7 + openair1/PHY/LTE_ESTIMATION/filt12_32.h | 72 + .../lte_dl_bf_channel_estimation.c | 96 ++ openair1/PHY/LTE_REFSIG/defs.h | 11 +- openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c | 393 +++++ openair1/PHY/LTE_REFSIG/lte_dl_uespec.c | 362 ----- openair1/PHY/LTE_REFSIG/lte_gold.c | 42 + openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 9 +- .../PHY/LTE_TRANSPORT/dlsch_demodulation.c | 795 +++++++++- .../PHY/LTE_TRANSPORT/dlsch_llr_computation.c | 12 +- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 1370 +++++++++-------- openair1/PHY/LTE_TRANSPORT/lte_mcs.c | 15 +- openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c | 217 +++ openair1/PHY/LTE_TRANSPORT/pmch.c | 5 +- openair1/PHY/LTE_TRANSPORT/proto.h | 49 +- openair1/PHY/MODULATION/slot_fep.c | 9 + openair1/PHY/Makefile.inc | 6 +- openair1/PHY/defs.h | 9 +- openair1/PHY/impl_defs_lte.h | 17 +- openair1/SCHED/phy_procedures_lte_eNb.c | 46 +- openair1/SCHED/phy_procedures_lte_ue.c | 27 +- openair1/SIMULATION/LTE_PHY/dlsim.c | 321 +++- openair1/SIMULATION/LTE_PHY/mbmssim.c | 2 +- targets/ARCH/EXMIMO/USERSPACE/OCTAVE/txsig.m | 18 +- 28 files changed, 2884 insertions(+), 1130 deletions(-) create mode 100644 openair1/PHY/LTE_ESTIMATION/bf_freq_domain_filters.m create mode 100644 openair1/PHY/LTE_ESTIMATION/filt12_32.h create mode 100644 openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c create mode 100644 openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c create mode 100644 openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 9bb062ba20..e3d2bed6f4 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -754,6 +754,7 @@ set(PHY_SRC ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_sync_timefreq.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_adjust_sync.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c + ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_est_freq_offset.c diff --git a/common/utils/Makefile.inc b/common/utils/Makefile.inc index b7a1c82379..8c4ebbe31e 100644 --- a/common/utils/Makefile.inc +++ b/common/utils/Makefile.inc @@ -5,7 +5,7 @@ linux := $(shell if [ `uname` = "Linux" ] ; then echo "1" ; else echo "0" ; fi) CFLAGS += -std=gnu99 -#CFLAGS += -Wall -g -ggdb -Wstrict-prototypes -fno-strict-aliasing +CFLAGS += -Wall -g -ggdb -Wstrict-prototypes -fno-strict-aliasing # Need to force this option because default kernel module builder is wrong CFLAGS += $(call cc-option,-mpreferred-stack-boundary=4) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 9adbe31916..51c4939c56 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -923,14 +923,17 @@ void phy_init_lte_ue__PDSCH( LTE_UE_PDSCH* const pdsch, const LTE_DL_FRAME_PARMS pdsch->llr128_2ndstream = (int16_t**)malloc16_clear( sizeof(int16_t*) ); // FIXME! no further allocation for (int16_t*)pdsch->llr128 !!! expect SIGSEGV - pdsch->rxdataF_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); - pdsch->rxdataF_comp0 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); - pdsch->rho = (int32_t**)malloc16_clear( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); - pdsch->dl_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); - pdsch->dl_ch_rho_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); - pdsch->dl_ch_rho2_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); - pdsch->dl_ch_mag0 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); - pdsch->dl_ch_magb0 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); + pdsch->rxdataF_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); + pdsch->rxdataF_uespec_pilots = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); + pdsch->rxdataF_comp0 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); + pdsch->rho = (int32_t**)malloc16_clear( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); + pdsch->dl_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); + pdsch->dl_bf_ch_estimates = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); + pdsch->dl_bf_ch_estimates_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); + pdsch->dl_ch_rho_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); + pdsch->dl_ch_rho2_ext = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); + pdsch->dl_ch_mag0 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); + pdsch->dl_ch_magb0 = (int32_t**)malloc16_clear( 8*sizeof(int32_t*) ); // the allocated memory size is fixed: AssertFatal( frame_parms->nb_antennas_rx <= 2, "nb_antennas_rx > 2" ); @@ -941,13 +944,16 @@ void phy_init_lte_ue__PDSCH( LTE_UE_PDSCH* const pdsch, const LTE_DL_FRAME_PARMS for (int j=0; j<4; j++) { //frame_parms->nb_antennas_tx; j++) const int idx = (j<<1)+i; const size_t num = 7*2*frame_parms->N_RB_DL*12; - pdsch->rxdataF_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); - pdsch->rxdataF_comp0[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); - pdsch->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); - pdsch->dl_ch_rho_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); - pdsch->dl_ch_rho2_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); - pdsch->dl_ch_mag0[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); - pdsch->dl_ch_magb0[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); + pdsch->rxdataF_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); + pdsch->rxdataF_uespec_pilots[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * frame_parms->N_RB_DL*12); + pdsch->rxdataF_comp0[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); + pdsch->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); + pdsch->dl_bf_ch_estimates[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); + pdsch->dl_bf_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->symbols_per_tti*(frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH) ); + pdsch->dl_ch_rho_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); + pdsch->dl_ch_rho2_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); + pdsch->dl_ch_mag0[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); + pdsch->dl_ch_magb0[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); } } } @@ -1268,10 +1274,10 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, if (abstraction_flag==0) { // TX vars - eNB_common_vars->txdata[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_tx*sizeof(int32_t*) ); - eNB_common_vars->txdataF[eNB_id] = (mod_sym_t **)malloc16( frame_parms->nb_antennas_tx*sizeof(mod_sym_t*) ); + eNB_common_vars->txdata[eNB_id] = (int32_t**)malloc16(phy_vars_eNB->nb_antennas_tx_phy*sizeof(int32_t*) ); + eNB_common_vars->txdataF[eNB_id] = (mod_sym_t **)malloc16(phy_vars_eNB->nb_antennas_tx_phy*sizeof(mod_sym_t*) ); - for (i=0; inb_antennas_tx; i++) { + for (i=0; inb_antennas_tx_phy; i++) { #ifdef USER_MODE eNB_common_vars->txdata[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) ); eNB_common_vars->txdataF[eNB_id][i] = (mod_sym_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t) ); diff --git a/openair1/PHY/LTE_ESTIMATION/bf_freq_domain_filters.m b/openair1/PHY/LTE_ESTIMATION/bf_freq_domain_filters.m new file mode 100644 index 0000000000..557c54dddd --- /dev/null +++ b/openair1/PHY/LTE_ESTIMATION/bf_freq_domain_filters.m @@ -0,0 +1,59 @@ +filter_length = 12; + +F = -3/4:1/4:7/4; +F_l = zeros(8,12); +F_r = zeros(8,12); +F_m = zeros(8,12); + +F2 =-3/5:1/5:8/5; + +for i=0:3 + F_l(i+1,:) = floor(16384*[F(8+i:-1:4) zeros(1,7-i)]); + F_r(i+1,:) = floor(16384*[zeros(1,4+i) F(4:end-i)]); + F_m(i+1,:) = floor(16384*[F(4-i:8) F(7:-1:1+i)]); +end + +for i=0:1 + F_l(i+5,:) = floor(16384*[F(8:-1:4-i) zeros(1,7-i)]); + F_r(i+5,:) = floor(16384*[zeros(1,5+i) F2(5+i) F2(7:end-i)]); + F_m(i+5,:) = floor(16384*[F(4-i:8) F2(8-i) F2(6:-1:1+i)]); +end + +for i=2:3 + F_l(i+5,:) = floor(16384*[F2(end:-1:7) F2(8-i) zeros(1,5)]); + F_r(i+5,:) = floor(16384*[zeros(1,4+i) F(4:end-i)]); + F_m(i+5,:) = floor(16384*[F2(4-i:6) F2(4+i) F(8:-1:1+i)]); +end + + +fd = fopen("filt12_32.h","w"); + +for i=0:3 + fprintf(fd,"short filt12_l%d[12] = {\n",i); + fprintf(fd,"%d,",F_l(i+1,1:end-1)); + fprintf(fd,"%d};\n\n",F_l(i+1,end)); + + fprintf(fd,"short filt12_r%d[12] = {\n",i); + fprintf(fd,"%d,",F_r(i+1,1:end-1)); + fprintf(fd,"%d};\n\n",F_r(i+1,end)); + + fprintf(fd,"short filt12_m%d[12] = {\n",i); + fprintf(fd,"%d,",F_m(i+1,1:end-1)); + fprintf(fd,"%d};\n\n",F_m(i+1,end)); +end + +for i=0:3 + fprintf(fd,"short filt12_l%d_dc[12] = {\n",i); + fprintf(fd,"%d,",F_l(i+5,1:end-1)); + fprintf(fd,"%d};\n\n",F_l(i+5,end)); + + fprintf(fd,"short filt12_r%d_dc[12] = {\n",i); + fprintf(fd,"%d,",F_r(i+5,1:end-1)); + fprintf(fd,"%d};\n\n",F_r(i+5,end)); + + fprintf(fd,"short filt12_m%d_dc[12] = {\n",i); + fprintf(fd,"%d,",F_m(i+5,1:end-1)); + fprintf(fd,"%d};\n\n",F_m(i+5,end)); +end + +fclose(fd); diff --git a/openair1/PHY/LTE_ESTIMATION/defs.h b/openair1/PHY/LTE_ESTIMATION/defs.h index ee8d9d8c6f..4763602525 100644 --- a/openair1/PHY/LTE_ESTIMATION/defs.h +++ b/openair1/PHY/LTE_ESTIMATION/defs.h @@ -124,6 +124,13 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, uint8_t symbol); +int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, + module_id_t eNB_id, + uint8_t eNB_offset, + uint8_t Ns, + uint8_t p, + uint8_t symbol); + int lte_dl_msbfn_channel_estimation(PHY_VARS_UE *phy_vars_ue, module_id_t eNB_id, uint8_t eNB_offset, diff --git a/openair1/PHY/LTE_ESTIMATION/filt12_32.h b/openair1/PHY/LTE_ESTIMATION/filt12_32.h new file mode 100644 index 0000000000..602f7c2c3f --- /dev/null +++ b/openair1/PHY/LTE_ESTIMATION/filt12_32.h @@ -0,0 +1,72 @@ +short filt12_l0[12] = { +16384,12288,8192,4096,0,0,0,0,0,0,0,0}; + +short filt12_r0[12] = { +0,0,0,0,0,4096,8192,12288,16384,20480,24576,28672}; + +short filt12_m0[12] = { +0,4096,8192,12288,16384,12288,8192,4096,0,-4096,-8192,-12288}; + +short filt12_l1[12] = { +20480,16384,12288,8192,4096,0,0,0,0,0,0,0}; + +short filt12_r1[12] = { +0,0,0,0,0,0,4096,8192,12288,16384,20480,24576}; + +short filt12_m1[12] = { +-4096,0,4096,8192,12288,16384,12288,8192,4096,0,-4096,-8192}; + +short filt12_l2[12] = { +24576,20480,16384,12288,8192,4096,0,0,0,0,0,0}; + +short filt12_r2[12] = { +0,0,0,0,0,0,0,4096,8192,12288,16384,20480}; + +short filt12_m2[12] = { +-8192,-4096,0,4096,8192,12288,16384,12288,8192,4096,0,-4096}; + +short filt12_l3[12] = { +28672,24576,20480,16384,12288,8192,4096,0,0,0,0,0}; + +short filt12_r3[12] = { +0,0,0,0,0,0,0,0,4096,8192,12288,16384}; + +short filt12_m3[12] = { +-12288,-8192,-4096,0,4096,8192,12288,16384,12288,8192,4096,0}; + +short filt12_l0_dc[12] = { +16384,12288,8192,4096,0,0,0,0,0,0,0,0}; + +short filt12_r0_dc[12] = { +0,0,0,0,0,3276,9830,13107,16384,19660,22937,26214}; + +short filt12_m0_dc[12] = { +0,4096,8192,12288,16384,13107,6553,3276,0,-3277,-6554,-9831}; + +short filt12_l1_dc[12] = { +16384,12288,8192,4096,0,-4096,0,0,0,0,0,0}; + +short filt12_r1_dc[12] = { +0,0,0,0,0,0,6553,9830,13107,16384,19660,22937}; + +short filt12_m1_dc[12] = { +-4096,0,4096,8192,12288,16384,9830,6553,3276,0,-3277,-6554}; + +short filt12_l2_dc[12] = { +26214,22937,19660,16384,13107,9830,6553,0,0,0,0,0}; + +short filt12_r2_dc[12] = { +0,0,0,0,0,0,0,4096,8192,12288,16384,20480}; + +short filt12_m2_dc[12] = { +-6554,-3277,0,3276,6553,6553,16384,12288,8192,4096,0,-4096}; + +short filt12_l3_dc[12] = { +26214,22937,19660,16384,13107,9830,3276,0,0,0,0,0}; + +short filt12_r3_dc[12] = { +0,0,0,0,0,0,0,0,4096,8192,12288,16384}; + +short filt12_m3_dc[12] = { +-9831,-6554,-3277,0,3276,6553,9830,16384,12288,8192,4096,0}; + diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c new file mode 100644 index 0000000000..9707b15b35 --- /dev/null +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -0,0 +1,96 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ +#ifdef USER_MODE +#include +#endif +#include "defs.h" +#include "PHY/defs.h" +#include "filt12_32.h" +//#define DEBUG_CH + +/*To be accomplished*/ +int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, + uint8_t eNB_id, + uint8_t eNB_offset, + unsigned char Ns, + unsigned char p, + unsigned char symbol) +{ + + unsigned char aarx; + int uespec_pilot[9][200]; + short *pil, *rxF; + + //LTE_UE_PDSCH *lte_ue_pdsch_vars = phy_vars_ue->lte_ue_pdsch_vars[eNB_id]; + int **rxdataF = phy_vars_ue->lte_ue_common_vars.rxdataF; + int32_t **dl_bf_ch_estimates = phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates; + + int beamforming_mode = phy_vars_ue->transmission_mode>7?phy_vars_ue->transmission_mode : 0; + + // define interpolation filters + //.... + + //ch_offset = phy_vars_ue->lte_frame_parms.ofdm_symbol_size*symbol; + + //generate ue specific pilots + if(beamforming_mode==7) + lte_dl_ue_spec_rx(phy_vars_ue,&uespec_pilot[p-5][0],Ns,p,0); + else if (beamforming_mode>7) + lte_dl_ue_spec_rx(phy_vars_ue,&uespec_pilot[p-6][0],Ns,p,0); + else if (beamforming_mode==0) + msg("No beamforming is performed.\n"); + else + msg("Beamforming mode not supported yet.\n"); + + + if(beamforming_mode==7) { + + for (aarx=0; aarxlte_frame_parms.nb_antennas_rx;aarx++) { + + /* pil = (short *)&uespec_pilot[0][0]; + rxF = (short *)&rxdataF_uespec[aarx][(symbol-1)/3*frame_parms->N_RB_DL*(3+frame_parms->Ncp)]; + dl_ch = (short *)&dl_bf_ch_estimates[aarx][ch_offset]; + + memset(dl_ch,0,4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)); + //estimation and interpolation */ + } + + } else if (beamforming_mode==0){ + msg("No beamforming is performed.\n"); + return(-1); + } else { + msg("Beamforming mode is not supported yet.\n"); + return(-1); + } + + //temporal interpolation + + return(0); + +} diff --git a/openair1/PHY/LTE_REFSIG/defs.h b/openair1/PHY/LTE_REFSIG/defs.h index 2127380565..e9482060a7 100644 --- a/openair1/PHY/LTE_REFSIG/defs.h +++ b/openair1/PHY/LTE_REFSIG/defs.h @@ -52,12 +52,13 @@ unsigned int lte_gold_generic(unsigned int *x1, unsigned int *x2, unsigned char void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14],uint16_t Nid_cell); +void lte_gold_ue_spec(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_cell, uint16_t *n_idDMRS); + /*!\brief This function generates the LTE Gold sequence (36-211, Sec 7.2), specifically for DL UE-specific reference signals for antenna ports 7..14. @param frame_parms LTE DL Frame parameters @param lte_gold_uespec_table pointer to table where sequences are stored @param Nid_cell Cell Id (to compute sequences for local and adjacent cells) @param n_idDMRS Scrambling identity for TM10*/ -void lte_gold_ue_spec(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_cell, uint16_t *n_idDMRS); void lte_gold_mbsfn(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_mbsfn_table[10][3][42],uint16_t Nid_MBSFN); @@ -84,6 +85,7 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB, @param output Output vector for OFDM symbol (Frequency Domain) @param amp Q15 amplitude @param Ns Slot number (0..19) +@param lprime symbol (0,1) @param p antenna index @param SS_flag Flag to indicate special subframe */ @@ -92,6 +94,7 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, mod_sym_t *output, short amp, uint8_t Ns, + uint8_t lprime, uint8_t p, int SS_flag ); @@ -123,6 +126,12 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *phy_vars_ue, unsigned char l, unsigned char p); +int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, + mod_sym_t *output, + unsigned char Ns, + unsigned char p, + int SS_flag); + int lte_dl_mbsfn_rx(PHY_VARS_UE *phy_vars_ue, int *output, int subframe, diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c new file mode 100644 index 0000000000..64c4e8782e --- /dev/null +++ b/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c @@ -0,0 +1,393 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ + +/*! \file PHY/LTE_REFSIG/lte_dl_ue_spec.c +* \brief Top-level routines for generating UE-specific Reference signals from 36-211, V11.3.0 2013-06 +* \author R. Knopp X. Jiang +* \date 2015 +* \version 0.1 +* \company Eurecom +* \email: knopp@eurecom.fr xiwen.jiang@eurecom.fr +* \note +* \warning +*/ + +#ifdef USER_MODE +#include +#include +#endif + +#include "defs.h" +#include "PHY/defs.h" +#include "log.h" + +//extern unsigned int lte_gold_table[3][20][2][14]; +//#define DEBUG_DL_CELL_SPEC + +int Wbar_NCP[8][4] = {{1,1,1,1},{1,-1,1,-1},{1,1,1,1},{1,-1,1,-1},{1,1,-1,-1},{-1,-1,1,1},{1,-1,-1,1},{-1,1,1,-1}}; + +int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, + uint8_t UE_id, + mod_sym_t *output, + short amp, + uint8_t Ns, + uint8_t lprime, + uint8_t p, + int SS_flag ) +{ + + mod_sym_t qpsk[4],nqpsk[4]; + int16_t k=0,a; + int mprime,mprime_dword,mprime_qpsk_symb; + unsigned nushift,kprime; + // LTE_eNB_DLSCH_t *dlsch = phy_vars_eNB->dlsch_eNB[UE_id][0]; + + a = (amp*ONE_OVER_SQRT2_Q15)>>15; + ((short *)&qpsk[0])[0] = a; + ((short *)&qpsk[0])[1] = a; + ((short *)&qpsk[1])[0] = -a; + ((short *)&qpsk[1])[1] = a; + ((short *)&qpsk[2])[0] = a; + ((short *)&qpsk[2])[1] = -a; + ((short *)&qpsk[3])[0] = -a; + ((short *)&qpsk[3])[1] = -a; + + ((short *)&nqpsk[0])[0] = -a; + ((short *)&nqpsk[0])[1] = -a; + ((short *)&nqpsk[1])[0] = a; + ((short *)&nqpsk[1])[1] = -a; + ((short *)&nqpsk[2])[0] = -a; + ((short *)&nqpsk[2])[1] = a; + ((short *)&nqpsk[3])[0] = a; + ((short *)&nqpsk[3])[1] = a; + + if (p==5) { + if (SS_flag==0) { + if (phy_vars_eNB->lte_frame_parms.Ncp == NORMAL) { + // this is 3GPP 36-211 6.10.3.2, NORMAL CP, p=5 + + nushift = phy_vars_eNB->lte_frame_parms.Nid_cell%3; + + if(lprime==0){ + kprime=nushift; + }else{ + kprime=(nushift+2*lprime)%4; + } + + k = kprime+phy_vars_eNB->lte_frame_parms.first_carrier_offset; + printf("lte_dl_ue_spec:k=%d\n",k); + + for (mprime=0;mprime<3*phy_vars_eNB->lte_frame_parms.N_RB_DL-1;mprime++) { + mprime_dword = mprime>>4; + mprime_qpsk_symb = mprime&0xf; + + //output[k] = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + output[k] = 0xffffffff; + + k += 4; + if (k >= phy_vars_eNB->lte_frame_parms.ofdm_symbol_size) { + k++; // skip DC carrier + k-=phy_vars_eNB->lte_frame_parms.ofdm_symbol_size; + } + + } + } + } + } else if (p>=7) { + printf("lte_dl_ue_spec:antenna ports >=7 not supported yet!\n"); + } else { + LOG_E(PHY,"Illegal p %d UE specific pilots\n",p); + } + + return(0); +} + + +int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, + mod_sym_t *output, + unsigned char Ns, + unsigned char p, + int SS_flag) +{ + mod_sym_t qpsk[4],nqpsk[4],*qpsk_p,*output_p; + int16_t a; + int w,lprime,mprime,ind,l,ind_dword,ind_qpsk_symb,nPRB; + short pamp; + + // Compute the correct pilot amplitude, sqrt_rho_b = Q3.13 + pamp = ONE_OVER_SQRT2_Q15; + + // This includes complex conjugate for channel estimation + ((short *)&qpsk[0])[0] = pamp; + ((short *)&qpsk[0])[1] = -pamp; + ((short *)&qpsk[1])[0] = -pamp; + ((short *)&qpsk[1])[1] = -pamp; + ((short *)&qpsk[2])[0] = pamp; + ((short *)&qpsk[2])[1] = pamp; + ((short *)&qpsk[3])[0] = -pamp; + ((short *)&qpsk[3])[1] = pamp; + + ((short *)&nqpsk[0])[0] = -pamp; + ((short *)&nqpsk[0])[1] = pamp; + ((short *)&nqpsk[1])[0] = pamp; + ((short *)&nqpsk[1])[1] = pamp; + ((short *)&nqpsk[2])[0] = -pamp; + ((short *)&nqpsk[2])[1] = -pamp; + ((short *)&nqpsk[3])[0] = pamp; + ((short *)&nqpsk[3])[1] = -pamp; + + if (p>=7) { + if (SS_flag==0) { + if (phy_vars_ue->lte_frame_parms.Ncp == NORMAL) { + // this is 3GPP 36-211 6.10.3.2, NORMAL CP, p>=7 + + output_p = output; + + for (lprime=0; lprime<2; lprime++) { + + ind = 3*lprime*phy_vars_ue->lte_frame_parms.N_RB_DL; + l = lprime + ((Ns&1)<<1); + + // loop over pairs of PRBs, this is the periodicity of the W_bar_NCP sequence + // unroll the computations for the 6 pilots, select qpsk or nqpsk as function of W_bar_NCP + for (nPRB=0; nPRBlte_frame_parms.N_RB_DL; nPRB+=2) { + + // First pilot + w = Wbar_NCP[p-7][l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + + + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + + w = Wbar_NCP[p-7][3-l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + + // Second pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + + w = Wbar_NCP[p-7][l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + // Third pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + + // Fourth pilot + w = Wbar_NCP[p-7][3-l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + + + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + + w = Wbar_NCP[p-7][l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + + // Fifth pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + + w = Wbar_NCP[p-7][3-l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + // Sixth pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + } + } + } else { + LOG_E(PHY,"Special subframe not supported for UE specific pilots yet\n"); + } + } + } else if (p==5) { + if (SS_flag==0) { + if (phy_vars_ue->lte_frame_parms.Ncp == NORMAL) { + + for (lprime=0;lprime<2;lprime++) { + ind = 3*lprime*phy_vars_ue->lte_frame_parms.N_RB_DL; + + for (mprime=0;mprime<3*phy_vars_ue->lte_frame_parms.N_RB_DL-1;mprime++) { + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_port5_table[Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + *output_p++; + } + } + } + } + } else { + LOG_E(PHY,"Illegal p %d UE specific pilots\n",p); + } + + return(0); +} + + + +#ifdef LTE_DL_CELL_SPEC_MAIN + + + +//extern int write_output(const char *,const char *,void *,int,int,char); +// flag change eren +extern int write_output(const char *,const char *,void *,int,int,char); +main() +{ + + unsigned short Nid_cell=0; + unsigned int Ncp = 0; + int output00[1024]; + int output01[1024]; + int output10[1024]; + int output11[1024]; + + memset(output00,0,1024*sizeof(int)); + memset(output01,0,1024*sizeof(int)); + memset(output10,0,1024*sizeof(int)); + memset(output11,0,1024*sizeof(int)); + + lte_gold(Nid_cell,Ncp); + + lte_dl_ue_spec(output00, + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 0, + 0, + 0); + + lte_dl_ue_spec(output10, + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 1, + 0, + 0); + + lte_dl_ue_spec(output01, + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 0, + 1, + 0); + + lte_dl_ue_spec(output11, + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 1, + 1, + 0); + + + write_output("dl_ue_spec00.m","dl_cs00",output00,1024,1,1); + write_output("dl_ue_spec01.m","dl_cs01",output01,1024,1,1); + write_output("dl_ue_spec10.m","dl_cs10",output10,1024,1,1); + write_output("dl_ue_spec11.m","dl_cs11",output11,1024,1,1); +} + + +#endif diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c index b40f6ddfda..e69de29bb2 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c @@ -1,362 +0,0 @@ -/******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom - - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . - - Contact Information - OpenAirInterface Admin: openair_admin@eurecom.fr - OpenAirInterface Tech : openair_tech@eurecom.fr - OpenAirInterface Dev : openair4g-devel@eurecom.fr - - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - - *******************************************************************************/ - -/*! \file PHY/LTE_REFSIG/lte_dl_uespec.c -* \brief Top-level routines for generating UE-specific Reference signals from 36-211, V11.3.0 2013-06 -* \author R. Knopp -* \date 2014 -* \version 0.1 -* \company Eurecom -* \email: knopp@eurecom.fr -* \note -* \warning -*/ - -#ifdef USER_MODE -#include -#include -#endif - -#include "defs.h" -#include "PHY/defs.h" -#include "log.h" - -//extern unsigned int lte_gold_table[3][20][2][14]; -//#define DEBUG_DL_CELL_SPEC - -int Wbar_NCP[8][4] = {{1,1,1,1},{1,-1,1,-1},{1,1,1,1},{1,-1,1,-1},{1,1,-1,-1},{-1,-1,1,1},{1,-1,-1,1},{-1,1,1,-1}}; - -int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, - uint8_t UE_id, - mod_sym_t *output, - short amp, - uint8_t Ns, - uint8_t p, - int SS_flag ) -{ - - mod_sym_t qpsk[4],nqpsk[4],*qpsk_p,*output_p; - int16_t a; - int w,lprime,ind,l,ind_dword,ind_qpsk_symb,nPRB; - // LTE_eNB_DLSCH_t *dlsch = phy_vars_eNB->dlsch_eNB[UE_id][0]; - - a = (amp*ONE_OVER_SQRT2_Q15)>>15; - ((short *)&qpsk[0])[0] = a; - ((short *)&qpsk[0])[1] = a; - ((short *)&qpsk[1])[0] = -a; - ((short *)&qpsk[1])[1] = a; - ((short *)&qpsk[2])[0] = a; - ((short *)&qpsk[2])[1] = -a; - ((short *)&qpsk[3])[0] = -a; - ((short *)&qpsk[3])[1] = -a; - - ((short *)&nqpsk[0])[0] = -a; - ((short *)&nqpsk[0])[1] = -a; - ((short *)&nqpsk[1])[0] = a; - ((short *)&nqpsk[1])[1] = -a; - ((short *)&nqpsk[2])[0] = -a; - ((short *)&nqpsk[2])[1] = a; - ((short *)&nqpsk[3])[0] = a; - ((short *)&nqpsk[3])[1] = a; - - if (p>=7) { - if (SS_flag==0) { - if (phy_vars_eNB->lte_frame_parms.Ncp == NORMAL) { - // this is 3GPP 36-211 6.10.3.2, NORMAL CP, p>=7 - - - - // position output pointer to 5th symbol in slot - output_p = output+(60*phy_vars_eNB->lte_frame_parms.N_RB_DL); - - // shift to 2nd RE in PRB for p=7,8,11,13 - if ((p==7) || (p==8) || (p==11) || (p==13)) output_p++; - - - for (lprime=0; lprime<2; lprime++) { - - ind = 3*lprime*phy_vars_eNB->lte_frame_parms.N_RB_DL; - l = lprime + ((Ns&1)<<1); - - // loop over pairs of PRBs, this is the periodicity of the W_bar_NCP sequence - // unroll the computations for the 6 pilots, select qpsk or nqpsk as function of W_bar_NCP - for (nPRB=0; nPRBlte_frame_parms.N_RB_DL; nPRB+=2) { - - // First pilot - w = Wbar_NCP[p-7][l]; - qpsk_p = (w==1) ? qpsk : nqpsk; - - - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; - - *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; - - -#ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,mprime_dword,mprime_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); -#endif - - output_p+=5; - ind++; - - w = Wbar_NCP[p-7][3-l]; - qpsk_p = (w==1) ? qpsk : nqpsk; - - // Second pilot - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; - - *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; - -#ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,mprime_dword,mprime_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); -#endif - - output_p+=5; - ind++; - - w = Wbar_NCP[p-7][l]; - qpsk_p = (w==1) ? qpsk : nqpsk; - // Third pilot - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; - - *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; - -#ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,mprime_dword,mprime_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); -#endif - - output_p+=2; - ind++; - - // Fourth pilot - w = Wbar_NCP[p-7][3-l]; - qpsk_p = (w==1) ? qpsk : nqpsk; - - - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; - - *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; - - -#ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,mprime_dword,mprime_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); -#endif - - output_p+=5; - ind++; - - w = Wbar_NCP[p-7][l]; - qpsk_p = (w==1) ? qpsk : nqpsk; - - // Fifth pilot - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; - - *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; - -#ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,mprime_dword,mprime_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); -#endif - - output_p+=5; - ind++; - - w = Wbar_NCP[p-7][3-l]; - qpsk_p = (w==1) ? qpsk : nqpsk; - // Sixth pilot - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; - - *output_p = qpsk_p[(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; - -#ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,mprime_dword,mprime_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); -#endif - - output_p+=2; - ind++; - } - } - } else { - LOG_E(PHY,"Special subframe not supported for UE specific pilots yet\n"); - } - } - } else if (p==5) { - LOG_E(PHY,"p=5 not supported for UE specific pilots yet\n"); - } else { - LOG_E(PHY,"Illegal p %d UE specific pilots\n",p); - } - - return(0); -} - -/* -int lte_dl_cell_spec_rx(PHY_VARS_UE *phy_vars_ue, - uint8_t eNB_offset, - int *output, - unsigned char Ns, - unsigned char l, - unsigned char p) { - - - unsigned char mprime,mprime_dword,mprime_qpsk_symb,m; - unsigned short k=0; - unsigned int qpsk[4]; - short pamp; - - // Compute the correct pilot amplitude, sqrt_rho_b = Q3.13 - pamp = ONE_OVER_SQRT2_Q15; - - // This includes complex conjugate for channel estimation - - ((short *)&qpsk[0])[0] = pamp; - ((short *)&qpsk[0])[1] = -pamp; - ((short *)&qpsk[1])[0] = -pamp; - ((short *)&qpsk[1])[1] = -pamp; - ((short *)&qpsk[2])[0] = pamp; - ((short *)&qpsk[2])[1] = pamp; - ((short *)&qpsk[3])[0] = -pamp; - ((short *)&qpsk[3])[1] = pamp; - - mprime = 110 - phy_vars_ue->lte_frame_parms.N_RB_DL; - - for (m=0;mlte_frame_parms.N_RB_DL<<1;m++) { - - mprime_dword = mprime>>4; - mprime_qpsk_symb = mprime&0xf; - - // this is r_mprime from 3GPP 36-211 6.10.1.2 - output[k] = qpsk[(phy_vars_ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3]; -#ifdef DEBUG_DL_CELL_SPEC - printf("Ns %d, l %d, m %d,mprime_dword %d, mprime_qpsk_symbol %d\n", - Ns,l,m,mprime_dword,mprime_qpsk_symb); - printf("index = %d (k %d)\n",(phy_vars_ue->lte_gold_table[eNB_offset][Ns][l][mprime_dword]>>(2*mprime_qpsk_symb))&3,k); -#endif - - mprime++; -#ifdef DEBUG_DL_CELL_SPEC - if (m<4) - printf("Ns %d l %d output[%d] = (%d,%d)\n",Ns,l,k,((short *)&output[k])[0],((short *)&output[k])[1]); -#endif - k++; - } - return(0); -} - -*/ - -#ifdef LTE_DL_CELL_SPEC_MAIN - - - -//extern int write_output(const char *,const char *,void *,int,int,char); -// flag change eren -extern int write_output(const char *,const char *,void *,int,int,char); -main() -{ - - unsigned short Nid_cell=0; - unsigned int Ncp = 0; - int output00[1024]; - int output01[1024]; - int output10[1024]; - int output11[1024]; - - memset(output00,0,1024*sizeof(int)); - memset(output01,0,1024*sizeof(int)); - memset(output10,0,1024*sizeof(int)); - memset(output11,0,1024*sizeof(int)); - - lte_gold(Nid_cell,Ncp); - - lte_dl_cell_spec(output00, - ONE_OVER_SQRT2_Q15, - 50, - Nid_cell, - Ncp, - 0, - 0, - 0, - 0); - - lte_dl_cell_spec(output10, - ONE_OVER_SQRT2_Q15, - 50, - Nid_cell, - Ncp, - 0, - 1, - 0, - 0); - - lte_dl_cell_spec(output01, - ONE_OVER_SQRT2_Q15, - 50, - Nid_cell, - Ncp, - 0, - 0, - 1, - 0); - - lte_dl_cell_spec(output11, - ONE_OVER_SQRT2_Q15, - 50, - Nid_cell, - Ncp, - 0, - 1, - 1, - 0); - - - write_output("dl_cell_spec00.m","dl_cs00",output00,1024,1,1); - write_output("dl_cell_spec01.m","dl_cs01",output01,1024,1,1); - write_output("dl_cell_spec10.m","dl_cs10",output10,1024,1,1); - write_output("dl_cell_spec11.m","dl_cs11",output11,1024,1,1); -} - - -#endif diff --git a/openair1/PHY/LTE_REFSIG/lte_gold.c b/openair1/PHY/LTE_REFSIG/lte_gold.c index 2463d73b79..456a2b17d1 100644 --- a/openair1/PHY/LTE_REFSIG/lte_gold.c +++ b/openair1/PHY/LTE_REFSIG/lte_gold.c @@ -142,6 +142,48 @@ void lte_gold_ue_spec(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_uespec_t } } +void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][2][21],uint16_t Nid_cell, uint16_t n_rnti) +{ + + unsigned char ns,l; + unsigned int n,x1,x2; + + + for (ns=0; ns<20; ns++) { + + for (l=0; l<2; l++) { + + + x2 = ((((ns>>1)+1)*((Nid_cell<<1)+1))<<16) + n_rnti; + //x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit + //n = 0 + // printf("cinit (ns %d, l %d) => %d\n",ns,l,x2); + x1 = 1+ (1<<31); + x2=x2 ^ ((x2 ^ (x2>>1) ^ (x2>>2) ^ (x2>>3))<<31); + + // skip first 50 double words (1600 bits) + //printf("n=0 : x1 %x, x2 %x\n",x1,x2); + for (n=1; n<50; n++) { + x1 = (x1>>1) ^ (x1>>4); + x1 = x1 ^ (x1<<31) ^ (x1<<28); + x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4); + x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28); + // printf("x1 : %x, x2 : %x\n",x1,x2); + } + + for (n=0; n<14; n++) { + x1 = (x1>>1) ^ (x1>>4); + x1 = x1 ^ (x1<<31) ^ (x1<<28); + x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4); + x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28); + lte_gold_uespec_port5_table[ns][l][n] = x1^x2; + // printf("n=%d : c %x\n",n,x1^x2); + } + + } + } +} + /*! \brief gold sequenquence generator \param x1 \param x2 this should be set to c_init if reset=1 diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index 5dd2f9b5f9..db95c2362c 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -259,6 +259,7 @@ int dlsch_encoding(unsigned char *a, unsigned char mod_order; unsigned int Kr=0,Kr_bytes,r,r_offset=0; unsigned short m=dlsch->harq_processes[harq_pid]->mcs; + uint8_t transmission_mode_7to9=0; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING, VCD_FUNCTION_IN); @@ -266,7 +267,13 @@ int dlsch_encoding(unsigned char *a, // printf("Encoder: A: %d\n",A); mod_order = get_Qm(dlsch->harq_processes[harq_pid]->mcs); - G = get_G(frame_parms,nb_rb,dlsch->harq_processes[harq_pid]->rb_alloc,mod_order,dlsch->harq_processes[harq_pid]->Nl,num_pdcch_symbols,frame,subframe); + if(dlsch->harq_processes[harq_pid]->mimo_mode == TM7) + transmission_mode_7to9 = 7; + else if(dlsch->harq_processes[harq_pid]->mimo_mode == TM8) + transmission_mode_7to9 = 8; + else if(dlsch->harq_processes[harq_pid]->mimo_mode == TM9_10) + transmission_mode_7to9 = 9; + G = get_G(frame_parms,nb_rb,dlsch->harq_processes[harq_pid]->rb_alloc,mod_order,dlsch->harq_processes[harq_pid]->Nl,num_pdcch_symbols,frame,subframe,transmission_mode_7to9); // if (dlsch->harq_processes[harq_pid]->Ndi == 1) { // this is a new packet diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index a1f1173ede..3aa3f72312 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -1,4 +1,4 @@ -/******************************************************************************* +/****************************************************************************** OpenAirInterface Copyright(c) 1999 - 2014 Eurecom @@ -74,7 +74,6 @@ unsigned char offset_mumimo_llr_drange[29][3]={{7, 8, 7},{6, 6, 7},{6, 6, 7},{6, */ unsigned char offset_mumimo_llr_drange[29][3]= {{0, 6, 5},{0, 4, 5},{0, 4, 5},{0, 5, 4},{0, 5, 6},{0, 5, 3},{0, 4, 4},{0, 4, 4},{0, 3, 3},{0, 1, 2},{1, 1, 0},{1, 3, 2},{3, 4, 1},{2, 0, 0},{2, 2, 2},{1, 1, 1},{2, 1, 0},{2, 1, 1},{1, 0, 1},{1, 0, 1},{0, 0, 0},{1, 0, 0},{0, 0, 0},{0, 1, 0},{1, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0},{0, 0, 0}}; - extern void print_shorts(char *s,__m128i *x); int rx_pdsch(PHY_VARS_UE *phy_vars_ue, @@ -99,6 +98,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, unsigned short nb_rb; int avgs, rb; LTE_DL_UE_HARQ_t *dlsch0_harq,*dlsch1_harq = 0; + + uint8_t beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]<7?0:phy_vars_ue->transmission_mode[eNB_id]; switch (type) { case SI_PDSCH: @@ -162,7 +163,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, pilots=0; */ - if (frame_parms->nb_antennas_tx_eNB>1) { + if (frame_parms->nb_antennas_tx_eNB>1 && beamforming_mode==0) { #ifdef DEBUG_DLSCH_MOD LOG_I(PHY,"dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch_ue[0],dlsch0_harq->rb_alloc[0]); #endif @@ -204,8 +205,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, phy_vars_ue->high_speed_flag, frame_parms); } - } // if n_tx>1 - else { + } else if (beamforming_mode==0) {// if n_tx>1 nb_rb = dlsch_extract_rbs_single(lte_ue_common_vars->rxdataF, lte_ue_common_vars->dl_ch_estimates[eNB_id], lte_ue_pdsch_vars[eNB_id]->rxdataF_ext, @@ -244,7 +244,21 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, phy_vars_ue->high_speed_flag, frame_parms); } - } //else n_tx>1 + } else if (beamforming_mode==7) { //else n_tx>1 + nb_rb = dlsch_extract_rbs_TM7(lte_ue_common_vars->rxdataF, + lte_ue_common_vars->dl_ch_estimates[eNB_id], + lte_ue_pdsch_vars[eNB_id]->rxdataF_ext, + lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, + dlsch0_harq->rb_alloc, + symbol, + subframe, + phy_vars_ue->high_speed_flag, + frame_parms); + + + } else if(beamforming_mode>7) { + LOG_W(PHY,"dlsch_demodulation:beamforming mode not supported yet.\n"); + } // printf("nb_rb = %d, eNB_id %d\n",nb_rb,eNB_id); if (nb_rb==0) { @@ -418,7 +432,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, } } else if (dlsch0_harq->mimo_moden_connected_eNB)) { // TM5 two-user // Scale the channel estimates for interfering stream @@ -531,6 +545,21 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->log2_maxh, 1); } + } else if (dlsch0_harq->mimo_mode==TM7) { //TM7 + + dlsch_channel_compensation(lte_ue_pdsch_vars[eNB_id]->rxdataF_ext, + lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, + lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0, + lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0, + lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0, + (aatx>1) ? lte_ue_pdsch_vars[eNB_id]->rho : NULL, + frame_parms, + symbol, + first_symbol_flag, + get_Qm(dlsch0_harq->mcs), + nb_rb, + lte_ue_pdsch_vars[eNB_id]->log2_maxh, + phy_measurements); // log2_maxh+I0_shift } // printf("MRC\n"); @@ -570,8 +599,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, // printf("Combining"); if ((dlsch0_harq->mimo_mode == SISO) || ((dlsch0_harq->mimo_mode >= UNIFORM_PRECODING11) && - (dlsch0_harq->mimo_mode <= PUSCH_PRECODING0))) { - + (dlsch0_harq->mimo_mode <= PUSCH_PRECODING0)) || + (dlsch0_harq->mimo_mode == TM7)) { /* dlsch_siso(frame_parms, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp, @@ -608,7 +637,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->llr[0], symbol,first_symbol_flag,nb_rb, adjust_G2(frame_parms,dlsch0_harq->rb_alloc,2,subframe,symbol), - lte_ue_pdsch_vars[eNB_id]->llr128); + lte_ue_pdsch_vars[eNB_id]->llr128, + beamforming_mode); else if (i_mod == 2) { dlsch_qpsk_qpsk_llr(frame_parms, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0, @@ -4178,8 +4208,745 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF, return(nb_rb/frame_parms->nb_antennas_rx); } -//============================================================================================== -// Auxiliary functions +unsigned short dlsch_extract_rbs_TM7(int **rxdataF, + int **dl_ch_estimates, + int **rxdataF_ext, + int **dl_ch_estimates_ext, + unsigned int *rb_alloc, + unsigned char symbol, + unsigned char subframe, + uint32_t high_speed_flag, + LTE_DL_FRAME_PARMS *frame_parms) +{ + + unsigned short rb,nb_rb=0; + unsigned char rb_alloc_ind; + unsigned char i,aarx,l,nsymb,skip_half=0,sss_symb,pss_symb=0; + int *dl_ch0,*dl_ch0_ext,*rxF,*rxF_ext,*rxF_uespec; + + unsigned char symbol_mod,pilots=0,uespec_pilots=0,j=0,k=0,poffset=0,uespec_poffset=0; + int8_t uespec_nushift = frame_parms->Nid_cell%3; + + symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; + pilots = ((symbol_mod==0)||(symbol_mod==(4-frame_parms->Ncp))) ? 1 : 0; + l=symbol; + nsymb = (frame_parms->Ncp==NORMAL) ? 14:12; + + if (frame_parms->Ncp==0){ + if (symbol==3 || symbol==6 || symbol==9 || symbol==12) + uespec_pilots = 1; + } else{ + if (symbol==4 || symbol==7 || symbol==10) + uespec_pilots = 1; + } + + if (frame_parms->frame_type == TDD) { // TDD + sss_symb = nsymb-1; + pss_symb = 2; + } else { + sss_symb = (nsymb>>1)-2; + pss_symb = (nsymb>>1)-1; + } + + if (symbol_mod==(4-frame_parms->Ncp)) + poffset=3; + + if ((frame_parms->Ncp==0 && (symbol==6 ||symbol ==12)) || (frame_parms->Ncp==1 && symbol==7)) + uespec_poffset=2; + + for (aarx=0; aarxnb_antennas_rx; aarx++) { + + if (high_speed_flag == 1) + dl_ch0 = &dl_ch_estimates[aarx][5+(symbol*(frame_parms->ofdm_symbol_size))]; + else + dl_ch0 = &dl_ch_estimates[aarx][5]; + + dl_ch0_ext = &dl_ch_estimates_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; + + rxF_ext = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; + rxF = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))]; + printf("symbol:%d, (symbol-1)/3:%d\n",symbol,(symbol-1)/3); + //rxF_uespec = &rxdataF_uespec_pilots[aarx][(symbol-1)/3*frame_parms->N_RB_DL*(3+frame_parms->Ncp)]; + //printf("symbol, rxF_uespec offset:%d\n",symbol,(symbol-1)/3*frame_parms->N_RB_DL*(3+frame_parms->Ncp)); + + if ((frame_parms->N_RB_DL&1) == 0) // even number of RBs + for (rb=0; rbN_RB_DL; rb++) { + + if (rb < 32) + rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + else if (rb < 64) + rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + else if (rb < 96) + rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + else if (rb < 100) + rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + else + rb_alloc_ind = 0; + + // For second half of RBs skip DC carrier + if (rb==(frame_parms->N_RB_DL>>1)) { + rxF = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))]; + //dl_ch0++; + } + + if (rb_alloc_ind==1) { + //*pmi_ext = (pmi>>((rb>>2)<<1))&3; + memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); + + /* + printf("rb %d\n",rb); + for (i=0;i<12;i++) + printf("(%d %d)",((short *)dl_ch0)[i<<1],((short*)dl_ch0)[1+(i<<1)]); + printf("\n"); + */ + if (pilots==0 && uespec_pilots==0) { + for (i=0; i<12; i++) { + rxF_ext[i]=rxF[i]; + /* + printf("%d : (%d,%d)\n",(rxF+i-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))]), + ((short*)&rxF[i])[0],((short*)&rxF[i])[1]);*/ + } + + dl_ch0_ext+=12; + rxF_ext+=12; + } else if(pilots==1 && uespec_pilots==0) { + j=0; + + for (i=0; i<12; i++) { + if ((i!=(frame_parms->nushift+poffset)) && + (i!=((frame_parms->nushift+poffset+6)%12))) { + rxF_ext[j]=rxF[i]; + // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + dl_ch0_ext[j++]=dl_ch0[i]; + + } + } + + dl_ch0_ext+=10; + rxF_ext+=10; + + } else if (pilots==0 && uespec_pilots==1) { + j=0; + k=0; + + for (i=0; i<12; i++){ + if (frame_parms->Ncp==0){ + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ + rxF_ext[j] = rxF[i]; + dl_ch0_ext[j++]=dl_ch0[i]; + } + } else{ + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ + rxF_ext[j] = rxF[i]; + dl_ch0_ext[j++]=dl_ch0[i]; + } + } + + } + + dl_ch0_ext+=9-frame_parms->Ncp; + rxF_ext+=9-frame_parms->Ncp; + + } else { + msg("dlsch_extract_rbs_TM7(dl_demodulation.c):pilot or ue spec pilot detection error\n"); + exit(-1); + } + + nb_rb++; + } + + dl_ch0+=12; + rxF+=12; + + } + else { // Odd number of RBs + for (rb=0; rbN_RB_DL>>1; rb++) { + // printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]); + skip_half=0; + + if (rb < 32) + rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + else if (rb < 64) + rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + else if (rb < 96) + rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + else if (rb < 100) + rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + else + rb_alloc_ind = 0; + + + // PBCH + if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) { + rb_alloc_ind = 0; + } + + //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3 + if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) + skip_half=1; + else if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) + skip_half=2; + + //SSS + + if (((subframe==0)||(subframe==5)) && + (rb>((frame_parms->N_RB_DL>>1)-3)) && + (rb<((frame_parms->N_RB_DL>>1)+3)) && + (l==sss_symb) ) { + rb_alloc_ind = 0; + } + + //SSS + if (((subframe==0)||(subframe==5)) && + (rb==((frame_parms->N_RB_DL>>1)-3)) && + (l==sss_symb)) + skip_half=1; + else if (((subframe==0)||(subframe==5)) && + (rb==((frame_parms->N_RB_DL>>1)+3)) && + (l==sss_symb)) + skip_half=2; + + //PSS in subframe 0/5 if FDD + if (frame_parms->frame_type == FDD) { //FDD + if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + + if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) + skip_half=1; + else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) + skip_half=2; + } + + if ((frame_parms->frame_type == TDD) && + (subframe==6)) { //TDD Subframe 6 + if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + + if ((rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) + skip_half=1; + else if ((rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) + skip_half=2; + } + + + if (rb_alloc_ind==1) { + // printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half); + + if (pilots==0 && uespec_pilots==0) { + // printf("Extracting w/o pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half); + + if (skip_half==1) { + memcpy(dl_ch0_ext,dl_ch0,6*sizeof(int)); + + for (i=0; i<6; i++) + rxF_ext[i]=rxF[i]; + + dl_ch0_ext+=6; + rxF_ext+=6; + } else if (skip_half==2) { + memcpy(dl_ch0_ext,dl_ch0+6,6*sizeof(int)); + + for (i=0; i<6; i++) + rxF_ext[i]=rxF[(i+6)]; + + dl_ch0_ext+=6; + rxF_ext+=6; + } else { + memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); + + for (i=0; i<12; i++) + rxF_ext[i]=rxF[i]; + + dl_ch0_ext+=12; + rxF_ext+=12; + } + } else if (pilots==1 && uespec_pilots==0){ + // printf("Extracting with pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half); + j=0; + + if (skip_half==1) { + for (i=0; i<6; i++) { + if (i!=((frame_parms->nushift+poffset)%6)) { + rxF_ext[j]=rxF[i]; + // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + dl_ch0_ext[j++]=dl_ch0[i]; + } + } + + dl_ch0_ext+=5; + rxF_ext+=5; + } else if (skip_half==2) { + for (i=0; i<6; i++) { + if (i!=((frame_parms->nushift+poffset)%6)) { + rxF_ext[j]=rxF[(i+6)]; + // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + dl_ch0_ext[j++]=dl_ch0[i+6]; + } + } + + dl_ch0_ext+=5; + rxF_ext+=5; + } else { + for (i=0; i<12; i++) { + if ((i!=(frame_parms->nushift+poffset)) && + (i!=((frame_parms->nushift+poffset+6)%12))) { + rxF_ext[j]=rxF[i]; + // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + dl_ch0_ext[j++]=dl_ch0[i]; + + } + } + + dl_ch0_ext+=10; + rxF_ext+=10; + } + } else if(pilots==0 && uespec_pilots==1){ + //printf("Extracting with uespec pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half); + j=0; + k=0; + + if (skip_half==1) { + if (frame_parms->Ncp==0){ + for (i=0; i<6; i++) { + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ + rxF_ext[j]=rxF[i]; + dl_ch0_ext[j++]=dl_ch0[i]; + } + } + dl_ch0_ext+=6-(uespec_nushift+uespec_poffset<6)-(uespec_nushift+uespec_poffset+4<6)-((uespec_nushift+uespec_poffset+8)%12<6); + rxF_ext+=6-(uespec_nushift+uespec_poffset<6)-(uespec_nushift+uespec_poffset+4<6)-((uespec_nushift+uespec_poffset+8)%12<6); + + } else{ + for (i=0; i<6; i++) { + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ + rxF_ext[j]=rxF[i]; + dl_ch0_ext[j++]=dl_ch0[i]; + } + } + dl_ch0_ext+=4; + rxF_ext+=4; + } + + } else if (skip_half==2) { + if(frame_parms->Ncp==0){ + for (i=0; i<6; i++) { + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ + rxF_ext[j]=rxF[(i+6)]; + dl_ch0_ext[j++]=dl_ch0[i+6]; + } + } + dl_ch0_ext+=6-(uespec_nushift+uespec_poffset>6)-(uespec_nushift+uespec_poffset+4>6)-((uespec_nushift+uespec_poffset+8)%12>6); + rxF_ext+=6-(uespec_nushift+uespec_poffset>6)-(uespec_nushift+uespec_poffset+4>6)-((uespec_nushift+uespec_poffset+8)%12>6); + + } else { + for (i=0; i<6; i++) { + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ + rxF_ext[j]=rxF[(i+6)]; + dl_ch0_ext[j++]=dl_ch0[i+6]; + } + } + dl_ch0_ext+=4; + rxF_ext+=4; + } + + } else { + + for (i=0; i<12; i++){ + if (frame_parms->Ncp==0){ + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ + rxF_ext[j] = rxF[i]; + dl_ch0_ext[j++] = dl_ch0[i]; + } + } else{ + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ + rxF_ext[j] = rxF[i]; + dl_ch0_ext[j++]=dl_ch0[i]; + } + } + + } + + dl_ch0_ext+=9-frame_parms->Ncp; + rxF_ext+=9-frame_parms->Ncp; + } + + } else { + msg("dlsch_extract_rbs_TM7(dl_demodulation.c):pilot or ue spec pilot detection error\n"); + exit(-1); + + } + + nb_rb++; + } + + dl_ch0+=12; + rxF+=12; + } // first half loop + + + // Do middle RB (around DC) + if (rb < 32) + rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + else if (rb < 64) + rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + else if (rb < 96) + rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + else if (rb < 100) + rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + else + rb_alloc_ind = 0; + + + + // PBCH + if ((subframe==0) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) { + rb_alloc_ind = 0; + } + + //SSS + if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) { + rb_alloc_ind = 0; + } + + if (frame_parms->frame_type == FDD) { + //PSS + if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + } + + if ((frame_parms->frame_type == TDD) && + (subframe==6)) { + //PSS + if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + } + + //printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]); + //printf("DC rb %d (%p)\n",rb,rxF); + if (rb_alloc_ind==1) { + //printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half); + if (pilots==0 && uespec_pilots==0) { + for (i=0; i<6; i++) { + dl_ch0_ext[i]=dl_ch0[i]; + rxF_ext[i]=rxF[i]; + } + + rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; + + for (; i<12; i++) { + dl_ch0_ext[i]=dl_ch0[i]; + rxF_ext[i]=rxF[(1+i-6)]; + } + + dl_ch0_ext+=12; + rxF_ext+=12; + } else if(pilots==1 && uespec_pilots==0){ // pilots==1 + j=0; + + for (i=0; i<6; i++) { + if (i!=((frame_parms->nushift+poffset)%6)) { + dl_ch0_ext[j]=dl_ch0[i]; + rxF_ext[j++]=rxF[i]; + // printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); + } + } + + rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; + + for (; i<12; i++) { + if (i!=((frame_parms->nushift+6+poffset)%12)) { + dl_ch0_ext[j]=dl_ch0[i]; + rxF_ext[j++]=rxF[(1+i-6)]; + //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); + } + } + + dl_ch0_ext+=10; + rxF_ext+=10; + } else if(pilots==0 && uespec_pilots==1) { + j=0; + k=0; + + for (i=0; i<6; i++) { + if (frame_parms->Ncp==0){ + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ + dl_ch0_ext[j]=dl_ch0[i]; + rxF_ext[j++] = rxF[i]; + //printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); + } + } else { + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ + dl_ch0_ext[j]=dl_ch0[i]; + rxF_ext[j++] = rxF[i]; + // printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); + } + } + } + + rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; + + for (; i<12; i++) { + if (frame_parms->Ncp==0){ + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ + dl_ch0_ext[j]=dl_ch0[i]; + rxF_ext[j++]=rxF[(1+i-6)]; + // printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); + } + } else { + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ + dl_ch0_ext[j]=dl_ch0[i]; + rxF_ext[j++] = rxF[(1+i-6)]; + } + } + } + + dl_ch0_ext+=9-frame_parms->Ncp; + rxF_ext+=9-frame_parms->Ncp; + + }// symbol_mod==0 + + nb_rb++; + } // rballoc==1 + else { + rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; + } + + dl_ch0+=12; + rxF+=7; + rb++; + + for (; rbN_RB_DL; rb++) { + // printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]); + // printf("rb %d (%p)\n",rb,rxF); + skip_half=0; + + if (rb < 32) + rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + else if (rb < 64) + rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + else if (rb < 96) + rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + else if (rb < 100) + rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + else + rb_alloc_ind = 0; + + + + // PBCH + if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=nsymb>>1) && (l<((nsymb>>1) + 4))) { + rb_alloc_ind = 0; + } + + //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3 + if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) + skip_half=1; + else if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) + skip_half=2; + + //SSS + if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) { + rb_alloc_ind = 0; + } + + //SSS + if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==sss_symb)) + skip_half=1; + else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb)) + skip_half=2; + + if (frame_parms->frame_type == FDD) { + //PSS + if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + + //PSS + if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) + skip_half=1; + else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) + skip_half=2; + } + + if ((frame_parms->frame_type == TDD) && + (subframe==6)) { //TDD Subframe 6 + if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + + if ((rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) + skip_half=1; + else if ((rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) + skip_half=2; + } + + if (rb_alloc_ind==1) { + // printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half); + /* + printf("rb %d\n",rb); + for (i=0;i<12;i++) + printf("(%d %d)",((short *)dl_ch0)[i<<1],((short*)dl_ch0)[1+(i<<1)]); + printf("\n"); + */ + if (pilots==0 && uespec_pilots==0) { + //printf("Extracting w/o pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half); + if (skip_half==1) { + memcpy(dl_ch0_ext,dl_ch0,6*sizeof(int)); + + for (i=0; i<6; i++) + rxF_ext[i]=rxF[i]; + + dl_ch0_ext+=6; + rxF_ext+=6; + + } else if (skip_half==2) { + memcpy(dl_ch0_ext,dl_ch0+6,6*sizeof(int)); + + for (i=0; i<6; i++) + rxF_ext[i]=rxF[(i+6)]; + + dl_ch0_ext+=6; + rxF_ext+=6; + + } else { + memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); + + for (i=0; i<12; i++) + rxF_ext[i]=rxF[i]; + + dl_ch0_ext+=12; + rxF_ext+=12; + } + } else if (pilots==1 && uespec_pilots==0){ + //printf("Extracting with pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half); + j=0; + + if (skip_half==1) { + for (i=0; i<6; i++) { + if (i!=((frame_parms->nushift+poffset)%6)) { + rxF_ext[j]=rxF[i]; + //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + dl_ch0_ext[j++]=dl_ch0[i]; + } + } + + dl_ch0_ext+=5; + rxF_ext+=5; + } else if (skip_half==2) { + for (i=0; i<6; i++) { + if (i!=((frame_parms->nushift+poffset)%6)) { + rxF_ext[j]=rxF[(i+6)]; + //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + dl_ch0_ext[j++]=dl_ch0[i+6]; + } + } + + dl_ch0_ext+=5; + rxF_ext+=5; + } else { + for (i=0; i<12; i++) { + if ((i!=(frame_parms->nushift+poffset)) && + (i!=((frame_parms->nushift+poffset+6)%12))) { + rxF_ext[j]=rxF[i]; + //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + dl_ch0_ext[j++]=dl_ch0[i]; + } + } + + dl_ch0_ext+=10; + rxF_ext+=10; + } + } else if(pilots==0 && uespec_pilots==1) { + j=0; + k=0; + + if (skip_half==1) { + if (frame_parms->Ncp==0){ + for (i=0; i<6; i++) { + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ + rxF_ext[j]=rxF[i]; + dl_ch0_ext[j++]=dl_ch0[i]; + } + } + dl_ch0_ext+=6-(uespec_nushift+uespec_poffset<6)-(uespec_nushift+uespec_poffset+4<6)-((uespec_nushift+uespec_poffset+8)%12<6); + rxF_ext+=6-(uespec_nushift+uespec_poffset<6)-(uespec_nushift+uespec_poffset+4<6)-((uespec_nushift+uespec_poffset+8)%12<6); + + } else{ + for (i=0; i<6; i++) { + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ + rxF_ext[j]=rxF[i]; + dl_ch0_ext[j++]=dl_ch0[i]; + } + } + dl_ch0_ext+=4; + rxF_ext+=4; + } + + } else if (skip_half==2) { + if(frame_parms->Ncp==0){ + for (i=0; i<6; i++) { + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ + rxF_ext[j]=rxF[(i+6)]; + dl_ch0_ext[j++]=dl_ch0[i+6]; + } + } + dl_ch0_ext+=6-(uespec_nushift+uespec_poffset>6)-(uespec_nushift+uespec_poffset+4>6)-((uespec_nushift+uespec_poffset+8)%12>6); + rxF_ext+=6-(uespec_nushift+uespec_poffset>6)-(uespec_nushift+uespec_poffset+4>6)-((uespec_nushift+uespec_poffset+8)%12>6); + + } else { + for (i=0; i<6; i++) { + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ + rxF_ext[j]=rxF[(i+6)]; + dl_ch0_ext[j++]=dl_ch0[i+6]; + } + } + dl_ch0_ext+=4; + rxF_ext+=4; + } + + } else { + for (i=0; i<12; i++){ + if (frame_parms->Ncp==0){ + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ + rxF_ext[j] = rxF[i]; + dl_ch0_ext[j++]=dl_ch0[i]; + } + } else{ + if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ + rxF_ext[j] = rxF[i]; + dl_ch0_ext[j++]=dl_ch0[i]; + } + } + } + + dl_ch0_ext+=9-frame_parms->Ncp; + rxF_ext+=9-frame_parms->Ncp; + + } + + }// pilots=0 + + nb_rb++; + } + + dl_ch0+=12; + rxF+=12; + } + } + } + + _mm_empty(); + _m_empty(); + + return(nb_rb/frame_parms->nb_antennas_rx); +} + + + //============================================================================================== #ifdef USER_MODE @@ -4223,6 +4990,10 @@ void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per } } + sprintf(fname,"dlsch%d_rxF_r%d_uespec0.m",eNB_id,round); + sprintf(vname,"dl%d_rxF_r%d_uespec0",eNB_id,round); + write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_uespec_pilots[0],12*N_RB_DL,1,1); + /* write_output("dlsch%d_ch_ext01.m","dl01_ch0_ext",lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1); write_output("dlsch%d_ch_ext10.m","dl10_ch0_ext",lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1); diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c index 4990e94cf5..951e4afcd0 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c @@ -640,7 +640,8 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, uint8_t first_symbol_flag, uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr32p) + short **llr32p, + uint8_t beamforming_mode) { uint32_t *rxF = (uint32_t*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; @@ -661,11 +662,16 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) { - if (frame_parms->mode1_flag==0) + if (frame_parms->mode1_flag==0 && beamforming_mode!=7) len = (nb_rb*8);// - (2*pbch_pss_sss_adjust/3); else len = (nb_rb*10);// - (5*pbch_pss_sss_adjust/6); - } else { + } else if((beamforming_mode==7) && (frame_parms->Ncp==0) && (symbol==3 || symbol==6 || symbol==9 || symbol==12)){ + len = (nb_rb*9); + } else if((beamforming_mode==7) && (frame_parms->Ncp==1) && (symbol==4 || symbol==7 || symbol==10)){ + len = (nb_rb*8); + } + else { len = (nb_rb*12);// - pbch_pss_sss_adjust; } diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index c4b0247d75..d14c26c13d 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -1,42 +1,42 @@ /******************************************************************************* - OpenAirInterface - Copyright(c) 1999 - 2014 Eurecom + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom - OpenAirInterface is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. - OpenAirInterface is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with OpenAirInterface.The full GNU General Public License is - included in this distribution in the file called "COPYING". If not, - see . + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr OpenAirInterface Tech : openair_tech@eurecom.fr OpenAirInterface Dev : openair4g-devel@eurecom.fr - Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE +Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ /*! \file PHY/LTE_TRANSPORT/dlsch_modulation.c -* \brief Top-level routines for generating the PDSCH physical channel from 36-211, V8.6 2009-03 -* \author R. Knopp, F. Kaltenberger -* \date 2011 -* \version 0.1 -* \company Eurecom -* \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr -* \note -* \warning -*/ + * \brief Top-level routines for generating the PDSCH physical channel from 36-211, V8.6 2009-03 + * \author R. Knopp, F. Kaltenberger + * \date 2011 + * \version 0.1 + * \company Eurecom + * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr + * \note + * \warning + */ #include "PHY/defs.h" #include "PHY/extern.h" #include "PHY/CODING/defs.h" @@ -70,10 +70,33 @@ uint8_t is_not_pilot(uint8_t pilots, uint8_t re, uint8_t nushift, uint8_t use2nd return(0); } -uint8_t is_not_UEspecRS(int first_layer,int re) +//uint8_t is_not_UEspecRS(int first_layer,int re) +uint8_t is_not_UEspecRS(uint8_t lprime, uint8_t re, uint8_t nushift, uint8_t Ncp, uint8_t beamforming_mode) { + uint8_t offset = (lprime==2)?2:0; + if(lprime==0) + return(1); - return(1); + switch(beamforming_mode){ + case 7: + if (Ncp == NORMAL){ + if ((re!=nushift+offset) && (re!=((nushift+4+offset)%12)) && (re!=((nushift+8+offset)%12))) + return(1); + /*else{ + printf("(is_no_UEspec_RS):lprime=%d, re=%d, nushift=%d, offset=%d\n",lprime, re,nushift,offset); + }*/ + } else { + if ((re!=nushift+offset) && (re!=((nushift+3+offset)%12)) && (re!=((nushift+6+offset)%12)) && (re!=((nushift+9+offset)%12))) + return(1); + } + break; + + default: + msg("is_not_UEspecRS() [dlsch_modulation.c] : ERROR, unknown beamforming_mode %d\n",beamforming_mode); + return(-1); + } + + return(0); } void generate_64qam_table(void) @@ -110,33 +133,33 @@ void layer1prec2A(int32_t *antenna0_sample, int32_t *antenna1_sample, uint8_t pr switch (precoding_index) { - case 0: // 1 1 - *antenna1_sample=*antenna0_sample; - break; + case 0: // 1 1 + *antenna1_sample=*antenna0_sample; + break; - case 1: // 1 -1 - ((int16_t *)antenna1_sample)[0] = -((int16_t *)antenna0_sample)[0]; - ((int16_t *)antenna1_sample)[1] = -((int16_t *)antenna0_sample)[1]; - break; + case 1: // 1 -1 + ((int16_t *)antenna1_sample)[0] = -((int16_t *)antenna0_sample)[0]; + ((int16_t *)antenna1_sample)[1] = -((int16_t *)antenna0_sample)[1]; + break; - case 2: // 1 j - ((int16_t *)antenna1_sample)[0] = -((int16_t *)antenna0_sample)[1]; - ((int16_t *)antenna1_sample)[1] = ((int16_t *)antenna0_sample)[0]; - break; + case 2: // 1 j + ((int16_t *)antenna1_sample)[0] = -((int16_t *)antenna0_sample)[1]; + ((int16_t *)antenna1_sample)[1] = ((int16_t *)antenna0_sample)[0]; + break; - case 3: // 1 -j - ((int16_t *)antenna1_sample)[0] = ((int16_t *)antenna0_sample)[1]; - ((int16_t *)antenna1_sample)[1] = -((int16_t *)antenna0_sample)[0]; - break; + case 3: // 1 -j + ((int16_t *)antenna1_sample)[0] = ((int16_t *)antenna0_sample)[1]; + ((int16_t *)antenna1_sample)[1] = -((int16_t *)antenna0_sample)[0]; + break; } // normalize /* ((int16_t *)antenna0_sample)[0] = (int16_t)((((int16_t *)antenna0_sample)[0]*ONE_OVER_SQRT2_Q15)>>15); - ((int16_t *)antenna0_sample)[1] = (int16_t)((((int16_t *)antenna0_sample)[1]*ONE_OVER_SQRT2_Q15)>>15); ((int16_t *)antenna1_sample)[0] = (int16_t)((((int16_t *)antenna1_sample)[0]*ONE_OVER_SQRT2_Q15)>>15); - ((int16_t *)antenna1_sample)[1] = (int16_t)((((int16_t *)antenna1_sample)[1]*ONE_OVER_SQRT2_Q15)>>15); */ + ((int16_t *)antenna0_sample)[1] = (int16_t)((((int16_t *)antenna0_sample)[1]*ONE_OVER_SQRT2_Q15)>>15); ((int16_t *)antenna1_sample)[0] = (int16_t)((((int16_t *)antenna1_sample)[0]*ONE_OVER_SQRT2_Q15)>>15); + ((int16_t *)antenna1_sample)[1] = (int16_t)((((int16_t *)antenna1_sample)[1]*ONE_OVER_SQRT2_Q15)>>15); */ } -int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, +int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB, mod_sym_t **txdataF, uint32_t *jj, uint32_t *jj2, @@ -151,10 +174,14 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, int16_t *qam_table_s1, uint32_t *re_allocated, uint8_t skip_dc, - uint8_t skip_half) + uint8_t skip_half, + uint8_t lprime, + uint8_t mprime, + uint8_t Ns, + int32_t **beamforming_weights) { - + LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; uint8_t *x0 = dlsch0_harq->e; MIMO_mode_t mimo_mode = dlsch0_harq->mimo_mode; @@ -165,11 +192,11 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, uint8_t *x1=NULL; uint8_t mod_order1=2; + uint8_t nb_antennas_tx_phy = phy_vars_eNB->nb_antennas_tx_phy; + // Fill these in later for TM8-10 // int Nlayers1; // int first_layer1; - - int use2ndpilots = (frame_parms->mode1_flag==1)?1:0; uint32_t tti_offset,aa; @@ -195,10 +222,23 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, uint8_t first_re,last_re; int32_t tmp_sample1,tmp_sample2; int16_t tmp_amp=amp; + uint8_t layer; int s=1; + + uint8_t mprime2 = mprime,mprime_dword,mprime_qpsk_symb; + mod_sym_t qpsk[4]; gain_lin_QPSK = (int16_t)((amp*ONE_OVER_SQRT2_Q15)>>15); // if (mimo_mode == LARGE_CDD) gain_lin_QPSK>>=1; + ((int16_t *)&qpsk[0])[0] = gain_lin_QPSK; + ((int16_t *)&qpsk[0])[1] = gain_lin_QPSK; + ((int16_t *)&qpsk[1])[0] = -gain_lin_QPSK; + ((int16_t *)&qpsk[1])[1] = gain_lin_QPSK;; + ((int16_t *)&qpsk[2])[0] = gain_lin_QPSK;; + ((int16_t *)&qpsk[2])[1] = -gain_lin_QPSK;; + ((int16_t *)&qpsk[3])[0] = -gain_lin_QPSK;; + ((int16_t *)&qpsk[3])[1] = -gain_lin_QPSK; + if (dlsch1_harq) { x1 = dlsch1_harq->e; @@ -210,151 +250,151 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, } /* - switch (mod_order) { - case 2: - // QPSK single stream + switch (mod_order) { + case 2: +// QPSK single stream - break; - case 4: - //16QAM Single stream - gain_lin_16QAM1 = (int16_t)(((int32_t)amp*QAM16_n1)>>15); - gain_lin_16QAM2 = (int16_t)(((int32_t)amp*QAM16_n2)>>15); +break; +case 4: +//16QAM Single stream +gain_lin_16QAM1 = (int16_t)(((int32_t)amp*QAM16_n1)>>15); +gain_lin_16QAM2 = (int16_t)(((int32_t)amp*QAM16_n2)>>15); - break; +break; - case 6: - //64QAM Single stream - break; - default: - break; - } - */ +case 6: +//64QAM Single stream +break; +default: +break; +} + */ -#ifdef DEBUG_DLSCH_MODULATION - printf("allocate_re (mod %d): symbol_offset %d re_offset %d (%d,%d), jj %d -> %d,%d\n",mod_order0,symbol_offset,re_offset,skip_dc,skip_half,*jj, x0[*jj], x0[1+*jj]); -#endif +//#ifdef DEBUG_DLSCH_MODULATION +// printf("allocate_re (mod %d): symbol_offset %d re_offset %d (%d,%d), jj %d -> %d,%d\n",mod_order0,symbol_offset,re_offset,skip_dc,skip_half,*jj, x0[*jj], x0[1+*jj]); +//#endif first_re=0; last_re=12; - + if (skip_half==1) last_re=6; else if (skip_half==2) first_re=6; - - for (re=first_re; reofdm_symbol_size+1; - tti_offset = symbol_offset + re_off + re; + tti_offset = symbol_offset + re_off + re; + // printf("tti_offset = %d\n", tti_offset); // check that RE is not from Cell-specific RS if (is_not_pilot(pilots,re,frame_parms->nushift,use2ndpilots)==1) { - // printf("re %d (jj %d)\n",re,*jj); + // printf("re %d (jj %d)\n",re,*jj); if (mimo_mode == SISO) { //SISO mapping *re_allocated = *re_allocated + 1; switch (mod_order0) { - case 2: //QPSK + case 2: //QPSK - //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i - } + //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + for (aa=0; aanb_antennas_tx; aa++) { + ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i + } - *jj = *jj + 1; + *jj = *jj + 1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[1] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} - } + for (aa=0; aanb_antennas_tx; aa++) { + ((int16_t*)&txdataF[aa][tti_offset])[1] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} + } - *jj = *jj + 1; + *jj = *jj + 1; - // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - break; + //printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + break; - case 4: //16QAM + case 4: //16QAM - qam16_table_offset_re = 0; - qam16_table_offset_im = 0; + qam16_table_offset_re = 0; + qam16_table_offset_im = 0; - if (x0[*jj] == 1) - qam16_table_offset_re+=2; + if (x0[*jj] == 1) + qam16_table_offset_re+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_im+=2; + if (x0[*jj] == 1) + qam16_table_offset_im+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_re+=1; + if (x0[*jj] == 1) + qam16_table_offset_re+=1; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_im+=1; + if (x0[*jj] == 1) + qam16_table_offset_im+=1; - *jj=*jj+1; + *jj=*jj+1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s0[qam16_table_offset_re]; - ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s0[qam16_table_offset_im]; - // ((int16_t *)&txdataF[aa][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - // ((int16_t *)&txdataF[aa][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); - } + for (aa=0; aanb_antennas_tx; aa++) { + ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s0[qam16_table_offset_re]; + ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s0[qam16_table_offset_im]; + // ((int16_t *)&txdataF[aa][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + // ((int16_t *)&txdataF[aa][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); + } - break; + break; - case 6: //64QAM + case 6: //64QAM - qam64_table_offset_re = 0; - qam64_table_offset_im = 0; + qam64_table_offset_re = 0; + qam64_table_offset_im = 0; - if (x0[*jj] == 1) - qam64_table_offset_re+=4; + if (x0[*jj] == 1) + qam64_table_offset_re+=4; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=4; + if (x0[*jj] == 1) + qam64_table_offset_im+=4; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_re+=2; + if (x0[*jj] == 1) + qam64_table_offset_re+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=2; + if (x0[*jj] == 1) + qam64_table_offset_im+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_re+=1; + if (x0[*jj] == 1) + qam64_table_offset_re+=1; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=1; + if (x0[*jj] == 1) + qam64_table_offset_im+=1; - *jj=*jj+1; + *jj=*jj+1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s0[qam64_table_offset_re];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s0[qam64_table_offset_im];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); - } + for (aa=0; aanb_antennas_tx; aa++) { + ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s0[qam64_table_offset_re];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s0[qam64_table_offset_im];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); + } - break; + break; } } @@ -365,171 +405,171 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, amp = (int16_t)(((int32_t)tmp_amp*ONE_OVER_SQRT2_Q15)>>15); switch (mod_order0) { - case 2: //QPSK + case 2: //QPSK - // first antenna position n -> x0 + // first antenna position n -> x0 - ((int16_t*)&tmp_sample1)[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; - *jj=*jj+1; - ((int16_t*)&tmp_sample1)[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; - *jj=*jj+1; + ((int16_t*)&tmp_sample1)[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj=*jj+1; + ((int16_t*)&tmp_sample1)[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj=*jj+1; - // second antenna position n -> -x1* + // second antenna position n -> -x1* - ((int16_t*)&tmp_sample2)[0] = (x0[*jj]==1) ? (gain_lin_QPSK) : -gain_lin_QPSK; - *jj=*jj+1; - ((int16_t*)&tmp_sample2)[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; - *jj=*jj+1; + ((int16_t*)&tmp_sample2)[0] = (x0[*jj]==1) ? (gain_lin_QPSK) : -gain_lin_QPSK; + *jj=*jj+1; + ((int16_t*)&tmp_sample2)[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj=*jj+1; - // normalization for 2 tx antennas - ((int16_t*)&txdataF[0][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*ONE_OVER_SQRT2_Q15)>>15); - ((int16_t*)&txdataF[0][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*ONE_OVER_SQRT2_Q15)>>15); - ((int16_t*)&txdataF[1][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample2)[0]*ONE_OVER_SQRT2_Q15)>>15); - ((int16_t*)&txdataF[1][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample2)[1]*ONE_OVER_SQRT2_Q15)>>15); + // normalization for 2 tx antennas + ((int16_t*)&txdataF[0][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*ONE_OVER_SQRT2_Q15)>>15); + ((int16_t*)&txdataF[0][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*ONE_OVER_SQRT2_Q15)>>15); + ((int16_t*)&txdataF[1][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample2)[0]*ONE_OVER_SQRT2_Q15)>>15); + ((int16_t*)&txdataF[1][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample2)[1]*ONE_OVER_SQRT2_Q15)>>15); - break; + break; - case 4: //16QAM + case 4: //16QAM - // Antenna 0 position n + // Antenna 0 position n - qam16_table_offset_re = 0; - qam16_table_offset_im = 0; + qam16_table_offset_re = 0; + qam16_table_offset_im = 0; - if (x0[*jj] == 1) - qam16_table_offset_re+=2; + if (x0[*jj] == 1) + qam16_table_offset_re+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_im+=2; + if (x0[*jj] == 1) + qam16_table_offset_im+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_re+=1; + if (x0[*jj] == 1) + qam16_table_offset_re+=1; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_im+=1; + if (x0[*jj] == 1) + qam16_table_offset_im+=1; - *jj=*jj+1; + *jj=*jj+1; - ((int16_t *)&txdataF[0][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - ((int16_t *)&txdataF[0][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); + ((int16_t *)&txdataF[0][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + ((int16_t *)&txdataF[0][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); - // Antenna 1 position n Real part -> -x1* + // Antenna 1 position n Real part -> -x1* - qam16_table_offset_re = 0; - qam16_table_offset_im = 0; + qam16_table_offset_re = 0; + qam16_table_offset_im = 0; - if (x0[*jj] == 1) - qam16_table_offset_re+=2; + if (x0[*jj] == 1) + qam16_table_offset_re+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_im+=2; + if (x0[*jj] == 1) + qam16_table_offset_im+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_re+=1; + if (x0[*jj] == 1) + qam16_table_offset_re+=1; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_im+=1; + if (x0[*jj] == 1) + qam16_table_offset_im+=1; - *jj=*jj+1; + *jj=*jj+1; - ((int16_t *)&txdataF[1][tti_offset])[0]+=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - ((int16_t *)&txdataF[1][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); + ((int16_t *)&txdataF[1][tti_offset])[0]+=-(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + ((int16_t *)&txdataF[1][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); - break; + break; - case 6: // 64-QAM + case 6: // 64-QAM - // Antenna 0 - qam64_table_offset_re = 0; - qam64_table_offset_im = 0; + // Antenna 0 + qam64_table_offset_re = 0; + qam64_table_offset_im = 0; - if (x0[*jj] == 1) - qam64_table_offset_re+=4; + if (x0[*jj] == 1) + qam64_table_offset_re+=4; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=4; + if (x0[*jj] == 1) + qam64_table_offset_im+=4; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_re+=2; + if (x0[*jj] == 1) + qam64_table_offset_re+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=2; + if (x0[*jj] == 1) + qam64_table_offset_im+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_re+=1; + if (x0[*jj] == 1) + qam64_table_offset_re+=1; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=1; + if (x0[*jj] == 1) + qam64_table_offset_im+=1; - *jj=*jj+1; + *jj=*jj+1; - ((int16_t *)&txdataF[0][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t *)&txdataF[0][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); + ((int16_t *)&txdataF[0][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + ((int16_t *)&txdataF[0][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); - // Antenna 1 => -x1* - qam64_table_offset_re = 0; - qam64_table_offset_im = 0; + // Antenna 1 => -x1* + qam64_table_offset_re = 0; + qam64_table_offset_im = 0; - if (x0[*jj] == 1) - qam64_table_offset_re+=4; + if (x0[*jj] == 1) + qam64_table_offset_re+=4; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=4; + if (x0[*jj] == 1) + qam64_table_offset_im+=4; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_re+=2; + if (x0[*jj] == 1) + qam64_table_offset_re+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=2; + if (x0[*jj] == 1) + qam64_table_offset_im+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_re+=1; + if (x0[*jj] == 1) + qam64_table_offset_re+=1; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=1; + if (x0[*jj] == 1) + qam64_table_offset_im+=1; - *jj=*jj+1; + *jj=*jj+1; - ((int16_t *)&txdataF[1][tti_offset])[0]+=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t *)&txdataF[1][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); + ((int16_t *)&txdataF[1][tti_offset])[0]+=-(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + ((int16_t *)&txdataF[1][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); - break; + break; } // fill in the rest of the ALAMOUTI precoding @@ -550,182 +590,182 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, if (frame_parms->nb_antennas_tx == 2) { switch (mod_order0) { - default: - LOG_E(PHY,"Unknown mod_order0 %d\n",mod_order0); - xx0_re=xx0_im=0; - break; + default: + LOG_E(PHY,"Unknown mod_order0 %d\n",mod_order0); + xx0_re=xx0_im=0; + break; - case 2: //QPSK - // printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - xx0_re = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; - *jj = *jj + 1; - xx0_im = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; - *jj = *jj + 1; + case 2: //QPSK + // printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + xx0_re = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj = *jj + 1; + xx0_im = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj = *jj + 1; - // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - break; + // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + break; - case 4: //16QAM + case 4: //16QAM - qam16_table_offset_re0 = 0; - qam16_table_offset_im0 = 0; + qam16_table_offset_re0 = 0; + qam16_table_offset_im0 = 0; - if (x0[*jj] == 1) - qam16_table_offset_re0+=2; + if (x0[*jj] == 1) + qam16_table_offset_re0+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_im0+=2; + if (x0[*jj] == 1) + qam16_table_offset_im0+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_re0+=1; + if (x0[*jj] == 1) + qam16_table_offset_re0+=1; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_im0+=1; + if (x0[*jj] == 1) + qam16_table_offset_im0+=1; - *jj=*jj+1; + *jj=*jj+1; - xx0_re = qam_table_s0[qam16_table_offset_re0]; - xx0_im = qam_table_s0[qam16_table_offset_im0]; + xx0_re = qam_table_s0[qam16_table_offset_re0]; + xx0_im = qam_table_s0[qam16_table_offset_im0]; - break; + break; - case 6: //64QAM + case 6: //64QAM - qam64_table_offset_re0 = 0; - qam64_table_offset_im0 = 0; + qam64_table_offset_re0 = 0; + qam64_table_offset_im0 = 0; - if (x0[*jj] == 1) - qam64_table_offset_re0+=4; + if (x0[*jj] == 1) + qam64_table_offset_re0+=4; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im0+=4; + if (x0[*jj] == 1) + qam64_table_offset_im0+=4; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_re0+=2; + if (x0[*jj] == 1) + qam64_table_offset_re0+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im0+=2; + if (x0[*jj] == 1) + qam64_table_offset_im0+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_re0+=1; + if (x0[*jj] == 1) + qam64_table_offset_re0+=1; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im0+=1; + if (x0[*jj] == 1) + qam64_table_offset_im0+=1; - *jj=*jj+1; + *jj=*jj+1; - xx0_re = qam_table_s0[qam64_table_offset_re0]; - xx0_im = qam_table_s0[qam64_table_offset_im0]; + xx0_re = qam_table_s0[qam64_table_offset_re0]; + xx0_im = qam_table_s0[qam64_table_offset_im0]; - break; + break; } switch (mod_order1) { - default: - LOG_E(PHY,"Unknown mod_order1 %d\n",mod_order1); - xx1_re=xx1_im=0; - break; + default: + LOG_E(PHY,"Unknown mod_order1 %d\n",mod_order1); + xx1_re=xx1_im=0; + break; - case 2: //QPSK - // printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - xx1_re = (x1[*jj2]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; - *jj2 = *jj2 + 1; - xx1_im = (x1[*jj2]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; - *jj2 = *jj2 + 1; - // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - break; + case 2: //QPSK + // printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + xx1_re = (x1[*jj2]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj2 = *jj2 + 1; + xx1_im = (x1[*jj2]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj2 = *jj2 + 1; + // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + break; - case 4: //16QAM + case 4: //16QAM - qam16_table_offset_re1 = 0; - qam16_table_offset_im1 = 0; + qam16_table_offset_re1 = 0; + qam16_table_offset_im1 = 0; - if (x1[*jj2] == 1) - qam16_table_offset_re1+=2; + if (x1[*jj2] == 1) + qam16_table_offset_re1+=2; - *jj2 = *jj2 + 1; + *jj2 = *jj2 + 1; - if (x1[*jj2] == 1) - qam16_table_offset_im1+=2; + if (x1[*jj2] == 1) + qam16_table_offset_im1+=2; - *jj2 = *jj2 + 1; + *jj2 = *jj2 + 1; - if (x1[*jj2] == 1) - qam16_table_offset_re1+=1; + if (x1[*jj2] == 1) + qam16_table_offset_re1+=1; - *jj2 = *jj2 + 1; + *jj2 = *jj2 + 1; - if (x1[*jj2] == 1) - qam16_table_offset_im1+=1; + if (x1[*jj2] == 1) + qam16_table_offset_im1+=1; - *jj2 = *jj2 + 1; + *jj2 = *jj2 + 1; - xx1_re = qam_table_s1[qam16_table_offset_re1]; - xx1_im = qam_table_s1[qam16_table_offset_im1]; + xx1_re = qam_table_s1[qam16_table_offset_re1]; + xx1_im = qam_table_s1[qam16_table_offset_im1]; - break; + break; - case 6: //64QAM + case 6: //64QAM - qam64_table_offset_re1 = 0; - qam64_table_offset_im1 = 0; + qam64_table_offset_re1 = 0; + qam64_table_offset_im1 = 0; - if (x1[*jj2] == 1) - qam64_table_offset_re1+=4; + if (x1[*jj2] == 1) + qam64_table_offset_re1+=4; - *jj2 = *jj2 + 1; + *jj2 = *jj2 + 1; - if (x1[*jj2] == 1) - qam64_table_offset_im1+=4; + if (x1[*jj2] == 1) + qam64_table_offset_im1+=4; - *jj2 = *jj2 + 1; + *jj2 = *jj2 + 1; - if (x1[*jj2] == 1) - qam64_table_offset_re1+=2; + if (x1[*jj2] == 1) + qam64_table_offset_re1+=2; - *jj2 = *jj2 + 1; + *jj2 = *jj2 + 1; - if (x1[*jj2] == 1) - qam64_table_offset_im1+=2; + if (x1[*jj2] == 1) + qam64_table_offset_im1+=2; - *jj2 = *jj2 + 1; + *jj2 = *jj2 + 1; - if (x1[*jj2] == 1) - qam64_table_offset_re1+=1; + if (x1[*jj2] == 1) + qam64_table_offset_re1+=1; - *jj2 = *jj2 + 1; + *jj2 = *jj2 + 1; - if (x1[*jj2] == 1) - qam64_table_offset_im1+=1; + if (x1[*jj2] == 1) + qam64_table_offset_im1+=1; - *jj2 = *jj2 + 1; + *jj2 = *jj2 + 1; - xx1_re = qam_table_s1[qam64_table_offset_re1]; - xx1_im = qam_table_s1[qam64_table_offset_im1]; + xx1_re = qam_table_s1[qam64_table_offset_re1]; + xx1_im = qam_table_s1[qam64_table_offset_im1]; - break; + break; } @@ -740,10 +780,10 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, ((int16_t *)&txdataF[0][tti_offset])[1]+=((xx0_im+xx1_im)>>1); ((int16_t *)&txdataF[1][tti_offset])[1]+=(s*((xx0_im-xx1_im)>>1)); /* - printf("CDD: xx0 (%d,%d), xx1(%d,%d), s(%d), txF[0] (%d,%d), txF[1] (%d,%d)\n", - xx0_re,xx0_im,xx1_re,xx1_im, s, ((int16_t *)&txdataF[0][tti_offset])[0],((int16_t *)&txdataF[0][tti_offset])[1], - ((int16_t *)&txdataF[1][tti_offset])[0],((int16_t *)&txdataF[1][tti_offset])[1]); - */ + printf("CDD: xx0 (%d,%d), xx1(%d,%d), s(%d), txF[0] (%d,%d), txF[1] (%d,%d)\n", + xx0_re,xx0_im,xx1_re,xx1_im, s, ((int16_t *)&txdataF[0][tti_offset])[0],((int16_t *)&txdataF[0][tti_offset])[1], + ((int16_t *)&txdataF[1][tti_offset])[0],((int16_t *)&txdataF[1][tti_offset])[1]); + */ // s alternates +1/-1 for each RE s = -s; } @@ -753,173 +793,61 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, amp = (int16_t)(((int32_t)tmp_amp*ONE_OVER_SQRT2_Q15)>>15); switch (mod_order0) { - case 2: //QPSK - - ((int16_t*)&tmp_sample1)[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; - *jj = *jj + 1; - ((int16_t*)&tmp_sample1)[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; - *jj = *jj + 1; - - // normalization for 2 tx antennas - ((int16_t*)&txdataF[0][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*ONE_OVER_SQRT2_Q15)>>15); - ((int16_t*)&txdataF[0][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*ONE_OVER_SQRT2_Q15)>>15); - - if (frame_parms->nb_antennas_tx == 2) { - layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); - ((int16_t*)&txdataF[1][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample2)[0]*ONE_OVER_SQRT2_Q15)>>15); - ((int16_t*)&txdataF[1][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample2)[1]*ONE_OVER_SQRT2_Q15)>>15); - } - - break; - - case 4: //16QAM - - qam16_table_offset_re = 0; - qam16_table_offset_im = 0; - - if (x0[*jj] == 1) - qam16_table_offset_re+=2; - - *jj=*jj+1; - - if (x0[*jj] == 1) - qam16_table_offset_im+=2; - - *jj=*jj+1; - - - if (x0[*jj] == 1) - qam16_table_offset_re+=1; - - *jj=*jj+1; - - if (x0[*jj] == 1) - qam16_table_offset_im+=1; - - *jj=*jj+1; - - ((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - ((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); - - ((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0]; - ((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1]; - - if (frame_parms->nb_antennas_tx == 2) { - layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); - ((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0]; - ((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1]; - } - - break; - - case 6: //64QAM - - - qam64_table_offset_re = 0; - qam64_table_offset_im = 0; - - if (x0[*jj] == 1) - qam64_table_offset_re+=4; - - *jj=*jj+1; - - if (x0[*jj] == 1) - qam64_table_offset_im+=4; - - *jj=*jj+1; - - if (x0[*jj] == 1) - qam64_table_offset_re+=2; - - *jj=*jj+1; - - if (x0[*jj] == 1) - qam64_table_offset_im+=2; - - *jj=*jj+1; - - if (x0[*jj] == 1) - qam64_table_offset_re+=1; - - *jj=*jj+1; - - if (x0[*jj] == 1) - qam64_table_offset_im+=1; - - *jj=*jj+1; - - ((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); - - ((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0]; - ((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1]; - - if (frame_parms->nb_antennas_tx == 2) { - layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); - ((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0]; - ((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1]; - } - - break; - - } - } - - if (mimo_mode == ALAMOUTI) { - re++; // adjacent carriers are taken care of by precoding - *re_allocated = *re_allocated + 1; - - if (is_not_pilot(pilots,re,frame_parms->nushift,use2ndpilots)==0) { - re++; - *re_allocated = *re_allocated + 1; - } - } - - if (mimo_mode >= TM8) { //TM8,TM9,TM10 - - if (is_not_UEspecRS(first_layer0,re)) { - switch (mod_order0) { case 2: //QPSK - // printf("%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - for (int layer=first_layer0; layer<=(first_layer0+Nlayers0); layer++) { - ((int16_t*)&txdataF[layer][tti_offset])[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i - *jj = *jj + 1; - ((int16_t*)&txdataF[layer][tti_offset])[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} - *jj = *jj + 1; + ((int16_t*)&tmp_sample1)[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj = *jj + 1; + ((int16_t*)&tmp_sample1)[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj = *jj + 1; + + // normalization for 2 tx antennas + ((int16_t*)&txdataF[0][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*ONE_OVER_SQRT2_Q15)>>15); + ((int16_t*)&txdataF[0][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*ONE_OVER_SQRT2_Q15)>>15); + + if (frame_parms->nb_antennas_tx == 2) { + layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); + ((int16_t*)&txdataF[1][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample2)[0]*ONE_OVER_SQRT2_Q15)>>15); + ((int16_t*)&txdataF[1][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample2)[1]*ONE_OVER_SQRT2_Q15)>>15); } break; case 4: //16QAM - if (is_not_UEspecRS(0/*layer (FIXME uninitialized!)*/,re)) { - qam16_table_offset_re = 0; - qam16_table_offset_im = 0; - if (x0[*jj] == 1) - qam16_table_offset_re+=2; + qam16_table_offset_re = 0; + qam16_table_offset_im = 0; - *jj = *jj + 1; + if (x0[*jj] == 1) + qam16_table_offset_re+=2; - if (x0[*jj] == 1) - qam16_table_offset_im+=2; + *jj=*jj+1; - *jj = *jj + 1; + if (x0[*jj] == 1) + qam16_table_offset_im+=2; - if (x0[*jj] == 1) - qam16_table_offset_re+=1; + *jj=*jj+1; - *jj = *jj + 1; - if (x0[*jj] == 1) - qam16_table_offset_im+=1; + if (x0[*jj] == 1) + qam16_table_offset_re+=1; - *jj = *jj + 1; + *jj=*jj+1; - for (int layer=first_layer0; layer<=(first_layer0+Nlayers0); layer++) { - ((int16_t*)&txdataF[layer][tti_offset])[0] = qam_table_s0[qam16_table_offset_re]; - ((int16_t*)&txdataF[layer][tti_offset])[1] = qam_table_s0[qam16_table_offset_im]; - } + if (x0[*jj] == 1) + qam16_table_offset_im+=1; + + *jj=*jj+1; + + ((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + ((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); + + ((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0]; + ((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1]; + + if (frame_parms->nb_antennas_tx == 2) { + layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); + ((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0]; + ((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1]; } break; @@ -933,66 +861,221 @@ int allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, if (x0[*jj] == 1) qam64_table_offset_re+=4; - *jj = *jj + 1; + *jj=*jj+1; if (x0[*jj] == 1) qam64_table_offset_im+=4; - *jj = *jj + 1; + *jj=*jj+1; if (x0[*jj] == 1) qam64_table_offset_re+=2; - *jj = *jj + 1; + *jj=*jj+1; if (x0[*jj] == 1) qam64_table_offset_im+=2; - *jj = *jj + 1; + *jj=*jj+1; if (x0[*jj] == 1) qam64_table_offset_re+=1; - *jj = *jj + 1; + *jj=*jj+1; if (x0[*jj] == 1) qam64_table_offset_im+=1; - *jj = *jj + 1; + *jj=*jj+1; - for (int layer=first_layer0; layer<=(first_layer0+Nlayers0); layer++) { - ((int16_t*)&txdataF[layer][tti_offset])[0] = qam_table_s0[qam64_table_offset_re]; - ((int16_t*)&txdataF[layer][tti_offset])[1] = qam_table_s0[qam64_table_offset_im]; + ((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + ((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); + + ((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0]; + ((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1]; + + if (frame_parms->nb_antennas_tx == 2) { + layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); + ((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0]; + ((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1]; } break; - } } - } else if (mimo_mode>=TM9_10) { + } else if(mimo_mode == TM7){ + *re_allocated = *re_allocated + 1; + + if (is_not_UEspecRS(lprime,re,frame_parms->Nid_cell%3,frame_parms->Ncp,7)) { + + switch (mod_order0){ + case 2: //QPSK + + ((int16_t*)&tmp_sample1)[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj = *jj + 1; + ((int16_t*)&tmp_sample1)[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj = *jj + 1; + + //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); + for (aa=0; aa>15); + ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[0])>>15); + /* ((int16_t*)&txdataF[aa][tti_offset])[0] = ((int16_t*)&tmp_sample1)[0]; + ((int16_t*)&txdataF[aa][tti_offset])[1] = ((int16_t*)&tmp_sample1)[1]; */ + } + + //printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + break; + + case 4: //16QAM + + qam16_table_offset_re = 0; + qam16_table_offset_im = 0; + + if (x0[*jj] == 1) + qam16_table_offset_re+=2; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam16_table_offset_im+=2; + + *jj=*jj+1; + + + if (x0[*jj] == 1) + qam16_table_offset_re+=1; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam16_table_offset_im+=1; + + *jj=*jj+1; + + ((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + ((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); + + for (aa=0; aa>15); + ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); + } + + break; + + case 6: //64QAM + + + qam64_table_offset_re = 0; + qam64_table_offset_im = 0; + + if (x0[*jj] == 1) + qam64_table_offset_re+=4; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam64_table_offset_im+=4; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam64_table_offset_re+=2; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam64_table_offset_im+=2; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam64_table_offset_re+=1; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam64_table_offset_im+=1; + + *jj=*jj+1; + + ((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + ((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); + + for (aa=0; aa>15); + ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); + } + + break; + + } + } else{ + //precoding UE spec RS + //printf("precoding UE spec RS\n"); + + for (aa=0; aa>4; + mprime_qpsk_symb = mprime2&0xf; + + tmp_sample1 = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][lprime][mprime_dword]>>(2*mprime_qpsk_symb))&3]; + //printf("tmp_sample1=%d+i%d\n",((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); + //printf("beamforing_weights[%d][%d]=%d+i%d\n",re,aa,((int16_t*)&beamforming_weights[re][aa])[0],((int16_t*)&beamforming_weights[re][aa])[1]); + + ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((uint16_t*)&beamforming_weights[re][aa])[0])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[0])>>15); + + // ((int16_t*)&txdataF[aa][tti_offset])[0] = 0xffff; + // ((int16_t*)&txdataF[aa][tti_offset])[1] = 0xffff; + + mprime2 = mprime2++; + //printf("**txdataF[%d][%d]= %d+i%d\n ",aa,tti_offset,((int16_t*)&txdataF[aa][tti_offset])[0],((int16_t*)&txdataF[aa][tti_offset])[1]); + } + + } + } else if (mimo_mode == TM8) { //TM8 msg("allocate_REs_in_RB() [dlsch.c] : ERROR, unknown mimo_mode %d\n",mimo_mode); return(-1); } + if (mimo_mode == ALAMOUTI) { + re++; // adjacent carriers are taken care of by precoding + *re_allocated = *re_allocated + 1; + + if (is_not_pilot(pilots,re,frame_parms->nushift,use2ndpilots)==0) { + re++; + *re_allocated = *re_allocated + 1; + } + } + } } - return(0); +return(0); } int allocate_REs_in_RB_MCH(mod_sym_t **txdataF, uint32_t *jj, - uint16_t re_offset, - uint32_t symbol_offset, - uint8_t *x0, - uint8_t l, - uint8_t mod_order, - int16_t amp, - int16_t *qam_table_s, - uint32_t *re_allocated, - uint8_t skip_dc, - LTE_DL_FRAME_PARMS *frame_parms) + uint16_t re_offset, + uint32_t symbol_offset, + uint8_t *x0, + uint8_t l, + uint8_t mod_order, + int16_t amp, + int16_t *qam_table_s, + uint32_t *re_allocated, + uint8_t skip_dc, + LTE_DL_FRAME_PARMS *frame_parms) { uint32_t tti_offset,aa; @@ -1033,99 +1116,99 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF, switch (mod_order) { - case 2: //QPSK + case 2: //QPSK - // printf("%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - for (aa=0; aanb_antennas_tx; aa++) - ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i + // printf("%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + for (aa=0; aanb_antennas_tx; aa++) + ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i - *jj = *jj + 1; + *jj = *jj + 1; - for (aa=0; aanb_antennas_tx; aa++) - ((int16_t*)&txdataF[aa][tti_offset])[1] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} + for (aa=0; aanb_antennas_tx; aa++) + ((int16_t*)&txdataF[aa][tti_offset])[1] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} - *jj = *jj + 1; + *jj = *jj + 1; - // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - break; + // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + break; - case 4: //16QAM + case 4: //16QAM - qam16_table_offset_re = 0; - qam16_table_offset_im = 0; + qam16_table_offset_re = 0; + qam16_table_offset_im = 0; - if (x0[*jj] == 1) - qam16_table_offset_re+=2; + if (x0[*jj] == 1) + qam16_table_offset_re+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_im+=2; + if (x0[*jj] == 1) + qam16_table_offset_im+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_re+=1; + if (x0[*jj] == 1) + qam16_table_offset_re+=1; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam16_table_offset_im+=1; + if (x0[*jj] == 1) + qam16_table_offset_im+=1; - *jj=*jj+1; + *jj=*jj+1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s[qam16_table_offset_re]; - ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s[qam16_table_offset_im]; - // ((int16_t *)&txdataF[aa][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - // ((int16_t *)&txdataF[aa][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); - } + for (aa=0; aanb_antennas_tx; aa++) { + ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s[qam16_table_offset_re]; + ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s[qam16_table_offset_im]; + // ((int16_t *)&txdataF[aa][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + // ((int16_t *)&txdataF[aa][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); + } - break; + break; - case 6: //64QAM + case 6: //64QAM - qam64_table_offset_re = 0; - qam64_table_offset_im = 0; + qam64_table_offset_re = 0; + qam64_table_offset_im = 0; - if (x0[*jj] == 1) - qam64_table_offset_re+=4; + if (x0[*jj] == 1) + qam64_table_offset_re+=4; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=4; + if (x0[*jj] == 1) + qam64_table_offset_im+=4; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_re+=2; + if (x0[*jj] == 1) + qam64_table_offset_re+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=2; + if (x0[*jj] == 1) + qam64_table_offset_im+=2; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_re+=1; + if (x0[*jj] == 1) + qam64_table_offset_re+=1; - *jj=*jj+1; + *jj=*jj+1; - if (x0[*jj] == 1) - qam64_table_offset_im+=1; + if (x0[*jj] == 1) + qam64_table_offset_im+=1; - *jj=*jj+1; + *jj=*jj+1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s[qam64_table_offset_re];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s[qam64_table_offset_im];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); - } + for (aa=0; aanb_antennas_tx; aa++) { + ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s[qam64_table_offset_re];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s[qam64_table_offset_im];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); + } - break; + break; } } @@ -1142,50 +1225,52 @@ uint8_t get_pmi(uint8_t N_RB_DL,LTE_DL_eNB_HARQ_t *dlsch_harq,uint16_t rb) // printf("Getting pmi for RB %d => %d\n",rb,(pmi_alloc>>((rb>>2)<<1))&3); switch (N_RB_DL) { - case 6: // 1 PRB per subband - if (mode <= PUSCH_PRECODING1) - return((pmi_alloc>>(rb<<1))&3); - else - return((pmi_alloc>>rb)&1); + case 6: // 1 PRB per subband + if (mode <= PUSCH_PRECODING1) + return((pmi_alloc>>(rb<<1))&3); + else + return((pmi_alloc>>rb)&1); - break; + break; - default: - case 25: // 4 PRBs per subband - if (mode <= PUSCH_PRECODING1) - return((pmi_alloc>>((rb>>2)<<1))&3); - else - return((pmi_alloc>>(rb>>2))&1); + default: + case 25: // 4 PRBs per subband + if (mode <= PUSCH_PRECODING1) + return((pmi_alloc>>((rb>>2)<<1))&3); + else + return((pmi_alloc>>(rb>>2))&1); - break; + break; - case 50: // 6 PRBs per subband - if (mode <= PUSCH_PRECODING1) - return((pmi_alloc>>((rb/6)<<1))&3); - else - return((pmi_alloc>>(rb/6))&1); + case 50: // 6 PRBs per subband + if (mode <= PUSCH_PRECODING1) + return((pmi_alloc>>((rb/6)<<1))&3); + else + return((pmi_alloc>>(rb/6))&1); - break; + break; - case 100: // 8 PRBs per subband - if (mode <= PUSCH_PRECODING1) - return((pmi_alloc>>((rb>>3)<<1))&3); - else - return((pmi_alloc>>(rb>>3))&1); + case 100: // 8 PRBs per subband + if (mode <= PUSCH_PRECODING1) + return((pmi_alloc>>((rb>>3)<<1))&3); + else + return((pmi_alloc>>(rb>>3))&1); - break; + break; } } -int dlsch_modulation(mod_sym_t **txdataF, +int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, + mod_sym_t **txdataF, int16_t amp, uint32_t subframe_offset, - LTE_DL_FRAME_PARMS *frame_parms, uint8_t num_pdcch_symbols, LTE_eNB_DLSCH_t *dlsch0, - LTE_eNB_DLSCH_t *dlsch1) + LTE_eNB_DLSCH_t *dlsch1, + int32_t **beamforming_weights) { + LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; uint8_t nsymb; uint8_t harq_pid = dlsch0->current_harq_pid; @@ -1195,7 +1280,7 @@ int dlsch_modulation(mod_sym_t **txdataF, uint16_t l,rb,re_offset; uint32_t rb_alloc_ind; uint32_t *rb_alloc = dlsch0_harq->rb_alloc; - uint8_t pilots=0; + uint8_t pilots=0,ue_spec_rs=0; uint8_t skip_dc,skip_half; uint8_t mod_order0 = get_Qm(dlsch0_harq->mcs); uint8_t mod_order1 = 0; @@ -1203,6 +1288,11 @@ int dlsch_modulation(mod_sym_t **txdataF, int16_t qam16_table_a0[4],qam64_table_a0[8],qam16_table_b0[4],qam64_table_b0[8]; int16_t qam16_table_a1[4],qam64_table_a1[8],qam16_table_b1[4],qam64_table_b1[8]; int16_t *qam_table_s0,*qam_table_s1; + MIMO_mode_t mimo_mode = dlsch0_harq->mimo_mode; + uint8_t beamforming_mode = 0; + int32_t **beamforming_weights_RB = beamforming_weights; + uint8_t lprime, mprime=0,Ns; + #ifdef DEBUG_DLSCH_MODULATION uint8_t Nl0 = dlsch0_harq->Nl; uint8_t Nl1; @@ -1224,7 +1314,7 @@ int dlsch_modulation(mod_sym_t **txdataF, amp_rho_b = (int16_t)(((int32_t)amp*dlsch0->sqrt_rho_b)>>13); if (mod_order0 == 4) - for (i=0; i<4; i++) { + for (i=0;i<4; i++) { qam16_table_a0[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_a)>>15); qam16_table_b0[i] = (int16_t)(((int32_t)qam16_table[i]*amp_rho_b)>>15); } @@ -1281,6 +1371,35 @@ int dlsch_modulation(mod_sym_t **txdataF, pilots=0; } + if(mimo_mode==TM7){ //36.211 V8.6.0 2009-03 + beamforming_mode = 7; + mprime = 0; + if (frame_parms->Ncp==0) { // normal prefix + if ((l==6)||(l==12)) + lprime=2; // pilots in nushift+3, nushift+9 + else if ((l==3)||(l==9)) + lprime=1; // pilots in nushift, nushift+6 + else + lprime=0; + } else { + if ((l==7)) + lprime=2; + else if ((l==4)||(l==10)) + lprime=1; + else + lprime=0; + } + }else if(mimo_mode==TM8){ + beamforming_mode = 8; + }else if(mimo_mode==TM9_10){ + beamforming_mode = 9; + } + + if(l<=(nsymb>>2)) + Ns=0; + else + Ns=1; + re_offset = frame_parms->first_carrier_offset; symbol_offset = (uint32_t)frame_parms->ofdm_symbol_size*(l+(subframe_offset*nsymb)); @@ -1392,7 +1511,7 @@ int dlsch_modulation(mod_sym_t **txdataF, if (frame_parms->frame_type == TDD) { // TDD //SSS if (((subframe_offset==0)|| - (subframe_offset==5)) && + (subframe_offset==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==nsymb-1) ) { @@ -1401,7 +1520,7 @@ int dlsch_modulation(mod_sym_t **txdataF, //PSS if (((subframe_offset==1)|| - (subframe_offset==6)) && + (subframe_offset==6)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==2) ) { @@ -1448,7 +1567,7 @@ int dlsch_modulation(mod_sym_t **txdataF, if (rb_alloc_ind > 0) { // printf("Allocated rb %d/symbol %d, skip_half %d, subframe_offset %d, symbol_offset %d, re_offset %d, jj %d\n",rb,l,skip_half,subframe_offset,symbol_offset,re_offset,jj); - allocate_REs_in_RB(frame_parms, + allocate_REs_in_RB(phy_vars_eNB, txdataF, &jj, &jj2, @@ -1463,23 +1582,36 @@ int dlsch_modulation(mod_sym_t **txdataF, qam_table_s1, &re_allocated, skip_dc, - skip_half); + skip_half, + lprime, + mprime, + Ns, + beamforming_weights_RB); + + if(mimo_mode==TM7){ + if(frame_parms->Ncp==0&&(l==3||l==6||l==9||l==12)) + mprime +=3; + else if(frame_parms->Ncp==1&&(l==4||l==7||l==10)) + mprime +=4; + } } re_offset+=12; // go to next RB + beamforming_weights_RB +=12; // check if we crossed the symbol boundary and skip DC if (re_offset >= frame_parms->ofdm_symbol_size) { - if (skip_dc == 0) //even number of RBs (doesn't straddle DC) - re_offset=1; - else - re_offset=7; // odd number of RBs - } - } + if (skip_dc == 0) //even number of RBs (doesn't straddle DC) + re_offset=1; + else + re_offset=7; // odd number of RBs + } + beamforming_weights_RB = beamforming_weights; + } - } + } diff --git a/openair1/PHY/LTE_TRANSPORT/lte_mcs.c b/openair1/PHY/LTE_TRANSPORT/lte_mcs.c index 6e253c3b63..0c846f3aa7 100644 --- a/openair1/PHY/LTE_TRANSPORT/lte_mcs.c +++ b/openair1/PHY/LTE_TRANSPORT/lte_mcs.c @@ -333,11 +333,8 @@ int adjust_G(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *rb_alloc,uint8_t mod_orde return(0); } -int get_G(LTE_DL_FRAME_PARMS *frame_parms,uint16_t nb_rb,uint32_t *rb_alloc,uint8_t mod_order,uint8_t Nl,uint8_t num_pdcch_symbols,int frame,uint8_t subframe) +int get_G(LTE_DL_FRAME_PARMS *frame_parms,uint16_t nb_rb,uint32_t *rb_alloc,uint8_t mod_order,uint8_t Nl,uint8_t num_pdcch_symbols,int frame,uint8_t subframe,uint8_t beamforming_mode) { - - - int G_adj; if (is_pmch_subframe(frame,subframe,frame_parms) == 0) { @@ -348,9 +345,11 @@ int get_G(LTE_DL_FRAME_PARMS *frame_parms,uint16_t nb_rb,uint32_t *rb_alloc,uint // PDDDPDD PDDDPDD - 13 PDSCH symbols, 10 full, 3 w/ pilots = 10*12 + 3*8 // PCDDPDD PDDDPDD - 12 PDSCH symbols, 9 full, 3 w/ pilots = 9*12 + 3*8 // PCCDPDD PDDDPDD - 11 PDSCH symbols, 8 full, 3 w/pilots = 8*12 + 3*8 - if (frame_parms->mode1_flag==0) // SISO + if (beamforming_mode==0 && frame_parms->mode1_flag==0) return((((int)nb_rb * mod_order * ((11-num_pdcch_symbols)*12 + 3*8)) - G_adj)*Nl); - else + else if(beamforming_mode==7) + return(((int)nb_rb * mod_order * ((7-num_pdcch_symbols)*12 + 3*10 + 4*9)) - G_adj); + else //SISO return(((int)nb_rb * mod_order * ((11-num_pdcch_symbols)*12 + 3*10)) - G_adj); } else { // PDDPDD PDDPDD - 11 PDSCH symbols, 8 full, 3 w/ pilots = 8*12 + 3*8 @@ -358,7 +357,9 @@ int get_G(LTE_DL_FRAME_PARMS *frame_parms,uint16_t nb_rb,uint32_t *rb_alloc,uint // PCCPDD PDDPDD - 9 PDSCH symbols, 6 full, 3 w/pilots = 6*12 + 3*8 if (frame_parms->mode1_flag==0) return((((int)nb_rb * mod_order * ((9-num_pdcch_symbols)*12 + 3*8)) - G_adj)*Nl); - else + else if(beamforming_mode==7) + return(((int)nb_rb * mod_order * ((5-num_pdcch_symbols)*12 + 3*8 + 4*9)) - G_adj); + else //SISO return(((int)nb_rb * mod_order * ((9-num_pdcch_symbols)*12 + 3*10)) - G_adj); } } else { // This is an MBSFN subframe diff --git a/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c b/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c new file mode 100644 index 0000000000..310204eea9 --- /dev/null +++ b/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c @@ -0,0 +1,217 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ + +/*! \file PHY/LTE_TRANSPORT/uespec_pilots.c +* \brief Top-level routines for generating DL ue-specific reference signals V12.5 2015-03 +* \author X.JIANG +* \date 2011 +* \version 0.1 +* \company Eurecom +* \email: xiwen.jiangeurecom.fr +* \note +* \warning +*/ +//#include "defs.h" +#include "PHY/defs.h" + +void generate_ue_spec_pilots(PHY_VARS_eNB *phy_vars_eNB, + uint8_t UE_id, + mod_sym_t **txdataF, + int16_t amp, + uint16_t Ntti, + uint8_t beamforming_mode) +{ + + LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; + + uint32_t tti,tti_offset,slot_offset,Nsymb,samples_per_symbol; + uint8_t second_pilot,aa; + + // printf("Doing TX pilots Nsymb %d, second_pilot %d\n",Nsymb,second_pilot); + + switch(beamforming_mode){ + case 7: + for (tti=0; ttiofdm_symbol_size*Nsymb; + samples_per_symbol = frame_parms->ofdm_symbol_size; + slot_offset = (tti*2)%20; + + // printf("tti %d : offset %d (slot %d)\n",tti,tti_offset,slot_offset); + //Generate UE specific Pilots + printf("generate_dl_ue_spec:tti_offset=%d\n",tti_offset); + + if(frame_parms->Ncp==0) { + for(aa=0;aanb_antennas_tx_phy;aa++){ + //antenna port 5 symbol 0 slot 0 + lte_dl_ue_spec(phy_vars_eNB, + UE_id, + &txdataF[aa][tti_offset+3*samples_per_symbol], + amp, + slot_offset, + 1, + 5, + 0); + + //antenna port 5 symbol 1 slot 0 + lte_dl_ue_spec(phy_vars_eNB, + UE_id, + &txdataF[aa][tti_offset+6*samples_per_symbol], + amp, + slot_offset, + 1, + 5, + 0); + + //antenna port 5 symbol 0 slot 1 + lte_dl_ue_spec(phy_vars_eNB, + UE_id, + &txdataF[aa][tti_offset+9*samples_per_symbol], + amp, + slot_offset+1, + 0, + 5, + 0); + + //antenna port 5 symbol 1 slot 1 + lte_dl_ue_spec(phy_vars_eNB, + UE_id, + &txdataF[aa][tti_offset+12*samples_per_symbol], + amp, + slot_offset+1, + 1, + 5, + 0); + } + } else{ + msg("generate_ue_soec_pilots:Extented Cyclic Prefix for TM7 is not supported yet.\n"); + } + + + } + break; + + case 8: + case 9: + case 10: + default: + msg("[generate_ue_spec_pilots(in uespec_pilots.c)]ERROR:beamforming mode %d is not supported\n",beamforming_mode); + + } +} + +/*int generate_ue_spec_pilots_slot(PHY_VARS_eNB *phy_vars_eNB, + mod_sym_t **txdataF, + int16_t amp, + uint16_t slot, + int first_pilot_only) +{ + + LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; + uint32_t slot_offset,Nsymb,samples_per_symbol; + uint8_t second_pilot; + + if (slot<0 || slot>= 20) { + msg("generate_pilots_slot: slot not in range (%d)\n",slot); + return(-1); + } + + Nsymb = (frame_parms->Ncp==0)?7:6; + second_pilot = (frame_parms->Ncp==0)?4:3; + + + slot_offset = slot*frame_parms->ofdm_symbol_size*Nsymb; + samples_per_symbol = frame_parms->ofdm_symbol_size; + + // printf("tti %d : offset %d (slot %d)\n",tti,tti_offset,slot_offset); + //Generate Pilots + + //antenna 0 symbol 0 slot 0 + lte_dl_cell_spec(phy_vars_eNB, + &txdataF[0][slot_offset], + amp, + slot, + 0, + 0); + + + if (first_pilot_only==0) { + //antenna 0 symbol 3 slot 0 + lte_dl_cell_spec(phy_vars_eNB, + &txdataF[0][slot_offset+(second_pilot*samples_per_symbol)], + amp, + slot, + 1, + 0); + } + + if (frame_parms->nb_antennas_tx > 1) { + if (frame_parms->mode1_flag) { + // antenna 1 symbol 0 slot 0 + lte_dl_cell_spec(phy_vars_eNB, + &txdataF[1][slot_offset], + amp, + slot, + 0, + 0); + + if (first_pilot_only==0) { + // antenna 1 symbol 3 slot 0 + lte_dl_cell_spec(phy_vars_eNB, + &txdataF[1][slot_offset+(second_pilot*samples_per_symbol)], + amp, + slot, + 1, + 0); + } + } else { + + // antenna 1 symbol 0 slot 0 + lte_dl_cell_spec(phy_vars_eNB, + &txdataF[1][slot_offset], + amp, + slot, + 0, + 1); + + if (first_pilot_only == 0) { + // antenna 1 symbol 3 slot 0 + lte_dl_cell_spec(phy_vars_eNB, + &txdataF[1][slot_offset+(second_pilot*samples_per_symbol)], + amp, + slot, + 1, + 1); + } + } + } + + return(0); +}*/ + diff --git a/openair1/PHY/LTE_TRANSPORT/pmch.c b/openair1/PHY/LTE_TRANSPORT/pmch.c index 3082bff917..422f607464 100644 --- a/openair1/PHY/LTE_TRANSPORT/pmch.c +++ b/openair1/PHY/LTE_TRANSPORT/pmch.c @@ -304,7 +304,7 @@ void generate_mch(PHY_VARS_eNB *phy_vars_eNB,int sched_subframe,uint8_t *a,int a phy_vars_eNB->lte_frame_parms.N_RB_DL, phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->rb_alloc, get_Qm(phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->mcs),1, - 2,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe); + 2,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,0); generate_mbsfn_pilot(phy_vars_eNB, phy_vars_eNB->lte_eNB_common_vars.txdataF[0], @@ -319,8 +319,7 @@ void generate_mch(PHY_VARS_eNB *phy_vars_eNB,int sched_subframe,uint8_t *a,int a subframe, &phy_vars_eNB->dlsch_rate_matching_stats, &phy_vars_eNB->dlsch_turbo_encoding_stats, - &phy_vars_eNB->dlsch_interleaving_stats - )<0) + &phy_vars_eNB->dlsch_interleaving_stats)<0) mac_xface->macphy_exit("problem in dlsch_encoding"); dlsch_scrambling(&phy_vars_eNB->lte_frame_parms,1,phy_vars_eNB->dlsch_eNB_MCH,G,0,subframe<<1); diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 5fe7518004..58a1177a37 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -1,4 +1,4 @@ -/******************************************************************************* +/****************************************************************************** OpenAirInterface Copyright(c) 1999 - 2014 Eurecom @@ -157,11 +157,14 @@ void dlsch_encoding_emul(PHY_VARS_eNB *phy_vars_eNB, \param re_allocated pointer to allocation counter \param skip_dc offset for positive RBs \param skip_half indicate that first or second half of RB must be skipped for PBCH/PSS/SSS + \param ue_spec_rs UE specific RS indicator + \param nb_antennas_tx_phy Physical antenna elements which can be different with antenna port number, especially in beamforming case + \param beamforming_weights_rb Beamforming weights applied on each antenna element and each carrier in case of TM7-10 \param use2ndpilots Set to use the pilots from antenna port 1 for PDSCH \param frame_parms Frame parameter descriptor */ -int32_t allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, +int32_t allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB, mod_sym_t **txdataF, uint32_t *jj, uint32_t *jj2, @@ -176,8 +179,11 @@ int32_t allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, int16_t *qam_table_s1, uint32_t *re_allocated, uint8_t skip_dc, - uint8_t skip_half); - + uint8_t skip_half, + uint8_t lprime, + uint8_t mprime, + uint8_t Ns, + int32_t **beamforming_weights); /** \fn int32_t dlsch_modulation(mod_sym_t **txdataF, int16_t amp, @@ -194,15 +200,17 @@ int32_t allocate_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, @param num_pdcch_symbols Number of PDCCH symbols in this subframe @param dlsch0 Pointer to Transport Block 0 DLSCH descriptor for this allocation @param dlsch1 Pointer to Transport Block 0 DLSCH descriptor for this allocation - + @param nb_antennas_tx_phy Physical antenna elements which can be different with antenna port number, especially in beamforming case + @param beamforming_weights Beamforming weights applied on each antenna element and each carrier in case of TM7-10 */ -int32_t dlsch_modulation(mod_sym_t **txdataF, +int32_t dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, + mod_sym_t **txdataF, int16_t amp, uint32_t sub_frame_offset, - LTE_DL_FRAME_PARMS *frame_parms, uint8_t num_pdcch_symbols, LTE_eNB_DLSCH_t *dlsch0, - LTE_eNB_DLSCH_t *dlsch1); + LTE_eNB_DLSCH_t *dlsch1, + int32_t **beamforming_weights); /* \brief This function is the top-level routine for generation of the sub-frame signal (frequency-domain) for MCH. @param txdataF Table of pointers for frequency-domain TX signals @@ -295,6 +303,13 @@ int32_t generate_mbsfn_pilot(PHY_VARS_eNB *phy_vars_eNB, int16_t amp, uint16_t subframe); +void generate_ue_spec_pilots(PHY_VARS_eNB *phy_vars_eNB, + uint8_t UE_id, + mod_sym_t **txdataF, + int16_t amp, + uint16_t Ntti, + uint8_t beamforming_mode); + int32_t generate_pss(mod_sym_t **txdataF, int16_t amp, LTE_DL_FRAME_PARMS *frame_parms, @@ -680,6 +695,7 @@ int dlsch_64qam_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, @param nb_rb number of RBs for this allocation @param pbch_pss_sss_adj Number of channel bits taken by PBCH/PSS/SSS @param llr128p pointer to pointer to symbol in dlsch_llr + @param beamforming_mode beamforming mode */ int32_t dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, int32_t **rxdataF_comp, @@ -688,7 +704,8 @@ int32_t dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, uint8_t first_symbol_flag, uint16_t nb_rb, uint16_t pbch_pss_sss_adj, - int16_t **llr128p); + int16_t **llr128p, + uint8_t beamforming_mode); /** \brief This function generates log-likelihood ratios (decoder input) for single-stream 16QAM received waveforms @@ -904,6 +921,16 @@ uint16_t dlsch_extract_rbs_dual(int32_t **rxdataF, uint32_t high_speed_flag, LTE_DL_FRAME_PARMS *frame_parms); +uint16_t dlsch_extract_rbs_TM7(int32_t **rxdataF, + int32_t **dl_bf_ch_estimates, + int32_t **rxdataF_ext, + int32_t **dl_bf_ch_estimates_ext, + uint32_t *rb_alloc, + uint8_t symbol, + uint8_t subframe, + uint32_t high_speed_flag, + LTE_DL_FRAME_PARMS *frame_parms); + /** \brief This function performs channel compensation (matched filtering) on the received RBs for this allocation. In addition, it computes the squared-magnitude of the channel with weightings for 16QAM/64QAM detection as well as dual-stream detection (cross-correlation) @param rxdataF_ext Frequency-domain received signal in RBs to be demodulated @param dl_ch_estimates_ext Frequency-domain channel estimates in RBs to be demodulated @@ -1249,7 +1276,7 @@ uint8_t get_transmission_mode(module_id_t Mod_id, uint8_t CC_id, rnti_t rnti); */ uint32_t conv_nprb(uint8_t ra_header,uint32_t rb_alloc,int N_RB_DL); -int get_G(LTE_DL_FRAME_PARMS *frame_parms,uint16_t nb_rb,uint32_t *rb_alloc,uint8_t mod_order,uint8_t Nl,uint8_t num_pdcch_symbols,int frame,uint8_t subframe); +int get_G(LTE_DL_FRAME_PARMS *frame_parms,uint16_t nb_rb,uint32_t *rb_alloc,uint8_t mod_order,uint8_t Nl,uint8_t num_pdcch_symbols,int frame,uint8_t subframe, uint8_t beamforming_mode); int adjust_G(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *rb_alloc,uint8_t mod_order,uint8_t subframe); int adjust_G2(LTE_DL_FRAME_PARMS *frame_parms,uint32_t *rb_alloc,uint8_t mod_order,uint8_t subframe,uint8_t symbol); @@ -1551,7 +1578,7 @@ uint8_t phich_subframe2_pusch_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint8_t s @param subframe Subframe of received/transmitted PHICH @returns frame of PUSCH transmission */ -uint8_t phich_frame2_pusch_frame(LTE_DL_FRAME_PARMS *frame_parms,frame_t frame,uint8_t subframe);; +uint8_t phich_frame2_pusch_frame(LTE_DL_FRAME_PARMS *frame_parms,frame_t frame,uint8_t subframe); void print_CQI(void *o,UCI_format_t uci_format,uint8_t eNB_id,int N_RB_DL); diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c index 670a852b67..5bbea87c88 100644 --- a/openair1/PHY/MODULATION/slot_fep.c +++ b/openair1/PHY/MODULATION/slot_fep.c @@ -241,6 +241,15 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue, } } + // printf("slot_fep:transmission_mode[%d] = %d\n", eNB_id, phy_vars_ue->transmission_mode[eNB_id]); + if(phy_vars_ue->transmission_mode[eNB_id] == 7) + if(frame_parms->Ncp==0 && (symbol==3) || (symbol==6) || (symbol==9) || (symbol==12)) + lte_dl_bf_channel_estimation(phy_vars_ue,eNB_id,0,Ns,5,symbol); + else if(frame_parms->Ncp==1 && (symbol==4) || (symbol==7) || (symbol==10)) + msg("slot_fep(slot_fep.c):channel estimation not supported yet for TM7 extented CP.\n"); + else if(phy_vars_ue->transmission_mode[eNB_id] > 7) + msg("slot_fep(slot_fep.c):transmission mode not supported yet.\n"); + } #ifdef DEBUG_FEP diff --git a/openair1/PHY/Makefile.inc b/openair1/PHY/Makefile.inc index 2105e1209d..1586f353c0 100644 --- a/openair1/PHY/Makefile.inc +++ b/openair1/PHY/Makefile.inc @@ -1,6 +1,7 @@ PHY_OBJS = $(TOP_DIR)/PHY/LTE_TRANSPORT/pss.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/sss.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/pilots.o +PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/pilots_ue_spec.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/pilots_mbsfn.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/dlsch_coding.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_TRANSPORT/dlsch_modulation.o @@ -40,6 +41,7 @@ PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_sync_time.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_sync_timefreq.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_adjust_sync.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.o +PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_est_freq_offset.o @@ -47,7 +49,7 @@ PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_ue_measurements.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_eNB_measurements.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/adjust_gain.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_REFSIG/lte_dl_cell_spec.o -PHY_OBJS += $(TOP_DIR)/PHY/LTE_REFSIG/lte_dl_uespec.o +PHY_OBJS += $(TOP_DIR)/PHY/LTE_REFSIG/lte_dl_ue_spec.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_REFSIG/lte_gold.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_REFSIG/lte_gold_mbsfn.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_REFSIG/lte_dl_mbsfn.o @@ -69,7 +71,7 @@ PHY_OBJS += $(TOP_DIR)/PHY/INIT/lte_init.o PHY_OBJS += $(TOP_DIR)/PHY/INIT/lte_parms.o PHY_OBJS += $(TOP_DIR)/PHY/INIT/init_top.o PHY_OBJS += $(TOP_DIR)/PHY/TOOLS/file_output.o -PHY_OBJS += $(TOP_DIR)/PHY/TOOLS/fft.o +#PHY_OBJS += $(TOP_DIR)/PHY/TOOLS/fft.o PHY_OBJS += $(TOP_DIR)/PHY/TOOLS/lte_dfts.o PHY_OBJS += $(TOP_DIR)/PHY/TOOLS/log2_approx.o PHY_OBJS += $(TOP_DIR)/PHY/TOOLS/cmult_sv.o diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 7a46d9c444..80c6b4ef01 100755 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -220,6 +220,7 @@ typedef struct PHY_VARS_eNB_s { eNB_proc_t proc[NUM_ENB_THREADS]; uint8_t local_flag; uint32_t rx_total_gain_eNB_dB; + uint8_t nb_antennas_tx_phy; LTE_DL_FRAME_PARMS lte_frame_parms; PHY_MEASUREMENTS_eNB PHY_measurements_eNB[NUMBER_OF_eNB_SECTORS_MAX]; /// Measurement variables LTE_eNB_COMMON lte_eNB_common_vars; @@ -241,6 +242,9 @@ typedef struct PHY_VARS_eNB_s { /// cell-specific reference symbols uint32_t lte_gold_table[20][2][14]; + /// UE-specific reference symbols (p=5), TM 7 + uint32_t lte_gold_uespec_port5_table[NUMBER_OF_UE_MAX][20][2][21]; + /// UE-specific reference symbols (p=7...14), TM 8/9/10 uint32_t lte_gold_uespec_table[2][20][2][21]; @@ -505,8 +509,11 @@ typedef struct { /// cell-specific reference symbols uint32_t lte_gold_table[7][20][2][14]; + /// UE-specific reference symbols (p=5), TM 7 + uint32_t lte_gold_uespec_port5_table[20][2][21]; + /// ue-specific reference symbols - uint32_t lte_gold_uespec_table[2][20][2][21]; + uint32_t lte_gold_uespec_table[2][20][2][21]; /// mbsfn reference symbols uint32_t lte_gold_mbsfn_table[10][3][42]; diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h index 47c32d87c8..a7574575a3 100644 --- a/openair1/PHY/impl_defs_lte.h +++ b/openair1/PHY/impl_defs_lte.h @@ -587,8 +587,9 @@ typedef enum { DUALSTREAM_UNIFORM_PRECODING1=9, DUALSTREAM_UNIFORM_PRECODINGj=10, DUALSTREAM_PUSCH_PRECODING=11, - TM8=12, - TM9_10=13 + TM7=12, + TM8=13, + TM9_10=14 } MIMO_mode_t; typedef struct { @@ -784,6 +785,10 @@ typedef struct { /// - 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 Received frequency-domain ue specific pilots. + /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx + /// - second index: ? [0..12*N_RB_DL[ + int32_t **rxdataF_uespec_pilots; /// \brief Received frequency-domain signal after extraction and channel compensation. /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx /// - second index: ? [0..168*N_RB_DL[ @@ -797,6 +802,14 @@ typedef struct { /// - 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 Downlink beamforming 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_bf_ch_estimates; + /// \brief Downlink beamforming channel estimates. + /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx + /// - second index: ? [0..168*N_RB_DL[ + int32_t **dl_bf_ch_estimates_ext; /// \brief Downlink cross-correlation of MIMO channel estimates (unquantized PMI) extracted in PRBS. /// - first index: ? [0..7] (hard coded) FIXME! accessed via \c nb_antennas_rx /// - second index: ? [0..168*N_RB_DL[ diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 3828a9be72..32ff858996 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -2203,7 +2203,9 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e phy_vars_eNB->dlsch_eNB_SI->harq_processes[0]->rb_alloc, get_Qm(phy_vars_eNB->dlsch_eNB_SI->harq_processes[0]->mcs), 1, - num_pdcch_symbols,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe), + num_pdcch_symbols,phy_vars_eNB->proc[sched_subframe].frame_tx, + subframe, + (phy_vars_eNB->transmission_mode[(uint8_t)UE_id]<7?0:phy_vars_eNB->transmission_mode[(uint8_t)UE_id])), 0, subframe<<1); @@ -2211,13 +2213,14 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e start_meas(&phy_vars_eNB->dlsch_modulation_stats); // for (sect_id=0;sect_idlte_eNB_common_vars.txdataF[0], + re_allocated = dlsch_modulation(&phy_vars_eNB, + phy_vars_eNB->lte_eNB_common_vars.txdataF[0], AMP, subframe, - &phy_vars_eNB->lte_frame_parms, num_pdcch_symbols, phy_vars_eNB->dlsch_eNB_SI, - (LTE_eNB_DLSCH_t *)NULL); + (LTE_eNB_DLSCH_t *)NULL, + (int32_t **)NULL); stop_meas(&phy_vars_eNB->dlsch_modulation_stats); } @@ -2338,17 +2341,22 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e phy_vars_eNB->dlsch_eNB_ra->harq_processes[0]->rb_alloc, get_Qm(phy_vars_eNB->dlsch_eNB_ra->harq_processes[0]->mcs), 1, - num_pdcch_symbols,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe), + num_pdcch_symbols, + phy_vars_eNB->proc[sched_subframe].frame_tx, + subframe, + (phy_vars_eNB->transmission_mode[(uint8_t)UE_id]<7?0:phy_vars_eNB->transmission_mode[(uint8_t)UE_id]<7)), 0, subframe<<1); // for (sect_id=0;sect_idlte_eNB_common_vars.txdataF[0], + re_allocated = dlsch_modulation(phy_vars_eNB, + phy_vars_eNB->lte_eNB_common_vars.txdataF[0], AMP, subframe, - &phy_vars_eNB->lte_frame_parms, num_pdcch_symbols, phy_vars_eNB->dlsch_eNB_ra, - (LTE_eNB_DLSCH_t *)NULL); + (LTE_eNB_DLSCH_t *)NULL, + (int32_t **)NULL); + } #ifdef PHY_ABSTRACTION @@ -2394,7 +2402,10 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->rb_alloc, get_Qm(phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->mcs), phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->Nl, - num_pdcch_symbols,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe), + num_pdcch_symbols, + phy_vars_eNB->proc[sched_subframe].frame_tx, + subframe, + (phy_vars_eNB->transmission_mode[(uint8_t)UE_id]<7?0:phy_vars_eNB->transmission_mode[(uint8_t)UE_id])), phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->nb_rb, phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->mcs, pmi2hex_2Ar1(phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->pmi_alloc), @@ -2413,7 +2424,10 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->rb_alloc, get_Qm(phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->mcs), phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->Nl, - num_pdcch_symbols,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe), + num_pdcch_symbols, + phy_vars_eNB->proc[sched_subframe].frame_tx, + subframe, + (phy_vars_eNB->transmission_mode[(uint8_t)UE_id]<7?0:phy_vars_eNB->transmission_mode[(uint8_t)UE_id]<7)), phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->nb_rb, phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->mcs, pmi2hex_2Ar1(phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->pmi_alloc), @@ -2495,7 +2509,10 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->rb_alloc, get_Qm(phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->mcs), phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->Nl, - num_pdcch_symbols,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe), + num_pdcch_symbols, + phy_vars_eNB->proc[sched_subframe].frame_tx, + subframe, + phy_vars_eNB->transmission_mode[(uint8_t)UE_id]), 0, subframe<<1); stop_meas(&phy_vars_eNB->dlsch_scrambling_stats); @@ -2510,13 +2527,14 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e // if (UE_id == 1) // LOG_I(PHY,"[MYEMOS] MCS_i %d\n", phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->mcs); - re_allocated = dlsch_modulation(phy_vars_eNB->lte_eNB_common_vars.txdataF[0], + re_allocated = dlsch_modulation(phy_vars_eNB, + phy_vars_eNB->lte_eNB_common_vars.txdataF[0], AMP, subframe, - &phy_vars_eNB->lte_frame_parms, num_pdcch_symbols, phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0], - phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][1]); + phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][1], + (int32_t **)NULL); stop_meas(&phy_vars_eNB->dlsch_modulation_stats); } diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 6394c7dff6..7efee84b84 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -138,7 +138,9 @@ void dump_dlsch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint8_t get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs), phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, - phy_vars_ue->frame_rx,subframe); + phy_vars_ue->frame_rx, + subframe, + phy_vars_ue->transmission_mode[eNB_id]); write_output("rxsigF0.m","rxsF0", phy_vars_ue->lte_ue_common_vars.rxdataF[0],2*nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,2,1); write_output("rxsigF0_ext.m","rxsF0_ext", phy_vars_ue->lte_ue_pdsch_vars[0]->rxdataF_ext[0],2*nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,1,1); @@ -167,7 +169,9 @@ void dump_dlsch_SI(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe) get_Qm(phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs), 1, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, - phy_vars_ue->frame_rx,subframe); + phy_vars_ue->frame_rx, + subframe, + phy_vars_ue->transmission_mode[eNB_id]); LOG_D(PHY,"[UE %d] Dumping dlsch_SI : nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n", phy_vars_ue->Mod_id, phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->nb_rb, @@ -221,7 +225,9 @@ void dump_dlsch_ra(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe) get_Qm(phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->mcs), 1, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, - phy_vars_ue->frame_rx,subframe); + phy_vars_ue->frame_rx, + subframe, + phy_vars_ue->transmission_mode[eNB_id]); LOG_D(PHY,"[UE %d] Dumping dlsch_ra : nb_rb %d, mcs %d, nb_rb %d, num_pdcch_symbols %d,G %d\n", phy_vars_ue->Mod_id, phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->nb_rb, @@ -2625,7 +2631,9 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac get_Qm(phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs), phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, - frame_rx,subframe_prev); + frame_rx, + subframe_prev, + phy_vars_ue->transmission_mode[eNB_id]); start_meas(&phy_vars_ue->dlsch_unscrambling_stats); dlsch_unscrambling(&phy_vars_ue->lte_frame_parms, 0, @@ -2782,7 +2790,9 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc, get_Qm(phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->mcs),1, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, - frame_rx,subframe_prev); + frame_rx, + subframe_prev, + phy_vars_ue->transmission_mode[eNB_id]); #ifdef DEBUG_PHY_PROC LOG_D(PHY,"Decoding DLSCH_SI : rb_alloc %x : nb_rb %d G %d TBS %d, num_pdcch_sym %d\n",phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc[0], @@ -2926,7 +2936,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac get_Qm(phy_vars_ue->dlsch_ue_ra[eNB_id]->harq_processes[0]->mcs),1, phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, frame_rx, - subframe_prev); + subframe_prev, + phy_vars_ue->transmission_mode[eNB_id]); #ifdef DEBUG_PHY_PROC LOG_D(PHY,"[UE] decoding RA (subframe %d): G %d,rnti %x\n" ,subframe_prev, @@ -3301,7 +3312,9 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac get_Qm(phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->mcs), 1, 2, - (subframe_rx==9?-1:0)+frame_rx,subframe_rx); + (subframe_rx==9?-1:0)+frame_rx, + subframe_rx, + phy_vars_ue->transmission_mode[eNB_id]); dlsch_unscrambling(&phy_vars_ue->lte_frame_parms,1,phy_vars_ue->dlsch_ue_MCH[0], phy_vars_ue->dlsch_ue_MCH[0]->harq_processes[0]->G, diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 969e485b23..7a3b3bba1d 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -1,5 +1,5 @@ -/******************************************************************************* - OpenAirInterface +/****************************************************************************** + ipenAirInterface Copyright(c) 1999 - 2014 Eurecom OpenAirInterface is free software: you can redistribute it and/or modify @@ -107,8 +107,7 @@ void handler(int sig) exit(1); } -void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,uint8_t fdd_flag, uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL, - uint8_t osf,uint32_t perfect_ce) +void lte_param_init(unsigned char N_tx, unsigned char N_tx_phy, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,uint8_t fdd_flag, uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL, uint8_t osf,uint32_t perfect_ce) { LTE_DL_FRAME_PARMS *lte_frame_parms; @@ -123,7 +122,8 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi srand(0); randominit(0); - set_taus_seed(0); + //set_taus_seed(0); + set_taus_seed(1234); lte_frame_parms = &(PHY_vars_eNB->lte_frame_parms); @@ -142,7 +142,8 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi // lte_frame_parms->Bsrs = 0; // lte_frame_parms->kTC = 0;44 // lte_frame_parms->n_RRC = 0; - lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0; + //lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0; + lte_frame_parms->mode1_flag = (transmission_mode == 1 || transmission_mode ==7)? 1 : 0; init_frame_parms(lte_frame_parms,osf); @@ -154,6 +155,11 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi PHY_vars_UE->lte_frame_parms = *lte_frame_parms; PHY_vars_eNB->lte_frame_parms = *lte_frame_parms; + PHY_vars_eNB->transmission_mode[0] = transmission_mode; + PHY_vars_UE->transmission_mode[0] = transmission_mode; + //printf("lte_param_init: transmission mode = %d\n",PHY_vars_eNB->transmission_mode[0]); + PHY_vars_eNB->nb_antennas_tx_phy = N_tx_phy; + phy_init_lte_top(lte_frame_parms); dump_frame_parms(lte_frame_parms); @@ -166,12 +172,14 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi phy_init_lte_ue(PHY_vars_UE,1,0); phy_init_lte_eNB(PHY_vars_eNB,0,0,0); + generate_pcfich_reg_mapping(&PHY_vars_UE->lte_frame_parms); generate_phich_reg_mapping(&PHY_vars_UE->lte_frame_parms); // DL power control init - if (transmission_mode == 1) { + //if (transmission_mode == 1) { + if (transmission_mode == 1 || transmission_mode ==7) { PHY_vars_eNB->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB ((PHY_vars_eNB->lte_frame_parms).pdsch_config_common).p_b = 0; PHY_vars_UE->pdsch_config_dedicated->p_a = dB0; // 4 = 0dB @@ -200,7 +208,7 @@ uint64_t DLSCH_alloc_pdu_1[2]; #define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2) //#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13 //#define DLSCH_RB_ALLOC 0x0001 -void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms) +void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms, uint8_t nb_antennas_tx_phy) { int aa, slot_offset, slot_offset_F; @@ -208,7 +216,7 @@ void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LT slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); - for (aa=0; aanb_antennas_tx; aa++) { + for (aa=0; aaNcp == 1) @@ -234,7 +242,7 @@ int main(int argc, char **argv) { char c; - int k,i,aa,aarx,aatx; + int k,i,aa,aarx,aatx,re; int s,Kr,Kr_bytes; @@ -246,8 +254,9 @@ int main(int argc, char **argv) double forgetting_factor=0.0; //in [0,1] 0 means a new channel every time, 1 means keep the same channel double iqim=0.0; - uint8_t extended_prefix_flag=0,transmission_mode=1,n_tx=1,n_rx=2; + uint8_t extended_prefix_flag=0,transmission_mode=1,n_tx=1,n_rx=2,n_tx_phy=1; uint16_t Nid_cell=0; + int32_t **beamforming_weights; int eNB_id = 0, eNB_id_i = 1; unsigned char mcs1=0,mcs2=0,mcs_i=0,dual_stream_UE = 0,awgn_flag=0,round,dci_flag=0; @@ -285,7 +294,7 @@ int main(int argc, char **argv) char input_trch_val[16]; double channelx,channely; - // unsigned char pbch_pdu[6]; + unsigned char pbch_pdu[6]; DCI_ALLOC_t dci_alloc[8],dci_alloc_rx[8]; int num_common_dci=0,num_ue_spec_dci=0,num_dci=0; @@ -525,13 +534,20 @@ int main(int argc, char **argv) (transmission_mode!=2) && (transmission_mode!=3) && (transmission_mode!=5) && - (transmission_mode!=6)) { + (transmission_mode!=6) && + (transmission_mode!=7)) { msg("Unsupported transmission mode %d\n",transmission_mode); exit(-1); } - if (transmission_mode>1) { + if (transmission_mode>1 && transmission_mode<7) { n_tx = 2; + n_tx_phy = n_tx; + } + if (transmission_mode>=7){ + n_tx = 1; + n_tx_phy = 1; + n_rx = 1; } break; @@ -539,9 +555,13 @@ int main(int argc, char **argv) case 'y': n_tx=atoi(optarg); - if ((n_tx==0) || (n_tx>2)) { - msg("Unsupported number of tx antennas %d\n",n_tx); - exit(-1); + if (transmission_mode<7){ + n_tx_phy = n_tx; + + if ((n_tx==0) || ((n_tx>2))) { + msg("Unsupported number of tx antennas %d\n",n_tx); + exit(-1); + } } break; @@ -633,7 +653,7 @@ int main(int argc, char **argv) case 'h': default: - printf("%s -h(elp) -a(wgn on) -d(ci decoding on) -p(extended prefix on) -m mcs1 -M mcs2 -n n_frames -s snr0 -x transmission mode (1,2,5,6) -y TXant -z RXant -I trch_file\n",argv[0]); + printf("%s -h(elp) -a(wgn on) -d(ci decoding on) -p(extended prefix on) -m mcs1 -M mcs2 -n n_frames -s snr0 -x transmission mode (1,2,5,6,7) -y TXant -z RXant -I trch_file\n",argv[0]); printf("-h This message\n"); printf("-a Use AWGN channel and not multipath\n"); printf("-c Number of PDCCH symbols\n"); @@ -648,7 +668,7 @@ int main(int argc, char **argv) printf("-r ressource block allocation (see section 7.1.6.3 in 36.213\n"); printf("-g [A:M] Use 3GPP 25.814 SCM-A/B/C/D('A','B','C','D') or 36-101 EPA('E'), EVA ('F'),ETU('G') models (ignores delay spread and Ricean factor), Rayghleigh8 ('H'), Rayleigh1('I'), Rayleigh1_corr('J'), Rayleigh1_anticorr ('K'), Rice8('L'), Rice1('M')\n"); printf("-F forgetting factor (0 new channel every trial, 1 channel constant\n"); - printf("-x Transmission mode (1,2,6 for the moment)\n"); + printf("-x Transmission mode (1,2,6,7 for the moment)\n"); printf("-y Number of TX antennas used in eNB\n"); printf("-z Number of RX antennas used in UE\n"); printf("-t MCS of interfering UE\n"); @@ -697,8 +717,8 @@ int main(int argc, char **argv) NB_RB=conv_nprb(0,DLSCH_RB_ALLOC,N_RB_DL); - if ((transmission_mode > 1) && (n_tx != 2)) - printf("n_tx must be >1 for transmission_mode %d\n",transmission_mode); + if ((transmission_mode > 1) && (n_tx_phy == 1)) + printf("n_tx_phy must be >1 for transmission_mode %d\n",transmission_mode); #ifdef XFORMS fl_initialize (&argc, argv, NULL, 0, 0); @@ -720,7 +740,19 @@ int main(int argc, char **argv) printf("dual_stream_UE=%d\n", dual_stream_UE); } - lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,fdd_flag,Nid_cell,tdd_config,N_RB_DL,osf,perfect_ce); + + lte_param_init(n_tx,n_tx_phy,n_rx,transmission_mode,extended_prefix_flag,fdd_flag,Nid_cell,tdd_config,N_RB_DL,osf,perfect_ce); + + if (transmission_mode==7){ + lte_gold_ue_spec_port5(PHY_vars_eNB->lte_gold_uespec_port5_table[0],Nid_cell,n_rnti); + lte_gold_ue_spec_port5(PHY_vars_UE->lte_gold_uespec_port5_table,Nid_cell,n_rnti); + beamforming_weights = (int32_t **)malloc(12*N_RB_DL*sizeof(int32_t*)); + for(re=0;re<12*N_RB_DL;re++){ + beamforming_weights[re]=(int32_t *)malloc(n_tx_phy*sizeof(int32_t)); + for(aa=0;aan_connected_eNB; @@ -728,7 +760,7 @@ int main(int argc, char **argv) printf("Setting mcs2 = %d\n",mcs2); printf("NPRB = %d\n",NB_RB); printf("n_frames = %d\n",n_frames); - printf("Transmission mode %d with %dx%d antenna configuration, Extended Prefix %d\n",transmission_mode,n_tx,n_rx,extended_prefix_flag); + printf("Transmission mode %d with %dx%d antenna configuration, Extended Prefix %d\n",transmission_mode,n_tx_phy,n_rx,extended_prefix_flag); snr1 = snr0+snr_int; printf("SNR0 %f, SNR1 %f\n",snr0,snr1); @@ -745,8 +777,8 @@ int main(int argc, char **argv) frame_parms = &PHY_vars_eNB->lte_frame_parms; - s_re = malloc(2*sizeof(double*)); - s_im = malloc(2*sizeof(double*)); + s_re = malloc(n_tx_phy*sizeof(double*)); + s_im = malloc(n_tx_phy*sizeof(double*)); r_re = malloc(2*sizeof(double*)); r_im = malloc(2*sizeof(double*)); // r_re0 = malloc(2*sizeof(double*)); @@ -883,9 +915,12 @@ int main(int argc, char **argv) } */ - for (i=0; i<2; i++) { + for (i=0; ilte_frame_parms.frame_type == TDD) { @@ -1157,6 +1193,9 @@ int main(int argc, char **argv) P_RNTI, PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + if(transmission_mode==7) + PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->mimo_mode = TM7; //Xiwen: to check about harq_pid + num_dci++; num_ue_spec_dci++; } else { @@ -1300,7 +1339,7 @@ int main(int argc, char **argv) num_dci++; } - + break; case 3: @@ -2027,13 +2066,15 @@ int main(int argc, char **argv) get_Qm(PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->mcs), PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->Nl, num_pdcch_symbols, - 0,subframe); + 0, + subframe, + (transmission_mode<7?0:transmission_mode)); uncoded_ber_bit = (short*) malloc(sizeof(short)*coded_bits_per_codeword); printf("uncoded_ber_bit=%p\n",uncoded_ber_bit); snr_step = input_snr_step; - PHY_vars_UE->high_speed_flag = 1; + PHY_vars_UE->high_speed_flag = 0; //1 PHY_vars_UE->ch_est_alpha=0; for (ch_realization=0; ch_realizationdlsch_ue[0][0]->max_turbo_iterations+1; while ((round < num_rounds) && (ret > PHY_vars_UE->dlsch_ue[0][0]->max_turbo_iterations)) { - // printf("Trial %d, round %d\n",trials,round); + printf("Trial %d, round %d\n",trials,round); round_trials[round]++; - if(transmission_mode>=5) + if(transmission_mode>=5&&transmission_mode<7) pmi_feedback=1; else pmi_feedback=0; @@ -2136,7 +2177,7 @@ int main(int argc, char **argv) PMI_FEEDBACK: - // printf("Trial %d : Round %d, pmi_feedback %d \n",trials,round,pmi_feedback); + printf("Trial %d : Round %d, pmi_feedback %d \n",trials,round,pmi_feedback); for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t)); } @@ -2158,6 +2199,7 @@ PMI_FEEDBACK: switch (transmission_mode) { case 1: case 2: + case 7: switch (PHY_vars_eNB->lte_frame_parms.N_RB_DL) { case 6: ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi = trials&1; @@ -2228,11 +2270,13 @@ PMI_FEEDBACK: DLSCH_alloc_pdu2_1E[0].rv = 0; memcpy(&dci_alloc[0].dci_pdu[0],&DLSCH_alloc_pdu2_1E[0],sizeof(DCI1E_5MHz_2A_M10PRB_TDD_t)); break; + } } else { // FDD switch (transmission_mode) { case 1: case 2: + case 7: switch (PHY_vars_eNB->lte_frame_parms.N_RB_DL) { case 6: ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi = trials&1; @@ -2260,7 +2304,6 @@ PMI_FEEDBACK: } break; - case 3: switch (PHY_vars_eNB->lte_frame_parms.N_RB_DL) { case 6: @@ -2315,6 +2358,7 @@ PMI_FEEDBACK: switch (transmission_mode) { case 1: case 2: + case 7: switch (PHY_vars_eNB->lte_frame_parms.N_RB_DL) { case 6: ((DCI1_1_5MHz_TDD_t *)&DLSCH_alloc_pdu_1[0])->ndi = trials&1; @@ -2422,6 +2466,7 @@ PMI_FEEDBACK: switch (transmission_mode) { case 1: case 2: + case 7: switch (PHY_vars_eNB->lte_frame_parms.N_RB_DL) { case 6: ((DCI1_1_5MHz_FDD_t *)&DLSCH_alloc_pdu_1[0])->ndi = trials&1; @@ -2551,7 +2596,9 @@ PMI_FEEDBACK: get_Qm(PHY_vars_eNB->dlsch_eNB[k][cw]->harq_processes[0]->mcs), PHY_vars_eNB->dlsch_eNB[k][cw]->harq_processes[0]->Nl, num_pdcch_symbols, - 0,subframe); + 0, + subframe, + (transmission_mode<7?0:transmission_mode)); #ifdef TBS_FIX // This is for MESH operation!!! tbs = (double)3*TBStable[get_I_TBS(PHY_vars_eNB->dlsch_eNB[k][cw]->harq_processes[0]->mcs)][PHY_vars_eNB->dlsch_eNB[k][cw]->nb_rb-1]/4; @@ -2596,8 +2643,7 @@ PMI_FEEDBACK: 0,subframe, &PHY_vars_eNB->dlsch_rate_matching_stats, &PHY_vars_eNB->dlsch_turbo_encoding_stats, - &PHY_vars_eNB->dlsch_interleaving_stats - )<0) + &PHY_vars_eNB->dlsch_interleaving_stats)<0) exit(-1); /* @@ -2640,15 +2686,16 @@ PMI_FEEDBACK: } } } - + start_meas(&PHY_vars_eNB->dlsch_modulation_stats); - re_allocated = dlsch_modulation(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], + re_allocated = dlsch_modulation(PHY_vars_eNB, + PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], AMP, subframe, - &PHY_vars_eNB->lte_frame_parms, num_pdcch_symbols, PHY_vars_eNB->dlsch_eNB[k][0], - PHY_vars_eNB->dlsch_eNB[k][1]); + PHY_vars_eNB->dlsch_eNB[k][1], + beamforming_weights); stop_meas(&PHY_vars_eNB->dlsch_modulation_stats); /* if (trials==0 && round==0) @@ -2661,18 +2708,149 @@ PMI_FEEDBACK: PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], AMP, LTE_NUMBER_OF_SUBFRAMES_PER_FRAME); +/* + //PSS/SSS + if (PHY_vars_eNB->lte_frame_parms.frame_type == FDD) { + generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0], + AMP, + &PHY_vars_eNB->lte_frame_parms, + (PHY_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5, + 0); + generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0], + AMP, + &PHY_vars_eNB->lte_frame_parms, + (PHY_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 5 : 4, + 0); + generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0], + AMP, + &PHY_vars_eNB->lte_frame_parms, + (PHY_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5, + 10); + generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0], + AMP, + &PHY_vars_eNB->lte_frame_parms, + (PHY_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 5 : 4, + 10); + } + else if (PHY_vars_eNB->lte_frame_parms.frame_type == TDD) { + generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0], + AMP, + &PHY_vars_eNB->lte_frame_parms, + (PHY_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5, + 1); + generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0], + AMP, + &PHY_vars_eNB->lte_frame_parms, + 2, + 2); + generate_sss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0], + AMP, + &PHY_vars_eNB->lte_frame_parms, + (PHY_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5, + 11); + generate_pss(PHY_vars_eNB->lte_eNB_common_vars.txdataF[0], + AMP, + &PHY_vars_eNB->lte_frame_parms, + 2, + 12); + } + + //PBCH + pbch_pdu[2] = 0; + + // FIXME setting pbch_pdu[2] to zero makes the switch statement easier: remove all the or-operators + switch (PHY_vars_eNB->lte_frame_parms.N_RB_DL) { + case 6: + pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (0<<5); + break; + + case 15: + pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (1<<5); + break; + + case 25: + pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (2<<5); + break; + + case 50: + pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (3<<5); + break; + + case 75: + pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (4<<5); + break; + + case 100: + pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (5<<5); + break; + + default: + // FIXME if we get here, this should be flagged as an error, right? + pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (2<<5); + break; + } + + pbch_pdu[2] = (pbch_pdu[2]&0xef) | + ((PHY_vars_eNB->lte_frame_parms.phich_config_common.phich_duration << 4)&0x10); + + switch (PHY_vars_eNB->lte_frame_parms.phich_config_common.phich_resource) { + case oneSixth: + pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (0<<2); + break; + + case half: + pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (1<<2); + break; + + case one: + pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (2<<2); + break; + + case two: + pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (3<<2); + break; + + default: + // unreachable + break; + + + pbch_pdu[2] = (pbch_pdu[2]&0xfc) | ((0>>8)&0x3); + pbch_pdu[1] = 0&0xfc; + pbch_pdu[0] = 0; + } + + generate_pbch(&PHY_vars_eNB->lte_eNB_pbch, + PHY_vars_eNB->lte_eNB_common_vars.txdataF[0], + AMP, + &PHY_vars_eNB->lte_frame_parms, + pbch_pdu, + 0&3); +*/ start_meas(&PHY_vars_eNB->ofdm_mod_stats); +/* + for(i=0;i<20;i++){ + + do_OFDM_mod_l(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], + PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id], + i, + &PHY_vars_eNB->lte_frame_parms, + PHY_vars_eNB->nb_antennas_tx_phy); + } +*/ do_OFDM_mod_l(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id], (subframe*2), - &PHY_vars_eNB->lte_frame_parms); + &PHY_vars_eNB->lte_frame_parms, + PHY_vars_eNB->nb_antennas_tx_phy); do_OFDM_mod_l(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id], (subframe*2)+1, - &PHY_vars_eNB->lte_frame_parms); + &PHY_vars_eNB->lte_frame_parms, + PHY_vars_eNB->nb_antennas_tx_phy); stop_meas(&PHY_vars_eNB->ofdm_mod_stats); stop_meas(&PHY_vars_eNB->phy_proc_tx); @@ -2680,20 +2858,21 @@ PMI_FEEDBACK: do_OFDM_mod_l(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id], (subframe*2)+2, - &PHY_vars_eNB->lte_frame_parms); + &PHY_vars_eNB->lte_frame_parms, + PHY_vars_eNB->nb_antennas_tx_phy); if (n_frames==1) { write_output("txsigF0.m","txsF0", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][0][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); - if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1) + if (PHY_vars_eNB->nb_antennas_tx_phy>1)// to be updated write_output("txsigF1.m","txsF1", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][1][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); - } + } tx_lev = 0; - for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { + for (aa=0; aanb_antennas_tx_phy; aa++) { tx_lev += signal_energy(&PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa] [subframe*PHY_vars_eNB->lte_frame_parms.samples_per_tti], PHY_vars_eNB->lte_frame_parms.samples_per_tti); @@ -2703,9 +2882,8 @@ PMI_FEEDBACK: if (n_frames==1) { printf("tx_lev = %d (%d dB)\n",tx_lev,tx_lev_dB); - write_output("txsig0.m","txs0", &PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][0][subframe* PHY_vars_eNB->lte_frame_parms.samples_per_tti], - - PHY_vars_eNB->lte_frame_parms.samples_per_tti,1,1); + write_output("txsig0.m","txs0", &PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][0][subframe*PHY_vars_eNB->lte_frame_parms.samples_per_tti],PHY_vars_eNB->lte_frame_parms.samples_per_tti,1,1); + // write_output("txsig0.m","txs0",&PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][0][0*PHY_vars_eNB->lte_frame_parms.samples_per_tti],PHY_vars_eNB->lte_frame_parms.samples_per_tti*10,1,1); } } @@ -2736,7 +2914,7 @@ PMI_FEEDBACK: // printf("Copying tx ..., nsymb %d (n_tx %d), awgn %d\n",nsymb,PHY_vars_eNB->lte_frame_parms.nb_antennas_tx,awgn_flag); for (i=0; i<2*frame_parms->samples_per_tti; i++) { - for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { + for (aa=0; aanb_antennas_tx_phy; aa++) { if (awgn_flag == 0) { s_re[aa][i] = ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) + (i<<1)]); s_im[aa][i] = ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)+1]); @@ -2745,6 +2923,7 @@ PMI_FEEDBACK: if (aa==0) { r_re[aarx][i] = ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)]); r_im[aarx][i] = ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)+1]); + //printf("r[%d][%d]=> %f, %f\n",aarx,i,r_re[aarx][i],r_im[aarx][i]); } else { r_re[aarx][i] += ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)]); r_im[aarx][i] += ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)+1]); @@ -2837,14 +3016,18 @@ PMI_FEEDBACK: for (i=0; i<2*frame_parms->samples_per_tti; i++) { for (aa=0; aalte_frame_parms.nb_antennas_rx; aa++) { - //printf("s_re[0][%d]=> %f , r_re[0][%d]=> %f\n",i,s_re[aa][i],i,r_re[aa][i]); - ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = + // printf("s_re[0][%d]=> %f , r_re[0][%d]=> %f\n",i,s_re[aa][i],i,r_re[aa][i]); + /*((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = (short) (r_re[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = - (short) (r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); + (short) (r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0));*/ + ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = (short) (r_re[aa][i]); + ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = (short) (r_im[aa][i] + (iqim*r_re[aa][i])); + //printf("rxdata[%d][%d]=> %d, %d\n",aa,subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti+i,r_re[aa][i],r_im[aa][i]); } } + // lte_sync_time_init(PHY_vars_eNB->lte_frame_parms,lte_ue_common_vars); // lte_sync_time(lte_ue_common_vars->rxdata, PHY_vars_eNB->lte_frame_parms); // lte_sync_time_free(); @@ -2888,7 +3071,7 @@ PMI_FEEDBACK: for (Ns=(2*subframe); Ns<((2*subframe)+3); Ns++) { for (l=0; lofdm_demod_stats); + //write_output("rxsigF0.m","rxsF0", &PHY_vars_UE->lte_ue_common_vars.rxdataF[0][0],PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1); if (PHY_vars_UE->perfect_ce==1) { if (awgn_flag==0) { @@ -3045,7 +3229,12 @@ PMI_FEEDBACK: get_Qm(PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->mcs), PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->Nl, PHY_vars_UE->lte_ue_pdcch_vars[0]->num_pdcch_symbols, - 0,subframe); + 0, + subframe, + (transmission_mode<7?0:transmission_mode)); + if (transmission_mode==7 && common_flag==0) + PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->mimo_mode = TM7; + /* rate = (double)dlsch_tbs25[get_I_TBS(PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->mcs)][PHY_vars_UE->dlsch_ue[0][0]->nb_rb-1]/(coded_bits_per_codeword); rate*=get_Qm(PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->mcs); @@ -3084,6 +3273,7 @@ PMI_FEEDBACK: switch (transmission_mode) { case 1: case 2: + case 7: generate_ue_dlsch_params_from_dci(0, &DLSCH_alloc_pdu_1[0], (common_flag==0)? C_RNTI : SI_RNTI, @@ -3094,6 +3284,8 @@ PMI_FEEDBACK: SI_RNTI, 0, P_RNTI); + if(transmission_mode==7 && common_flag==0) + PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->mimo_mode = TM7; break; case 3: @@ -3210,6 +3402,7 @@ PMI_FEEDBACK: for (m=pilot3; mlte_frame_parms.symbols_per_tti; m++) { + //printf("m=%d\n",m); if (rx_pdsch(PHY_vars_UE, PDSCH, eNB_id, @@ -3228,6 +3421,7 @@ PMI_FEEDBACK: stop_meas(&PHY_vars_UE->dlsch_llr_stats); } + if (test_perf ==0 ) { if ((n_frames==1) && (Ns==(2+(2*subframe))) && (l==0)) { write_output("ch0.m","ch0",eNB2UE[0]->ch[0],eNB2UE[0]->channel_length,1,8); @@ -3236,7 +3430,9 @@ PMI_FEEDBACK: write_output("ch1.m","ch1",eNB2UE[0]->ch[PHY_vars_eNB->lte_frame_parms.nb_antennas_rx],eNB2UE[0]->channel_length,1,8); //common vars - write_output("rxsig0.m","rxs0", &PHY_vars_UE->lte_ue_common_vars.rxdata[0][0],10*PHY_vars_UE->lte_frame_parms.samples_per_tti,1,1); + //write_output("rxsig0.m","rxs0", &PHY_vars_UE->lte_ue_common_vars.rxdata[0][0],10*PHY_vars_UE->lte_frame_parms.samples_per_tti,1,1); + write_output("rxsig0.m","rxs0", &PHY_vars_UE->lte_ue_common_vars.rxdata[0][subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti],PHY_vars_UE->lte_frame_parms.samples_per_tti,1,1); + //write_output("rxsigF0.m","rxsF0", &PHY_vars_UE->lte_ue_common_vars.rxdataF[0][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size],PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1); write_output("rxsigF0.m","rxsF0", &PHY_vars_UE->lte_ue_common_vars.rxdataF[0][0],PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1); if (PHY_vars_UE->lte_frame_parms.nb_antennas_rx>1) { @@ -3284,7 +3480,7 @@ PMI_FEEDBACK: //saving PMI in case of Transmission Mode > 5 if(abstx) { - if (trials==0 && round==0 && transmission_mode>=5) { + if (trials==0 && round==0 && transmission_mode>=5 && transmission_mode<7) { for (iii=0; iiilte_ue_pdsch_vars[eNB_id]->pmi_ext[iii]),(PHY_vars_UE->lte_ue_pdsch_vars[eNB_id_i]->pmi_ext[iii])); fprintf(csv_fd,"%x,%x,",(PHY_vars_UE->lte_ue_pdsch_vars[eNB_id]->pmi_ext[iii]),(PHY_vars_UE->lte_ue_pdsch_vars[eNB_id]->pmi_ext[iii])); @@ -3301,7 +3497,9 @@ PMI_FEEDBACK: get_Qm(PHY_vars_eNB->dlsch_eNB[0][cw]->harq_processes[0]->mcs), PHY_vars_eNB->dlsch_eNB[0][cw]->harq_processes[0]->Nl, num_pdcch_symbols, - 0,subframe); + 0, + subframe, + (transmission_mode<7?0:transmission_mode)); PHY_vars_UE->dlsch_ue[0][cw]->harq_processes[PHY_vars_UE->dlsch_ue[0][cw]->current_harq_pid]->G = coded_bits_per_codeword; @@ -3415,7 +3613,7 @@ PMI_FEEDBACK: iter_trials++; if (n_frames==1) { - //if ((n_frames==1) || (SNR>=30)) { + //if ((n_frames==1) || (SNR>=30)) printf("DLSCH errors found (round %d), uncoded ber %f\n",round,uncoded_ber); for (s=0; sdlsch_ue[0][0]->harq_processes[0]->C; s++) { @@ -4054,9 +4252,12 @@ PMI_FEEDBACK: printf("Freeing channel I/O\n"); - for (i=0; i<2; i++) { + for (i=0; idlsch_ue_MCH[0]->harq_processes[0]->rb_alloc, get_Qm(PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->mcs), 1,2, - PHY_vars_UE->frame_tx,subframe); + PHY_vars_UE->frame_tx,subframe,0); dlsch_unscrambling(&PHY_vars_UE->lte_frame_parms,1,PHY_vars_UE->dlsch_ue_MCH[0], PHY_vars_UE->dlsch_ue_MCH[0]->harq_processes[0]->G, PHY_vars_UE->lte_ue_pdsch_vars_MCH[0]->llr[0],0,subframe<<1); diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/txsig.m b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/txsig.m index ad33d26123..0ebf4a0a87 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/txsig.m +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/txsig.m @@ -6,7 +6,7 @@ rxgain=0; txgain=0; eNB_flag = 0; card = 0; -active_rf = [1 1 1 1]; +active_rf = [1 0 0 0]; autocal = [1 1 1 1]; resampling_factor = [2 2 2 2]; limeparms; @@ -38,14 +38,14 @@ rffe_band = B19G_TDD*[1 1 1 1]; oarf_config_exmimo(card, freq_rx,freq_tx,tdd_config,syncmode,rxgain,txgain,eNB_flag,rf_mode,rf_rxdc,rf_local,rf_vcocal,rffe_rxg_low,rffe_rxg_final,rffe_band,autocal,resampling_factor); %oarf_config_exmimo(1, freq_rx,freq_tx,tdd_config,syncmode,rxgain,txgain,eNB_flag,rf_mode,rf_rxdc,rf_local,rf_vcocal,rffe_rxg_low,rffe_rxg_final,rffe_band,autocal,resampling_factor); -amp = pow2(14)-1; +amp = pow2(10)-1; n_bit = 16; length = 307200/pow2(resampling_factor(1)); s = zeros(length,4); -select = 1; +select = 7; switch(select) @@ -73,7 +73,8 @@ case 3 case 4 pss0_f0=[0,0,0,0,0,0,0,0,0,0,32767,0,-26120,-19785,11971,-30502,-24020,-22288,32117,6492,31311,9658,-16384,-28378,25100,-21063,-7292,-31946,20429,25618,14948,29158,11971,-30502,31311,9658,25100,-21063,-16384,28377,-24020,22287,32117,6492,-7292,31945,20429,25618,-26120,-19785,-16384,-28378,-16384,28377,-26120,-19785,-32402,4883,31311,-9659,32117,6492,-7292,-31946,32767,-1,25100,-21063,-24020,22287,-32402,4883,-32402,4883,-24020,22287,25100,-21063,32767,-1,-7292,-31946,32117,6492,31311,-9659,-32402,4883,-26120,-19785,-16384,28377,-16384,-28378,-26120,-19785,20429,25618,-7292,31945,32117,6492,-24020,22287,-16384,28377,25100,-21063,31311,9658,11971,-30502,14948,29158,20429,25618,-7292,-31946,25100,-21063,-16384,-28378,31311,9658,32117,6492,-24020,-22288,11971,-30502,-26120,-19785,32767,0,0,0,0,0,0,0,0,0,0,0]; - pss0_f = pss0_f0(1:2:length(pss0_f0)) + sqrt(-1)*pss0_f0(2:2:length(pss0_f0)); + %pss0_f = pss0_f0(1:2:length(pss0_f0)) + sqrt(-1)*pss0_f0(2:2:length(pss0_f0)); + pss0_f = pss0_f0(1:2:size(pss0_f0,2)) + sqrt(-1)*pss0_f0(2:2:size(pss0_f0,2)); pss0_f = [0 pss0_f(37:72) zeros(1,512-73) pss0_f(1:36)]; pss0_t = ifft(pss0_f); @@ -84,10 +85,15 @@ case 4 pss0_t_fp_re = floor(real(8192*pss0_t/pss0_max)); pss0_t_fp_im = floor(imag(8192*pss0_t/pss0_max)); + %keyboard; s(38400+(1:length(pss0_t_fp_re)),1) = 2*floor(pss0_t_fp_re) + 2*sqrt(-1)*floor(pss0_t_fp_im); s(38400+(1:length(pss0_t_fp_re)),2) = 2*floor(pss0_t_fp_re) + 2*sqrt(-1)*floor(pss0_t_fp_im); s(38400+(1:length(pss0_t_fp_re)),3) = 2*floor(pss0_t_fp_re) + 2*sqrt(-1)*floor(pss0_t_fp_im); s(38400+(1:length(pss0_t_fp_re)),4) = 2*floor(pss0_t_fp_re) + 2*sqrt(-1)*floor(pss0_t_fp_im); + %s(38400+(1:size(pss0_t_fp_re,2)),1) = 2*floor(pss0_t_fp_re) + 2*sqrt(-1)*floor(pss0_t_fp_im); + %s(38400+(1:size(pss0_t_fp_re,2)),2) = 2*floor(pss0_t_fp_re) + 2*sqrt(-1)*floor(pss0_t_fp_im); + %s(38400+(1:size(pss0_t_fp_re,2)),3) = 2*floor(pss0_t_fp_re) + 2*sqrt(-1)*floor(pss0_t_fp_im); + %s(38400+(1:size(pss0_t_fp_re,2)),4) = 2*floor(pss0_t_fp_re) + 2*sqrt(-1)*floor(pss0_t_fp_im); case 5 x=1:length; @@ -108,7 +114,9 @@ case 6 s(:,1) = OFDM_TX_FRAME(num_carriers,num_zeros,prefix_length,num_symbols_frame,preamble_length); s(:,1) = floor(amp*(s(:,1)./max([real(s(:,1)); imag(s(:,1))]))); - + +case 7 + s(:,1) = floor(txs0); otherwise error('unknown case') From cf4a005e320c0a6e140d9a24d04b47f76a5f44e4 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Wed, 9 Sep 2015 09:53:59 +0200 Subject: [PATCH 002/132] Beamforming channel estimation based on UE specific reference signal --- openair1/PHY/INIT/lte_init.c | 4 +- .../LTE_ESTIMATION/bf_freq_domain_filters.m | 40 +- openair1/PHY/LTE_ESTIMATION/defs.h | 1 - openair1/PHY/LTE_ESTIMATION/filt12_32.h | 14 + .../lte_dl_bf_channel_estimation.c | 688 +++++++++++++++++- openair1/PHY/LTE_REFSIG/defs.h | 8 +- openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c | 125 ++-- openair1/PHY/LTE_REFSIG/lte_dl_uespec.c | 0 openair1/PHY/LTE_REFSIG/lte_gold.c | 54 +- .../PHY/LTE_TRANSPORT/dlsch_demodulation.c | 83 ++- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 66 +- openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c | 4 +- openair1/PHY/LTE_TRANSPORT/proto.h | 2 + openair1/PHY/MODULATION/slot_fep.c | 24 +- openair1/PHY/defs.h | 4 +- openair1/SIMULATION/LTE_PHY/dlsim.c | 26 +- 16 files changed, 918 insertions(+), 225 deletions(-) delete mode 100644 openair1/PHY/LTE_REFSIG/lte_dl_uespec.c diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 51c4939c56..512b5192c0 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -948,8 +948,8 @@ void phy_init_lte_ue__PDSCH( LTE_UE_PDSCH* const pdsch, const LTE_DL_FRAME_PARMS pdsch->rxdataF_uespec_pilots[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * frame_parms->N_RB_DL*12); pdsch->rxdataF_comp0[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); pdsch->dl_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); - pdsch->dl_bf_ch_estimates[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); - pdsch->dl_bf_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t)*frame_parms->symbols_per_tti*(frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH) ); + pdsch->dl_bf_ch_estimates[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * frame_parms->ofdm_symbol_size*7*2); + pdsch->dl_bf_ch_estimates_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); pdsch->dl_ch_rho_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); pdsch->dl_ch_rho2_ext[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); pdsch->dl_ch_mag0[idx] = (int32_t*)malloc16_clear( sizeof(int32_t) * num ); diff --git a/openair1/PHY/LTE_ESTIMATION/bf_freq_domain_filters.m b/openair1/PHY/LTE_ESTIMATION/bf_freq_domain_filters.m index 557c54dddd..e0c0a0f18f 100644 --- a/openair1/PHY/LTE_ESTIMATION/bf_freq_domain_filters.m +++ b/openair1/PHY/LTE_ESTIMATION/bf_freq_domain_filters.m @@ -1,57 +1,57 @@ -filter_length = 12; +filt_len = 16; F = -3/4:1/4:7/4; -F_l = zeros(8,12); -F_r = zeros(8,12); -F_m = zeros(8,12); +F_l = zeros(8,filt_len); +F_r = zeros(8,filt_len); +F_m = zeros(8,filt_len); F2 =-3/5:1/5:8/5; for i=0:3 - F_l(i+1,:) = floor(16384*[F(8+i:-1:4) zeros(1,7-i)]); - F_r(i+1,:) = floor(16384*[zeros(1,4+i) F(4:end-i)]); - F_m(i+1,:) = floor(16384*[F(4-i:8) F(7:-1:1+i)]); + F_l(i+1,:) = floor(16384*[F(8+i:-1:4) zeros(1,7-i) zeros(1,4)]); + F_r(i+1,:) = floor(16384*[zeros(1,4+i) F(4:end-i) zeros(1,4)]); + F_m(i+1,:) = floor(16384*[F(4-i:8) F(7:-1:1+i) zeros(1,4)]); end for i=0:1 - F_l(i+5,:) = floor(16384*[F(8:-1:4-i) zeros(1,7-i)]); - F_r(i+5,:) = floor(16384*[zeros(1,5+i) F2(5+i) F2(7:end-i)]); - F_m(i+5,:) = floor(16384*[F(4-i:8) F2(8-i) F2(6:-1:1+i)]); + F_l(i+5,:) = floor(16384*[F(8:-1:4-i) zeros(1,7-i) zeros(1,4)]); + F_r(i+5,:) = floor(16384*[zeros(1,5+i) F2(5+i) F2(7:end-i) zeros(1,4)]); + F_m(i+5,:) = floor(16384*[F(4-i:8) F2(8-i) F2(6:-1:1+i) zeros(1,4)]); end for i=2:3 - F_l(i+5,:) = floor(16384*[F2(end:-1:7) F2(8-i) zeros(1,5)]); - F_r(i+5,:) = floor(16384*[zeros(1,4+i) F(4:end-i)]); - F_m(i+5,:) = floor(16384*[F2(4-i:6) F2(4+i) F(8:-1:1+i)]); + F_l(i+5,:) = floor(16384*[F2(end:-1:7) F2(8-i) zeros(1,5) zeros(1,4)]); + F_r(i+5,:) = floor(16384*[zeros(1,4+i) F(4:end-i) zeros(1,4)]); + F_m(i+5,:) = floor(16384*[F2(4-i:6) F2(4+i) F(8:-1:1+i) zeros(1,4)]); end -fd = fopen("filt12_32.h","w"); +fd = fopen("filt16_32.h","w"); for i=0:3 - fprintf(fd,"short filt12_l%d[12] = {\n",i); + fprintf(fd,"short filt%d_l%d[%d] = {\n",filt_len,i,filt_len); fprintf(fd,"%d,",F_l(i+1,1:end-1)); fprintf(fd,"%d};\n\n",F_l(i+1,end)); - fprintf(fd,"short filt12_r%d[12] = {\n",i); + fprintf(fd,"short filt%d_r%d[%d] = {\n",filt_len,i,filt_len); fprintf(fd,"%d,",F_r(i+1,1:end-1)); fprintf(fd,"%d};\n\n",F_r(i+1,end)); - fprintf(fd,"short filt12_m%d[12] = {\n",i); + fprintf(fd,"short filt%d_m%d[%d] = {\n",filt_len,i,filt_len); fprintf(fd,"%d,",F_m(i+1,1:end-1)); fprintf(fd,"%d};\n\n",F_m(i+1,end)); end for i=0:3 - fprintf(fd,"short filt12_l%d_dc[12] = {\n",i); + fprintf(fd,"short filt%d_l%d_dc[%d] = {\n",filt_len,i,filt_len); fprintf(fd,"%d,",F_l(i+5,1:end-1)); fprintf(fd,"%d};\n\n",F_l(i+5,end)); - fprintf(fd,"short filt12_r%d_dc[12] = {\n",i); + fprintf(fd,"short filt%d_r%d_dc[%d] = {\n",filt_len,i,filt_len); fprintf(fd,"%d,",F_r(i+5,1:end-1)); fprintf(fd,"%d};\n\n",F_r(i+5,end)); - fprintf(fd,"short filt12_m%d_dc[12] = {\n",i); + fprintf(fd,"short filt%d_m%d_dc[%d] = {\n",filt_len,i,filt_len); fprintf(fd,"%d,",F_m(i+5,1:end-1)); fprintf(fd,"%d};\n\n",F_m(i+5,end)); end diff --git a/openair1/PHY/LTE_ESTIMATION/defs.h b/openair1/PHY/LTE_ESTIMATION/defs.h index 4763602525..1a747c1cc8 100644 --- a/openair1/PHY/LTE_ESTIMATION/defs.h +++ b/openair1/PHY/LTE_ESTIMATION/defs.h @@ -123,7 +123,6 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, uint8_t l, uint8_t symbol); - int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, module_id_t eNB_id, uint8_t eNB_offset, diff --git a/openair1/PHY/LTE_ESTIMATION/filt12_32.h b/openair1/PHY/LTE_ESTIMATION/filt12_32.h index 602f7c2c3f..a5dfdb0365 100644 --- a/openair1/PHY/LTE_ESTIMATION/filt12_32.h +++ b/openair1/PHY/LTE_ESTIMATION/filt12_32.h @@ -70,3 +70,17 @@ short filt12_r3_dc[12] = { short filt12_m3_dc[12] = { -9831,-6554,-3277,0,3276,6553,9830,16384,12288,8192,4096,0}; +short filt12_1[12] = { +16384,16384,16384,16384,16384,16384,16384,16384,16384,16384,16384,16384}; + +short filt12_2l0[12] = { +16384,12288,8192,4096,-4096,0,0,0,0,0,0,0}; + +short filt12_2r0[12] = { +0,4096,8192,12288,16384,20480,0,0,0,0,0,0}; + +short filt12_2l1[12] = { +20480,16384,12288,8192,4096,0,0,0,0,0,0,0}; + +short filt12_2r1[12] = { +-4096,0,4096,8192,12288,16384,0,0,0,0,0,0}; diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c index 9707b15b35..457aaeed56 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -31,10 +31,9 @@ #endif #include "defs.h" #include "PHY/defs.h" -#include "filt12_32.h" +#include "filt16_32.h" //#define DEBUG_CH -/*To be accomplished*/ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, uint8_t eNB_offset, @@ -43,53 +42,670 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, unsigned char symbol) { - unsigned char aarx; - int uespec_pilot[9][200]; - short *pil, *rxF; + unsigned short rb,nb_rb=0; + unsigned char aarx,l,lprime,nsymb,skip_half=0,sss_symb,pss_symb=0,rb_alloc_ind,harq_pid,uespec_pilots=0; + int beamforming_mode, ch_offset; + uint8_t subframe; + int8_t uespec_nushift, uespec_poffset=0, pil_offset; + uint8_t pilot0,pilot1,pilot2,pilot3; - //LTE_UE_PDSCH *lte_ue_pdsch_vars = phy_vars_ue->lte_ue_pdsch_vars[eNB_id]; - int **rxdataF = phy_vars_ue->lte_ue_common_vars.rxdataF; - int32_t **dl_bf_ch_estimates = phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates; + short ch[2], *pil, *rxF, *dl_bf_ch, *dl_bf_ch_prev; + short *fl, *fm, *fr, *fl_dc, *fm_dc, *fr_dc, *f1, *f2l, *f2r; - int beamforming_mode = phy_vars_ue->transmission_mode>7?phy_vars_ue->transmission_mode : 0; - - // define interpolation filters - //.... + unsigned int *rb_alloc; + int **rxdataF; + int32_t **dl_bf_ch_estimates; + int uespec_pilot[300]; - //ch_offset = phy_vars_ue->lte_frame_parms.ofdm_symbol_size*symbol; + LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms; + LTE_UE_DLSCH_t **dlsch_ue = phy_vars_ue->dlsch_ue[eNB_id]; + LTE_DL_UE_HARQ_t *dlsch0_harq; - //generate ue specific pilots - if(beamforming_mode==7) - lte_dl_ue_spec_rx(phy_vars_ue,&uespec_pilot[p-5][0],Ns,p,0); - else if (beamforming_mode>7) - lte_dl_ue_spec_rx(phy_vars_ue,&uespec_pilot[p-6][0],Ns,p,0); - else if (beamforming_mode==0) - msg("No beamforming is performed.\n"); + harq_pid = dlsch_ue[0]->current_harq_pid; + dlsch0_harq = dlsch_ue[0]->harq_processes[harq_pid]; + + rb_alloc = dlsch0_harq->rb_alloc; + + rxdataF = phy_vars_ue->lte_ue_common_vars.rxdataF; + + dl_bf_ch_estimates = phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates; + beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]>6 ? phy_vars_ue->transmission_mode[eNB_id] : 0; + + if (phy_vars_ue->high_speed_flag == 0) // use second channel estimate position for temporary storage + ch_offset = frame_parms->ofdm_symbol_size; else - msg("Beamforming mode not supported yet.\n"); + ch_offset = frame_parms->ofdm_symbol_size*symbol; + + uespec_nushift = frame_parms->Nid_cell%3; + subframe = Ns>>1; + - if(beamforming_mode==7) { + if (beamforming_mode==7) { + //generate ue specific pilots + lprime = symbol/3-1; + lte_dl_ue_spec_rx(phy_vars_ue,uespec_pilot,Ns,5,lprime,0,dlsch0_harq->nb_rb); + write_output("uespec_pilot_rx.m","uespec_pilot",uespec_pilot,300,1,1); + + if (frame_parms->Ncp==0){ + if (symbol==3 || symbol==6 || symbol==9 || symbol==12) + uespec_pilots = 1; + } else{ + if (symbol==4 || symbol==7 || symbol==10) + uespec_pilots = 1; + } - for (aarx=0; aarxlte_frame_parms.nb_antennas_rx;aarx++) { + if ((frame_parms->Ncp==0 && (symbol==6 ||symbol ==12)) || (frame_parms->Ncp==1 && symbol==7)) + uespec_poffset = 2; - /* pil = (short *)&uespec_pilot[0][0]; - rxF = (short *)&rxdataF_uespec[aarx][(symbol-1)/3*frame_parms->N_RB_DL*(3+frame_parms->Ncp)]; - dl_ch = (short *)&dl_bf_ch_estimates[aarx][ch_offset]; - - memset(dl_ch,0,4*(phy_vars_ue->lte_frame_parms.ofdm_symbol_size)); - //estimation and interpolation */ + if (phy_vars_ue->lte_frame_parms.Ncp == 0) { // normal prefix + pilot0 = 3; + pilot1 = 6; + pilot2 = 9; + pilot3 = 12; + } else { // extended prefix + pilot0 = 4; + pilot1 = 7; + pilot2 = 10; } - } else if (beamforming_mode==0){ - msg("No beamforming is performed.\n"); - return(-1); - } else { - msg("Beamforming mode is not supported yet.\n"); - return(-1); + //define the filter + pil_offset = (uespec_nushift+uespec_poffset)%3; + // printf("symbol=%d,pil_offset=%d\n",symbol,pil_offset); + switch (pil_offset) { + case 0: + fl = filt16_l0; + fm = filt16_m0; + fr = filt16_r0; + fl_dc = filt16_l0; + fm_dc = filt16_m0; + fr_dc = filt16_r0; + f1 = filt16_1; + f2l = filt16_2l0; + f2r = filt16_2r0; + break; + + case 1: + fl = filt16_l1; + fm = filt16_m1; + fr = filt16_r1; + fl_dc = filt16_l1; + fm_dc = filt16_m1; + fr_dc = filt16_r1; + f1 = filt16_1; + f2l = filt16_2l1; + f2r = filt16_2r1; + break; + + case 2: + fl = filt16_l2; + fm = filt16_m2; + fr = filt16_r2; + fl_dc = filt16_l2; + fm_dc = filt16_m2; + fr_dc = filt16_r2; + f1 = filt16_1; + f2l = filt16_2l0; + f2r = filt16_2r0; + break; + + case 3: + fl = filt16_l3; + fm = filt16_m3; + fr = filt16_r3; + fl_dc = filt16_l3; + fm_dc = filt16_m3; + fr_dc = filt16_r3; + f1 = filt16_1; + f2l = filt16_2l1; + f2r = filt16_2r1; + break; + } } + else if (beamforming_mode==0) + msg("lte_dl_bf_channel_estimation:No beamforming is performed.\n"); + else + msg("lte_dl_bf_channel_estimation:Beamforming mode not supported yet.\n"); - //temporal interpolation + + l=symbol; + nsymb = (frame_parms->Ncp==NORMAL) ? 14:12; + + if (frame_parms->frame_type == TDD) { //TDD + sss_symb = nsymb-1; + pss_symb = 2; + } else { + sss_symb = (nsymb>>1)-2; + pss_symb = (nsymb>>1)-1; + } + + + for (aarx=0; aarxnb_antennas_rx; aarx++) { + + rxF = (short *)&rxdataF[aarx][pil_offset + frame_parms->first_carrier_offset + symbol*frame_parms->ofdm_symbol_size]; + pil = (short*)uespec_pilot; + dl_bf_ch = (short *)&dl_bf_ch_estimates[aarx][ch_offset]; + + memset(dl_bf_ch,0,4*(frame_parms->ofdm_symbol_size)); + //memset(dl_bf_ch,0,2*(frame_parms->ofdm_symbol_size)); + + if (phy_vars_ue->high_speed_flag==0) // multiply previous channel estimate by ch_est_alpha + if (frame_parms->Ncp==0) + multadd_complex_vector_real_scalar(dl_bf_ch-(frame_parms->ofdm_symbol_size<<1), + phy_vars_ue->ch_est_alpha,dl_bf_ch-(frame_parms->ofdm_symbol_size<<1), + 1,frame_parms->ofdm_symbol_size); + else + msg("lte_dl_bf_channel_estimation: beamforming channel estimation not supported for TM7 Extended CP.\n"); // phy_vars_ue->ch_est_beta should be defined equaling 1/3 + + //estimation and interpolation + + if ((frame_parms->N_RB_DL&1) == 0) // even number of RBs + for (rb=0; rbN_RB_DL; rb++) { + + if (rb < 32) + rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + else if (rb < 64) + rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + else if (rb < 96) + rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + else if (rb < 100) + rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + else + rb_alloc_ind = 0; + + // For second half of RBs skip DC carrier + if (rb==(frame_parms->N_RB_DL>>1)) { + rxF = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))]; + } + + if (rb_alloc_ind==1) { + if (uespec_pilots==1) { + if (beamforming_mode==7) { + if (frame_parms->Ncp==0) { + + ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); + ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + multadd_real_vector_complex_scalar(fl,ch,dl_bf_ch,16); + //printf("rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); + + ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); + ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); + multadd_real_vector_complex_scalar(fm,ch,dl_bf_ch,16); + + ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); + ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); + multadd_real_vector_complex_scalar(fr,ch,dl_bf_ch,16); + } + } else { + msg("lte_dl_bf_channel_estimation(lte_dl_bf_channel_estimation.c):TM7 beamgforming channel estimation not supported for extented CP\n"); + exit(-1); + } + + } else { + msg("lte_dl_bf_channel_estimation(lte_dl_bf_channel_estimation.c): transmission mode not supported.\n"); + } + nb_rb++; + } + + rxF+=24; + dl_bf_ch+=24; + } + else { // Odd number of RBs + for (rb=0; rbN_RB_DL>>1; rb++) { + skip_half=0; + + if (rb < 32) + rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + else if (rb < 64) + rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + else if (rb < 96) + rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + else if (rb < 100) + rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + else + rb_alloc_ind = 0; + + // PBCH + if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) { + rb_alloc_ind = 0; + } + + //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3 + if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) + skip_half=1; + else if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) + skip_half=2; + + //SSS + if (((subframe==0)||(subframe==5)) && + (rb>((frame_parms->N_RB_DL>>1)-3)) && + (rb<((frame_parms->N_RB_DL>>1)+3)) && + (l==sss_symb) ) { + rb_alloc_ind = 0; + } + + //SSS + if (((subframe==0)||(subframe==5)) && + (rb==((frame_parms->N_RB_DL>>1)-3)) && + (l==sss_symb)) + skip_half=1; + else if (((subframe==0)||(subframe==5)) && + (rb==((frame_parms->N_RB_DL>>1)+3)) && + (l==sss_symb)) + skip_half=2; + + //PSS in subframe 0/5 if FDD + if (frame_parms->frame_type == FDD) { //FDD + if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + + if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) + skip_half=1; + else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) + skip_half=2; + } + + if ((frame_parms->frame_type == TDD) && + (subframe==6)) { //TDD Subframe 6 + if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + + if ((rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) + skip_half=1; + else if ((rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) + skip_half=2; + } + + //printf("symbol=%d,pil_offset=%d\ni,rb_alloc_ind=%d,uespec_pilots=%d,beamforming_mode=%d,Ncp=%d,skip_half=%d\n",symbol,pil_offset,rb_alloc_ind,uespec_pilots,beamforming_mode,frame_parms->Ncp,skip_half); + if (rb_alloc_ind==1) { + if (uespec_pilots==1) { + if (beamforming_mode==7) { + if (frame_parms->Ncp==0) { + if (skip_half==1) { + if (pil_offset<2) { + + ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); + ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + multadd_real_vector_complex_scalar(f2l,ch,dl_bf_ch,16); + pil+=2; + + ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); + ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); + multadd_real_vector_complex_scalar(f2r,ch,dl_bf_ch,16); + pil+=2; + + } else { + + ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); + ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + multadd_real_vector_complex_scalar(f1,ch,dl_bf_ch,16); + pil+=2; + } + } else if (skip_half==2) { + if (pil_offset<2) { + + ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); + ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); + multadd_real_vector_complex_scalar(f1,ch,dl_bf_ch,16); + pil+=2; + + } else { + + ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); + ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); + multadd_real_vector_complex_scalar(f2l,ch,dl_bf_ch,16); + pil+=2; + + ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); + ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); + multadd_real_vector_complex_scalar(f2r,ch,dl_bf_ch,16); + pil+=2; + + } + } else { + + ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); + ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + multadd_real_vector_complex_scalar(fl,ch,dl_bf_ch,16); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); + pil+=2; + + ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); + ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); + multadd_real_vector_complex_scalar(fm,ch,dl_bf_ch,16); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); + pil+=2; + + ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); + ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); + multadd_real_vector_complex_scalar(fr,ch,dl_bf_ch,16); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); + pil+=2; + + } + } else { + msg("lte_dl_bf_channel_estimation(lte_dl_bf_channel_estimation.c):TM7 beamgforming channel estimation not supported for extented CP\n"); + exit(-1); + } + + } else { + msg("lte_dl_bf_channel_estimation(lte_dl_bf_channel_estimation.c):transmission mode not supported.\n"); + } + } + nb_rb++; + } + + rxF+=24; + dl_bf_ch+=24; + } // first half loop + + // Do middle RB (around DC) + if (rb < 32) + rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + else if (rb < 64) + rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + else if (rb < 96) + rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + else if (rb < 100) + rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + else + rb_alloc_ind = 0; + + // PBCH + if ((subframe==0) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) { + rb_alloc_ind = 0; + } + + //SSS + if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) { + rb_alloc_ind = 0; + } + + if (frame_parms->frame_type == FDD) { + //PSS + if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + } + + if ((frame_parms->frame_type == TDD) && (subframe==6)) { + //PSS + if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + } + + //printf("DC rb %d (%p)\n",rb,rxF); + if (rb_alloc_ind==1) { + if (pil_offset<2) { + ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); + ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + multadd_real_vector_complex_scalar(fl_dc,ch,dl_bf_ch,16); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); + pil+=2;; + + ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); + ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); + multadd_real_vector_complex_scalar(fm_dc,ch,dl_bf_ch,16); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[8],rxF[9],pil[0],pil[1],ch[0],ch[1]); + pil+=2;; + + rxF = (short *)&rxdataF[aarx][symbol*(frame_parms->ofdm_symbol_size)]; + + ch[0] = (short)(((int)pil[0]*rxF[6] - (int)pil[1]*rxF[7])>>15); + ch[1] = (short)(((int)pil[0]*rxF[7] + (int)pil[1]*rxF[6])>>15); + multadd_real_vector_complex_scalar(fr_dc,ch,dl_bf_ch,16); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[6],rxF[7],pil[0],pil[1],ch[0],ch[1]); + pil+=2;; + } else { + ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); + ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + multadd_real_vector_complex_scalar(fl_dc,ch,dl_bf_ch,16); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); + pil+=2;; + + rxF = (short *)&rxdataF[aarx][symbol*(frame_parms->ofdm_symbol_size)]; + + ch[0] = (short)(((int)pil[0]*rxF[2] - (int)pil[1]*rxF[3])>>15); + ch[1] = (short)(((int)pil[0]*rxF[3] + (int)pil[1]*rxF[2])>>15); + multadd_real_vector_complex_scalar(fm_dc,ch,dl_bf_ch,16); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[2],rxF[3],pil[0],pil[1],ch[0],ch[1]); + pil+=2;; + + ch[0] = (short)(((int)pil[0]*rxF[10] - (int)pil[1]*rxF[11])>>15); + ch[1] = (short)(((int)pil[0]*rxF[11] + (int)pil[1]*rxF[10])>>15); + multadd_real_vector_complex_scalar(fr_dc,ch,dl_bf_ch,16); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[10],rxF[11],pil[0],pil[1],ch[0],ch[1]); + pil+=2;; + } + } // rballoc==1 + else { + rxF = (short *)&rxdataF[aarx][pil_offset+((symbol*(frame_parms->ofdm_symbol_size)))]; + } + + rxF+=14+2*pil_offset; + dl_bf_ch+=24; + rb++; + + for (; rbN_RB_DL; rb++) { + skip_half=0; + + if (rb < 32) + rb_alloc_ind = (rb_alloc[0]>>rb) & 1; + else if (rb < 64) + rb_alloc_ind = (rb_alloc[1]>>(rb-32)) & 1; + else if (rb < 96) + rb_alloc_ind = (rb_alloc[2]>>(rb-64)) & 1; + else if (rb < 100) + rb_alloc_ind = (rb_alloc[3]>>(rb-96)) & 1; + else + rb_alloc_ind = 0; + + // PBCH + if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=nsymb>>1) && (l<((nsymb>>1) + 4))) { + rb_alloc_ind = 0; + } + + //PBCH subframe 0, symbols nsymb>>1 ... nsymb>>1 + 3 + if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) + skip_half=1; + else if ((subframe==0) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) + skip_half=2; + + //SSS + if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) { + rb_alloc_ind = 0; + } + + //SSS + if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==sss_symb)) + skip_half=1; + else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb)) + skip_half=2; + + if (frame_parms->frame_type == FDD) { + //PSS + if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + + //PSS + if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) + skip_half=1; + else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) + skip_half=2; + } + + if ((frame_parms->frame_type == TDD) && + (subframe==6)) { //TDD Subframe 6 + if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + + if ((rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) + skip_half=1; + else if ((rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) + skip_half=2; + } + + if (rb_alloc_ind==1) { + if (uespec_pilots==1) { + if (beamforming_mode==7) { + if (frame_parms->Ncp==0) { + if (skip_half==1) { + if (pil_offset<2) { + + ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); + ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + multadd_real_vector_complex_scalar(f2l,ch,dl_bf_ch,16); + pil+=2; + + ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); + ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); + multadd_real_vector_complex_scalar(f2r,ch,dl_bf_ch,16); + pil+=2; + + + } else { + + ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); + ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + multadd_real_vector_complex_scalar(f1,ch,dl_bf_ch,16); + pil+=2; + } + } else if (skip_half==2) { + if (pil_offset<2) { + + ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); + ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); + multadd_real_vector_complex_scalar(f1,ch,dl_bf_ch,16); + pil+=2; + + } else { + + ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); + ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); + multadd_real_vector_complex_scalar(f2l,ch,dl_bf_ch,16); + pil+=2; + + ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); + ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); + multadd_real_vector_complex_scalar(f2r,ch,dl_bf_ch,16); + pil+=2; + + } + } else { + + ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); + ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); + multadd_real_vector_complex_scalar(fl,ch,dl_bf_ch,16); + // printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); + pil+=2; + + ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); + ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); + multadd_real_vector_complex_scalar(fm,ch,dl_bf_ch,16); + // printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[8],rxF[9],pil[0],pil[1],ch[0],ch[1]); + pil+=2; + + ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); + ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); + multadd_real_vector_complex_scalar(fr,ch,dl_bf_ch,16); + // printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[16],rxF[17],pil[0],pil[1],ch[0],ch[1]); + pil+=2; + + } + } else { + msg("lte_dl_bf_channel_estimation(lte_dl_bf_channel_estimation.c):TM7 beamgforming channel estimation not supported for extented CP\n"); + exit(-1); + } + + } else { + msg("lte_dl_bf_channel_estimation(lte_dl_bf_channel_estimation.c):transmission mode not supported.\n"); + } + } + nb_rb++; + } + + rxF+=24; + dl_bf_ch+=24; + } // second half of RBs + } // odd number of RBs + + // Temporal Interpolation + if (phy_vars_ue->perfect_ce == 0) { + + dl_bf_ch = (short *)&dl_bf_ch_estimates[aarx][ch_offset]; + printf("dlsch_bf_ch_est.c:symbol %d, dl_bf_ch (%d,%d)\n",symbol,dl_bf_ch[0],dl_bf_ch[1]); + + if (phy_vars_ue->high_speed_flag == 0) { + multadd_complex_vector_real_scalar(dl_bf_ch, + 32767-phy_vars_ue->ch_est_alpha, + dl_bf_ch-(frame_parms->ofdm_symbol_size<<1),0,frame_parms->ofdm_symbol_size); + printf("dlsch_bf_ch_est.c:symbol %d,dl_bf_ch (%d,%d)\n",symbol,*(dl_bf_ch-512*2),*(dl_bf_ch-512*2+1)); + } else { // high_speed_flag == 1 + if (beamforming_mode==7) { + if (frame_parms->Ncp==0) { + if (symbol == pilot0) { + // printf("Interpolating %d->0\n",4-phy_vars_ue->lte_frame_parms.Ncp); + // dl_bf_ch_prev = (short *)&dl_bf_ch_estimates[aarx][(4-phy_vars_ue->lte_frame_parms.Ncp)*(frame_parms->ofdm_symbol_size)]; + dl_bf_ch_prev = (short *)&dl_bf_ch_estimates[aarx][pilot3*(frame_parms->ofdm_symbol_size)]; + + // pilot spacing 5 symbols (1/5,2/5,3/5,4/5 combination) + multadd_complex_vector_real_scalar(dl_bf_ch_prev,26214,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),1,frame_parms->ofdm_symbol_size); + multadd_complex_vector_real_scalar(dl_bf_ch,6554,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),0,frame_parms->ofdm_symbol_size); + + multadd_complex_vector_real_scalar(dl_bf_ch_prev,19661,dl_bf_ch-(3*2*(frame_parms->ofdm_symbol_size)),1,frame_parms->ofdm_symbol_size); + multadd_complex_vector_real_scalar(dl_bf_ch,13107,dl_bf_ch-(3*2*(frame_parms->ofdm_symbol_size)),0,frame_parms->ofdm_symbol_size); + + multadd_complex_vector_real_scalar(dl_bf_ch_prev,13107,dl_bf_ch-(2*((frame_parms->ofdm_symbol_size)<<1)),1,frame_parms->ofdm_symbol_size); + multadd_complex_vector_real_scalar(dl_bf_ch,19661,dl_bf_ch-(2*((frame_parms->ofdm_symbol_size)<<1)),0,frame_parms->ofdm_symbol_size); + + multadd_complex_vector_real_scalar(dl_bf_ch_prev,6554,dl_bf_ch-(2*(frame_parms->ofdm_symbol_size)),1,frame_parms->ofdm_symbol_size); + multadd_complex_vector_real_scalar(dl_bf_ch,26214,dl_bf_ch-(2*(frame_parms->ofdm_symbol_size)),0,frame_parms->ofdm_symbol_size); + } else if (symbol == pilot1) { + dl_bf_ch_prev = (short *)&dl_bf_ch_estimates[aarx][pilot0*(frame_parms->ofdm_symbol_size)]; + + // pilot spacing 3 symbols (1/3,2/3 combination) + multadd_complex_vector_real_scalar(dl_bf_ch_prev,21845,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),1,frame_parms->ofdm_symbol_size); + multadd_complex_vector_real_scalar(dl_bf_ch,10923,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),0,frame_parms->ofdm_symbol_size); + + multadd_complex_vector_real_scalar(dl_bf_ch_prev,10923,dl_bf_ch_prev+(2*((frame_parms->ofdm_symbol_size)<<1)),1,frame_parms->ofdm_symbol_size); + multadd_complex_vector_real_scalar(dl_bf_ch,21845,dl_bf_ch_prev+(2*((frame_parms->ofdm_symbol_size)<<1)),0,frame_parms->ofdm_symbol_size); + + } else if (symbol == pilot2) { + dl_bf_ch_prev = (short *)&dl_bf_ch_estimates[aarx][pilot1*(frame_parms->ofdm_symbol_size)]; + + multadd_complex_vector_real_scalar(dl_bf_ch_prev,21845,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),1,frame_parms->ofdm_symbol_size); + multadd_complex_vector_real_scalar(dl_bf_ch,10923,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),0,frame_parms->ofdm_symbol_size); + + multadd_complex_vector_real_scalar(dl_bf_ch_prev,10923,dl_bf_ch_prev+(2*((frame_parms->ofdm_symbol_size)<<1)),1,frame_parms->ofdm_symbol_size); + multadd_complex_vector_real_scalar(dl_bf_ch,21845,dl_bf_ch_prev+(2*((frame_parms->ofdm_symbol_size)<<1)),0,frame_parms->ofdm_symbol_size); + } else { // symbol == pilot3 + // printf("Interpolating 0->%d\n",4-phy_vars_ue->lte_frame_parms.Ncp); + dl_bf_ch_prev = (short *)&dl_bf_ch_estimates[aarx][pilot2*(frame_parms->ofdm_symbol_size)]; + + // pilot spacing 3 symbols (1/3,2/3 combination) + multadd_complex_vector_real_scalar(dl_bf_ch_prev,21845,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),1,frame_parms->ofdm_symbol_size); + multadd_complex_vector_real_scalar(dl_bf_ch,10923,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),0,frame_parms->ofdm_symbol_size); + + multadd_complex_vector_real_scalar(dl_bf_ch_prev,10923,dl_bf_ch_prev+(2*((frame_parms->ofdm_symbol_size)<<1)),1,frame_parms->ofdm_symbol_size); + multadd_complex_vector_real_scalar(dl_bf_ch,21845,dl_bf_ch_prev+(2*((frame_parms->ofdm_symbol_size)<<1)),0,frame_parms->ofdm_symbol_size); + } + + } else { + msg("lte_dl_bf_channel_estimation:temporal interpolation not supported for TM7 extented CP.\n"); + } + } else { + msg("lte_dl_bf_channel_estimation:temporal interpolation not supported for this beamforming mode.\n"); + } + } + } + } //aarx + + //printf("[dlsch bf ch est]: dl_bf_estimates[0][600] %d, %d \n",*(short *)&dl_bf_ch_estimates[0][600],*(short*)&phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0][600]); return(0); diff --git a/openair1/PHY/LTE_REFSIG/defs.h b/openair1/PHY/LTE_REFSIG/defs.h index e9482060a7..6d52d4a5f7 100644 --- a/openair1/PHY/LTE_REFSIG/defs.h +++ b/openair1/PHY/LTE_REFSIG/defs.h @@ -54,6 +54,8 @@ void lte_gold(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_table[20][2][14] void lte_gold_ue_spec(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_uespec_table[2][20][2][21],uint16_t Nid_cell, uint16_t *n_idDMRS); +void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_t Nid_cell, uint16_t n_rnti); + /*!\brief This function generates the LTE Gold sequence (36-211, Sec 7.2), specifically for DL UE-specific reference signals for antenna ports 7..14. @param frame_parms LTE DL Frame parameters @param lte_gold_uespec_table pointer to table where sequences are stored @@ -96,7 +98,7 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, uint8_t Ns, uint8_t lprime, uint8_t p, - int SS_flag ); + int SS_flag); /*! \brief This function generates the MBSFN reference signal sequence (36-211, Sec 6.10.1.2) @param phy_vars_eNB Pointer to eNB variables @@ -130,7 +132,9 @@ int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, mod_sym_t *output, unsigned char Ns, unsigned char p, - int SS_flag); + int lprime, + int SS_flag, + uint16_t nRB_PDSCH); int lte_dl_mbsfn_rx(PHY_VARS_UE *phy_vars_ue, int *output, diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c index 64c4e8782e..505a6e19cd 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c @@ -59,12 +59,12 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, uint8_t Ns, uint8_t lprime, uint8_t p, - int SS_flag ) + int SS_flag) { - mod_sym_t qpsk[4],nqpsk[4]; + /* mod_sym_t qpsk[4],nqpsk[4]; int16_t k=0,a; - int mprime,mprime_dword,mprime_qpsk_symb; + int mprime,ind,ind_dword,ind_qpsk_symb; unsigned nushift,kprime; // LTE_eNB_DLSCH_t *dlsch = phy_vars_eNB->dlsch_eNB[UE_id][0]; @@ -103,12 +103,13 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, k = kprime+phy_vars_eNB->lte_frame_parms.first_carrier_offset; printf("lte_dl_ue_spec:k=%d\n",k); - for (mprime=0;mprime<3*phy_vars_eNB->lte_frame_parms.N_RB_DL-1;mprime++) { - mprime_dword = mprime>>4; - mprime_qpsk_symb = mprime&0xf; + for (mprime=0;mprime<3*nRB_PDSCH-1;mprime++) { + ind = 3*lprime*nRB_PDSCH+mprime; + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; - //output[k] = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; - output[k] = 0xffffffff; + output[k] = qpsk[(phy_vars_UE->lte_gold_uespec_port5_table[Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; + //output[k] = 0xffffffff; k += 4; if (k >= phy_vars_eNB->lte_frame_parms.ofdm_symbol_size) { @@ -125,19 +126,21 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, LOG_E(PHY,"Illegal p %d UE specific pilots\n",p); } - return(0); + return(0);*/ } int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, - mod_sym_t *output, - unsigned char Ns, - unsigned char p, - int SS_flag) + mod_sym_t *output, + unsigned char Ns, + unsigned char p, + int lprime, + int SS_flag, + uint16_t nRB_PDSCH) { mod_sym_t qpsk[4],nqpsk[4],*qpsk_p,*output_p; int16_t a; - int w,lprime,mprime,ind,l,ind_dword,ind_qpsk_symb,nPRB; + int w,mprime,ind,l,ind_dword,ind_qpsk_symb,nPRB; short pamp; // Compute the correct pilot amplitude, sqrt_rho_b = Q3.13 @@ -169,7 +172,7 @@ int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, output_p = output; - for (lprime=0; lprime<2; lprime++) { + //for (lprime=0; lprime<2; lprime++) { ind = 3*lprime*phy_vars_ue->lte_frame_parms.N_RB_DL; l = lprime + ((Ns&1)<<1); @@ -288,25 +291,29 @@ int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, output_p++; ind++; } - } + // } } else { LOG_E(PHY,"Special subframe not supported for UE specific pilots yet\n"); } } } else if (p==5) { if (SS_flag==0) { - if (phy_vars_ue->lte_frame_parms.Ncp == NORMAL) { - - for (lprime=0;lprime<2;lprime++) { - ind = 3*lprime*phy_vars_ue->lte_frame_parms.N_RB_DL; - - for (mprime=0;mprime<3*phy_vars_ue->lte_frame_parms.N_RB_DL-1;mprime++) { - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; - *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_port5_table[Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; - *output_p++; - } + output_p = output; + + if (phy_vars_ue->lte_frame_parms.Ncp == NORMAL) { + //for (lprime=0;lprime<4;lprime++) { + for (mprime=0;mprime<3*nRB_PDSCH;mprime++) { + + ind = 3*lprime*nRB_PDSCH+mprime; + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk[(phy_vars_ue->lte_gold_uespec_port5_table[Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; + //printf("lprime=%d,ind=%d,Ns=%d,output_p=(%d,%d)\n",lprime,ind,Ns,((short *)&output_p[0])[0],((short *)&output_p[0])[1]); + *output_p++; + } + // } } } } else { @@ -343,44 +350,44 @@ main() lte_gold(Nid_cell,Ncp); lte_dl_ue_spec(output00, - ONE_OVER_SQRT2_Q15, - 50, - Nid_cell, - Ncp, - 0, - 0, - 0, - 0); + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 0, + 0, + 0); lte_dl_ue_spec(output10, - ONE_OVER_SQRT2_Q15, - 50, - Nid_cell, - Ncp, - 0, - 1, - 0, - 0); + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 1, + 0, + 0); lte_dl_ue_spec(output01, - ONE_OVER_SQRT2_Q15, - 50, - Nid_cell, - Ncp, - 0, - 0, - 1, - 0); + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 0, + 1, + 0); lte_dl_ue_spec(output11, - ONE_OVER_SQRT2_Q15, - 50, - Nid_cell, - Ncp, - 0, - 1, - 1, - 0); + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 1, + 1, + 0); write_output("dl_ue_spec00.m","dl_cs00",output00,1024,1,1); diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair1/PHY/LTE_REFSIG/lte_gold.c b/openair1/PHY/LTE_REFSIG/lte_gold.c index 456a2b17d1..cdf78b6844 100644 --- a/openair1/PHY/LTE_REFSIG/lte_gold.c +++ b/openair1/PHY/LTE_REFSIG/lte_gold.c @@ -142,7 +142,7 @@ void lte_gold_ue_spec(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_uespec_t } } -void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][2][21],uint16_t Nid_cell, uint16_t n_rnti) +void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_t Nid_cell, uint16_t n_rnti) { unsigned char ns,l; @@ -151,36 +151,36 @@ void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][2][21],uint for (ns=0; ns<20; ns++) { - for (l=0; l<2; l++) { + //for (l=0; l<2; l++) { - x2 = ((((ns>>1)+1)*((Nid_cell<<1)+1))<<16) + n_rnti; - //x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit - //n = 0 - // printf("cinit (ns %d, l %d) => %d\n",ns,l,x2); - x1 = 1+ (1<<31); - x2=x2 ^ ((x2 ^ (x2>>1) ^ (x2>>2) ^ (x2>>3))<<31); - - // skip first 50 double words (1600 bits) - //printf("n=0 : x1 %x, x2 %x\n",x1,x2); - for (n=1; n<50; n++) { - x1 = (x1>>1) ^ (x1>>4); - x1 = x1 ^ (x1<<31) ^ (x1<<28); - x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4); - x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28); - // printf("x1 : %x, x2 : %x\n",x1,x2); - } - - for (n=0; n<14; n++) { - x1 = (x1>>1) ^ (x1>>4); - x1 = x1 ^ (x1<<31) ^ (x1<<28); - x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4); - x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28); - lte_gold_uespec_port5_table[ns][l][n] = x1^x2; - // printf("n=%d : c %x\n",n,x1^x2); - } + x2 = ((((ns>>1)+1)*((Nid_cell<<1)+1))<<16) + n_rnti; + //x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit + //n = 0 + // printf("cinit (ns %d, l %d) => %d\n",ns,l,x2); + x1 = 1+ (1<<31); + x2=x2 ^ ((x2 ^ (x2>>1) ^ (x2>>2) ^ (x2>>3))<<31); + // skip first 50 double words (1600 bits) + //printf("n=0 : x1 %x, x2 %x\n",x1,x2); + for (n=1; n<50; n++) { + x1 = (x1>>1) ^ (x1>>4); + x1 = x1 ^ (x1<<31) ^ (x1<<28); + x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4); + x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28); + // printf("x1 : %x, x2 : %x\n",x1,x2); } + + for (n=0; n<38; n++) { + x1 = (x1>>1) ^ (x1>>4); + x1 = x1 ^ (x1<<31) ^ (x1<<28); + x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4); + x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28); + lte_gold_uespec_port5_table[ns][n] = x1^x2; + // printf("n=%d : c %x\n",n,x1^x2); + } + + // } } } diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index 3aa3f72312..89dadbbd1c 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -246,15 +246,16 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, } } else if (beamforming_mode==7) { //else n_tx>1 nb_rb = dlsch_extract_rbs_TM7(lte_ue_common_vars->rxdataF, - lte_ue_common_vars->dl_ch_estimates[eNB_id], + lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates, lte_ue_pdsch_vars[eNB_id]->rxdataF_ext, - lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, + lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext, dlsch0_harq->rb_alloc, symbol, subframe, phy_vars_ue->high_speed_flag, frame_parms); + printf("dlsch extract: symbol %d, dl_bf_estimates_ext[0][300] %d \n",symbol, lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext[0][300]); } else if(beamforming_mode>7) { LOG_W(PHY,"dlsch_demodulation:beamforming mode not supported yet.\n"); @@ -275,11 +276,19 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, nb_rb); */ if (first_symbol_flag==1) { - dlsch_channel_level(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, - frame_parms, - avg, - symbol, - nb_rb); + if (beamforming_mode==0) + dlsch_channel_level(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, + frame_parms, + avg, + symbol, + nb_rb); + else + dlsch_channel_level(lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext, + frame_parms, + avg, + symbol, + nb_rb); + #ifdef DEBUG_PHY LOG_D(PHY,"[DLSCH] avg[0] %d\n",avg[0]); #endif @@ -329,6 +338,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, aarx = frame_parms->nb_antennas_rx; if (dlsch0_harq->mimo_modedl_ch_estimates_ext[0][300]); + printf("dlsch compensation: symbol %d, dl_estimates_ext[0][2400] %d \n",symbol, lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[0][2400]); dlsch_channel_compensation(lte_ue_pdsch_vars[eNB_id]->rxdataF_ext, lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, @@ -546,9 +557,11 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, 1); } } else if (dlsch0_harq->mimo_mode==TM7) { //TM7 + printf("dlsch compensation: symbol %d, dl_bf_estimates_ext[0][300] %d \n",symbol, *(short*)<e_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext[0][300]); + printf("dlsch compensation: symbol %d, dl_bf_estimates_ext[0][2400] %d \n",symbol, lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext[0][2400]); dlsch_channel_compensation(lte_ue_pdsch_vars[eNB_id]->rxdataF_ext, - lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, + lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext, lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0, lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0, @@ -558,6 +571,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, first_symbol_flag, get_Qm(dlsch0_harq->mcs), nb_rb, + //9, lte_ue_pdsch_vars[eNB_id]->log2_maxh, phy_measurements); // log2_maxh+I0_shift } @@ -4209,9 +4223,9 @@ unsigned short dlsch_extract_rbs_dual(int **rxdataF, } unsigned short dlsch_extract_rbs_TM7(int **rxdataF, - int **dl_ch_estimates, + int **dl_bf_ch_estimates, int **rxdataF_ext, - int **dl_ch_estimates_ext, + int **dl_bf_ch_estimates_ext, unsigned int *rb_alloc, unsigned char symbol, unsigned char subframe, @@ -4240,7 +4254,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, uespec_pilots = 1; } - if (frame_parms->frame_type == TDD) { // TDD + if (frame_parms->frame_type == TDD) {// TDD sss_symb = nsymb-1; pss_symb = 2; } else { @@ -4257,15 +4271,17 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, for (aarx=0; aarxnb_antennas_rx; aarx++) { if (high_speed_flag == 1) - dl_ch0 = &dl_ch_estimates[aarx][5+(symbol*(frame_parms->ofdm_symbol_size))]; + //dl_ch0 = &dl_bf_ch_estimates[aarx][5+(symbol*(frame_parms->ofdm_symbol_size))]; + dl_ch0 = &dl_bf_ch_estimates[aarx][symbol*(frame_parms->ofdm_symbol_size)]; else - dl_ch0 = &dl_ch_estimates[aarx][5]; + //dl_ch0 = &dl_bf_ch_estimates[aarx][5]; + dl_ch0 = &dl_bf_ch_estimates[aarx][0]; - dl_ch0_ext = &dl_ch_estimates_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; + dl_ch0_ext = &dl_bf_ch_estimates_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; rxF_ext = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; rxF = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))]; - printf("symbol:%d, (symbol-1)/3:%d\n",symbol,(symbol-1)/3); + //printf("symbol:%d, (symbol-1)/3:%d\n",symbol,(symbol-1)/3); //rxF_uespec = &rxdataF_uespec_pilots[aarx][(symbol-1)/3*frame_parms->N_RB_DL*(3+frame_parms->Ncp)]; //printf("symbol, rxF_uespec offset:%d\n",symbol,(symbol-1)/3*frame_parms->N_RB_DL*(3+frame_parms->Ncp)); @@ -4291,7 +4307,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (rb_alloc_ind==1) { //*pmi_ext = (pmi>>((rb>>2)<<1))&3; - memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); + //memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); /* printf("rb %d\n",rb); @@ -4300,11 +4316,10 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, printf("\n"); */ if (pilots==0 && uespec_pilots==0) { + memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); + for (i=0; i<12; i++) { rxF_ext[i]=rxF[i]; - /* - printf("%d : (%d,%d)\n",(rxF+i-&rxdataF[aarx][( (symbol*(frame_parms->ofdm_symbol_size)))]), - ((short*)&rxF[i])[0],((short*)&rxF[i])[1]);*/ } dl_ch0_ext+=12; @@ -4316,9 +4331,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if ((i!=(frame_parms->nushift+poffset)) && (i!=((frame_parms->nushift+poffset+6)%12))) { rxF_ext[j]=rxF[i]; - // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j++]=dl_ch0[i]; - } } @@ -4432,7 +4445,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (rb_alloc_ind==1) { - // printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half); + //printf("rb %d/symbol %d pilots %d, uespec_pilots %d, (skip_half %d)\n",rb,l,pilots,uespec_pilots,skip_half); if (pilots==0 && uespec_pilots==0) { // printf("Extracting w/o pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half); @@ -4493,8 +4506,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if ((i!=(frame_parms->nushift+poffset)) && (i!=((frame_parms->nushift+poffset+6)%12))) { rxF_ext[j]=rxF[i]; - // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); + //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j++]=dl_ch0[i]; + //printf("symbol %d, extract rb %d => (%d,%d)\n",symbol,rb,*(short *)&dl_ch0[i],*(1+(short*)&dl_ch0[i])); } } @@ -4558,6 +4572,8 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ rxF_ext[j] = rxF[i]; dl_ch0_ext[j++] = dl_ch0[i]; + //printf("symbol %d, extract rb %d, re %d => (%d,%d)\n",symbol,rb,i,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); + //printf("symbol %d, extract rb %d, re %d, j %d => (%d,%d)\n",symbol,rb,i,j-1,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); } } else{ if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ @@ -4676,13 +4692,13 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ dl_ch0_ext[j]=dl_ch0[i]; rxF_ext[j++] = rxF[i]; - //printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); + //printf("symbol %d, extract rb %d, re %d, j %d => (%d,%d)\n",symbol,rb,i,j-1,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); + //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); } } else { if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ dl_ch0_ext[j]=dl_ch0[i]; rxF_ext[j++] = rxF[i]; - // printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); } } } @@ -4694,7 +4710,8 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ dl_ch0_ext[j]=dl_ch0[i]; rxF_ext[j++]=rxF[(1+i-6)]; - // printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); + // printf("symbol %d, extract rb %d, re %d, j %d => (%d,%d)\n",symbol,rb,i,j-1,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); + // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); } } else { if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ @@ -4814,6 +4831,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, } else { memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); + //printf("symbol %d, extract rb %d, => (%d,%d)\n",symbol,rb,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); for (i=0; i<12; i++) rxF_ext[i]=rxF[i]; @@ -4854,6 +4872,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, rxF_ext[j]=rxF[i]; //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j++]=dl_ch0[i]; + //printf("symbol %d, extract rb %d => (%d,%d)\n",symbol,rb,*(short *)&dl_ch0[i],*(1+(short*)&dl_ch0[i])); } } @@ -4914,6 +4933,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ rxF_ext[j] = rxF[i]; dl_ch0_ext[j++]=dl_ch0[i]; + // printf("symbol %d, extract rb %d, re %d, j %d => (%d,%d)\n",symbol,rb,i,j-1,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); } } else{ if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ @@ -4972,6 +4992,17 @@ void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per sprintf(vname,"dl%d_ch_r%d_ext00",eNB_id,round); write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1); + if (phy_vars_ue->transmission_mode[eNB_id]==7){ + sprintf(fname,"dlsch%d_bf_ch_r%d.m",eNB_id,round); + sprintf(vname,"dl%d_bf_ch_r%d",eNB_id,round); + write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0],512*nsymb,1,1); + //write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0],512,1,1); + + sprintf(fname,"dlsch%d_bf_ch_r%d_ext00.m",eNB_id,round); + sprintf(vname,"dl%d_bf_ch_r%d_ext00",eNB_id,round); + write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext[0],12*N_RB_DL*nsymb,1,1); + } + if (phy_vars_ue->lte_frame_parms.nb_antennas_rx == 2) { sprintf(fname,"dlsch%d_ch_r%d_ext01.m",eNB_id,round); sprintf(vname,"dl%d_ch_r%d_ext01",eNB_id,round); diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index d14c26c13d..2d769a6ccf 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -71,13 +71,13 @@ uint8_t is_not_pilot(uint8_t pilots, uint8_t re, uint8_t nushift, uint8_t use2nd } //uint8_t is_not_UEspecRS(int first_layer,int re) -uint8_t is_not_UEspecRS(uint8_t lprime, uint8_t re, uint8_t nushift, uint8_t Ncp, uint8_t beamforming_mode) +uint8_t is_not_UEspecRS(int8_t lprime, uint8_t re, uint8_t nushift, uint8_t Ncp, uint8_t beamforming_mode) { - uint8_t offset = (lprime==2)?2:0; - if(lprime==0) + uint8_t offset = (lprime==1||lprime==3)?2:0; + if (lprime==-1) return(1); - switch(beamforming_mode){ + switch (beamforming_mode) { case 7: if (Ncp == NORMAL){ if ((re!=nushift+offset) && (re!=((nushift+4+offset)%12)) && (re!=((nushift+8+offset)%12))) @@ -225,7 +225,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB, uint8_t layer; int s=1; - uint8_t mprime2 = mprime,mprime_dword,mprime_qpsk_symb; + int mprime2 = mprime,ind,ind_dword,ind_qpsk_symb; mod_sym_t qpsk[4]; gain_lin_QPSK = (int16_t)((amp*ONE_OVER_SQRT2_Q15)>>15); @@ -1022,12 +1022,13 @@ break; //printf("precoding UE spec RS\n"); for (aa=0; aa>4; - mprime_qpsk_symb = mprime2&0xf; + + ind = 3*lprime*dlsch0_harq->nb_rb+mprime2; + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; - tmp_sample1 = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][lprime][mprime_dword]>>(2*mprime_qpsk_symb))&3]; - //printf("tmp_sample1=%d+i%d\n",((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); - //printf("beamforing_weights[%d][%d]=%d+i%d\n",re,aa,((int16_t*)&beamforming_weights[re][aa])[0],((int16_t*)&beamforming_weights[re][aa])[1]); + tmp_sample1 = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; + //printf("lprime=%d,nb_rb=%d,mprime2=%d,ind=%d,Ns=%d,tmp_sample1=(%d,%d)\n",lprime,dlsch0_harq->nb_rb,mprime2,ind,Ns,((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((uint16_t*)&beamforming_weights[re][aa])[0])>>15); ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); @@ -1037,8 +1038,11 @@ break; // ((int16_t*)&txdataF[aa][tti_offset])[0] = 0xffff; // ((int16_t*)&txdataF[aa][tti_offset])[1] = 0xffff; + //printf("tmp_sample1=%d+i%d\n",((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); + //printf("beamforing_weights[%d][%d]=%d+i%d\n",re,aa,((int16_t*)&beamforming_weights[re][aa])[0],((int16_t*)&beamforming_weights[re][aa])[1]); + //printf("txdataF[%d][%d]= %d+i%d\n ",aa,tti_offset,((int16_t*)&txdataF[aa][tti_offset])[0],((int16_t*)&txdataF[aa][tti_offset])[1]); + mprime2 = mprime2++; - //printf("**txdataF[%d][%d]= %d+i%d\n ",aa,tti_offset,((int16_t*)&txdataF[aa][tti_offset])[0],((int16_t*)&txdataF[aa][tti_offset])[1]); } } @@ -1291,7 +1295,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, MIMO_mode_t mimo_mode = dlsch0_harq->mimo_mode; uint8_t beamforming_mode = 0; int32_t **beamforming_weights_RB = beamforming_weights; - uint8_t lprime, mprime=0,Ns; + uint8_t mprime=0,Ns; + int8_t lprime=-1; #ifdef DEBUG_DLSCH_MODULATION uint8_t Nl0 = dlsch0_harq->Nl; @@ -1375,19 +1380,25 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, beamforming_mode = 7; mprime = 0; if (frame_parms->Ncp==0) { // normal prefix - if ((l==6)||(l==12)) - lprime=2; // pilots in nushift+3, nushift+9 - else if ((l==3)||(l==9)) - lprime=1; // pilots in nushift, nushift+6 + if (l==12) + lprime=3; // pilots in nushift+3, nushift+9 + else if (l==9) + lprime=2; // pilots in nushift, nushift+6 + else if (l==6) + lprime=1; // pilots in nushift+3, nushift+9 + else if (l==3) + lprime=0; // pilots in nushift, nushift+6 else - lprime=0; + lprime=-1; } else { - if ((l==7)) + if (l==10) lprime=2; - else if ((l==4)||(l==10)) + else if (l==7) lprime=1; - else + else if (l==4) lprime=0; + else + lprime=-1; } }else if(mimo_mode==TM8){ beamforming_mode = 8; @@ -1395,10 +1406,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, beamforming_mode = 9; } - if(l<=(nsymb>>2)) - Ns=0; - else - Ns=1; + Ns = 2*subframe_offset+(l>=(nsymb>>1)); re_offset = frame_parms->first_carrier_offset; symbol_offset = (uint32_t)frame_parms->ofdm_symbol_size*(l+(subframe_offset*nsymb)); @@ -1566,7 +1574,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, qam_table_s1 = NULL; if (rb_alloc_ind > 0) { - // printf("Allocated rb %d/symbol %d, skip_half %d, subframe_offset %d, symbol_offset %d, re_offset %d, jj %d\n",rb,l,skip_half,subframe_offset,symbol_offset,re_offset,jj); + // printf("Allocated rb %d/symbol %d, skip_half %d, subframe_offset %d, symbol_offset %d, re_offset %d, jj %d\n",rb,l,skip_half,subframe_offset,symbol_offset,re_offset,jj); allocate_REs_in_RB(phy_vars_eNB, txdataF, &jj, @@ -1588,12 +1596,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, Ns, beamforming_weights_RB); - if(mimo_mode==TM7){ - if(frame_parms->Ncp==0&&(l==3||l==6||l==9||l==12)) - mprime +=3; - else if(frame_parms->Ncp==1&&(l==4||l==7||l==10)) - mprime +=4; - } + if(mimo_mode==TM7 && lprime>=0) + mprime +=3+frame_parms->Ncp; } diff --git a/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c b/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c index 310204eea9..2287c44a5f 100644 --- a/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c +++ b/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c @@ -48,7 +48,7 @@ void generate_ue_spec_pilots(PHY_VARS_eNB *phy_vars_eNB, uint8_t beamforming_mode) { - LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; + /*LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; uint32_t tti,tti_offset,slot_offset,Nsymb,samples_per_symbol; uint8_t second_pilot,aa; @@ -123,7 +123,7 @@ void generate_ue_spec_pilots(PHY_VARS_eNB *phy_vars_eNB, default: msg("[generate_ue_spec_pilots(in uespec_pilots.c)]ERROR:beamforming mode %d is not supported\n",beamforming_mode); - } + }*/ } /*int generate_ue_spec_pilots_slot(PHY_VARS_eNB *phy_vars_eNB, diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 58a1177a37..5c3db65afc 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -1756,6 +1756,8 @@ int is_pmch_subframe(frame_t frame, int subframe, LTE_DL_FRAME_PARMS *frame_parm uint8_t is_not_pilot(uint8_t pilots, uint8_t re, uint8_t nushift, uint8_t use2ndpilots); +uint8_t is_not_UEspecRS(int8_t lprime, uint8_t re, uint8_t nushift, uint8_t Ncp, uint8_t beamforming_mode); + uint32_t dlsch_decoding_abstraction(double *dlsch_MIPB, LTE_DL_FRAME_PARMS *lte_frame_parms, LTE_UE_DLSCH_t *dlsch, diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c index 5bbea87c88..a7639d9291 100644 --- a/openair1/PHY/MODULATION/slot_fep.c +++ b/openair1/PHY/MODULATION/slot_fep.c @@ -64,6 +64,11 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue, unsigned int frame_length_samples = frame_parms->samples_per_tti * 10; unsigned int rx_offset; + /*LTE_UE_DLSCH_t **dlsch_ue = phy_vars_ue->dlsch_ue[eNB_id]; + unsigned char harq_pid = dlsch_ue[0]->current_harq_pid; + LTE_DL_UE_HARQ_t *dlsch0_harq = dlsch_ue[0]->harq_processes[harq_pid]; + int uespec_pilot[9][1200];*/ + void (*dft)(int16_t *,int16_t *, int); int tmp_dft_in[256]; // This is for misalignment issues for 6 and 15 PRBs @@ -241,15 +246,18 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue, } } - // printf("slot_fep:transmission_mode[%d] = %d\n", eNB_id, phy_vars_ue->transmission_mode[eNB_id]); - if(phy_vars_ue->transmission_mode[eNB_id] == 7) - if(frame_parms->Ncp==0 && (symbol==3) || (symbol==6) || (symbol==9) || (symbol==12)) - lte_dl_bf_channel_estimation(phy_vars_ue,eNB_id,0,Ns,5,symbol); - else if(frame_parms->Ncp==1 && (symbol==4) || (symbol==7) || (symbol==10)) - msg("slot_fep(slot_fep.c):channel estimation not supported yet for TM7 extented CP.\n"); - else if(phy_vars_ue->transmission_mode[eNB_id] > 7) - msg("slot_fep(slot_fep.c):transmission mode not supported yet.\n"); + if(phy_vars_ue->transmission_mode[eNB_id] == 7) { + + if(frame_parms->Ncp==0 && ((symbol==3) || (symbol==6) || (symbol==9) || (symbol==12))) + lte_dl_bf_channel_estimation(phy_vars_ue,eNB_id,0,Ns,5,symbol); + + else if(frame_parms->Ncp==1 && ((symbol==4) || (symbol==7) || (symbol==10))) + msg("slot_fep(slot_fep.c):channel estimation not supported yet for TM7 extented CP.\n"); + + } else if(phy_vars_ue->transmission_mode[eNB_id] > 7) { + msg("slot_fep(slot_fep.c):transmission mode not supported yet.\n"); + } } #ifdef DEBUG_FEP diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 80c6b4ef01..7cce9d3cd1 100755 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -243,7 +243,7 @@ typedef struct PHY_VARS_eNB_s { uint32_t lte_gold_table[20][2][14]; /// UE-specific reference symbols (p=5), TM 7 - uint32_t lte_gold_uespec_port5_table[NUMBER_OF_UE_MAX][20][2][21]; + uint32_t lte_gold_uespec_port5_table[NUMBER_OF_UE_MAX][20][38]; /// UE-specific reference symbols (p=7...14), TM 8/9/10 uint32_t lte_gold_uespec_table[2][20][2][21]; @@ -510,7 +510,7 @@ typedef struct { uint32_t lte_gold_table[7][20][2][14]; /// UE-specific reference symbols (p=5), TM 7 - uint32_t lte_gold_uespec_port5_table[20][2][21]; + uint32_t lte_gold_uespec_port5_table[20][38]; /// ue-specific reference symbols uint32_t lte_gold_uespec_table[2][20][2][21]; diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 7a3b3bba1d..4d382c64ca 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -172,7 +172,6 @@ void lte_param_init(unsigned char N_tx, unsigned char N_tx_phy, unsigned char N_ phy_init_lte_ue(PHY_vars_UE,1,0); phy_init_lte_eNB(PHY_vars_eNB,0,0,0); - generate_pcfich_reg_mapping(&PHY_vars_UE->lte_frame_parms); generate_phich_reg_mapping(&PHY_vars_UE->lte_frame_parms); @@ -746,6 +745,7 @@ int main(int argc, char **argv) if (transmission_mode==7){ lte_gold_ue_spec_port5(PHY_vars_eNB->lte_gold_uespec_port5_table[0],Nid_cell,n_rnti); lte_gold_ue_spec_port5(PHY_vars_UE->lte_gold_uespec_port5_table,Nid_cell,n_rnti); + beamforming_weights = (int32_t **)malloc(12*N_RB_DL*sizeof(int32_t*)); for(re=0;re<12*N_RB_DL;re++){ beamforming_weights[re]=(int32_t *)malloc(n_tx_phy*sizeof(int32_t)); @@ -3064,10 +3064,12 @@ PMI_FEEDBACK: pilot2 = 6; pilot3 = 9; } + start_meas(&PHY_vars_UE->phy_proc_rx); // Inner receiver scheduling for 3 slots + for (Ns=(2*subframe); Ns<((2*subframe)+3); Ns++) { for (l=0; lofdm_demod_stats); - slot_fep(PHY_vars_UE, - l, - Ns%20, - 0, - 0); - stop_meas(&PHY_vars_UE->ofdm_demod_stats); + if(Ns==(2*subframe) || Ns==(2*subframe+1)) { + start_meas(&PHY_vars_UE->ofdm_demod_stats); + slot_fep(PHY_vars_UE, + l, + Ns%20, + 0, + 0); + stop_meas(&PHY_vars_UE->ofdm_demod_stats); + } //write_output("rxsigF0.m","rxsF0", &PHY_vars_UE->lte_ue_common_vars.rxdataF[0][0],PHY_vars_UE->lte_frame_parms.ofdm_symbol_size*nsymb,1,1); if (PHY_vars_UE->perfect_ce==1) { @@ -3120,6 +3123,11 @@ PMI_FEEDBACK: for (i=0; iN_RB_DL*12; i++) { ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP); ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2; + if (transmission_mode == 7){ + ((int16_t *) PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(short)(AMP); + ((int16_t *) PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=0/2; + + } } } } From f905243047e2e302aa5367db10b88fe1e2746164 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Wed, 9 Sep 2015 09:58:23 +0200 Subject: [PATCH 003/132] update beamforming channel estimation frequency interpolation filter head file --- openair1/PHY/LTE_ESTIMATION/filt12_32.h | 86 ------------------------- openair1/PHY/LTE_ESTIMATION/filt16_32.h | 86 +++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 86 deletions(-) delete mode 100644 openair1/PHY/LTE_ESTIMATION/filt12_32.h create mode 100644 openair1/PHY/LTE_ESTIMATION/filt16_32.h diff --git a/openair1/PHY/LTE_ESTIMATION/filt12_32.h b/openair1/PHY/LTE_ESTIMATION/filt12_32.h deleted file mode 100644 index a5dfdb0365..0000000000 --- a/openair1/PHY/LTE_ESTIMATION/filt12_32.h +++ /dev/null @@ -1,86 +0,0 @@ -short filt12_l0[12] = { -16384,12288,8192,4096,0,0,0,0,0,0,0,0}; - -short filt12_r0[12] = { -0,0,0,0,0,4096,8192,12288,16384,20480,24576,28672}; - -short filt12_m0[12] = { -0,4096,8192,12288,16384,12288,8192,4096,0,-4096,-8192,-12288}; - -short filt12_l1[12] = { -20480,16384,12288,8192,4096,0,0,0,0,0,0,0}; - -short filt12_r1[12] = { -0,0,0,0,0,0,4096,8192,12288,16384,20480,24576}; - -short filt12_m1[12] = { --4096,0,4096,8192,12288,16384,12288,8192,4096,0,-4096,-8192}; - -short filt12_l2[12] = { -24576,20480,16384,12288,8192,4096,0,0,0,0,0,0}; - -short filt12_r2[12] = { -0,0,0,0,0,0,0,4096,8192,12288,16384,20480}; - -short filt12_m2[12] = { --8192,-4096,0,4096,8192,12288,16384,12288,8192,4096,0,-4096}; - -short filt12_l3[12] = { -28672,24576,20480,16384,12288,8192,4096,0,0,0,0,0}; - -short filt12_r3[12] = { -0,0,0,0,0,0,0,0,4096,8192,12288,16384}; - -short filt12_m3[12] = { --12288,-8192,-4096,0,4096,8192,12288,16384,12288,8192,4096,0}; - -short filt12_l0_dc[12] = { -16384,12288,8192,4096,0,0,0,0,0,0,0,0}; - -short filt12_r0_dc[12] = { -0,0,0,0,0,3276,9830,13107,16384,19660,22937,26214}; - -short filt12_m0_dc[12] = { -0,4096,8192,12288,16384,13107,6553,3276,0,-3277,-6554,-9831}; - -short filt12_l1_dc[12] = { -16384,12288,8192,4096,0,-4096,0,0,0,0,0,0}; - -short filt12_r1_dc[12] = { -0,0,0,0,0,0,6553,9830,13107,16384,19660,22937}; - -short filt12_m1_dc[12] = { --4096,0,4096,8192,12288,16384,9830,6553,3276,0,-3277,-6554}; - -short filt12_l2_dc[12] = { -26214,22937,19660,16384,13107,9830,6553,0,0,0,0,0}; - -short filt12_r2_dc[12] = { -0,0,0,0,0,0,0,4096,8192,12288,16384,20480}; - -short filt12_m2_dc[12] = { --6554,-3277,0,3276,6553,6553,16384,12288,8192,4096,0,-4096}; - -short filt12_l3_dc[12] = { -26214,22937,19660,16384,13107,9830,3276,0,0,0,0,0}; - -short filt12_r3_dc[12] = { -0,0,0,0,0,0,0,0,4096,8192,12288,16384}; - -short filt12_m3_dc[12] = { --9831,-6554,-3277,0,3276,6553,9830,16384,12288,8192,4096,0}; - -short filt12_1[12] = { -16384,16384,16384,16384,16384,16384,16384,16384,16384,16384,16384,16384}; - -short filt12_2l0[12] = { -16384,12288,8192,4096,-4096,0,0,0,0,0,0,0}; - -short filt12_2r0[12] = { -0,4096,8192,12288,16384,20480,0,0,0,0,0,0}; - -short filt12_2l1[12] = { -20480,16384,12288,8192,4096,0,0,0,0,0,0,0}; - -short filt12_2r1[12] = { --4096,0,4096,8192,12288,16384,0,0,0,0,0,0}; diff --git a/openair1/PHY/LTE_ESTIMATION/filt16_32.h b/openair1/PHY/LTE_ESTIMATION/filt16_32.h new file mode 100644 index 0000000000..3487fd3466 --- /dev/null +++ b/openair1/PHY/LTE_ESTIMATION/filt16_32.h @@ -0,0 +1,86 @@ +short filt16_l0[16] = { +16384,12288,8192,4096,0,0,0,0,0,0,0,0,0,0,0,0}; + +short filt16_r0[16] = { +0,0,0,0,0,4096,8192,12288,16384,20480,24576,28672,0,0,0,0}; + +short filt16_m0[16] = { +0,4096,8192,12288,16384,12288,8192,4096,0,-4096,-8192,-12288,0,0,0,0}; + +short filt16_l1[16] = { +20480,16384,12288,8192,4096,0,0,0,0,0,0,0,0,0,0,0}; + +short filt16_r1[16] = { +0,0,0,0,0,0,4096,8192,12288,16384,20480,24576,0,0,0,0}; + +short filt16_m1[16] = { +-4096,0,4096,8192,12288,16384,12288,8192,4096,0,-4096,-8192,0,0,0,0}; + +short filt16_l2[16] = { +24576,20480,16384,12288,8192,4096,0,0,0,0,0,0,0,0,0,0}; + +short filt16_r2[16] = { +0,0,0,0,0,0,0,4096,8192,12288,16384,20480,0,0,0,0}; + +short filt16_m2[16] = { +-8192,-4096,0,4096,8192,12288,16384,12288,8192,4096,0,-4096,0,0,0,0}; + +short filt16_l3[16] = { +28672,24576,20480,16384,12288,8192,4096,0,0,0,0,0,0,0,0,0}; + +short filt16_r3[16] = { +0,0,0,0,0,0,0,0,4096,8192,12288,16384,0,0,0,0}; + +short filt16_m3[16] = { +-12288,-8192,-4096,0,4096,8192,12288,16384,12288,8192,4096,0,0,0,0,0}; + +short filt16_l0_dc[16] = { +16384,12288,8192,4096,0,0,0,0,0,0,0,0,0,0,0,0}; + +short filt16_r0_dc[16] = { +0,0,0,0,0,3276,9830,13107,16384,19660,22937,26214,0,0,0,0}; + +short filt16_m0_dc[16] = { +0,4096,8192,12288,16384,13107,6553,3276,0,-3277,-6554,-9831,0,0,0,0}; + +short filt16_l1_dc[16] = { +16384,12288,8192,4096,0,-4096,0,0,0,0,0,0,0,0,0,0}; + +short filt16_r1_dc[16] = { +0,0,0,0,0,0,6553,9830,13107,16384,19660,22937,0,0,0,0}; + +short filt16_m1_dc[16] = { +-4096,0,4096,8192,12288,16384,9830,6553,3276,0,-3277,-6554,0,0,0,0}; + +short filt16_l2_dc[16] = { +26214,22937,19660,16384,13107,9830,6553,0,0,0,0,0,0,0,0,0}; + +short filt16_r2_dc[16] = { +0,0,0,0,0,0,0,4096,8192,12288,16384,20480,0,0,0,0}; + +short filt16_m2_dc[16] = { +-6554,-3277,0,3276,6553,6553,16384,12288,8192,4096,0,-4096,0,0,0,0}; + +short filt16_l3_dc[16] = { +26214,22937,19660,16384,13107,9830,3276,0,0,0,0,0,0,0,0,0}; + +short filt16_r3_dc[16] = { +0,0,0,0,0,0,0,0,4096,8192,12288,16384,0,0,0,0}; + +short filt16_m3_dc[16] = { +-9831,-6554,-3277,0,3276,6553,9830,16384,12288,8192,4096,0,0,0,0,0}; + +short filt16_1[16] = { +16384,16384,16384,16384,16384,16384,16384,16384,16384,16384,16384,16384}; + +short filt16_2l0[16] = { +16384,12288,8192,4096,-4096,0,0,0,0,0,0,0,0,0,0,0}; + +short filt16_2r0[16] = { +0,4096,8192,12288,16384,20480,0,0,0,0,0,0,0,0,0,0}; + +short filt16_2l1[16] = { +20480,16384,12288,8192,4096,0,0,0,0,0,0,0,0,0,0,0}; + +short filt16_2r1[16] = { +-4096,0,4096,8192,12288,16384,0,0,0,0,0,0,0,0,0,0}; From 3a5eda8cae87a53a5d4d1110d4614fb56acbdc8a Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Wed, 9 Sep 2015 11:37:24 +0200 Subject: [PATCH 004/132] cleanness and comments --- .../lte_dl_bf_channel_estimation.c | 23 +-- openair1/PHY/LTE_REFSIG/defs.h | 14 +- openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c | 158 +++++++++--------- openair1/PHY/LTE_REFSIG/lte_gold.c | 14 +- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 10 +- .../PHY/LTE_TRANSPORT/dlsch_demodulation.c | 13 +- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 22 +-- openair1/PHY/LTE_TRANSPORT/proto.h | 21 +++ 8 files changed, 142 insertions(+), 133 deletions(-) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c index 457aaeed56..5feb1aaeda 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -46,7 +46,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, unsigned char aarx,l,lprime,nsymb,skip_half=0,sss_symb,pss_symb=0,rb_alloc_ind,harq_pid,uespec_pilots=0; int beamforming_mode, ch_offset; uint8_t subframe; - int8_t uespec_nushift, uespec_poffset=0, pil_offset; + int8_t uespec_nushift, uespec_poffset=0, pil_offset=0; uint8_t pilot0,pilot1,pilot2,pilot3; short ch[2], *pil, *rxF, *dl_bf_ch, *dl_bf_ch_prev; @@ -81,7 +81,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, subframe = Ns>>1; - if (beamforming_mode==7) { + // if (beamforming_mode==7) { //generate ue specific pilots lprime = symbol/3-1; lte_dl_ue_spec_rx(phy_vars_ue,uespec_pilot,Ns,5,lprime,0,dlsch0_harq->nb_rb); @@ -161,11 +161,12 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, f2r = filt16_2r1; break; } - } + // beamforming mode extension + /* } else if (beamforming_mode==0) msg("lte_dl_bf_channel_estimation:No beamforming is performed.\n"); else - msg("lte_dl_bf_channel_estimation:Beamforming mode not supported yet.\n"); + msg("lte_dl_bf_channel_estimation:Beamforming mode not supported yet.\n");*/ l=symbol; @@ -183,20 +184,22 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, for (aarx=0; aarxnb_antennas_rx; aarx++) { rxF = (short *)&rxdataF[aarx][pil_offset + frame_parms->first_carrier_offset + symbol*frame_parms->ofdm_symbol_size]; - pil = (short*)uespec_pilot; + pil = (short *)uespec_pilot; dl_bf_ch = (short *)&dl_bf_ch_estimates[aarx][ch_offset]; memset(dl_bf_ch,0,4*(frame_parms->ofdm_symbol_size)); //memset(dl_bf_ch,0,2*(frame_parms->ofdm_symbol_size)); - if (phy_vars_ue->high_speed_flag==0) // multiply previous channel estimate by ch_est_alpha - if (frame_parms->Ncp==0) + if (phy_vars_ue->high_speed_flag==0) { + // multiply previous channel estimate by ch_est_alpha + if (frame_parms->Ncp==0){ multadd_complex_vector_real_scalar(dl_bf_ch-(frame_parms->ofdm_symbol_size<<1), phy_vars_ue->ch_est_alpha,dl_bf_ch-(frame_parms->ofdm_symbol_size<<1), 1,frame_parms->ofdm_symbol_size); - else + } else { msg("lte_dl_bf_channel_estimation: beamforming channel estimation not supported for TM7 Extended CP.\n"); // phy_vars_ue->ch_est_beta should be defined equaling 1/3 - + } + } //estimation and interpolation if ((frame_parms->N_RB_DL&1) == 0) // even number of RBs @@ -215,7 +218,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, // For second half of RBs skip DC carrier if (rb==(frame_parms->N_RB_DL>>1)) { - rxF = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))]; + rxF = (short *)&rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))]; } if (rb_alloc_ind==1) { diff --git a/openair1/PHY/LTE_REFSIG/defs.h b/openair1/PHY/LTE_REFSIG/defs.h index 6d52d4a5f7..1ced7f52e8 100644 --- a/openair1/PHY/LTE_REFSIG/defs.h +++ b/openair1/PHY/LTE_REFSIG/defs.h @@ -91,14 +91,14 @@ int lte_dl_cell_spec(PHY_VARS_eNB *phy_vars_eNB, @param p antenna index @param SS_flag Flag to indicate special subframe */ -int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, +/*int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, uint8_t UE_id, mod_sym_t *output, short amp, uint8_t Ns, uint8_t lprime, uint8_t p, - int SS_flag); + int SS_flag);*/ /*! \brief This function generates the MBSFN reference signal sequence (36-211, Sec 6.10.1.2) @param phy_vars_eNB Pointer to eNB variables @@ -128,6 +128,16 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *phy_vars_ue, unsigned char l, unsigned char p); +/*!\brief This function generates the ue-specific reference signal + * sequence (36-211, Sec 6.10.3.1) for beamforming channel estimation upon reception +@param phy_vars_ue Pointer to UE variables +@param output Output vector for OFDM symbol (Frequency Domain) +@param Ns Slot number (0..19) +@param p antenna port intex +@param lprime symbol (0,1) +@param SS_flag Flag to indicate special subframe +@param nRB_PDSCH number of allocated PDSCH RBs +*/ int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, mod_sym_t *output, unsigned char Ns, diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c index 505a6e19cd..d029f959ed 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c @@ -52,6 +52,7 @@ int Wbar_NCP[8][4] = {{1,1,1,1},{1,-1,1,-1},{1,1,1,1},{1,-1,1,-1},{1,1,-1,-1},{-1,-1,1,1},{1,-1,-1,1},{-1,1,1,-1}}; +/* int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, uint8_t UE_id, mod_sym_t *output, @@ -62,7 +63,7 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, int SS_flag) { - /* mod_sym_t qpsk[4],nqpsk[4]; + mod_sym_t qpsk[4],nqpsk[4]; int16_t k=0,a; int mprime,ind,ind_dword,ind_qpsk_symb; unsigned nushift,kprime; @@ -126,8 +127,9 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, LOG_E(PHY,"Illegal p %d UE specific pilots\n",p); } - return(0);*/ + return(0); } +*/ int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, @@ -139,7 +141,6 @@ int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, uint16_t nRB_PDSCH) { mod_sym_t qpsk[4],nqpsk[4],*qpsk_p,*output_p; - int16_t a; int w,mprime,ind,l,ind_dword,ind_qpsk_symb,nPRB; short pamp; @@ -172,126 +173,123 @@ int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, output_p = output; - //for (lprime=0; lprime<2; lprime++) { + ind = 3*lprime*phy_vars_ue->lte_frame_parms.N_RB_DL; + l = lprime + ((Ns&1)<<1); - ind = 3*lprime*phy_vars_ue->lte_frame_parms.N_RB_DL; - l = lprime + ((Ns&1)<<1); + // loop over pairs of PRBs, this is the periodicity of the W_bar_NCP sequence + // unroll the computations for the 6 pilots, select qpsk or nqpsk as function of W_bar_NCP + for (nPRB=0; nPRBlte_frame_parms.N_RB_DL; nPRB+=2) { - // loop over pairs of PRBs, this is the periodicity of the W_bar_NCP sequence - // unroll the computations for the 6 pilots, select qpsk or nqpsk as function of W_bar_NCP - for (nPRB=0; nPRBlte_frame_parms.N_RB_DL; nPRB+=2) { - - // First pilot - w = Wbar_NCP[p-7][l]; - qpsk_p = (w==1) ? qpsk : nqpsk; + // First pilot + w = Wbar_NCP[p-7][l]; + qpsk_p = (w==1) ? qpsk : nqpsk; - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; - *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; #ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,ind_dword,ind_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); #endif - output_p++; - ind++; + output_p++; + ind++; - w = Wbar_NCP[p-7][3-l]; - qpsk_p = (w==1) ? qpsk : nqpsk; + w = Wbar_NCP[p-7][3-l]; + qpsk_p = (w==1) ? qpsk : nqpsk; - // Second pilot - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; + // Second pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; - *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; #ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,ind_dword,ind_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); #endif - output_p++; - ind++; + output_p++; + ind++; - w = Wbar_NCP[p-7][l]; - qpsk_p = (w==1) ? qpsk : nqpsk; - // Third pilot - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; + w = Wbar_NCP[p-7][l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + // Third pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; - *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; #ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,ind_dword,ind_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); #endif - output_p++; - ind++; + output_p++; + ind++; - // Fourth pilot - w = Wbar_NCP[p-7][3-l]; - qpsk_p = (w==1) ? qpsk : nqpsk; + // Fourth pilot + w = Wbar_NCP[p-7][3-l]; + qpsk_p = (w==1) ? qpsk : nqpsk; - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; - *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; #ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,ind_dword,ind_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); #endif - output_p++; - ind++; + output_p++; + ind++; - w = Wbar_NCP[p-7][l]; - qpsk_p = (w==1) ? qpsk : nqpsk; + w = Wbar_NCP[p-7][l]; + qpsk_p = (w==1) ? qpsk : nqpsk; - // Fifth pilot - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; + // Fifth pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; - *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; #ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,ind_dword,ind_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); #endif - output_p++; - ind++; + output_p++; + ind++; - w = Wbar_NCP[p-7][3-l]; - qpsk_p = (w==1) ? qpsk : nqpsk; - // Sixth pilot - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; + w = Wbar_NCP[p-7][3-l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + // Sixth pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; - *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; #ifdef DEBUG_DL_UESPEC - LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", - Ns,l,m,ind_dword,ind_qpsk_symb); - LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); #endif - output_p++; - ind++; - } - // } + output_p++; + ind++; + } } else { LOG_E(PHY,"Special subframe not supported for UE specific pilots yet\n"); } @@ -301,7 +299,6 @@ int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, output_p = output; if (phy_vars_ue->lte_frame_parms.Ncp == NORMAL) { - //for (lprime=0;lprime<4;lprime++) { for (mprime=0;mprime<3*nRB_PDSCH;mprime++) { ind = 3*lprime*nRB_PDSCH+mprime; @@ -310,10 +307,9 @@ int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, *output_p = qpsk[(phy_vars_ue->lte_gold_uespec_port5_table[Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; //printf("lprime=%d,ind=%d,Ns=%d,output_p=(%d,%d)\n",lprime,ind,Ns,((short *)&output_p[0])[0],((short *)&output_p[0])[1]); - *output_p++; + output_p++; } - // } } } } else { diff --git a/openair1/PHY/LTE_REFSIG/lte_gold.c b/openair1/PHY/LTE_REFSIG/lte_gold.c index cdf78b6844..5861e314ff 100644 --- a/openair1/PHY/LTE_REFSIG/lte_gold.c +++ b/openair1/PHY/LTE_REFSIG/lte_gold.c @@ -145,30 +145,27 @@ void lte_gold_ue_spec(LTE_DL_FRAME_PARMS *frame_parms,uint32_t lte_gold_uespec_t void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_t Nid_cell, uint16_t n_rnti) { - unsigned char ns,l; + unsigned char ns; unsigned int n,x1,x2; for (ns=0; ns<20; ns++) { - //for (l=0; l<2; l++) { - - x2 = ((((ns>>1)+1)*((Nid_cell<<1)+1))<<16) + n_rnti; //x2 = frame_parms->Ncp + (Nid_cell<<1) + (1+(Nid_cell<<1))*(1 + (3*l) + (7*(1+ns))); //cinit //n = 0 - // printf("cinit (ns %d, l %d) => %d\n",ns,l,x2); + //printf("cinit (ns %d, l %d) => %d\n",ns,l,x2); x1 = 1+ (1<<31); x2=x2 ^ ((x2 ^ (x2>>1) ^ (x2>>2) ^ (x2>>3))<<31); - // skip first 50 double words (1600 bits) + //skip first 50 double words (1600 bits) //printf("n=0 : x1 %x, x2 %x\n",x1,x2); for (n=1; n<50; n++) { x1 = (x1>>1) ^ (x1>>4); x1 = x1 ^ (x1<<31) ^ (x1<<28); x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4); x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28); - // printf("x1 : %x, x2 : %x\n",x1,x2); + //printf("x1 : %x, x2 : %x\n",x1,x2); } for (n=0; n<38; n++) { @@ -177,10 +174,9 @@ void lte_gold_ue_spec_port5(uint32_t lte_gold_uespec_port5_table[20][38],uint16_ x2 = (x2>>1) ^ (x2>>2) ^ (x2>>3) ^ (x2>>4); x2 = x2 ^ (x2<<31) ^ (x2<<30) ^ (x2<<29) ^ (x2<<28); lte_gold_uespec_port5_table[ns][n] = x1^x2; - // printf("n=%d : c %x\n",n,x1^x2); + //printf("n=%d : c %x\n",n,x1^x2); } - // } } } diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index db95c2362c..a13f6a100e 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -259,7 +259,7 @@ int dlsch_encoding(unsigned char *a, unsigned char mod_order; unsigned int Kr=0,Kr_bytes,r,r_offset=0; unsigned short m=dlsch->harq_processes[harq_pid]->mcs; - uint8_t transmission_mode_7to9=0; + uint8_t beamforming_mode=0; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING, VCD_FUNCTION_IN); @@ -268,12 +268,12 @@ int dlsch_encoding(unsigned char *a, mod_order = get_Qm(dlsch->harq_processes[harq_pid]->mcs); if(dlsch->harq_processes[harq_pid]->mimo_mode == TM7) - transmission_mode_7to9 = 7; + beamforming_mode = 7; else if(dlsch->harq_processes[harq_pid]->mimo_mode == TM8) - transmission_mode_7to9 = 8; + beamforming_mode = 8; else if(dlsch->harq_processes[harq_pid]->mimo_mode == TM9_10) - transmission_mode_7to9 = 9; - G = get_G(frame_parms,nb_rb,dlsch->harq_processes[harq_pid]->rb_alloc,mod_order,dlsch->harq_processes[harq_pid]->Nl,num_pdcch_symbols,frame,subframe,transmission_mode_7to9); + beamforming_mode = 9; + G = get_G(frame_parms,nb_rb,dlsch->harq_processes[harq_pid]->rb_alloc,mod_order,dlsch->harq_processes[harq_pid]->Nl,num_pdcch_symbols,frame,subframe,beamforming_mode); // if (dlsch->harq_processes[harq_pid]->Ndi == 1) { // this is a new packet diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index 89dadbbd1c..c822543477 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -338,8 +338,6 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, aarx = frame_parms->nb_antennas_rx; if (dlsch0_harq->mimo_modedl_ch_estimates_ext[0][300]); - printf("dlsch compensation: symbol %d, dl_estimates_ext[0][2400] %d \n",symbol, lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[0][2400]); dlsch_channel_compensation(lte_ue_pdsch_vars[eNB_id]->rxdataF_ext, lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, @@ -557,8 +555,6 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, 1); } } else if (dlsch0_harq->mimo_mode==TM7) { //TM7 - printf("dlsch compensation: symbol %d, dl_bf_estimates_ext[0][300] %d \n",symbol, *(short*)<e_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext[0][300]); - printf("dlsch compensation: symbol %d, dl_bf_estimates_ext[0][2400] %d \n",symbol, lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext[0][2400]); dlsch_channel_compensation(lte_ue_pdsch_vars[eNB_id]->rxdataF_ext, lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext, @@ -4236,9 +4232,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, unsigned short rb,nb_rb=0; unsigned char rb_alloc_ind; unsigned char i,aarx,l,nsymb,skip_half=0,sss_symb,pss_symb=0; - int *dl_ch0,*dl_ch0_ext,*rxF,*rxF_ext,*rxF_uespec; + int *dl_ch0,*dl_ch0_ext,*rxF,*rxF_ext; - unsigned char symbol_mod,pilots=0,uespec_pilots=0,j=0,k=0,poffset=0,uespec_poffset=0; + unsigned char symbol_mod,pilots=0,uespec_pilots=0,j=0,poffset=0,uespec_poffset=0; int8_t uespec_nushift = frame_parms->Nid_cell%3; symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; @@ -4340,7 +4336,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, } else if (pilots==0 && uespec_pilots==1) { j=0; - k=0; + for (i=0; i<12; i++){ if (frame_parms->Ncp==0){ @@ -4519,7 +4515,6 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, } else if(pilots==0 && uespec_pilots==1){ //printf("Extracting with uespec pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half); j=0; - k=0; if (skip_half==1) { if (frame_parms->Ncp==0){ @@ -4685,7 +4680,6 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, rxF_ext+=10; } else if(pilots==0 && uespec_pilots==1) { j=0; - k=0; for (i=0; i<6; i++) { if (frame_parms->Ncp==0){ @@ -4881,7 +4875,6 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, } } else if(pilots==0 && uespec_pilots==1) { j=0; - k=0; if (skip_half==1) { if (frame_parms->Ncp==0){ diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 2d769a6ccf..5366efcc12 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -916,15 +916,12 @@ break; ((int16_t*)&tmp_sample1)[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; *jj = *jj + 1; - //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); for (aa=0; aa>15); ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[0])>>15); - /* ((int16_t*)&txdataF[aa][tti_offset])[0] = ((int16_t*)&tmp_sample1)[0]; - ((int16_t*)&txdataF[aa][tti_offset])[1] = ((int16_t*)&tmp_sample1)[1]; */ } //printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); @@ -1028,7 +1025,6 @@ break; ind_qpsk_symb = ind&0xf; tmp_sample1 = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; - //printf("lprime=%d,nb_rb=%d,mprime2=%d,ind=%d,Ns=%d,tmp_sample1=(%d,%d)\n",lprime,dlsch0_harq->nb_rb,mprime2,ind,Ns,((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((uint16_t*)&beamforming_weights[re][aa])[0])>>15); ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); @@ -1037,12 +1033,12 @@ break; // ((int16_t*)&txdataF[aa][tti_offset])[0] = 0xffff; // ((int16_t*)&txdataF[aa][tti_offset])[1] = 0xffff; + //printf("lprime=%d,nb_rb=%d,mprime2=%d,ind=%d,Ns=%d\n",lprime,dlsch0_harq->nb_rb,mprime2,ind,Ns); + //printf("tmp_sample1=(%d,%d)\n",((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); + //printf("beamforing_weights[%d][%d]=(%d,%d)\n",re,aa,((int16_t*)&beamforming_weights[re][aa])[0],((int16_t*)&beamforming_weights[re][aa])[1]); + //printf("txdataF[%d][%d]= (%d,%d)\n ",aa,tti_offset,((int16_t*)&txdataF[aa][tti_offset])[0],((int16_t*)&txdataF[aa][tti_offset])[1]); - //printf("tmp_sample1=%d+i%d\n",((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); - //printf("beamforing_weights[%d][%d]=%d+i%d\n",re,aa,((int16_t*)&beamforming_weights[re][aa])[0],((int16_t*)&beamforming_weights[re][aa])[1]); - //printf("txdataF[%d][%d]= %d+i%d\n ",aa,tti_offset,((int16_t*)&txdataF[aa][tti_offset])[0],((int16_t*)&txdataF[aa][tti_offset])[1]); - - mprime2 = mprime2++; + mprime2++; } } @@ -1284,7 +1280,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, uint16_t l,rb,re_offset; uint32_t rb_alloc_ind; uint32_t *rb_alloc = dlsch0_harq->rb_alloc; - uint8_t pilots=0,ue_spec_rs=0; + uint8_t pilots=0; uint8_t skip_dc,skip_half; uint8_t mod_order0 = get_Qm(dlsch0_harq->mcs); uint8_t mod_order1 = 0; @@ -1293,7 +1289,6 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, int16_t qam16_table_a1[4],qam64_table_a1[8],qam16_table_b1[4],qam64_table_b1[8]; int16_t *qam_table_s0,*qam_table_s1; MIMO_mode_t mimo_mode = dlsch0_harq->mimo_mode; - uint8_t beamforming_mode = 0; int32_t **beamforming_weights_RB = beamforming_weights; uint8_t mprime=0,Ns; int8_t lprime=-1; @@ -1377,7 +1372,6 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, } if(mimo_mode==TM7){ //36.211 V8.6.0 2009-03 - beamforming_mode = 7; mprime = 0; if (frame_parms->Ncp==0) { // normal prefix if (l==12) @@ -1400,10 +1394,6 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, else lprime=-1; } - }else if(mimo_mode==TM8){ - beamforming_mode = 8; - }else if(mimo_mode==TM9_10){ - beamforming_mode = 9; } Ns = 2*subframe_offset+(l>=(nsymb>>1)); diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 5c3db65afc..af67b54a96 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -921,6 +921,27 @@ uint16_t dlsch_extract_rbs_dual(int32_t **rxdataF, uint32_t high_speed_flag, LTE_DL_FRAME_PARMS *frame_parms); +/** \fn dlsch_extract_rbs_TM7(int32_t **rxdataF, + int32_t **dl_bf_ch_estimates, + int32_t **rxdataF_ext, + int32_t **dl_bf_ch_estimates_ext, + uint32_t *rb_alloc, + uint8_t symbol, + uint8_t subframe, + uint32_t high_speed_flag, + LTE_DL_FRAME_PARMS *frame_parms) + \brief This function extracts the received resource blocks, both channel estimates and data symbols, + for the current allocation and for single antenna eNB transmission. + @param rxdataF Raw FFT output of received signal + @param dl_bf_ch_estimates Beamforming channel estimates of current slot + @param rxdataF_ext FFT output for RBs in this allocation + @param dl_bf_ch_estimates_ext Beamforming channel estimates for RBs in this allocation + @param rb_alloc RB allocation vector + @param symbol Symbol to extract + @param subframe Subframe number + @param high_speed_flag + @param frame_parms Pointer to frame descriptor +*/ uint16_t dlsch_extract_rbs_TM7(int32_t **rxdataF, int32_t **dl_bf_ch_estimates, int32_t **rxdataF_ext, From 70e1e0cecfbfcbfd94204b1b186198d9cb76262a Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Wed, 9 Sep 2015 11:57:44 +0200 Subject: [PATCH 005/132] more cleanness --- openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index c822543477..fdc1ae846c 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -255,8 +255,6 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, phy_vars_ue->high_speed_flag, frame_parms); - printf("dlsch extract: symbol %d, dl_bf_estimates_ext[0][300] %d \n",symbol, lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext[0][300]); - } else if(beamforming_mode>7) { LOG_W(PHY,"dlsch_demodulation:beamforming mode not supported yet.\n"); } @@ -4278,7 +4276,6 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, rxF_ext = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; rxF = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))]; //printf("symbol:%d, (symbol-1)/3:%d\n",symbol,(symbol-1)/3); - //rxF_uespec = &rxdataF_uespec_pilots[aarx][(symbol-1)/3*frame_parms->N_RB_DL*(3+frame_parms->Ncp)]; //printf("symbol, rxF_uespec offset:%d\n",symbol,(symbol-1)/3*frame_parms->N_RB_DL*(3+frame_parms->Ncp)); if ((frame_parms->N_RB_DL&1) == 0) // even number of RBs @@ -4662,7 +4659,6 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=((frame_parms->nushift+poffset)%6)) { dl_ch0_ext[j]=dl_ch0[i]; rxF_ext[j++]=rxF[i]; - // printf("**extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); } } From aca66630ffc8681c2ddb8f9ab7c95cab76eb0385 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Wed, 23 Sep 2015 16:33:18 +0200 Subject: [PATCH 006/132] pass physical antenna number as an dlsim option --- openair1/SIMULATION/LTE_PHY/dlsim.c | 30 +++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 4d382c64ca..624fae921e 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -374,7 +374,7 @@ int main(int argc, char **argv) num_layers = 1; perfect_ce = 0; - while ((c = getopt (argc, argv, "ahdpZDe:m:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:Y")) != -1) { + while ((c = getopt (argc, argv, "ahdpZDe:m:n:o:s:f:t:c:g:r:F:x:y:q:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:Y")) != -1) { switch (c) { case 'a': awgn_flag = 1; @@ -539,28 +539,29 @@ int main(int argc, char **argv) exit(-1); } - if (transmission_mode>1 && transmission_mode<7) { + if (transmission_mode>1 && transmission_mode<7){ n_tx = 2; n_tx_phy = n_tx; } - if (transmission_mode>=7){ - n_tx = 1; - n_tx_phy = 1; - n_rx = 1; - } break; case 'y': n_tx=atoi(optarg); - if (transmission_mode<7){ - n_tx_phy = n_tx; + if ((n_tx==0) || ((n_tx>2))) { + msg("Unsupported number of tx antennas ports %d\n",n_tx); + exit(-1); + } - if ((n_tx==0) || ((n_tx>2))) { - msg("Unsupported number of tx antennas %d\n",n_tx); - exit(-1); - } + break; + + case 'q': + n_tx_phy=atoi(optarg); + + if (transmission_mode<7 && n_tx_phy!=n_tx) { + msg("For transmission mode below TM7, physical antenna number should be the same as antenna port number.\n"); + exit(-1); } break; @@ -668,7 +669,8 @@ int main(int argc, char **argv) printf("-g [A:M] Use 3GPP 25.814 SCM-A/B/C/D('A','B','C','D') or 36-101 EPA('E'), EVA ('F'),ETU('G') models (ignores delay spread and Ricean factor), Rayghleigh8 ('H'), Rayleigh1('I'), Rayleigh1_corr('J'), Rayleigh1_anticorr ('K'), Rice8('L'), Rice1('M')\n"); printf("-F forgetting factor (0 new channel every trial, 1 channel constant\n"); printf("-x Transmission mode (1,2,6,7 for the moment)\n"); - printf("-y Number of TX antennas used in eNB\n"); + printf("-y Number of TX antennas ports used in eNB\n"); + printf("-q Number of physical TX antennas used in eNB\n"); printf("-z Number of RX antennas used in UE\n"); printf("-t MCS of interfering UE\n"); printf("-R Number of HARQ rounds (fixed)\n"); From 3353735f3c7e5e6c258fe6165cd303a13f8c29a1 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 25 Sep 2015 11:32:07 +0200 Subject: [PATCH 007/132] beamforming weights modification --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 8 ++++---- openair1/SIMULATION/LTE_PHY/dlsim.c | 10 +++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 5366efcc12..f2ec6afdfc 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -918,10 +918,10 @@ break; //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); for (aa=0; aa>15); - ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[0])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); } //printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 624fae921e..0e993b1fe5 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -752,7 +752,8 @@ int main(int argc, char **argv) for(re=0;re<12*N_RB_DL;re++){ beamforming_weights[re]=(int32_t *)malloc(n_tx_phy*sizeof(int32_t)); for(aa=0;aachF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP); ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)( eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP); + + if (transmission_mode == 7){ + ((int16_t *)PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)( + eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP); + ((int16_t *)PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)( + eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP); + } } } } From fdea4022d191ecce45d6c87d67830b56bf1d495d Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 25 Sep 2015 18:14:22 +0200 Subject: [PATCH 008/132] bug fixed for more than 1 physical antenna --- .../lte_dl_bf_channel_estimation.c | 15 ++++++------ .../lte_dl_channel_estimation.c | 3 --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 24 +++++++++---------- openair1/SIMULATION/LTE_PHY/dlsim.c | 21 +++++++++------- 4 files changed, 32 insertions(+), 31 deletions(-) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c index 5feb1aaeda..e36a164468 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -229,7 +229,6 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); multadd_real_vector_complex_scalar(fl,ch,dl_bf_ch,16); - //printf("rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); @@ -378,13 +377,13 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); multadd_real_vector_complex_scalar(fm,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[8],rxF[9],pil[0],pil[1],ch[0],ch[1]); pil+=2; ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); multadd_real_vector_complex_scalar(fr,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[16],rxF[17],pil[0],pil[1],ch[0],ch[1]); pil+=2; } @@ -604,19 +603,19 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); multadd_real_vector_complex_scalar(fl,ch,dl_bf_ch,16); - // printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); pil+=2; ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); multadd_real_vector_complex_scalar(fm,ch,dl_bf_ch,16); - // printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[8],rxF[9],pil[0],pil[1],ch[0],ch[1]); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[8],rxF[9],pil[0],pil[1],ch[0],ch[1]); pil+=2; ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); multadd_real_vector_complex_scalar(fr,ch,dl_bf_ch,16); - // printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[16],rxF[17],pil[0],pil[1],ch[0],ch[1]); + //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[16],rxF[17],pil[0],pil[1],ch[0],ch[1]); pil+=2; } @@ -641,13 +640,13 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, if (phy_vars_ue->perfect_ce == 0) { dl_bf_ch = (short *)&dl_bf_ch_estimates[aarx][ch_offset]; - printf("dlsch_bf_ch_est.c:symbol %d, dl_bf_ch (%d,%d)\n",symbol,dl_bf_ch[0],dl_bf_ch[1]); + //printf("dlsch_bf_ch_est.c:symbol %d, dl_bf_ch (%d,%d)\n",symbol,dl_bf_ch[0],dl_bf_ch[1]); if (phy_vars_ue->high_speed_flag == 0) { multadd_complex_vector_real_scalar(dl_bf_ch, 32767-phy_vars_ue->ch_est_alpha, dl_bf_ch-(frame_parms->ofdm_symbol_size<<1),0,frame_parms->ofdm_symbol_size); - printf("dlsch_bf_ch_est.c:symbol %d,dl_bf_ch (%d,%d)\n",symbol,*(dl_bf_ch-512*2),*(dl_bf_ch-512*2+1)); + //printf("dlsch_bf_ch_est.c:symbol %d,dl_bf_ch (%d,%d)\n",symbol,*(dl_bf_ch-512*2),*(dl_bf_ch-512*2+1)); } else { // high_speed_flag == 1 if (beamforming_mode==7) { if (frame_parms->Ncp==0) { diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c index 27e9018477..318d499ccd 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c @@ -42,9 +42,6 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, unsigned char l, unsigned char symbol) { - - - int pilot[2][200] __attribute__((aligned(16))); unsigned char nu,aarx; unsigned short k; diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index f2ec6afdfc..685d77b802 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -1018,18 +1018,20 @@ break; //precoding UE spec RS //printf("precoding UE spec RS\n"); + ind = 3*lprime*dlsch0_harq->nb_rb+mprime2; + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + tmp_sample1 = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; + mprime2++; + for (aa=0; aanb_rb+mprime2; - ind_dword = ind>>4; - ind_qpsk_symb = ind&0xf; - - tmp_sample1 = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; - - ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((uint16_t*)&beamforming_weights[re][aa])[0])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((uint16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((uint16_t*)&beamforming_weights[re][aa])[0])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); + ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); // ((int16_t*)&txdataF[aa][tti_offset])[0] = 0xffff; // ((int16_t*)&txdataF[aa][tti_offset])[1] = 0xffff; @@ -1037,8 +1039,6 @@ break; //printf("tmp_sample1=(%d,%d)\n",((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); //printf("beamforing_weights[%d][%d]=(%d,%d)\n",re,aa,((int16_t*)&beamforming_weights[re][aa])[0],((int16_t*)&beamforming_weights[re][aa])[1]); //printf("txdataF[%d][%d]= (%d,%d)\n ",aa,tti_offset,((int16_t*)&txdataF[aa][tti_offset])[0],((int16_t*)&txdataF[aa][tti_offset])[1]); - - mprime2++; } } diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 0e993b1fe5..39a0095ac3 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -564,6 +564,11 @@ int main(int argc, char **argv) exit(-1); } + if (transmission_mode==7 && (n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=8 && n_tx_phy!=16 && n_tx_phy!=64)) { + msg("For TM7, physical antenna number should be an exponent of 2, maximum 64 antennas supported.\n"); + exit(-1); + } + break; case 'z': @@ -753,7 +758,7 @@ int main(int argc, char **argv) beamforming_weights[re]=(int32_t *)malloc(n_tx_phy*sizeof(int32_t)); for(aa=0;aa>(n_tx_phy>>1); } } @@ -2924,12 +2929,12 @@ PMI_FEEDBACK: } else { for (aarx=0; aarxlte_frame_parms.nb_antennas_rx; aarx++) { if (aa==0) { - r_re[aarx][i] = ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)]); - r_im[aarx][i] = ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)+1]); + r_re[aarx][i] = (double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)]; + r_im[aarx][i] = (double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)+1]; //printf("r[%d][%d]=> %f, %f\n",aarx,i,r_re[aarx][i],r_im[aarx][i]); } else { - r_re[aarx][i] += ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)]); - r_im[aarx][i] += ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)+1]); + r_re[aarx][i] += (double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)]; + r_im[aarx][i] += (double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)+1]; } } @@ -3022,10 +3027,10 @@ PMI_FEEDBACK: // printf("s_re[0][%d]=> %f , r_re[0][%d]=> %f\n",i,s_re[aa][i],i,r_re[aa][i]); /*((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = (short) (r_re[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); - ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = + ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = (short) (r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0));*/ - ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = (short) (r_re[aa][i]); - ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = (short) (r_im[aa][i] + (iqim*r_re[aa][i])); + ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = (short) r_re[aa][i]; + ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = (short) r_im[aa][i]; //printf("rxdata[%d][%d]=> %d, %d\n",aa,subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti+i,r_re[aa][i],r_im[aa][i]); } } From 1a1d843f16dabcfa8740a5e148107f4df73d899d Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 25 Sep 2015 18:34:23 +0200 Subject: [PATCH 009/132] compilation for XFORMS --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 1 - openair1/PHY/TOOLS/lte_phy_scope.c | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 685d77b802..9176f11fae 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -1026,7 +1026,6 @@ break; mprime2++; for (aa=0; aa>15); ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c index 5fdf89f253..0b5bc1c0fa 100644 --- a/openair1/PHY/TOOLS/lte_phy_scope.c +++ b/openair1/PHY/TOOLS/lte_phy_scope.c @@ -468,6 +468,7 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form, int coded_bits_per_codeword = 0; int mcs = 0; unsigned char harq_pid = 0; + int beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]>6 ? phy_vars_ue->transmission_mode[eNB_id] : 0; if (phy_vars_ue->dlsch_ue[eNB_id][0]!=NULL) { harq_pid = phy_vars_ue->dlsch_ue[eNB_id][0]->current_harq_pid; @@ -497,7 +498,8 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form, phy_vars_ue->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl, num_pdcch_symbols, frame, - subframe); + subframe, + beamforming_mode); } else { coded_bits_per_codeword = 0; //frame_parms->N_RB_DL*12*get_Qm(mcs)*(frame_parms->symbols_per_tti); } From e5013e5327608e42fc945dc9b9eb829b859863c8 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 29 Sep 2015 10:34:55 +0200 Subject: [PATCH 010/132] move DL beamforming channel estimation to dlsim top level file --- openair1/PHY/MODULATION/slot_fep.c | 11 ----------- openair1/SIMULATION/LTE_PHY/dlsim.c | 14 +++++++++++++- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c index a7639d9291..5597f3f7fb 100644 --- a/openair1/PHY/MODULATION/slot_fep.c +++ b/openair1/PHY/MODULATION/slot_fep.c @@ -247,17 +247,6 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue, } } - if(phy_vars_ue->transmission_mode[eNB_id] == 7) { - - if(frame_parms->Ncp==0 && ((symbol==3) || (symbol==6) || (symbol==9) || (symbol==12))) - lte_dl_bf_channel_estimation(phy_vars_ue,eNB_id,0,Ns,5,symbol); - - else if(frame_parms->Ncp==1 && ((symbol==4) || (symbol==7) || (symbol==10))) - msg("slot_fep(slot_fep.c):channel estimation not supported yet for TM7 extented CP.\n"); - - } else if(phy_vars_ue->transmission_mode[eNB_id] > 7) { - msg("slot_fep(slot_fep.c):transmission mode not supported yet.\n"); - } } #ifdef DEBUG_FEP diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 39a0095ac3..96c6dfc14e 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -564,7 +564,7 @@ int main(int argc, char **argv) exit(-1); } - if (transmission_mode==7 && (n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=8 && n_tx_phy!=16 && n_tx_phy!=64)) { + if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=8 && n_tx_phy!=16 && n_tx_phy!=64)) { msg("For TM7, physical antenna number should be an exponent of 2, maximum 64 antennas supported.\n"); exit(-1); } @@ -3360,6 +3360,18 @@ PMI_FEEDBACK: } if (dlsch_active == 1) { + + if (transmission_mode==7) { + if (PHY_vars_UE->lte_frame_parms.Ncp==0) { + if ((Ns==(2*subframe) && ((l==3) || (l==6))) || + Ns==(1+(2*subframe)) && ((l==3) || (l==6))) { + lte_dl_bf_channel_estimation(PHY_vars_UE,eNB_id,0,Ns,5,l+7*(Ns%2==1)); + } + } else { + msg("Beamforming channel estimation not supported yet for TM7 extented CP.\n"); + } + } + if ((Ns==(1+(2*subframe))) && (l==0)) {// process PDSCH symbols 1,2,3,4,5,(6 Normal Prefix) if ((transmission_mode == 5) && From d89807b6ebaefe5872fa76e30ef6fc71e82ed22a Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 29 Sep 2015 10:35:47 +0200 Subject: [PATCH 011/132] skip half creterion for PSS RBs --- .../lte_dl_bf_channel_estimation.c | 8 ++--- .../PHY/LTE_TRANSPORT/dlsch_demodulation.c | 31 +++++++------------ 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c index e36a164468..909c7bd12e 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -308,8 +308,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, skip_half=2; } - if ((frame_parms->frame_type == TDD) && - (subframe==6)) { //TDD Subframe 6 + if ((frame_parms->frame_type == TDD) && ((subframe==1)||(subframe==6))) { //TDD Subframe 1 and 6 if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { rb_alloc_ind = 0; } @@ -432,7 +431,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, } } - if ((frame_parms->frame_type == TDD) && (subframe==6)) { + if ((frame_parms->frame_type == TDD) && ((subframe==1)||(subframe==6))) { //PSS if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { rb_alloc_ind = 0; @@ -540,8 +539,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, skip_half=2; } - if ((frame_parms->frame_type == TDD) && - (subframe==6)) { //TDD Subframe 6 + if ((frame_parms->frame_type == TDD) && ((subframe==1)||(subframe==6))) { //TDD Subframe 1 and 6 if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { rb_alloc_ind = 0; } diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index fdc1ae846c..0d7ed4f16d 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -4265,18 +4265,14 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, for (aarx=0; aarxnb_antennas_rx; aarx++) { if (high_speed_flag == 1) - //dl_ch0 = &dl_bf_ch_estimates[aarx][5+(symbol*(frame_parms->ofdm_symbol_size))]; dl_ch0 = &dl_bf_ch_estimates[aarx][symbol*(frame_parms->ofdm_symbol_size)]; else - //dl_ch0 = &dl_bf_ch_estimates[aarx][5]; dl_ch0 = &dl_bf_ch_estimates[aarx][0]; dl_ch0_ext = &dl_bf_ch_estimates_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; rxF_ext = &rxdataF_ext[aarx][symbol*(frame_parms->N_RB_DL*12)]; rxF = &rxdataF[aarx][(frame_parms->first_carrier_offset + (symbol*(frame_parms->ofdm_symbol_size)))]; - //printf("symbol:%d, (symbol-1)/3:%d\n",symbol,(symbol-1)/3); - //printf("symbol, rxF_uespec offset:%d\n",symbol,(symbol-1)/3*frame_parms->N_RB_DL*(3+frame_parms->Ncp)); if ((frame_parms->N_RB_DL&1) == 0) // even number of RBs for (rb=0; rbN_RB_DL; rb++) { @@ -4367,7 +4363,6 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, } else { // Odd number of RBs for (rb=0; rbN_RB_DL>>1; rb++) { - // printf("dlch_ext %d\n",dl_ch0_ext-&dl_ch_estimates_ext[aarx][0]); skip_half=0; if (rb < 32) @@ -4424,8 +4419,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, skip_half=2; } - if ((frame_parms->frame_type == TDD) && - (subframe==6)) { //TDD Subframe 6 + if ((frame_parms->frame_type == TDD) && ((subframe==1)||(subframe==6))) { //TDD Subframe 1 and 6 if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { rb_alloc_ind = 0; } @@ -4441,7 +4435,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, //printf("rb %d/symbol %d pilots %d, uespec_pilots %d, (skip_half %d)\n",rb,l,pilots,uespec_pilots,skip_half); if (pilots==0 && uespec_pilots==0) { - // printf("Extracting w/o pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half); + //printf("Extracting w/o pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half); if (skip_half==1) { memcpy(dl_ch0_ext,dl_ch0,6*sizeof(int)); @@ -4462,13 +4456,14 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, } else { memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); - for (i=0; i<12; i++) + for (i=0; i<12; i++){ rxF_ext[i]=rxF[i]; - + //printf("symbol %d, extract rb %d, re %d => (%d,%d)\n",symbol,rb,i,*(short *)&rxF[i],*(1+(short*)&rxF[i])); + } dl_ch0_ext+=12; rxF_ext+=12; } - } else if (pilots==1 && uespec_pilots==0){ + } else if (pilots==1 && uespec_pilots==0) { // printf("Extracting with pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half); j=0; @@ -4564,7 +4559,6 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ rxF_ext[j] = rxF[i]; dl_ch0_ext[j++] = dl_ch0[i]; - //printf("symbol %d, extract rb %d, re %d => (%d,%d)\n",symbol,rb,i,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); //printf("symbol %d, extract rb %d, re %d, j %d => (%d,%d)\n",symbol,rb,i,j-1,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); } } else{ @@ -4625,8 +4619,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, } } - if ((frame_parms->frame_type == TDD) && - (subframe==6)) { + if ((frame_parms->frame_type == TDD) && ((subframe==1)||(subframe==6))) { //PSS if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { rb_alloc_ind = 0; @@ -4766,21 +4759,19 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb)) skip_half=2; + //PSS if (frame_parms->frame_type == FDD) { - //PSS if (((subframe==0)||(subframe==5)) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { rb_alloc_ind = 0; } - //PSS if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)-3)) && (l==pss_symb)) skip_half=1; else if (((subframe==0)||(subframe==5)) && (rb==((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb)) skip_half=2; } - if ((frame_parms->frame_type == TDD) && - (subframe==6)) { //TDD Subframe 6 + if ((frame_parms->frame_type == TDD) && ((subframe==1)||(subframe==6))) { //TDD Subframe 1 and 6 if ((rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { rb_alloc_ind = 0; } @@ -4814,7 +4805,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, memcpy(dl_ch0_ext,dl_ch0+6,6*sizeof(int)); for (i=0; i<6; i++) - rxF_ext[i]=rxF[(i+6)]; + rxF_ext[i]=rxF[i+6]; dl_ch0_ext+=6; rxF_ext+=6; @@ -4898,7 +4889,7 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if(frame_parms->Ncp==0){ for (i=0; i<6; i++) { if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ - rxF_ext[j]=rxF[(i+6)]; + rxF_ext[j]=rxF[i+6]; dl_ch0_ext[j++]=dl_ch0[i+6]; } } From a6f2310e4b5e6e0dd42d42113c41bc27a2eb550e Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 29 Sep 2015 14:02:57 +0200 Subject: [PATCH 012/132] add beamforming mode as an input parameter of llr computation --- .../PHY/LTE_TRANSPORT/dlsch_demodulation.c | 6 ++- .../PHY/LTE_TRANSPORT/dlsch_llr_computation.c | 46 +++++++++++-------- openair1/PHY/LTE_TRANSPORT/proto.h | 8 +++- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index 0d7ed4f16d..b2e8218b37 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -739,7 +739,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_mag0, symbol,first_symbol_flag,nb_rb, adjust_G2(frame_parms,dlsch0_harq->rb_alloc,4,subframe,symbol), - lte_ue_pdsch_vars[eNB_id]->llr128); + lte_ue_pdsch_vars[eNB_id]->llr128, + beamforming_mode); } else if (i_mod == 2) { dlsch_16qam_qpsk_llr(frame_parms, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0, @@ -785,7 +786,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->dl_ch_magb0, symbol,first_symbol_flag,nb_rb, adjust_G2(frame_parms,dlsch0_harq->rb_alloc,6,subframe,symbol), - lte_ue_pdsch_vars[eNB_id]->llr128); + lte_ue_pdsch_vars[eNB_id]->llr128, + beamforming_mode); } else if (i_mod == 2) { dlsch_64qam_qpsk_llr(frame_parms, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0, diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c index 951e4afcd0..9ff04cb0ec 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c @@ -1,4 +1,5 @@ -/******************************************************************************* +/* +***************************************************************************** OpenAirInterface Copyright(c) 1999 - 2014 Eurecom @@ -663,16 +664,15 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) { if (frame_parms->mode1_flag==0 && beamforming_mode!=7) - len = (nb_rb*8);// - (2*pbch_pss_sss_adjust/3); + len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); else - len = (nb_rb*10);// - (5*pbch_pss_sss_adjust/6); + len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6); } else if((beamforming_mode==7) && (frame_parms->Ncp==0) && (symbol==3 || symbol==6 || symbol==9 || symbol==12)){ - len = (nb_rb*9); + len = (nb_rb*9) - (3*pbch_pss_sss_adjust/4); } else if((beamforming_mode==7) && (frame_parms->Ncp==1) && (symbol==4 || symbol==7 || symbol==10)){ - len = (nb_rb*8); - } - else { - len = (nb_rb*12);// - pbch_pss_sss_adjust; + len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); + } else { + len = (nb_rb*12) - pbch_pss_sss_adjust; } // printf("dlsch_qpsk_llr: symbol %d,nb_rb %d, len %d,pbch_pss_sss_adjust %d\n",symbol,nb_rb,len,pbch_pss_sss_adjust); @@ -702,7 +702,8 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, uint8_t first_symbol_flag, unsigned short nb_rb, uint16_t pbch_pss_sss_adjust, - int16_t **llr32p) + int16_t **llr32p, + uint8_t beamforming_mode) { __m128i *rxF = (__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; @@ -724,12 +725,16 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) { - if (frame_parms->mode1_flag==0) - len = nb_rb*8 - (2*pbch_pss_sss_adjust/3); + if (frame_parms->mode1_flag==0 && beamforming_mode!=7) + len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); else - len = nb_rb*10 - (5*pbch_pss_sss_adjust/6); + len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6); + } else if((beamforming_mode==7) && (frame_parms->Ncp==0) && (symbol==3 || symbol==6 || symbol==9 || symbol==12)){ + len = (nb_rb*9) - (3*pbch_pss_sss_adjust/4); + } else if((beamforming_mode==7) && (frame_parms->Ncp==1) && (symbol==4 || symbol==7 || symbol==10)){ + len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); } else { - len = nb_rb*12 - pbch_pss_sss_adjust; + len = (nb_rb*12) - pbch_pss_sss_adjust; } // update output pointer according to number of REs in this symbol (<<2 because 4 bits per RE) @@ -778,7 +783,8 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, uint8_t first_symbol_flag, unsigned short nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr_save) + short **llr_save, + uint8_t beamforming_mode) { __m128i *rxF = (__m128i*)&rxdataF_comp[0][(symbol*frame_parms->N_RB_DL*12)]; @@ -799,12 +805,16 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, ch_magb = (__m128i*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) { - if (frame_parms->mode1_flag==0) - len = nb_rb*8 - (2*pbch_pss_sss_adjust/3); + if (frame_parms->mode1_flag==0 && beamforming_mode!=7) + len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); else - len = nb_rb*10 - (5*pbch_pss_sss_adjust/6); + len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6); + } else if((beamforming_mode==7) && (frame_parms->Ncp==0) && (symbol==3 || symbol==6 || symbol==9 || symbol==12)){ + len = (nb_rb*9) - (3*pbch_pss_sss_adjust/4); + } else if((beamforming_mode==7) && (frame_parms->Ncp==1) && (symbol==4 || symbol==7 || symbol==10)){ + len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); } else { - len = nb_rb*12 - pbch_pss_sss_adjust; + len = (nb_rb*12) - pbch_pss_sss_adjust; } llr2 = llr; diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index af67b54a96..3879c11db8 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -718,6 +718,7 @@ int32_t dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, @param nb_rb number of RBs for this allocation @param pbch_pss_sss_adjust Adjustment factor in RE for PBCH/PSS/SSS allocations @param llr128p pointer to pointer to symbol in dlsch_llr + @param beamforming_mode beamforming mode */ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, @@ -728,7 +729,8 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, uint8_t first_symbol_flag, uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - int16_t **llr128p); + int16_t **llr128p, + uint8_t beamforming_mode); /** \brief This function generates log-likelihood ratios (decoder input) for single-stream 16QAM received waveforms @@ -741,6 +743,7 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, @param first_symbol_flag @param nb_rb number of RBs for this allocation @param pbch_pss_sss_adjust PBCH/PSS/SSS RE adjustment (in REs) + @param beamforming_mode beamforming mode */ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, int32_t **rxdataF_comp, @@ -751,7 +754,8 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, uint8_t first_symbol_flag, uint16_t nb_rb, uint16_t pbch_pss_sss_adjust, - short **llr_save); + short **llr_save, + uint8_t beamforming_mode); /** \fn dlsch_siso(LTE_DL_FRAME_PARMS *frame_parms, int32_t **rxdataF_comp, From d09d042806e7f8a4159e57973cab78ddbc87d1ab Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 29 Sep 2015 17:00:17 +0200 Subject: [PATCH 013/132] bug fixed for symbols to activate beamforming channel estimation --- openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c | 1 - openair1/SIMULATION/LTE_PHY/dlsim.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c index 909c7bd12e..8b9405b499 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -81,7 +81,6 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, subframe = Ns>>1; - // if (beamforming_mode==7) { //generate ue specific pilots lprime = symbol/3-1; lte_dl_ue_spec_rx(phy_vars_ue,uespec_pilot,Ns,5,lprime,0,dlsch0_harq->nb_rb); diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 96c6dfc14e..1b483b35f6 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -3364,7 +3364,7 @@ PMI_FEEDBACK: if (transmission_mode==7) { if (PHY_vars_UE->lte_frame_parms.Ncp==0) { if ((Ns==(2*subframe) && ((l==3) || (l==6))) || - Ns==(1+(2*subframe)) && ((l==3) || (l==6))) { + Ns==(1+(2*subframe)) && ((l==2) || (l==5))) { lte_dl_bf_channel_estimation(PHY_vars_UE,eNB_id,0,Ns,5,l+7*(Ns%2==1)); } } else { From b6b7bd1c1927adb68d43685093ab5bd979bb6c11 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 1 Oct 2015 17:38:02 +0200 Subject: [PATCH 014/132] comment writing to file line --- openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c index 8b9405b499..faf366c520 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -84,7 +84,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, //generate ue specific pilots lprime = symbol/3-1; lte_dl_ue_spec_rx(phy_vars_ue,uespec_pilot,Ns,5,lprime,0,dlsch0_harq->nb_rb); - write_output("uespec_pilot_rx.m","uespec_pilot",uespec_pilot,300,1,1); + //write_output("uespec_pilot_rx.m","uespec_pilot",uespec_pilot,300,1,1); if (frame_parms->Ncp==0){ if (symbol==3 || symbol==6 || symbol==9 || symbol==12) From dc636f2b44e7f3e8a6089e32af73ebadde68e479 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 1 Oct 2015 17:42:20 +0200 Subject: [PATCH 015/132] calculate channel level for TM7 --- .../PHY/LTE_TRANSPORT/dlsch_demodulation.c | 74 ++++++++++++++++++- openair1/PHY/LTE_TRANSPORT/proto.h | 6 ++ 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index b2e8218b37..e87519225b 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -280,8 +280,8 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, avg, symbol, nb_rb); - else - dlsch_channel_level(lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext, + else if (beamforming_mode==7) + dlsch_channel_level_TM7(lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates_ext, frame_parms, avg, symbol, @@ -2972,6 +2972,76 @@ void dlsch_channel_level_TM56(int **dl_ch_estimates_ext, #endif } +//compute average channel_level for TM7 +void dlsch_channel_level_TM7(int **dl_bf_ch_estimates_ext, + LTE_DL_FRAME_PARMS *frame_parms, + int *avg, + uint8_t symbol, + unsigned short nb_rb) +{ + +#if defined(__x86_64__)||defined(__i386__) + + short rb; + unsigned char aatx,aarx,nre=12,symbol_mod; + __m128i *dl_ch128,avg128D; + + symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; + + for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) + for (aarx=0; aarxnb_antennas_rx; aarx++) { + //clear average level + avg128D = _mm_setzero_si128(); + // 5 is always a symbol with no pilots for both normal and extended prefix + + dl_ch128=(__m128i *)&dl_bf_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; + + for (rb=0; rbNcp-1)))&&(frame_parms->mode1_flag==0)) { + dl_ch128+=2; + } else { + avg128D = _mm_add_epi32(avg128D,_mm_madd_epi16(dl_ch128[2],dl_ch128[2])); + dl_ch128+=3; + } + + /* + if (rb==0) { + print_shorts("dl_ch128",&dl_ch128[0]); + print_shorts("dl_ch128",&dl_ch128[1]); + print_shorts("dl_ch128",&dl_ch128[2]); + } + */ + } + + if (((symbol_mod == 0) || (symbol_mod == (frame_parms->Ncp-1)))) + nre=10; + else if ((frame_parms->Ncp==0) && (symbol==3 || symbol==6 || symbol==9 || symbol==12)) + nre=9; + else if ((frame_parms->Ncp==1) && (symbol==4 || symbol==7 || symbol==9)) + nre=8; + else + nre=12; + + avg[(aatx<<1)+aarx] = (((int*)&avg128D)[0] + + ((int*)&avg128D)[1] + + ((int*)&avg128D)[2] + + ((int*)&avg128D)[3])/(nb_rb*nre); + + // printf("Channel level : %d\n",avg[(aatx<<1)+aarx]); + } + + _mm_empty(); + _m_empty(); + +#elif defined(__arm__) + +#endif +} void dlsch_alamouti(LTE_DL_FRAME_PARMS *frame_parms, int **rxdataF_comp, diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 3879c11db8..0bb327aa8a 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -1046,6 +1046,12 @@ void dlsch_channel_level_TM56(int32_t **dl_ch_estimates_ext, uint8_t symbol_mod, uint16_t nb_rb); +void dlsch_channel_level_TM7(int32_t **dl_bf_ch_estimates_ext, + LTE_DL_FRAME_PARMS *frame_parms, + int32_t *avg, + uint8_t pilots_flag, + uint16_t nb_rb); + void dlsch_scale_channel(int32_t **dl_ch_estimates_ext, LTE_DL_FRAME_PARMS *frame_parms, LTE_UE_DLSCH_t **dlsch_ue, From 7882472b73bfbf77ca6b4ba6e054bf6450facd3d Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 1 Oct 2015 17:43:46 +0200 Subject: [PATCH 016/132] revert dlsch_llr_computation --- openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c index 9ff04cb0ec..551043ea96 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c @@ -663,7 +663,7 @@ int dlsch_qpsk_llr(LTE_DL_FRAME_PARMS *frame_parms, if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) { - if (frame_parms->mode1_flag==0 && beamforming_mode!=7) + if (frame_parms->mode1_flag==0) len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); else len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6); @@ -725,7 +725,7 @@ void dlsch_16qam_llr(LTE_DL_FRAME_PARMS *frame_parms, ch_mag = (__m128i*)&dl_ch_mag[0][(symbol*frame_parms->N_RB_DL*12)]; if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) { - if (frame_parms->mode1_flag==0 && beamforming_mode!=7) + if (frame_parms->mode1_flag==0) len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); else len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6); @@ -805,7 +805,7 @@ void dlsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms, ch_magb = (__m128i*)&dl_ch_magb[0][(symbol*frame_parms->N_RB_DL*12)]; if ((symbol_mod==0) || (symbol_mod==(4-frame_parms->Ncp))) { - if (frame_parms->mode1_flag==0 && beamforming_mode!=7) + if (frame_parms->mode1_flag==0) len = (nb_rb*8) - (2*pbch_pss_sss_adjust/3); else len = (nb_rb*10) - (5*pbch_pss_sss_adjust/6); From b40ed6af9ba73870fa9f232bccd3e872a7c97649 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 2 Oct 2015 11:44:30 +0200 Subject: [PATCH 017/132] TM7 works for dlsim. --- openair1/SIMULATION/LTE_PHY/dlsim.c | 67 +++++++++++++++++++---------- targets/RT/USER/Makefile | 10 +++-- 2 files changed, 51 insertions(+), 26 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 1b483b35f6..27ca4b8fbd 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -253,7 +253,8 @@ int main(int argc, char **argv) double forgetting_factor=0.0; //in [0,1] 0 means a new channel every time, 1 means keep the same channel double iqim=0.0; - uint8_t extended_prefix_flag=0,transmission_mode=1,n_tx=1,n_rx=2,n_tx_phy=1; + uint8_t extended_prefix_flag=0,transmission_mode=1,n_tx=1,n_rx=1; + uint16_t n_tx_phy=1; uint16_t Nid_cell=0; int32_t **beamforming_weights; @@ -564,8 +565,9 @@ int main(int argc, char **argv) exit(-1); } - if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=8 && n_tx_phy!=16 && n_tx_phy!=64)) { - msg("For TM7, physical antenna number should be an exponent of 2, maximum 64 antennas supported.\n"); + //if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=8 && n_tx_phy!=16 && n_tx_phy!=64 && n_tx_phy!=128)) { + if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=4 && n_tx_phy!=16 && n_tx_phy!=64)) { + msg("For TM7, physical antenna number should be an exponent of 4, maximum 64 antennas supported.\n"); exit(-1); } @@ -723,8 +725,10 @@ int main(int argc, char **argv) NB_RB=conv_nprb(0,DLSCH_RB_ALLOC,N_RB_DL); - if ((transmission_mode > 1) && (n_tx_phy == 1)) - printf("n_tx_phy must be >1 for transmission_mode %d\n",transmission_mode); + if ((transmission_mode>1&&transmission_mode<7) && (n_tx_phy == 1)){ + msg("n_tx_phy must be >1 for transmission_mode %d\n",transmission_mode); + exit(-1); + } #ifdef XFORMS fl_initialize (&argc, argv, NULL, 0, 0); @@ -756,10 +760,19 @@ int main(int argc, char **argv) beamforming_weights = (int32_t **)malloc(12*N_RB_DL*sizeof(int32_t*)); for(re=0;re<12*N_RB_DL;re++){ beamforming_weights[re]=(int32_t *)malloc(n_tx_phy*sizeof(int32_t)); - for(aa=0;aa>(n_tx_phy>>1); + for(aa=0;aa>1; + else if (n_tx_phy==16) + beamforming_weights[re][aa] = 0x00007fff>>2; + else if (n_tx_phy==64) + beamforming_weights[re][aa] = 0x00007fff>>3; + } } + printf("***n_tx_phy=%d,n_tx_phy>>2=%d,beamforming_weights=%d\n",n_tx_phy,n_tx_phy>>2,beamforming_weights[0][0]); } eNB_id_i = PHY_vars_UE->n_connected_eNB; @@ -799,9 +812,9 @@ int main(int argc, char **argv) SCM_A, SCM_B, SCM_C, SCM_D, EPA, EVA, ETU, Rayleigh8, Rayleigh1, Rayleigh1_corr, Rayleigh1_anticorr, Rice1, Rice8); if(transmission_mode==5) - sprintf(bler_fname,"bler_tx%d_chan%d_nrx%d_mcs%d_mcsi%d_u%d_imod%d.csv",transmission_mode,channel_model,n_rx,mcs1,mcs_i,dual_stream_UE,i_mod); + sprintf(bler_fname,"bler_tm%d_chan%d_perfce%d_ntx%d_nrx%d_mcs%d_mcsi%d_u%d_imod%d.csv",transmission_mode,channel_model,perfect_ce,n_tx_phy,n_rx,mcs1,mcs_i,dual_stream_UE,i_mod); else - sprintf(bler_fname,"bler_tx%d_chan%d_nrx%d_mcs%d.csv",transmission_mode,channel_model,n_rx,mcs1); + sprintf(bler_fname,"bler_tm%d_chan%d_perfce%d_ntx%d_nrx%d_mcs%d.csv",transmission_mode,channel_model,perfect_ce,n_tx_phy,n_rx,mcs1); bler_fd = fopen(bler_fname,"w"); fprintf(bler_fd,"SNR; MCS; TBS; rate; err0; trials0; err1; trials1; err2; trials2; err3; trials3; dci_err\n"); @@ -2167,7 +2180,7 @@ int main(int argc, char **argv) ret = PHY_vars_UE->dlsch_ue[0][0]->max_turbo_iterations+1; while ((round < num_rounds) && (ret > PHY_vars_UE->dlsch_ue[0][0]->max_turbo_iterations)) { - printf("Trial %d, round %d\n",trials,round); + //printf("Trial %d, round %d\n",trials,round); round_trials[round]++; if(transmission_mode>=5&&transmission_mode<7) @@ -2185,8 +2198,9 @@ int main(int argc, char **argv) PMI_FEEDBACK: - printf("Trial %d : Round %d, pmi_feedback %d \n",trials,round,pmi_feedback); - for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { + //printf("Trial %d : Round %d, pmi_feedback %d \n",trials,round,pmi_feedback); + //for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { + for (aa=0; aanb_antennas_tx_phy; aa++) { memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t)); } @@ -3025,10 +3039,10 @@ PMI_FEEDBACK: for (i=0; i<2*frame_parms->samples_per_tti; i++) { for (aa=0; aalte_frame_parms.nb_antennas_rx; aa++) { // printf("s_re[0][%d]=> %f , r_re[0][%d]=> %f\n",i,s_re[aa][i],i,r_re[aa][i]); - /*((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = - (short) (r_re[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); - ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = - (short) (r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0));*/ + //((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = + // (short) (r_re[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); + // ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = + // (short) (r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = (short) r_re[aa][i]; ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = (short) r_im[aa][i]; //printf("rxdata[%d][%d]=> %d, %d\n",aa,subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti+i,r_re[aa][i],r_im[aa][i]); @@ -3081,7 +3095,7 @@ PMI_FEEDBACK: for (Ns=(2*subframe); Ns<((2*subframe)+3); Ns++) { for (l=0; llte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP); ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2; if (transmission_mode == 7){ - ((int16_t *) PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(short)(AMP); - ((int16_t *) PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=0/2; - + if (PHY_vars_UE->high_speed_flag==0){ + ((int16_t *) PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(short)(AMP); + ((int16_t *) PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1]=0/2; + } else { + ((int16_t *) PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(short)(AMP); + ((int16_t *) PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=0/2; + } } } } @@ -3365,7 +3383,8 @@ PMI_FEEDBACK: if (PHY_vars_UE->lte_frame_parms.Ncp==0) { if ((Ns==(2*subframe) && ((l==3) || (l==6))) || Ns==(1+(2*subframe)) && ((l==2) || (l==5))) { - lte_dl_bf_channel_estimation(PHY_vars_UE,eNB_id,0,Ns,5,l+7*(Ns%2==1)); + if (perfect_ce==0) + lte_dl_bf_channel_estimation(PHY_vars_UE,eNB_id,0,Ns,5,l+7*(Ns%2==1)); } } else { msg("Beamforming channel estimation not supported yet for TM7 extented CP.\n"); @@ -4297,10 +4316,14 @@ PMI_FEEDBACK: free(r_im[i]); } + for(i=0;i<12*N_RB_DL;i++) + free(beamforming_weights[i]); + free(s_re); free(s_im); free(r_re); free(r_im); + free(beamforming_weights); // lte_sync_time_free(); diff --git a/targets/RT/USER/Makefile b/targets/RT/USER/Makefile index 531907d6af..72f9587e0a 100644 --- a/targets/RT/USER/Makefile +++ b/targets/RT/USER/Makefile @@ -194,7 +194,7 @@ CFLAGS += -DHARD_RT endif ifeq ($(EMOS),1) -CFLAGS += -D_FILE_OFFSET_BITS=64 -DEMOS #-DEMOS_CHANNEL +CFLAGS += -D_FILE_OFFSET_BITS=64 #-DEMOS -DEMOS_CHANNEL LDFLAGS += -lgps endif @@ -317,10 +317,12 @@ synctest_UE: synctest cp synctest synctest_UE drivers: - cd $(OPENAIR2_DIR) && make clean && make nasmesh_netlink.ko - cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL && make clean && make - cd $(OPENAIR_TARGETS)/ARCH/EXMIMO/DRIVER/eurecom && make clean && make +# cd $(OPENAIR2_DIR) && make clean && make nasmesh_netlink.ko +# cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL && make clean && make + cd $(OPENAIR_TARGETS)/ARCH/EXMIMO/DRIVER/eurecom && make clean && make + cp $(OPENAIR_TARGETS)/ARCH/EXMIMO/DRIVER/eurecom/openair_rf.ko $(OPENAIR_TARGETS)/bin/. cd $(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT && make clean && make + cp $(OPENAIR_TARGETS)/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw $(OPENAIR_TARGETS)/bin/. run: condtest rtai-load condtest --verbose From fac6a63f670e0f016cf00b6aaf967625b629c7bc Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 5 Oct 2015 15:41:18 +0200 Subject: [PATCH 018/132] adding new file --- openair1/PHY/LTE_REFSIG/lte_dl_uespec.c | 396 ++++++++++++++++++++++++ 1 file changed, 396 insertions(+) create mode 100644 openair1/PHY/LTE_REFSIG/lte_dl_uespec.c diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c new file mode 100644 index 0000000000..d029f959ed --- /dev/null +++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c @@ -0,0 +1,396 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ + +/*! \file PHY/LTE_REFSIG/lte_dl_ue_spec.c +* \brief Top-level routines for generating UE-specific Reference signals from 36-211, V11.3.0 2013-06 +* \author R. Knopp X. Jiang +* \date 2015 +* \version 0.1 +* \company Eurecom +* \email: knopp@eurecom.fr xiwen.jiang@eurecom.fr +* \note +* \warning +*/ + +#ifdef USER_MODE +#include +#include +#endif + +#include "defs.h" +#include "PHY/defs.h" +#include "log.h" + +//extern unsigned int lte_gold_table[3][20][2][14]; +//#define DEBUG_DL_CELL_SPEC + +int Wbar_NCP[8][4] = {{1,1,1,1},{1,-1,1,-1},{1,1,1,1},{1,-1,1,-1},{1,1,-1,-1},{-1,-1,1,1},{1,-1,-1,1},{-1,1,1,-1}}; + +/* +int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, + uint8_t UE_id, + mod_sym_t *output, + short amp, + uint8_t Ns, + uint8_t lprime, + uint8_t p, + int SS_flag) +{ + + mod_sym_t qpsk[4],nqpsk[4]; + int16_t k=0,a; + int mprime,ind,ind_dword,ind_qpsk_symb; + unsigned nushift,kprime; + // LTE_eNB_DLSCH_t *dlsch = phy_vars_eNB->dlsch_eNB[UE_id][0]; + + a = (amp*ONE_OVER_SQRT2_Q15)>>15; + ((short *)&qpsk[0])[0] = a; + ((short *)&qpsk[0])[1] = a; + ((short *)&qpsk[1])[0] = -a; + ((short *)&qpsk[1])[1] = a; + ((short *)&qpsk[2])[0] = a; + ((short *)&qpsk[2])[1] = -a; + ((short *)&qpsk[3])[0] = -a; + ((short *)&qpsk[3])[1] = -a; + + ((short *)&nqpsk[0])[0] = -a; + ((short *)&nqpsk[0])[1] = -a; + ((short *)&nqpsk[1])[0] = a; + ((short *)&nqpsk[1])[1] = -a; + ((short *)&nqpsk[2])[0] = -a; + ((short *)&nqpsk[2])[1] = a; + ((short *)&nqpsk[3])[0] = a; + ((short *)&nqpsk[3])[1] = a; + + if (p==5) { + if (SS_flag==0) { + if (phy_vars_eNB->lte_frame_parms.Ncp == NORMAL) { + // this is 3GPP 36-211 6.10.3.2, NORMAL CP, p=5 + + nushift = phy_vars_eNB->lte_frame_parms.Nid_cell%3; + + if(lprime==0){ + kprime=nushift; + }else{ + kprime=(nushift+2*lprime)%4; + } + + k = kprime+phy_vars_eNB->lte_frame_parms.first_carrier_offset; + printf("lte_dl_ue_spec:k=%d\n",k); + + for (mprime=0;mprime<3*nRB_PDSCH-1;mprime++) { + ind = 3*lprime*nRB_PDSCH+mprime; + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + output[k] = qpsk[(phy_vars_UE->lte_gold_uespec_port5_table[Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; + //output[k] = 0xffffffff; + + k += 4; + if (k >= phy_vars_eNB->lte_frame_parms.ofdm_symbol_size) { + k++; // skip DC carrier + k-=phy_vars_eNB->lte_frame_parms.ofdm_symbol_size; + } + + } + } + } + } else if (p>=7) { + printf("lte_dl_ue_spec:antenna ports >=7 not supported yet!\n"); + } else { + LOG_E(PHY,"Illegal p %d UE specific pilots\n",p); + } + + return(0); +} +*/ + + +int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, + mod_sym_t *output, + unsigned char Ns, + unsigned char p, + int lprime, + int SS_flag, + uint16_t nRB_PDSCH) +{ + mod_sym_t qpsk[4],nqpsk[4],*qpsk_p,*output_p; + int w,mprime,ind,l,ind_dword,ind_qpsk_symb,nPRB; + short pamp; + + // Compute the correct pilot amplitude, sqrt_rho_b = Q3.13 + pamp = ONE_OVER_SQRT2_Q15; + + // This includes complex conjugate for channel estimation + ((short *)&qpsk[0])[0] = pamp; + ((short *)&qpsk[0])[1] = -pamp; + ((short *)&qpsk[1])[0] = -pamp; + ((short *)&qpsk[1])[1] = -pamp; + ((short *)&qpsk[2])[0] = pamp; + ((short *)&qpsk[2])[1] = pamp; + ((short *)&qpsk[3])[0] = -pamp; + ((short *)&qpsk[3])[1] = pamp; + + ((short *)&nqpsk[0])[0] = -pamp; + ((short *)&nqpsk[0])[1] = pamp; + ((short *)&nqpsk[1])[0] = pamp; + ((short *)&nqpsk[1])[1] = pamp; + ((short *)&nqpsk[2])[0] = -pamp; + ((short *)&nqpsk[2])[1] = -pamp; + ((short *)&nqpsk[3])[0] = pamp; + ((short *)&nqpsk[3])[1] = -pamp; + + if (p>=7) { + if (SS_flag==0) { + if (phy_vars_ue->lte_frame_parms.Ncp == NORMAL) { + // this is 3GPP 36-211 6.10.3.2, NORMAL CP, p>=7 + + output_p = output; + + ind = 3*lprime*phy_vars_ue->lte_frame_parms.N_RB_DL; + l = lprime + ((Ns&1)<<1); + + // loop over pairs of PRBs, this is the periodicity of the W_bar_NCP sequence + // unroll the computations for the 6 pilots, select qpsk or nqpsk as function of W_bar_NCP + for (nPRB=0; nPRBlte_frame_parms.N_RB_DL; nPRB+=2) { + + // First pilot + w = Wbar_NCP[p-7][l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + + + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + + w = Wbar_NCP[p-7][3-l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + + // Second pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + + w = Wbar_NCP[p-7][l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + // Third pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_eNB->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + + // Fourth pilot + w = Wbar_NCP[p-7][3-l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + + + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + + w = Wbar_NCP[p-7][l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + + // Fifth pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + + w = Wbar_NCP[p-7][3-l]; + qpsk_p = (w==1) ? qpsk : nqpsk; + // Sixth pilot + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk_p[(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3]; + +#ifdef DEBUG_DL_UESPEC + LOG_D(PHY,"Ns %d, l %d, m %d,ind_dword %d, ind_qpsk_symbol %d\n", + Ns,l,m,ind_dword,ind_qpsk_symb); + LOG_D(PHY,"index = %d\n",(phy_vars_ue->lte_gold_uespec_table[0][Ns][lprime][ind_dword]>>(2*ind_qpsk_symb))&3); +#endif + + output_p++; + ind++; + } + } else { + LOG_E(PHY,"Special subframe not supported for UE specific pilots yet\n"); + } + } + } else if (p==5) { + if (SS_flag==0) { + output_p = output; + + if (phy_vars_ue->lte_frame_parms.Ncp == NORMAL) { + for (mprime=0;mprime<3*nRB_PDSCH;mprime++) { + + ind = 3*lprime*nRB_PDSCH+mprime; + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + *output_p = qpsk[(phy_vars_ue->lte_gold_uespec_port5_table[Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; + //printf("lprime=%d,ind=%d,Ns=%d,output_p=(%d,%d)\n",lprime,ind,Ns,((short *)&output_p[0])[0],((short *)&output_p[0])[1]); + output_p++; + + } + } + } + } else { + LOG_E(PHY,"Illegal p %d UE specific pilots\n",p); + } + + return(0); +} + + + +#ifdef LTE_DL_CELL_SPEC_MAIN + + + +//extern int write_output(const char *,const char *,void *,int,int,char); +// flag change eren +extern int write_output(const char *,const char *,void *,int,int,char); +main() +{ + + unsigned short Nid_cell=0; + unsigned int Ncp = 0; + int output00[1024]; + int output01[1024]; + int output10[1024]; + int output11[1024]; + + memset(output00,0,1024*sizeof(int)); + memset(output01,0,1024*sizeof(int)); + memset(output10,0,1024*sizeof(int)); + memset(output11,0,1024*sizeof(int)); + + lte_gold(Nid_cell,Ncp); + + lte_dl_ue_spec(output00, + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 0, + 0, + 0); + + lte_dl_ue_spec(output10, + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 1, + 0, + 0); + + lte_dl_ue_spec(output01, + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 0, + 1, + 0); + + lte_dl_ue_spec(output11, + ONE_OVER_SQRT2_Q15, + 50, + Nid_cell, + Ncp, + 0, + 1, + 1, + 0); + + + write_output("dl_ue_spec00.m","dl_cs00",output00,1024,1,1); + write_output("dl_ue_spec01.m","dl_cs01",output01,1024,1,1); + write_output("dl_ue_spec10.m","dl_cs10",output10,1024,1,1); + write_output("dl_ue_spec11.m","dl_cs11",output11,1024,1,1); +} + + +#endif From 67262694de414a9dda8156cac8d1eb5d62f44369 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 5 Oct 2015 16:19:52 +0200 Subject: [PATCH 019/132] bug fixed in free beamforming weights --- openair1/SIMULATION/LTE_PHY/dlsim.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 139d507e61..347b80cbc6 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -3059,12 +3059,12 @@ PMI_FEEDBACK: for (i=0; i<2*frame_parms->samples_per_tti; i++) { for (aa=0; aalte_frame_parms.nb_antennas_rx; aa++) { // printf("s_re[0][%d]=> %f , r_re[0][%d]=> %f\n",i,s_re[aa][i],i,r_re[aa][i]); - //((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = - // (short) (r_re[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); - // ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = - // (short) (r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); - ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = (short) r_re[aa][i]; - ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = (short) r_im[aa][i]; + ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = + (short) (r_re[aa][i] + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); + ((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = + (short) (r_im[aa][i] + (iqim*r_re[aa][i]) + sqrt(sigma2/2)*gaussdouble(0.0,1.0)); + //((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i] = (short) r_re[aa][i]; + //((short*) PHY_vars_UE->lte_ue_common_vars.rxdata[aa])[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti)+2*i+1] = (short) r_im[aa][i]; //printf("rxdata[%d][%d]=> %d, %d\n",aa,subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti+i,r_re[aa][i],r_im[aa][i]); } } @@ -4340,8 +4340,10 @@ PMI_FEEDBACK: free(r_im[i]); } - for(i=0;i<12*N_RB_DL;i++) - free(beamforming_weights[i]); + if(transmission_mode == 7){ + for(i=0;i<12*N_RB_DL;i++) + free(beamforming_weights[i]); + } free(s_re); free(s_im); From 0d681a0e727c61a95f95106d95eace3067e2a524 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 9 Oct 2015 10:04:25 +0200 Subject: [PATCH 020/132] use nb_antennas_tx as physical antenna number and nb_antennas_tx_eNB as antenna port --- openair1/PHY/INIT/lte_init.c | 12 +- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 9 +- openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c | 2 +- openair1/PHY/defs.h | 1 - openair1/SIMULATION/LTE_PHY/dlsim.c | 119 +++++++++--------- 5 files changed, 74 insertions(+), 69 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 83ed9c632c..b139f5cf4f 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -1275,10 +1275,10 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, if (abstraction_flag==0) { // TX vars - eNB_common_vars->txdata[eNB_id] = (int32_t**)malloc16(phy_vars_eNB->nb_antennas_tx_phy*sizeof(int32_t*) ); - eNB_common_vars->txdataF[eNB_id] = (mod_sym_t **)malloc16(phy_vars_eNB->nb_antennas_tx_phy*sizeof(mod_sym_t*) ); + eNB_common_vars->txdata[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*) ); + eNB_common_vars->txdataF[eNB_id] = (mod_sym_t **)malloc16(frame_parms->nb_antennas_tx*sizeof(mod_sym_t*) ); - for (i=0; inb_antennas_tx_phy; i++) { + for (i=0; inb_antennas_tx; i++) { #ifdef USER_MODE eNB_common_vars->txdata[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) ); eNB_common_vars->txdataF[eNB_id][i] = (mod_sym_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t) ); @@ -1295,9 +1295,9 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, } // RX vars - eNB_common_vars->rxdata[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); - eNB_common_vars->rxdata_7_5kHz[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); - eNB_common_vars->rxdataF[eNB_id] = (int32_t**)malloc16( frame_parms->nb_antennas_rx*sizeof(int32_t*) ); + eNB_common_vars->rxdata[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*) ); + eNB_common_vars->rxdata_7_5kHz[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*) ); + eNB_common_vars->rxdataF[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*) ); for (i=0; inb_antennas_rx; i++) { #ifndef USER_MODE diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 313134c28a..6580e827c1 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -192,7 +192,6 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB, uint8_t *x1=NULL; uint8_t mod_order1=2; - uint8_t nb_antennas_tx_phy = phy_vars_eNB->nb_antennas_tx_phy; // Fill these in later for TM8-10 // int Nlayers1; @@ -917,7 +916,7 @@ break; *jj = *jj + 1; //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); - for (aa=0; aanb_antennas_tx; aa++) { ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); @@ -956,7 +955,7 @@ break; ((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); ((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); - for (aa=0; aanb_antennas_tx; aa++) { ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); @@ -1004,7 +1003,7 @@ break; ((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); ((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); - for (aa=0; aanb_antennas_tx; aa++) { ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); @@ -1025,7 +1024,7 @@ break; tmp_sample1 = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; mprime2++; - for (aa=0; aanb_antennas_tx; aa++) { ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); diff --git a/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c b/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c index 2287c44a5f..4651308dfd 100644 --- a/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c +++ b/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c @@ -68,7 +68,7 @@ void generate_ue_spec_pilots(PHY_VARS_eNB *phy_vars_eNB, printf("generate_dl_ue_spec:tti_offset=%d\n",tti_offset); if(frame_parms->Ncp==0) { - for(aa=0;aanb_antennas_tx_phy;aa++){ + for(aa=0;aanb_antennas_tx;aa++){ //antenna port 5 symbol 0 slot 0 lte_dl_ue_spec(phy_vars_eNB, UE_id, diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index ceacd43ee1..d9965b4e75 100755 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -209,7 +209,6 @@ typedef struct PHY_VARS_eNB_s { eNB_proc_t proc[NUM_ENB_THREADS]; uint8_t local_flag; uint32_t rx_total_gain_eNB_dB; - uint8_t nb_antennas_tx_phy; LTE_DL_FRAME_PARMS lte_frame_parms; PHY_MEASUREMENTS_eNB PHY_measurements_eNB[NUMBER_OF_eNB_SECTORS_MAX]; /// Measurement variables LTE_eNB_COMMON lte_eNB_common_vars; diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 347b80cbc6..2501baff25 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -1,4 +1,4 @@ -/****************************************************************************** + /****************************************************************************** ipenAirInterface Copyright(c) 1999 - 2014 Eurecom @@ -107,7 +107,7 @@ void handler(int sig) exit(1); } -void lte_param_init(unsigned char N_tx, unsigned char N_tx_phy, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,uint8_t fdd_flag, uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL, uint8_t osf,uint32_t perfect_ce) +void lte_param_init(unsigned char N_tx_port_eNB, unsigned char N_tx_phy, unsigned char N_rx,unsigned char transmission_mode,uint8_t extended_prefix_flag,uint8_t fdd_flag, uint16_t Nid_cell,uint8_t tdd_config,uint8_t N_RB_DL, uint8_t osf,uint32_t perfect_ce) { LTE_DL_FRAME_PARMS *lte_frame_parms; @@ -132,9 +132,9 @@ void lte_param_init(unsigned char N_tx, unsigned char N_tx_phy, unsigned char N_ lte_frame_parms->Ncp = extended_prefix_flag; lte_frame_parms->Nid_cell = Nid_cell; lte_frame_parms->nushift = Nid_cell%6; - lte_frame_parms->nb_antennas_tx = N_tx; + lte_frame_parms->nb_antennas_tx = N_tx_phy; lte_frame_parms->nb_antennas_rx = N_rx; - lte_frame_parms->nb_antennas_tx_eNB = N_tx; + lte_frame_parms->nb_antennas_tx_eNB = N_tx_port_eNB; lte_frame_parms->phich_config_common.phich_resource = one; lte_frame_parms->tdd_config = tdd_config; lte_frame_parms->frame_type = (fdd_flag==1)?0 : 1; @@ -157,8 +157,6 @@ void lte_param_init(unsigned char N_tx, unsigned char N_tx_phy, unsigned char N_ PHY_vars_eNB->transmission_mode[0] = transmission_mode; PHY_vars_UE->transmission_mode[0] = transmission_mode; - //printf("lte_param_init: transmission mode = %d\n",PHY_vars_eNB->transmission_mode[0]); - PHY_vars_eNB->nb_antennas_tx_phy = N_tx_phy; phy_init_lte_top(lte_frame_parms); dump_frame_parms(lte_frame_parms); @@ -207,7 +205,7 @@ uint64_t DLSCH_alloc_pdu_1[2]; #define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2) //#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13 //#define DLSCH_RB_ALLOC 0x0001 -void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms, uint8_t nb_antennas_tx_phy) +void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms) { int aa, slot_offset, slot_offset_F; @@ -215,7 +213,7 @@ void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LT slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); - for (aa=0; aanb_antennas_tx; aa++) { // printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc()); if (frame_parms->Ncp == 1) @@ -253,8 +251,7 @@ int main(int argc, char **argv) double forgetting_factor=0.0; //in [0,1] 0 means a new channel every time, 1 means keep the same channel double iqim=0.0; - uint8_t extended_prefix_flag=0,transmission_mode=1,n_tx=1,n_rx=1; - uint16_t n_tx_phy=1; + uint8_t extended_prefix_flag=0,transmission_mode=1,n_tx_port=1,n_tx_phy=1,n_rx=1; uint16_t Nid_cell=0; int32_t **beamforming_weights; @@ -335,7 +332,8 @@ int main(int argc, char **argv) uint32_t DLSCH_RB_ALLOC = 0x1fff; int numCCE=0; int dci_length_bytes=0,dci_length=0; - double BW = 5.0; + //double BW = 5.0; + double BW = 7.68; int common_flag=0,TPC=0; double cpu_freq_GHz; @@ -387,7 +385,7 @@ int main(int argc, char **argv) num_layers = 1; perfect_ce = 0; - while ((c = getopt (argc, argv, "ahdpZDe:m:n:o:s:f:t:c:g:r:F:x:y:q:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:Y")) != -1) { + while ((c = getopt (argc, argv, "ahdqZDe:m:n:o:s:f:t:c:g:r:F:x:p:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:PLl:Y")) != -1) { switch (c) { case 'a': awgn_flag = 1; @@ -464,7 +462,7 @@ int main(int argc, char **argv) n_ch_rlz= atof(optarg); break; - case 'p': + case 'q': extended_prefix_flag=1; break; @@ -554,32 +552,39 @@ int main(int argc, char **argv) } if (transmission_mode>1 && transmission_mode<7){ - n_tx = 2; - n_tx_phy = n_tx; + n_tx_port = 2; + n_tx_phy = n_tx_port; + } else if (transmission_mode==7){ + n_tx_port = 1; } break; - case 'y': - n_tx=atoi(optarg); + case 'p': + n_tx_port=atoi(optarg); - if ((n_tx==0) || ((n_tx>2))) { - msg("Unsupported number of tx antennas ports %d\n",n_tx); + if ((n_tx_port==0) || ((n_tx_port>2))) { + msg("Unsupported number of cell specific antennas ports %d\n",n_tx_port); exit(-1); } break; - case 'q': + case 'y': n_tx_phy=atoi(optarg); - if (transmission_mode<7 && n_tx_phy!=n_tx) { - msg("For transmission mode below TM7, physical antenna number should be the same as antenna port number.\n"); - exit(-1); + if (transmission_mode>1&&transmission_mode<7) { + if(n_tx_phy==1) { + msg("n_tx_phy must be >1 for transmission_mode %d\n",transmission_mode); + exit(-1); + } else if (n_tx_phy!=n_tx_port) { // to be changed + msg("For transmission mode TM2-TM6, physical antenna number should be the same as antenna port number.\n"); + exit(-1); + } } //if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=8 && n_tx_phy!=16 && n_tx_phy!=64 && n_tx_phy!=128)) { - if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=4 && n_tx_phy!=16 && n_tx_phy!=64)) { + if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=16 && n_tx_phy!=64)) { msg("For TM7, physical antenna number should be an exponent of 4, maximum 64 antennas supported.\n"); exit(-1); } @@ -629,7 +634,7 @@ int main(int argc, char **argv) dual_stream_UE=1; openair_daq_vars.use_ia_receiver = 1; - if ((n_tx!=2) || (transmission_mode!=5)) { + if ((n_tx_port!=2) || (transmission_mode!=5)) { msg("IA receiver only supported for TM5!"); exit(-1); } @@ -689,8 +694,8 @@ int main(int argc, char **argv) printf("-g [A:M] Use 3GPP 25.814 SCM-A/B/C/D('A','B','C','D') or 36-101 EPA('E'), EVA ('F'),ETU('G') models (ignores delay spread and Ricean factor), Rayghleigh8 ('H'), Rayleigh1('I'), Rayleigh1_corr('J'), Rayleigh1_anticorr ('K'), Rice8('L'), Rice1('M')\n"); printf("-F forgetting factor (0 new channel every trial, 1 channel constant\n"); printf("-x Transmission mode (1,2,6,7 for the moment)\n"); - printf("-y Number of TX antennas ports used in eNB\n"); - printf("-q Number of physical TX antennas used in eNB\n"); + printf("-p Number of TX antennas ports used in eNB\n"); + printf("-y Number of physical TX antennas used in eNB\n"); printf("-z Number of RX antennas used in UE\n"); printf("-t MCS of interfering UE\n"); printf("-R Number of HARQ rounds (fixed)\n"); @@ -738,10 +743,6 @@ int main(int argc, char **argv) NB_RB=conv_nprb(0,DLSCH_RB_ALLOC,N_RB_DL); - if ((transmission_mode>1&&transmission_mode<7) && (n_tx_phy == 1)){ - msg("n_tx_phy must be >1 for transmission_mode %d\n",transmission_mode); - exit(-1); - } #ifdef XFORMS fl_initialize (&argc, argv, NULL, 0, 0); @@ -764,7 +765,7 @@ int main(int argc, char **argv) } - lte_param_init(n_tx,n_tx_phy,n_rx,transmission_mode,extended_prefix_flag,fdd_flag,Nid_cell,tdd_config,N_RB_DL,osf,perfect_ce); + lte_param_init(n_tx_port,n_tx_phy,n_rx,transmission_mode,extended_prefix_flag,fdd_flag,Nid_cell,tdd_config,N_RB_DL,osf,perfect_ce); if (transmission_mode==7){ lte_gold_ue_spec_port5(PHY_vars_eNB->lte_gold_uespec_port5_table[0],Nid_cell,n_rnti); @@ -775,14 +776,14 @@ int main(int argc, char **argv) beamforming_weights[i]=(int32_t *)malloc(n_tx_phy*sizeof(int32_t)); for(aa=0;aa>1; else if (n_tx_phy==16) beamforming_weights[i][aa] = 0x00007fff>>2; else if (n_tx_phy==64) - beamforming_weights[i][aa] = 0x00007fff>>3; + beamforming_weights[i][aa] = 0x00007fff>>4;//3 } } printf("***n_tx_phy=%d,n_tx_phy>>2=%d,beamforming_weights=%d\n",n_tx_phy,n_tx_phy>>2,beamforming_weights[0][0]); @@ -840,7 +841,7 @@ int main(int argc, char **argv) char dirname[FILENAME_MAX]; sprintf(dirname, "%s/SIMU/USER/pre-ci-logs-%s", getenv("OPENAIR_TARGETS"),hostname ); sprintf(time_meas_fname,"%s/time_meas_prb%d_mcs%d_anttx%d_antrx%d_pdcch%d_channel%s_tx%d.csv", - dirname,N_RB_DL,mcs1,n_tx,n_rx,num_pdcch_symbols,channel_model_input,transmission_mode); + dirname,N_RB_DL,mcs1,n_tx_phy,n_rx,num_pdcch_symbols,channel_model_input,transmission_mode); mkdir(dirname,0777); time_meas_fd = fopen(time_meas_fname,"w"); } @@ -2221,7 +2222,7 @@ PMI_FEEDBACK: //printf("Trial %d : Round %d, pmi_feedback %d \n",trials,round,pmi_feedback); //for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { - for (aa=0; aanb_antennas_tx_phy; aa++) { + for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t)); } @@ -2878,22 +2879,19 @@ PMI_FEEDBACK: do_OFDM_mod_l(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id], i, - &PHY_vars_eNB->lte_frame_parms, - PHY_vars_eNB->nb_antennas_tx_phy); + &PHY_vars_eNB->lte_frame_parms); } */ do_OFDM_mod_l(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id], (subframe*2), - &PHY_vars_eNB->lte_frame_parms, - PHY_vars_eNB->nb_antennas_tx_phy); + &PHY_vars_eNB->lte_frame_parms); do_OFDM_mod_l(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id], (subframe*2)+1, - &PHY_vars_eNB->lte_frame_parms, - PHY_vars_eNB->nb_antennas_tx_phy); + &PHY_vars_eNB->lte_frame_parms); stop_meas(&PHY_vars_eNB->ofdm_mod_stats); stop_meas(&PHY_vars_eNB->phy_proc_tx); @@ -2901,20 +2899,19 @@ PMI_FEEDBACK: do_OFDM_mod_l(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id], (subframe*2)+2, - &PHY_vars_eNB->lte_frame_parms, - PHY_vars_eNB->nb_antennas_tx_phy); + &PHY_vars_eNB->lte_frame_parms); if (n_frames==1) { write_output("txsigF0.m","txsF0", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][0][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); - if (PHY_vars_eNB->nb_antennas_tx_phy>1)// to be updated + if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)// to be updated write_output("txsigF1.m","txsF1", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][1][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); } tx_lev = 0; - for (aa=0; aanb_antennas_tx_phy; aa++) { + for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { tx_lev += signal_energy(&PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa] [subframe*PHY_vars_eNB->lte_frame_parms.samples_per_tti], PHY_vars_eNB->lte_frame_parms.samples_per_tti); @@ -2956,7 +2953,7 @@ PMI_FEEDBACK: // printf("Copying tx ..., nsymb %d (n_tx %d), awgn %d\n",nsymb,PHY_vars_eNB->lte_frame_parms.nb_antennas_tx,awgn_flag); for (i=0; i<2*frame_parms->samples_per_tti; i++) { - for (aa=0; aanb_antennas_tx_phy; aa++) { + for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { if (awgn_flag == 0) { s_re[aa][i] = ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) + (i<<1)]); s_im[aa][i] = ((double)(((short *)PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id][aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) +(i<<1)+1]); @@ -3147,31 +3144,41 @@ PMI_FEEDBACK: //write_output("channel.m","ch",desc1->ch[0],desc1->channel_length,1,8); //write_output("channelF.m","chF",desc1->chF[0],nb_samples,1,8); for(k=0; knb_antennas_tx; aa++) { + for(aa=0; aanb_antennas_tx_eNB; aa++) { for (aarx=0; aarxnb_antennas_rx; aarx++) { for (i=0; iN_RB_DL*12; i++) { ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)( eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP); + //printf("x=%d,AMP=%d\n",eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x,AMP); ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)( eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP); if (transmission_mode == 7){ - ((int16_t *)PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)( - eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP); - ((int16_t *)PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)( - eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP); + if (PHY_vars_UE->high_speed_flag==0) { + ((int16_t *)PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(int16_t)( + eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP); + ((int16_t *)PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1]=(int16_t)( + eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP); + //printf("**,x=%d,AMP=%d\n",eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x,AMP); + } else { + ((int16_t *)PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)( + eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP); + ((int16_t *)PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size)*2]=(int16_t)( + eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP); + + } } } } } } } else { - for(aa=0; aanb_antennas_tx; aa++) { + for(aa=0; aanb_antennas_tx_eNB; aa++) { for (aarx=0; aarxnb_antennas_rx; aarx++) { for (i=0; iN_RB_DL*12; i++) { - ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP); - ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2; - if (transmission_mode == 7){ + ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP); + ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+1+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=0/2; + if (transmission_mode == 7) { if (PHY_vars_UE->high_speed_flag==0){ ((int16_t *) PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(short)(AMP); ((int16_t *) PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i+1]=0/2; From ed83cbd1ebeb79fd7a7fd72ba2b943282e2bc5b6 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 26 Nov 2015 10:32:43 +0100 Subject: [PATCH 021/132] TM7 dlsim works --- cmake_targets/CMakeLists.txt | 4 +- common/utils/Makefile.inc | 4 +- openair1/PHY/INIT/lte_init.c | 58 +++- .../lte_dl_channel_estimation.c | 2 +- .../PHY/LTE_ESTIMATION/lte_ue_measurements.c | 2 +- .../lte_ul_channel_estimation.c | 4 +- openair1/PHY/LTE_TRANSPORT/dci.c | 76 ++--- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 74 ++--- openair1/PHY/LTE_TRANSPORT/defs.h | 2 + openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 14 +- .../PHY/LTE_TRANSPORT/dlsch_demodulation.c | 36 +-- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 294 +++++++++++------- openair1/PHY/LTE_TRANSPORT/initial_sync.c | 4 +- openair1/PHY/LTE_TRANSPORT/pbch.c | 14 +- openair1/PHY/LTE_TRANSPORT/pcfich.c | 2 +- openair1/PHY/LTE_TRANSPORT/pilots.c | 99 ++---- openair1/PHY/LTE_TRANSPORT/proto.h | 56 +++- openair1/PHY/MODULATION/slot_fep.c | 2 +- openair1/PHY/TOOLS/lte_phy_scope.c | 2 +- openair1/PHY/TOOLS/smbv.c | 2 +- openair1/PHY/defs.h | 4 +- openair1/PHY/impl_defs_lte.h | 28 +- openair1/PHY/impl_defs_top.h | 1 + openair1/SCHED/phy_procedures_lte_eNb.c | 11 +- openair1/SIMULATION/LTE_PHY/dlsim.c | 174 +++++++---- openair1/SIMULATION/LTE_PHY/framegen.c | 2 +- openair1/SIMULATION/LTE_PHY/pbchsim.c | 2 +- openair1/SIMULATION/LTE_PHY/pdcchsim.c | 14 +- openair1/SIMULATION/LTE_PHY/scansim.c | 2 +- 29 files changed, 563 insertions(+), 426 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index ba7aa6c932..6898f21e4f 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -119,6 +119,7 @@ endmacro(add_list_string_option) #################################################### # compilation flags ############################################# +set(CMAKE_BUILD_TYPE "Debug") if (CMAKE_BUILD_TYPE STREQUAL "") set(CMAKE_BUILD_TYPE "RelWithDebInfo") endif() @@ -406,7 +407,7 @@ include_directories ("${X2AP_DIR}") # Hardware dependant options ################################### add_list1_option(NB_ANTENNAS_RX "2" "Number of antennas in reception" "1" "2" "4") -add_list1_option(NB_ANTENNAS_TX "2" "Number of antennas in transmission" "1" "2" "4") +add_list1_option(NB_ANTENNAS_TX "4" "Number of antennas in transmission" "1" "2" "4") add_list1_option(NB_ANTENNAS_TXRX "2" "Number of antennas in ????" "1" "2" "4") add_list2_option(RF_BOARD "EXMIMO" "RF head type" "False" "EXMIMO" "OAI_USRP" "ETHERNET" "OAI_BLADERF" "CPRIGW") @@ -819,6 +820,7 @@ set(PHY_SRC ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/rar_tools.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/print_stats.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/initial_sync.c + ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/beamforming.c ${OPENAIR1_DIR}/PHY/MODULATION/ofdm_mod.c ${OPENAIR1_DIR}/PHY/MODULATION/slot_fep.c ${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_mbsfn.c diff --git a/common/utils/Makefile.inc b/common/utils/Makefile.inc index 8c4ebbe31e..33c126b8d7 100644 --- a/common/utils/Makefile.inc +++ b/common/utils/Makefile.inc @@ -11,8 +11,8 @@ CFLAGS += -Wall -g -ggdb -Wstrict-prototypes -fno-strict-aliasing CFLAGS += $(call cc-option,-mpreferred-stack-boundary=4) #For performance, if some option doesn't exist in all gcc versions, use $(call cc-option,MY_OPTION) -CFLAGS += -O2 -CFLAGS += -funroll-loops +#CFLAGS += -O2 +#CFLAGS += -funroll-loops CFLAGS += -Wno-packed-bitfield-compat # This is the minimum CPU faetures for OAI diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index b139f5cf4f..50c70b6d02 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -77,7 +77,7 @@ void phy_config_mib(LTE_DL_FRAME_PARMS *lte_frame_parms, lte_frame_parms->nushift = Nid_cell%6; lte_frame_parms->Ncp = Ncp; lte_frame_parms->frame_type = frame_type; - lte_frame_parms->nb_antennas_tx_eNB = p_eNB; + lte_frame_parms->nb_antenna_ports_eNB = p_eNB; lte_frame_parms->phich_config_common.phich_resource = phich_config->phich_resource; lte_frame_parms->phich_config_common.phich_duration = phich_config->phich_duration; } @@ -1262,8 +1262,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, phy_vars_eNB->physicalConfigDedicated[UE_id] = NULL; } - phy_vars_eNB->first_run_I0_measurements = - 1; ///This flag used to be static. With multiple eNBs this does no longer work, hence we put it in the structure. However it has to be initialized with 1, which is performed here. + phy_vars_eNB->first_run_I0_measurements = 1; ///This flag used to be static. With multiple eNBs this does no longer work, hence we put it in the structure. However it has to be initialized with 1, which is performed here. #ifndef USER_MODE AssertFatal( frame_parms->nb_antennas_tx <= NB_ANTENNAS_TX, "nb_antennas_tx too large" ); @@ -1275,25 +1274,58 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, if (abstraction_flag==0) { // TX vars - eNB_common_vars->txdata[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*) ); - eNB_common_vars->txdataF[eNB_id] = (mod_sym_t **)malloc16(frame_parms->nb_antennas_tx*sizeof(mod_sym_t*) ); + eNB_common_vars->txdata[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*)); + eNB_common_vars->txdataF[eNB_id] = (mod_sym_t **)malloc16(NB_ANTENNA_PORTS_ENB*sizeof(mod_sym_t*)); + eNB_common_vars->txdataF_BF[eNB_id] = (mod_sym_t ***)malloc16(frame_parms->nb_antennas_tx*sizeof(mod_sym_t**)); - for (i=0; inb_antennas_tx; i++) { -#ifdef USER_MODE - eNB_common_vars->txdata[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) ); + for (i=0; i<14; i++) { eNB_common_vars->txdataF[eNB_id][i] = (mod_sym_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t) ); -#else // USER_MODE - eNB_common_vars->txdata[eNB_id][i] = TX_DMA_BUFFER[eNB_id][i]; - eNB_common_vars->txdataF[eNB_id][i] = (mod_sym_t *)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t) ); -#endif //USER_MODE #ifdef DEBUG_PHY - msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdata[%d][%d] = %p\n",eNB_id,i,eNB_common_vars->txdata[eNB_id][i]); msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdataF[%d][%d] = %p (%d bytes)\n", eNB_id,i,eNB_common_vars->txdataF[eNB_id][i], FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t)); #endif } + for (i=0; inb_antennas_tx; i++) { + eNB_common_vars->txdataF_BF[eNB_id][i] = (mod_sym_t*)malloc16_clear( OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(mod_sym_t*) ); +#ifdef USER_MODE + eNB_common_vars->txdata[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) ); +#else // USER_MODE + eNB_common_vars->txdata[eNB_id][i] = TX_DMA_BUFFER[eNB_id][i]; +#endif // USER_MODE +#ifdef DEBUG_PHY + msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdataF_BF[%d][%d][%d] = %p (%d bytes)\n", + eNB_id,i,j,eNB_common_vars->txdataF_BF[eNB_id][i][j], + OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(mod_sym_t)); + msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdata[%d][%d] = %p\n",eNB_id,i,eNB_common_vars->txdata[eNB_id][i]); +#endif + } + + for (i=0; i<2; i++) { // 2 is the total number of cell specific antenna ports + eNB_common_vars->cell_spec_bf_weights[eNB_id][i] = (int32_t **)malloc16_clear(frame_parms->nb_antennas_tx*sizeof(int32_t*)); + for (j=0; jnb_antennas_tx; j++) { + eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j] = (int32_t*)malloc16_clear(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); +#ifdef DEBUG_PUY + msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->cell_spec_bf_weights[%d][%d][%d] = %p (%d bytes)\n", + eNB_id,i,j,eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j], + OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); +#endif + } + } + + for (i=0; i<8; i++) { //antenna port 5 for TM7, antenna port 7-15 for TM8-10 + eNB_common_vars->ue_spec_bf_weights[eNB_id][i] = (int32_t **)malloc16_clear(frame_parms->nb_antennas_tx*sizeof(int32_t*)); + for (j=0; jnb_antennas_tx; j++) { + eNB_common_vars->ue_spec_bf_weights[eNB_id][i][j] = (int32_t*)malloc16_clear(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); +#ifdef DEBUG_PUY + msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->ue_spec_bf_weights[%d][%d][%d] = %p (%d bytes)\n", + eNB_id,i,j,eNB_common_vars->ue_spec_bf_weights[eNB_id][i][j], + OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); +#endif + } + } + // RX vars eNB_common_vars->rxdata[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*) ); eNB_common_vars->rxdata_7_5kHz[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*) ); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c index 56a097bfda..dd1d954b7b 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.c @@ -728,7 +728,7 @@ int lte_dl_channel_estimation(PHY_VARS_UE *phy_vars_ue, // do ifft of channel estimate for (aarx=0; aarxlte_frame_parms.nb_antennas_rx; aarx++) - for (p=0; plte_frame_parms.nb_antennas_tx_eNB; p++) { + for (p=0; plte_frame_parms.nb_antenna_ports_eNB; p++) { if (phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][(p<<1)+aarx]) idft((int16_t*) &phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_offset][(p<<1)+aarx][8], (int16_t*) phy_vars_ue->lte_ue_common_vars.dl_ch_estimates_time[eNB_offset][(p<<1)+aarx],1); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c index 0fa0fc4ce1..50a71eb47a 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c @@ -453,7 +453,7 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue, // signal measurements for (eNB_id=0; eNB_idn_connected_eNB; eNB_id++) { for (aarx=0; aarxnb_antennas_rx; aarx++) { - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) { phy_vars_ue->PHY_measurements.rx_spatial_power[eNB_id][aatx][aarx] = (signal_energy_nodc(&phy_vars_ue->lte_ue_common_vars.dl_ch_estimates[eNB_id][(aatx<<1) + aarx][0], (N_RB_DL*12))); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c index 9a47a6b355..44214e8b9d 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c @@ -84,7 +84,7 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB, int16_t ul_ch_estimates_re,ul_ch_estimates_im; int32_t rx_power_correction; - //uint8_t nb_antennas_rx = frame_parms->nb_antennas_tx_eNB; + //uint8_t nb_antennas_rx = frame_parms->nb_antenna_ports_eNB; uint8_t nb_antennas_rx = frame_parms->nb_antennas_rx; uint8_t cyclic_shift; @@ -678,7 +678,7 @@ int32_t lte_srs_channel_estimation(LTE_DL_FRAME_PARMS *frame_parms, int T_SFC,aa; int N_symb,symbol; - uint8_t nb_antennas_rx = frame_parms->nb_antennas_tx_eNB; + uint8_t nb_antennas_rx = frame_parms->nb_antenna_ports_eNB; #ifdef DEBUG_SRS char fname[40], vname[40]; #endif diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index 43d2410cbb..dd18d16108 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -74,7 +74,7 @@ uint32_t check_phich_reg(LTE_DL_FRAME_PARMS *frame_parms,uint32_t kprime,uint8_t // compute REG based on symbol if ((lprime == 0)|| - ((lprime==1)&&(frame_parms->nb_antennas_tx_eNB == 4))) + ((lprime==1)&&(frame_parms->nb_antenna_ports_eNB == 4))) mprime = kprime/6; else mprime = kprime>>2; @@ -301,7 +301,7 @@ void pdcch_interleaving(LTE_DL_FRAME_PARMS *frame_parms,mod_sym_t **z, mod_sym_t for (row=0; row=ND) { - for (a=0; anb_antennas_tx_eNB; a++) { + for (a=0; anb_antenna_ports_eNB; a++) { //printf("a %d k %d\n",a,k); wptr = &wtemp[a][k<<2]; @@ -325,7 +325,7 @@ void pdcch_interleaving(LTE_DL_FRAME_PARMS *frame_parms,mod_sym_t **z, mod_sym_t // permutation for (i=0; inb_antennas_tx_eNB; a++) { + for (a=0; anb_antenna_ports_eNB; a++) { //wptr = &wtemp[a][i<<2]; //wptr2 = &wbar[a][((i+frame_parms->Nid_cell)%Mquad)<<2]; @@ -417,7 +417,7 @@ void pdcch_demapping(uint16_t *llr,uint16_t *wbar,LTE_DL_FRAME_PARMS *frame_parm re_offset0++; } } - } else if ((lprime==1)&&(frame_parms->nb_antennas_tx_eNB == 4)) { + } else if ((lprime==1)&&(frame_parms->nb_antenna_ports_eNB == 4)) { // LATER!!!! } else { // no pilots in this symbol kprime_mod12 = kprime%12; @@ -655,7 +655,7 @@ void pdcch_channel_level(int32_t **dl_ch_estimates_ext, int16x8_t *dl_ch128; int32x4_t *avg128P; #endif - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) { //clear average level #if defined(__x86_64__) || defined(__i386__) @@ -833,7 +833,7 @@ void pdcch_detection_mrc_i(LTE_DL_FRAME_PARMS *frame_parms, int32_t i; if (frame_parms->nb_antennas_rx>1) { - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) { //if (frame_parms->mode1_flag && (aatx>0)) break; #if defined(__x86_64__) || defined(__i386__) @@ -1396,8 +1396,8 @@ void pdcch_channel_compensation(int32_t **rxdataF_ext, if (symbol==0) pilots=1; - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { - //if (frame_parms->mode1_flag && aatx>0) break; //if mode1_flag is set then there is only one stream to extract, independent of nb_antennas_tx_eNB + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) { + //if (frame_parms->mode1_flag && aatx>0) break; //if mode1_flag is set then there is only one stream to extract, independent of nb_antenna_ports_eNB for (aarx=0; aarxnb_antennas_rx; aarx++) { @@ -1603,7 +1603,7 @@ void pdcch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, int32_t i; if (frame_parms->nb_antennas_rx>1) { - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) { #if defined(__x86_64__) || defined(__i386__) rxdataF_comp128_0 = (__m128i *)&rxdataF_comp[(aatx<<1)][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128_1 = (__m128i *)&rxdataF_comp[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12]; @@ -1724,7 +1724,7 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars, high_speed_flag, frame_parms); #endif //MU_RECEIVER - } else if (frame_parms->nb_antennas_tx_eNB>1) { + } else if (frame_parms->nb_antenna_ports_eNB>1) { pdcch_extract_rbs_dual(lte_ue_common_vars->rxdataF, lte_ue_common_vars->dl_ch_estimates[eNB_id], lte_ue_pdcch_vars[eNB_id]->rxdataF_ext, @@ -1750,7 +1750,7 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars, avgs = 0; - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) avgs = cmax(avgs,avgP[(aarx<<1)+aatx]); @@ -1991,10 +1991,10 @@ uint8_t get_num_pdcch_symbols(uint8_t num_dci, //if ((9*numCCE) <= (frame_parms->N_RB_DL*2)) if (numCCE <= get_nCCE(1, frame_parms, get_mi(frame_parms, subframe))) return(cmax(1,nCCEmin)); - //else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 4 : 5))) + //else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antenna_ports_eNB==4) ? 4 : 5))) else if (numCCE <= get_nCCE(2, frame_parms, get_mi(frame_parms, subframe))) return(cmax(2,nCCEmin)); - //else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 7 : 8))) + //else if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antenna_ports_eNB==4) ? 7 : 8))) else if (numCCE <= get_nCCE(3, frame_parms, get_mi(frame_parms, subframe))) return(cmax(3,nCCEmin)); else if (frame_parms->N_RB_DL<=10) { @@ -2004,10 +2004,10 @@ uint8_t get_num_pdcch_symbols(uint8_t num_dci, get_nCCE(2, frame_parms, get_mi(frame_parms, subframe)), get_nCCE(3, frame_parms, get_mi(frame_parms, subframe))); - if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 10 : 11))) + if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antenna_ports_eNB==4) ? 10 : 11))) return(4); } else { // extended CP - if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antennas_tx_eNB==4) ? 9 : 10))) + if ((9*numCCE) <= (frame_parms->N_RB_DL*((frame_parms->nb_antenna_ports_eNB==4) ? 9 : 10))) return(4); } } @@ -2246,7 +2246,7 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci, // Copy REG to TX buffer if ((lprime == 0)|| - ((lprime==1)&&(frame_parms->nb_antennas_tx_eNB == 4))) { + ((lprime==1)&&(frame_parms->nb_antenna_ports_eNB == 4))) { // first symbol, or second symbol+4 TX antennas skip pilots kprime_mod12 = kprime%12; @@ -2258,7 +2258,7 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci, if ((i!=(nushiftmod3))&&(i!=(nushiftmod3+3))) { txdataF[0][tti_offset+i] = wbar[0][mprime]; - if (frame_parms->nb_antennas_tx_eNB > 1) + if (frame_parms->nb_antenna_ports_eNB > 1) txdataF[1][tti_offset+i] = wbar[1][mprime]; #ifdef DEBUG_DCI_ENCODING @@ -2277,7 +2277,7 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci, for (i=0; i<4; i++) { txdataF[0][tti_offset+i] = wbar[0][mprime]; - if (frame_parms->nb_antennas_tx_eNB > 1) + if (frame_parms->nb_antenna_ports_eNB > 1) txdataF[1][tti_offset+i] = wbar[1][mprime]; #ifdef DEBUG_DCI_ENCODING @@ -2288,7 +2288,7 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci, } else { txdataF[0][tti_offset+0] = wbar[0][mprime]; - if (frame_parms->nb_antennas_tx_eNB > 1) + if (frame_parms->nb_antenna_ports_eNB > 1) txdataF[1][tti_offset+0] = wbar[1][mprime]; #ifdef DEBUG_DCI_ENCODING @@ -2297,7 +2297,7 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci, mprime++; txdataF[0][tti_offset+1] = wbar[0][mprime]; - if (frame_parms->nb_antennas_tx_eNB > 1) + if (frame_parms->nb_antenna_ports_eNB > 1) txdataF[1][tti_offset+1] = wbar[1][mprime]; #ifdef DEBUG_DCI_ENCODING @@ -2306,7 +2306,7 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci, mprime++; txdataF[0][tti_offset-frame_parms->ofdm_symbol_size+3] = wbar[0][mprime]; - if (frame_parms->nb_antennas_tx_eNB > 1) + if (frame_parms->nb_antenna_ports_eNB > 1) txdataF[1][tti_offset-frame_parms->ofdm_symbol_size+3] = wbar[1][mprime]; #ifdef DEBUG_DCI_ENCODING @@ -2316,7 +2316,7 @@ uint8_t generate_dci_top(uint8_t num_ue_spec_dci, mprime++; txdataF[0][tti_offset-frame_parms->ofdm_symbol_size+4] = wbar[0][mprime]; - if (frame_parms->nb_antennas_tx_eNB > 1) + if (frame_parms->nb_antenna_ports_eNB > 1) txdataF[1][tti_offset-frame_parms->ofdm_symbol_size+4] = wbar[1][mprime]; #ifdef DEBUG_DCI_ENCODING @@ -2820,12 +2820,12 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, format1_size_bits = sizeof_DCI1_1_5MHz_TDD_t; format1_size_bytes = sizeof(DCI1_1_5MHz_TDD_t); - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { format2_size_bits = sizeof_DCI2_1_5MHz_2A_TDD_t; format2_size_bytes = sizeof(DCI2_1_5MHz_2A_TDD_t); format2A_size_bits = sizeof_DCI2A_1_5MHz_2A_TDD_t; format2A_size_bytes = sizeof(DCI2A_1_5MHz_2A_TDD_t); - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { format2_size_bits = sizeof_DCI2_1_5MHz_4A_TDD_t; format2_size_bytes = sizeof(DCI2_1_5MHz_4A_TDD_t); format2A_size_bits = sizeof_DCI2A_1_5MHz_4A_TDD_t; @@ -2841,12 +2841,12 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, format1_size_bits = sizeof_DCI1_1_5MHz_FDD_t; format1_size_bytes = sizeof(DCI1_1_5MHz_FDD_t); - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { format2_size_bits = sizeof_DCI2_1_5MHz_2A_FDD_t; format2_size_bytes = sizeof(DCI2_1_5MHz_2A_FDD_t); format2A_size_bits = sizeof_DCI2A_1_5MHz_2A_FDD_t; format2A_size_bytes = sizeof(DCI2A_1_5MHz_2A_FDD_t); - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { format2_size_bits = sizeof_DCI2_1_5MHz_4A_FDD_t; format2_size_bytes = sizeof(DCI2_1_5MHz_4A_FDD_t); format2A_size_bits = sizeof_DCI2A_1_5MHz_4A_FDD_t; @@ -2868,12 +2868,12 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, format1_size_bits = sizeof_DCI1_5MHz_TDD_t; format1_size_bytes = sizeof(DCI1_5MHz_TDD_t); - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { format2_size_bits = sizeof_DCI2_5MHz_2A_TDD_t; format2_size_bytes = sizeof(DCI2_5MHz_2A_TDD_t); format2A_size_bits = sizeof_DCI2A_5MHz_2A_TDD_t; format2A_size_bytes = sizeof(DCI2A_5MHz_2A_TDD_t); - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { format2_size_bits = sizeof_DCI2_5MHz_4A_TDD_t; format2_size_bytes = sizeof(DCI2_5MHz_4A_TDD_t); format2A_size_bits = sizeof_DCI2A_5MHz_4A_TDD_t; @@ -2889,12 +2889,12 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, format1_size_bits = sizeof_DCI1_5MHz_FDD_t; format1_size_bytes = sizeof(DCI1_5MHz_FDD_t); - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { format2_size_bits = sizeof_DCI2_5MHz_2A_FDD_t; format2_size_bytes = sizeof(DCI2_5MHz_2A_FDD_t); format2A_size_bits = sizeof_DCI2A_5MHz_2A_FDD_t; format2A_size_bytes = sizeof(DCI2A_5MHz_2A_FDD_t); - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { format2_size_bits = sizeof_DCI2_5MHz_4A_FDD_t; format2_size_bytes = sizeof(DCI2_5MHz_4A_FDD_t); format2A_size_bits = sizeof_DCI2A_5MHz_4A_FDD_t; @@ -2915,12 +2915,12 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, format1_size_bits = sizeof_DCI1_10MHz_TDD_t; format1_size_bytes = sizeof(DCI1_10MHz_TDD_t); - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { format2_size_bits = sizeof_DCI2_10MHz_2A_TDD_t; format2_size_bytes = sizeof(DCI2_10MHz_2A_TDD_t); format2A_size_bits = sizeof_DCI2A_10MHz_2A_TDD_t; format2A_size_bytes = sizeof(DCI2A_10MHz_2A_TDD_t); - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { format2_size_bits = sizeof_DCI2_10MHz_4A_TDD_t; format2_size_bytes = sizeof(DCI2_10MHz_4A_TDD_t); format2A_size_bits = sizeof_DCI2A_10MHz_4A_TDD_t; @@ -2936,12 +2936,12 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, format1_size_bits = sizeof_DCI1_10MHz_FDD_t; format1_size_bytes = sizeof(DCI1_10MHz_FDD_t); - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { format2_size_bits = sizeof_DCI2_10MHz_2A_FDD_t; format2_size_bytes = sizeof(DCI2_10MHz_2A_FDD_t); format2A_size_bits = sizeof_DCI2A_10MHz_2A_FDD_t; format2A_size_bytes = sizeof(DCI2A_10MHz_2A_FDD_t); - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { format2_size_bits = sizeof_DCI2_10MHz_4A_FDD_t; format2_size_bytes = sizeof(DCI2_10MHz_4A_FDD_t); format2A_size_bits = sizeof_DCI2A_10MHz_4A_FDD_t; @@ -2962,12 +2962,12 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, format1_size_bits = sizeof_DCI1_20MHz_TDD_t; format1_size_bytes = sizeof(DCI1_20MHz_TDD_t); - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { format2_size_bits = sizeof_DCI2_20MHz_2A_TDD_t; format2_size_bytes = sizeof(DCI2_20MHz_2A_TDD_t); format2A_size_bits = sizeof_DCI2A_20MHz_2A_TDD_t; format2A_size_bytes = sizeof(DCI2A_20MHz_2A_TDD_t); - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { format2_size_bits = sizeof_DCI2_20MHz_4A_TDD_t; format2_size_bytes = sizeof(DCI2_20MHz_4A_TDD_t); format2A_size_bits = sizeof_DCI2A_20MHz_4A_TDD_t; @@ -2983,12 +2983,12 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, format1_size_bits = sizeof_DCI1_20MHz_FDD_t; format1_size_bytes = sizeof(DCI1_20MHz_FDD_t); - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { format2_size_bits = sizeof_DCI2_20MHz_2A_FDD_t; format2_size_bytes = sizeof(DCI2_20MHz_2A_FDD_t); format2A_size_bits = sizeof_DCI2A_20MHz_2A_FDD_t; format2A_size_bytes = sizeof(DCI2A_20MHz_2A_FDD_t); - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { format2_size_bits = sizeof_DCI2_20MHz_4A_FDD_t; format2_size_bytes = sizeof(DCI2_20MHz_4A_FDD_t); format2A_size_bits = sizeof_DCI2A_20MHz_4A_FDD_t; diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index a0b4cba24e..7cb47a49e9 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -2662,7 +2662,7 @@ int generate_eNB_dlsch_params_from_dci(int frame, // compute DL power control parameters computeRhoA_eNB(pdsch_config_dedicated, dlsch[0],dlsch0_harq->dl_power_off); - computeRhoB_eNB(pdsch_config_dedicated,&(frame_parms->pdsch_config_common),frame_parms->nb_antennas_tx_eNB,dlsch[0],dlsch0_harq->dl_power_off); + computeRhoB_eNB(pdsch_config_dedicated,&(frame_parms->pdsch_config_common),frame_parms->nb_antenna_ports_eNB,dlsch[0],dlsch0_harq->dl_power_off); return(0); } @@ -3428,7 +3428,7 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci) if ((frame_parms->frame_type == TDD) && (frame_parms->tdd_config>0)) { - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { switch(frame_parms->N_RB_DL) { case 6: LOG_D(PHY,"DCI format2A 2 antennas (FDD 1.5 MHz), rnti %x (%x): rb_alloc %x, mcs1 %d, mcs2 %d, harq_pid %d, ndi1 %d, ndi2 %d, RV1 %d, RV2 %d, TPC %d, dai %d, tbswap %d\n", @@ -3507,7 +3507,7 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci) DevParam (frame_parms->N_RB_DL, 0, 0); break; } - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { switch(frame_parms->N_RB_DL) { case 6: LOG_D(PHY,"DCI format2A 4 antennas (TDD 1.5 MHz), rnti %x (%llx): rb_alloc %x, mcs1 %d, mcs2 %d, harq_pid %d, ndi1 %d, ndi2 %d, RV1 %d, RV2 %d, TPC %d, dai %d, tbswap %d, tpmi %d\n", @@ -3592,7 +3592,7 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci) } } } else if (frame_parms->frame_type == FDD) { - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { switch(frame_parms->N_RB_DL) { case 6: LOG_D(PHY,"DCI format2A 2 antennas (FDD, 1.5 MHz), rnti %x (%x): rb_alloc %x, mcs1 %d, mcs2 %d, harq_pid %d, ndi1 %d, ndi2 %d, RV1 %d, RV2 %d, tb_swap %d, TPC %d\n", @@ -3666,7 +3666,7 @@ int dump_dci(LTE_DL_FRAME_PARMS *frame_parms, DCI_ALLOC_t *dci) DevParam (frame_parms->N_RB_DL, 0, 0); break; } - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { switch(frame_parms->N_RB_DL) { case 6: @@ -4467,7 +4467,7 @@ int generate_ue_dlsch_params_from_dci(int frame, switch (frame_parms->N_RB_DL) { case 6: - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { if (frame_type == TDD) { mcs1 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2_1_5MHz_2A_TDD_t *)dci_pdu)->mcs2; @@ -4487,7 +4487,7 @@ int generate_ue_dlsch_params_from_dci(int frame, tbswap = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->tb_swap; tpmi = ((DCI2_1_5MHz_2A_FDD_t *)dci_pdu)->tpmi; } - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { if (frame_type == TDD) { mcs1 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2_1_5MHz_4A_TDD_t *)dci_pdu)->mcs2; @@ -4508,13 +4508,13 @@ int generate_ue_dlsch_params_from_dci(int frame, tpmi = ((DCI2_1_5MHz_4A_FDD_t *)dci_pdu)->tpmi; } } else { - LOG_E(PHY,"UE: subframe %d Format2 DCI: unsupported number of TX antennas %d\n",subframe,frame_parms->nb_antennas_tx_eNB); + LOG_E(PHY,"UE: subframe %d Format2 DCI: unsupported number of TX antennas %d\n",subframe,frame_parms->nb_antenna_ports_eNB); } break; case 25: - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { if (frame_type == TDD) { mcs1 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2_5MHz_2A_TDD_t *)dci_pdu)->mcs2; @@ -4536,7 +4536,7 @@ int generate_ue_dlsch_params_from_dci(int frame, tbswap = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->tb_swap; tpmi = ((DCI2_5MHz_2A_FDD_t *)dci_pdu)->tpmi; } - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { if (frame_type == TDD) { mcs1 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2_5MHz_4A_TDD_t *)dci_pdu)->mcs2; @@ -4559,13 +4559,13 @@ int generate_ue_dlsch_params_from_dci(int frame, tpmi = ((DCI2_5MHz_4A_FDD_t *)dci_pdu)->tpmi; } } else { - LOG_E(PHY,"UE: Format2 DCI: unsupported number of TX antennas %d\n",frame_parms->nb_antennas_tx_eNB); + LOG_E(PHY,"UE: Format2 DCI: unsupported number of TX antennas %d\n",frame_parms->nb_antenna_ports_eNB); } break; case 50: - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { if (frame_type == TDD) { mcs1 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2_10MHz_2A_TDD_t *)dci_pdu)->mcs2; @@ -4587,7 +4587,7 @@ int generate_ue_dlsch_params_from_dci(int frame, tbswap = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->tb_swap; tpmi = ((DCI2_10MHz_2A_FDD_t *)dci_pdu)->tpmi; } - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { if (frame_type == TDD) { mcs1 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2_10MHz_4A_TDD_t *)dci_pdu)->mcs2; @@ -4610,13 +4610,13 @@ int generate_ue_dlsch_params_from_dci(int frame, tpmi = ((DCI2_10MHz_4A_FDD_t *)dci_pdu)->tpmi; } } else { - LOG_E(PHY,"UE: Format2A DCI: unsupported number of TX antennas %d\n",frame_parms->nb_antennas_tx_eNB); + LOG_E(PHY,"UE: Format2A DCI: unsupported number of TX antennas %d\n",frame_parms->nb_antenna_ports_eNB); } break; case 100: - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { if (frame_type == TDD) { mcs1 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2_20MHz_2A_TDD_t *)dci_pdu)->mcs2; @@ -4638,7 +4638,7 @@ int generate_ue_dlsch_params_from_dci(int frame, tbswap = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->tb_swap; tpmi = ((DCI2_20MHz_2A_FDD_t *)dci_pdu)->tpmi; } - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { if (frame_type == TDD) { mcs1 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2_20MHz_4A_TDD_t *)dci_pdu)->mcs2; @@ -4661,7 +4661,7 @@ int generate_ue_dlsch_params_from_dci(int frame, tpmi = ((DCI2_20MHz_4A_FDD_t *)dci_pdu)->tpmi; } } else { - LOG_E(PHY,"UE: Format2A DCI: unsupported number of TX antennas %d\n",frame_parms->nb_antennas_tx_eNB); + LOG_E(PHY,"UE: Format2A DCI: unsupported number of TX antennas %d\n",frame_parms->nb_antenna_ports_eNB); } break; @@ -4856,7 +4856,7 @@ int generate_ue_dlsch_params_from_dci(int frame, switch (frame_parms->N_RB_DL) { case 6: - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { if (frame_type == TDD) { mcs1 = ((DCI2A_1_5MHz_2A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2A_1_5MHz_2A_TDD_t *)dci_pdu)->mcs2; @@ -4878,7 +4878,7 @@ int generate_ue_dlsch_params_from_dci(int frame, harq_pid = ((DCI2A_1_5MHz_2A_FDD_t *)dci_pdu)->harq_pid; tbswap = ((DCI2A_1_5MHz_2A_FDD_t *)dci_pdu)->tb_swap; } - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { if (frame_type == TDD) { mcs1 = ((DCI2A_1_5MHz_4A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2A_1_5MHz_4A_TDD_t *)dci_pdu)->mcs2; @@ -4903,13 +4903,13 @@ int generate_ue_dlsch_params_from_dci(int frame, tpmi = ((DCI2A_1_5MHz_4A_FDD_t *)dci_pdu)->tpmi; } } else { - LOG_E(PHY,"eNB: subframe %d UE %x, Format2A DCI: unsupported number of TX antennas %d\n",subframe,rnti,frame_parms->nb_antennas_tx_eNB); + LOG_E(PHY,"eNB: subframe %d UE %x, Format2A DCI: unsupported number of TX antennas %d\n",subframe,rnti,frame_parms->nb_antenna_ports_eNB); } break; case 25: - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { if (frame_type == TDD) { mcs1 = ((DCI2A_5MHz_2A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2A_5MHz_2A_TDD_t *)dci_pdu)->mcs2; @@ -4933,7 +4933,7 @@ int generate_ue_dlsch_params_from_dci(int frame, harq_pid = ((DCI2A_5MHz_2A_FDD_t *)dci_pdu)->harq_pid; tbswap = ((DCI2A_5MHz_2A_FDD_t *)dci_pdu)->tb_swap; } - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { if (frame_type == TDD) { mcs1 = ((DCI2A_5MHz_4A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2A_5MHz_4A_TDD_t *)dci_pdu)->mcs2; @@ -4960,13 +4960,13 @@ int generate_ue_dlsch_params_from_dci(int frame, tpmi = ((DCI2A_5MHz_4A_FDD_t *)dci_pdu)->tpmi; } } else { - LOG_E(PHY,"eNB: subframe %d UE %x, Format2A DCI: unsupported number of TX antennas %d\n",subframe,rnti,frame_parms->nb_antennas_tx_eNB); + LOG_E(PHY,"eNB: subframe %d UE %x, Format2A DCI: unsupported number of TX antennas %d\n",subframe,rnti,frame_parms->nb_antenna_ports_eNB); } break; case 50: - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { if (frame_type == TDD) { mcs1 = ((DCI2A_10MHz_2A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2A_10MHz_2A_TDD_t *)dci_pdu)->mcs2; @@ -4990,7 +4990,7 @@ int generate_ue_dlsch_params_from_dci(int frame, harq_pid = ((DCI2A_10MHz_2A_FDD_t *)dci_pdu)->harq_pid; tbswap = ((DCI2A_10MHz_2A_FDD_t *)dci_pdu)->tb_swap; } - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { if (frame_type == TDD) { mcs1 = ((DCI2A_10MHz_4A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2A_10MHz_4A_TDD_t *)dci_pdu)->mcs2; @@ -5017,13 +5017,13 @@ int generate_ue_dlsch_params_from_dci(int frame, tpmi = ((DCI2A_10MHz_4A_FDD_t *)dci_pdu)->tpmi; } } else { - LOG_E(PHY,"eNB: subframe %d UE %x, Format2A DCI: unsupported number of TX antennas %d\n",subframe,rnti,frame_parms->nb_antennas_tx_eNB); + LOG_E(PHY,"eNB: subframe %d UE %x, Format2A DCI: unsupported number of TX antennas %d\n",subframe,rnti,frame_parms->nb_antenna_ports_eNB); } break; case 100: - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { if (frame_type == TDD) { mcs1 = ((DCI2A_20MHz_2A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2A_20MHz_2A_TDD_t *)dci_pdu)->mcs2; @@ -5047,7 +5047,7 @@ int generate_ue_dlsch_params_from_dci(int frame, harq_pid = ((DCI2A_20MHz_2A_FDD_t *)dci_pdu)->harq_pid; tbswap = ((DCI2A_20MHz_2A_FDD_t *)dci_pdu)->tb_swap; } - } else if (frame_parms->nb_antennas_tx_eNB == 4) { + } else if (frame_parms->nb_antenna_ports_eNB == 4) { if (frame_type == TDD) { mcs1 = ((DCI2A_20MHz_4A_TDD_t *)dci_pdu)->mcs1; mcs2 = ((DCI2A_20MHz_4A_TDD_t *)dci_pdu)->mcs2; @@ -5074,7 +5074,7 @@ int generate_ue_dlsch_params_from_dci(int frame, tpmi = ((DCI2A_20MHz_4A_FDD_t *)dci_pdu)->tpmi; } } else { - LOG_E(PHY,"eNB: subframe %d UE %x, Format2A DCI: unsupported number of TX antennas %d\n",subframe,rnti,frame_parms->nb_antennas_tx_eNB); + LOG_E(PHY,"eNB: subframe %d UE %x, Format2A DCI: unsupported number of TX antennas %d\n",subframe,rnti,frame_parms->nb_antenna_ports_eNB); } break; @@ -5217,7 +5217,7 @@ int generate_ue_dlsch_params_from_dci(int frame, } } - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { dlsch0_harq->TBS = TBStable[get_I_TBS(dlsch0_harq->mcs)][dlsch0_harq->nb_rb-1]; dlsch1_harq->TBS = TBStable[get_I_TBS(dlsch1_harq->mcs)][dlsch0_harq->nb_rb-1]; @@ -5232,7 +5232,7 @@ int generate_ue_dlsch_params_from_dci(int frame, dlsch0_harq->mimo_mode = ALAMOUTI; dlsch1_harq->mimo_mode = ALAMOUTI; } - } else if (frame_parms->nb_antennas_tx_eNB == 4) { // 4 antenna case + } else if (frame_parms->nb_antenna_ports_eNB == 4) { // 4 antenna case if ((dlsch0->active==1) && (dlsch1->active==1)) { switch (tpmi) { case 0: // one layer per transport block @@ -5316,7 +5316,7 @@ int generate_ue_dlsch_params_from_dci(int frame, } } } else { - LOG_E(PHY,"Illegal number of antennas for eNB %d\n",frame_parms->nb_antennas_tx_eNB); + LOG_E(PHY,"Illegal number of antennas for eNB %d\n",frame_parms->nb_antenna_ports_eNB); } if (mcs1 <= 28) @@ -5528,7 +5528,7 @@ int generate_ue_dlsch_params_from_dci(int frame, // compute DL power control parameters computeRhoA_UE(pdsch_config_dedicated, dlsch[0],dlsch0_harq->dl_power_off); - computeRhoB_UE(pdsch_config_dedicated,&(frame_parms->pdsch_config_common),frame_parms->nb_antennas_tx_eNB,dlsch[0],dlsch0_harq->dl_power_off); + computeRhoB_UE(pdsch_config_dedicated,&(frame_parms->pdsch_config_common),frame_parms->nb_antenna_ports_eNB,dlsch[0],dlsch0_harq->dl_power_off); return(0); } @@ -7676,7 +7676,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id) switch(transmission_mode) { case 1: for (count=0; countN_RB_DL*12; count++) { - for(a_tx=0; a_txnb_antennas_tx_eNB; a_tx++) { + for(a_tx=0; a_txnb_antenna_ports_eNB; a_tx++) { for (a_rx=0; a_rxnb_antennas_rx; a_rx++) { s_dB[count] = 10*log10(pow(((int16_t *) dl_channel_est[(a_tx<<1)+a_rx])[2*count+(LTE_CE_FILTER_LENGTH)*2],2) + pow(((int16_t *) dl_channel_est[(a_tx<<1)+a_rx])[2*count+1+(LTE_CE_FILTER_LENGTH)*2], 2)) - meas->n0_power_avg_dB; @@ -7690,7 +7690,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id) for (count=0; countN_RB_DL*12; count++) { abs_channel=0; - for(a_tx=0; a_txnb_antennas_tx_eNB; a_tx++) { + for(a_tx=0; a_txnb_antenna_ports_eNB; a_tx++) { for (a_rx=0; a_rxnb_antennas_rx; a_rx++) { abs_channel += (pow(((int16_t *) dl_channel_est[(a_tx<<1)+a_rx])[2*count+(LTE_CE_FILTER_LENGTH)*2],2) + pow(((int16_t *) dl_channel_est[(a_tx<<1)+a_rx])[2*count+1+(LTE_CE_FILTER_LENGTH)*2],2)); } @@ -7710,7 +7710,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id) qq = (q>>(((count/12)>>2)<<1))&3; //printf("pmi_alloc %d: rb %d, pmi %d\n",q,count/12,qq); - for(a_tx=0; a_txnb_antennas_tx_eNB; a_tx++) { + for(a_tx=0; a_txnb_antenna_ports_eNB; a_tx++) { for (a_rx=0; a_rxnb_antennas_rx; a_rx++) { switch(qq) { case 0: @@ -7792,7 +7792,7 @@ double sinr_eff_cqi_calc(PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id) qq = (q>>(((count/12)>>2)<<1))&3; //printf("pmi_alloc %d: rb %d, pmi %d\n",q,count/12,qq); - for(a_tx=0; a_txnb_antennas_tx_eNB; a_tx++) { + for(a_tx=0; a_txnb_antenna_ports_eNB; a_tx++) { for (a_rx=0; a_rxnb_antennas_rx; a_rx++) { switch(qq) { case 0: diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h index 0d3d028c8a..96c2b7d760 100644 --- a/openair1/PHY/LTE_TRANSPORT/defs.h +++ b/openair1/PHY/LTE_TRANSPORT/defs.h @@ -240,6 +240,8 @@ typedef struct { typedef struct { /// TX buffers for UE-spec transmission (antenna ports 5 or 7..14, prior to precoding) uint32_t *txdataF[8]; + /// beamforming weights for UE-spec transmission (antenna ports 5 or 7..14), for each codeword, maximum 4 layers? + uint32_t **ue_spec_bf_weights[4]; /// Allocated RNTI (0 means DLSCH_t is not currently used) uint16_t rnti; /// Active flag for baseband transmitter processing diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index f8af3038d3..0db7708860 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -117,12 +117,13 @@ void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch) } -LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigned char N_RB_DL, uint8_t abstraction_flag) +LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigned char N_RB_DL, uint8_t abstraction_flag, LTE_DL_FRAME_PARMS* frame_parms) { LTE_eNB_DLSCH_t *dlsch; - unsigned char exit_flag = 0,i,j,r; + unsigned char exit_flag = 0,i,j,r,aa; unsigned char bw_scaling =1; + uint8_t nb_antennas_tx = frame_parms->nb_antennas_tx; switch (N_RB_DL) { case 6: @@ -193,6 +194,15 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,unsigne exit_flag=3; } } + + for (i=0; i<4; i++) { + dlsch->ue_spec_bf_weights[i] = (int32_t **)malloc16(nb_antennas_tx*sizeof(int32_t*)); + dlsch->ue_spec_bf_weights[i] = (int32_t **)malloc16(nb_antennas_tx*sizeof(int32_t*)); + + for (aa=0; aaue_spec_bf_weights[i][aa] = (int32_t *)malloc16(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); + } + } if (exit_flag==0) { for (i=0; irb_alloc_even; - if (frame_parms->nb_antennas_tx_eNB>1 && beamforming_mode==0) { + if (frame_parms->nb_antenna_ports_eNB>1 && beamforming_mode==0) { #ifdef DEBUG_DLSCH_MOD LOG_I(PHY,"dlsch: using pmi %x (%p), rb_alloc %x\n",pmi2hex_2Ar1(dlsch0_harq->pmi_alloc),dlsch_ue[0],dlsch0_harq->rb_alloc_even[0]); #endif @@ -296,7 +296,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, // in case of precoding we add an additional factor of two for the precoding gain avgs = 0; - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) avgs = cmax(avgs,avg[(aatx<<1)+aarx]); @@ -304,7 +304,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars[eNB_id]->log2_maxh = (log2_approx(avgs)/2); - // + log2_approx(frame_parms->nb_antennas_tx_eNB-1) //-1 because log2_approx counts the number of bits + // + log2_approx(frame_parms->nb_antenna_ports_eNB-1) //-1 because log2_approx counts the number of bits // + log2_approx(frame_parms->nb_antennas_rx-1); if ((dlsch0_harq->mimo_mode>=UNIFORM_PRECODING11) && @@ -317,11 +317,11 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, Nb_tx*Nb_rx in TM2,4,5 Nb_tx^2*Nb_rx in TM6 */ /* - K = frame_parms->nb_antennas_rx*frame_parms->nb_antennas_tx_eNB; //that also covers TM1 since Nb_tx=1 + K = frame_parms->nb_antennas_rx*frame_parms->nb_antenna_ports_eNB; //that also covers TM1 since Nb_tx=1 if ((dlsch0_harq->mimo_mode>=UNIFORM_PRECODING11) && (dlsch0_harq->mimo_mode< DUALSTREAM_UNIFORM_PRECODING1) && (dlsch0_harq->dl_power_off==1)) // we are in TM 6 - K *= frame_parms->nb_antennas_tx_eNB; + K *= frame_parms->nb_antenna_ports_eNB; lte_ue_pdsch_vars[eNB_id]->log2_maxh = (log2_approx(K*avgs)/2); */ @@ -332,7 +332,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, #endif } - aatx = frame_parms->nb_antennas_tx_eNB; + aatx = frame_parms->nb_antenna_ports_eNB; aarx = frame_parms->nb_antennas_rx; if (dlsch0_harq->mimo_modemimo_mode == LARGE_CDD) { // TM3 // LOG_I(PHY,"Running PDSCH RX for TM3\n"); - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { if (first_symbol_flag==1) { // effective channel of desired user is always stronger than interfering eff. channel dlsch_channel_level_TM3(lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext, @@ -573,7 +573,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, // printf("MRC\n"); if (frame_parms->nb_antennas_rx > 1) { if (dlsch0_harq->mimo_mode == LARGE_CDD) { - if (frame_parms->nb_antennas_tx_eNB == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { dlsch_detection_mrc(frame_parms, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0, lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[dlsch0_harq->round], @@ -870,7 +870,7 @@ void dlsch_channel_compensation(int **rxdataF_ext, pilots=1; } - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) { if (mod_order == 4) { QAM_amp128 = _mm_set1_epi16(QAM16_n1); // 2/sqrt(10) QAM_amp128b = _mm_setzero_si128(); @@ -1130,7 +1130,7 @@ void dlsch_channel_compensation(int **rxdataF_ext, } } - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) { if (mod_order == 4) { QAM_amp128 = vmovq_n_s16(QAM16_n1); // 2/sqrt(10) QAM_amp128b = vmovq_n_s16(0); @@ -2643,7 +2643,7 @@ void dlsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, if (frame_parms->nb_antennas_rx>1) { - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) { rxdataF_comp128_0 = (__m128i *)&rxdataF_comp[(aatx<<1)][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128_1 = (__m128i *)&rxdataF_comp[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12]; @@ -2703,7 +2703,7 @@ void dlsch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, if (frame_parms->nb_antennas_rx>1) { - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) { rxdataF_comp128_0 = (int16x8_t *)&rxdataF_comp[(aatx<<1)][symbol*frame_parms->N_RB_DL*12]; rxdataF_comp128_1 = (int16x8_t *)&rxdataF_comp[(aatx<<1)+1][symbol*frame_parms->N_RB_DL*12]; @@ -2785,7 +2785,7 @@ void dlsch_scale_channel(int **dl_ch_estimates_ext, ch_amp128 = _mm_set1_epi16(ch_amp); // Q3.13 - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) { + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) { for (aarx=0; aarxnb_antennas_rx; aarx++) { dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12]; @@ -2829,7 +2829,7 @@ void dlsch_channel_level(int **dl_ch_estimates_ext, symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) { //clear average level avg128D = _mm_setzero_si128(); @@ -2886,7 +2886,7 @@ void dlsch_channel_level(int **dl_ch_estimates_ext, symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) { //clear average level avg128D = vdupq_n_s32(0); @@ -3119,7 +3119,7 @@ void dlsch_channel_level_TM7(int **dl_bf_ch_estimates_ext, symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; - for (aatx=0; aatxnb_antennas_tx_eNB; aatx++) + for (aatx=0; aatxnb_antenna_ports_eNB; aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) { //clear average level avg128D = _mm_setzero_si128(); @@ -4931,7 +4931,7 @@ void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[1],12*N_RB_DL*nsymb,1,1); } - if (phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB == 2) { + if (phy_vars_ue->lte_frame_parms.nb_antenna_ports_eNB == 2) { sprintf(fname,"dlsch%d_ch_r%d_ext10.m",eNB_id,round); sprintf(vname,"dl%d_ch_r%d_ext10",eNB_id,round); write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_ch_estimates_ext[2],12*N_RB_DL*nsymb,1,1); @@ -4959,7 +4959,7 @@ void dump_dlsch2(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per sprintf(fname,"dlsch%d_rxF_r%d_comp0.m",eNB_id,round); sprintf(vname,"dl%d_rxF_r%d_comp0",eNB_id,round); write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_comp0[0],12*N_RB_DL*nsymb,1,1); - if (phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB == 2) { + if (phy_vars_ue->lte_frame_parms.nb_antenna_ports_eNB == 2) { sprintf(fname,"dlsch%d_rxF_r%d_comp1.m",eNB_id,round); sprintf(vname,"dl%d_rxF_r%d_comp1",eNB_id,round); write_output(fname,vname,phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->rxdataF_comp1[0][round],12*N_RB_DL*nsymb,1,1); diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 6580e827c1..6f05b14f87 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -70,7 +70,10 @@ uint8_t is_not_pilot(uint8_t pilots, uint8_t re, uint8_t nushift, uint8_t use2nd return(0); } -//uint8_t is_not_UEspecRS(int first_layer,int re) +/*uint8_t is_not_UEspecRS(int first_layer,int re) +{ + return(1); +}*/ uint8_t is_not_UEspecRS(int8_t lprime, uint8_t re, uint8_t nushift, uint8_t Ncp, uint8_t beamforming_mode) { uint8_t offset = (lprime==1||lprime==3)?2:0; @@ -165,8 +168,8 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB, uint32_t *jj2, uint16_t re_offset, uint32_t symbol_offset, - LTE_DL_eNB_HARQ_t *dlsch0_harq, - LTE_DL_eNB_HARQ_t *dlsch1_harq, + LTE_eNB_DLSCH_t *dlsch0, + LTE_eNB_DLSCH_t *dlsch1, uint8_t pilots, int16_t amp, uint8_t precoder_index, @@ -177,10 +180,13 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB, uint8_t skip_half, uint8_t lprime, uint8_t mprime, - uint8_t Ns, - int32_t **beamforming_weights) + uint8_t Ns) { + uint8_t harq_pid = dlsch0->current_harq_pid; + LTE_DL_eNB_HARQ_t *dlsch0_harq = dlsch0->harq_processes[harq_pid]; + LTE_DL_eNB_HARQ_t *dlsch1_harq = (dlsch1==NULL) ? NULL : dlsch1->harq_processes[harq_pid]; + LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; uint8_t *x0 = dlsch0_harq->e; MIMO_mode_t mimo_mode = dlsch0_harq->mimo_mode; @@ -192,10 +198,11 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB, uint8_t *x1=NULL; uint8_t mod_order1=2; - // Fill these in later for TM8-10 // int Nlayers1; // int first_layer1; + + int use2ndpilots = (frame_parms->mode1_flag==1)?1:0; uint32_t tti_offset,aa; @@ -281,7 +288,7 @@ break; else if (skip_half==2) first_re=6; - for (re=first_re; reofdm_symbol_size+1; @@ -301,20 +308,16 @@ break; switch (mod_order0) { case 2: //QPSK -// printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i - } + //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + ((int16_t*)&txdataF[0][tti_offset])[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i *jj = *jj + 1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[1] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} - } + ((int16_t*)&txdataF[0][tti_offset])[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} *jj = *jj + 1; - // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + //printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); break; case 4: //16QAM @@ -343,12 +346,8 @@ break; *jj=*jj+1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s0[qam16_table_offset_re]; - ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s0[qam16_table_offset_im]; - // ((int16_t *)&txdataF[aa][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - // ((int16_t *)&txdataF[aa][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); - } + ((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qam16_table_offset_re];//(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + ((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qam16_table_offset_im];//(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); break; @@ -388,10 +387,8 @@ break; *jj=*jj+1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s0[qam64_table_offset_re];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s0[qam64_table_offset_im];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); - } + ((int16_t *)&txdataF[aa][tti_offset])[0]=qam_table_s0[qam64_table_offset_re];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + ((int16_t *)&txdataF[aa][tti_offset])[1]=qam_table_s0[qam64_table_offset_im];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); break; @@ -587,7 +584,7 @@ break; *re_allocated = *re_allocated + 1; - if (frame_parms->nb_antennas_tx == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { switch (mod_order0) { default: LOG_E(PHY,"Unknown mod_order0 %d\n",mod_order0); @@ -799,11 +796,11 @@ break; ((int16_t*)&tmp_sample1)[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; *jj = *jj + 1; - // normalization for 2 tx antennas + // normalization for 2 tx antenna ports ((int16_t*)&txdataF[0][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*ONE_OVER_SQRT2_Q15)>>15); ((int16_t*)&txdataF[0][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*ONE_OVER_SQRT2_Q15)>>15); - if (frame_parms->nb_antennas_tx == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); ((int16_t*)&txdataF[1][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample2)[0]*ONE_OVER_SQRT2_Q15)>>15); ((int16_t*)&txdataF[1][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample2)[1]*ONE_OVER_SQRT2_Q15)>>15); @@ -843,7 +840,7 @@ break; ((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0]; ((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1]; - if (frame_parms->nb_antennas_tx == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); ((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0]; ((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1]; @@ -893,7 +890,7 @@ break; ((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0]; ((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1]; - if (frame_parms->nb_antennas_tx == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); ((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0]; ((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1]; @@ -902,7 +899,19 @@ break; break; } - } else if(mimo_mode == TM7){ + } + + if (mimo_mode == ALAMOUTI) { + re++; // adjacent carriers are taken care of by precoding + *re_allocated = *re_allocated + 1; + + if (is_not_pilot(pilots,re,frame_parms->nushift,use2ndpilots)==0) { + re++; + *re_allocated = *re_allocated + 1; + } + } + + if(mimo_mode == TM7) { *re_allocated = *re_allocated + 1; if (is_not_UEspecRS(lprime,re,frame_parms->Nid_cell%3,frame_parms->Ncp,7)) { @@ -910,20 +919,12 @@ break; switch (mod_order0){ case 2: //QPSK - ((int16_t*)&tmp_sample1)[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + ((int16_t*)&txdataF[5][tti_offset])[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; *jj = *jj + 1; - ((int16_t*)&tmp_sample1)[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + ((int16_t*)&txdataF[5][tti_offset])[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; *jj = *jj + 1; //printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); - } - - //printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); break; case 4: //16QAM @@ -952,15 +953,8 @@ break; *jj=*jj+1; - ((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - ((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); - - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); - } + ((int16_t*)&txdataF[5][tti_offset])[0] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + ((int16_t*)&txdataF[5][tti_offset])[1] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); break; @@ -1000,20 +994,13 @@ break; *jj=*jj+1; - ((int16_t*)&tmp_sample1)[0] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t*)&tmp_sample1)[1] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); - - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); - } + ((int16_t*)&txdataF[5][tti_offset])[0] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + ((int16_t*)&txdataF[5][tti_offset])[1] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); break; } - } else{ + } else { //precoding UE spec RS //printf("precoding UE spec RS\n"); @@ -1021,38 +1008,111 @@ break; ind_dword = ind>>4; ind_qpsk_symb = ind&0xf; - tmp_sample1 = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; + txdataF[5][tti_offset] = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; mprime2++; - for (aa=0; aanb_antennas_tx; aa++) { - - ((int16_t*)&txdataF[aa][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[0] +=-(int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[0]*((int16_t*)&beamforming_weights[re][aa])[1])>>15); - ((int16_t*)&txdataF[aa][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*((int16_t*)&beamforming_weights[re][aa])[0])>>15); - - // ((int16_t*)&txdataF[aa][tti_offset])[0] = 0xffff; - // ((int16_t*)&txdataF[aa][tti_offset])[1] = 0xffff; - //printf("lprime=%d,nb_rb=%d,mprime2=%d,ind=%d,Ns=%d\n",lprime,dlsch0_harq->nb_rb,mprime2,ind,Ns); - //printf("tmp_sample1=(%d,%d)\n",((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); - //printf("beamforing_weights[%d][%d]=(%d,%d)\n",re,aa,((int16_t*)&beamforming_weights[re][aa])[0],((int16_t*)&beamforming_weights[re][aa])[1]); - //printf("txdataF[%d][%d]= (%d,%d)\n ",aa,tti_offset,((int16_t*)&txdataF[aa][tti_offset])[0],((int16_t*)&txdataF[aa][tti_offset])[1]); - } - } + } else if (mimo_mode == TM8) { //TM8 + + // if (is_not_UEspecRS(first_layer0,re)) { + if (is_not_UEspecRS(lprime,re,frame_parms->Nid_cell%3,frame_parms->Ncp,8)) { + switch (mod_order0) { + case 2: //QPSK + + // printf("%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); + for (int layer=first_layer0; layer<=(first_layer0+Nlayers0); layer++) { + ((int16_t*)&txdataF[layer][tti_offset])[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i + *jj = *jj + 1; + ((int16_t*)&txdataF[layer][tti_offset])[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} + *jj = *jj + 1; + } + + break; + + case 4: //16QAM + // if (is_not_UEspecRS(0/*layer (FIXME uninitialized!)*/,re)) { + if (is_not_UEspecRS(lprime,re,frame_parms->Nid_cell%3,frame_parms->Ncp,8)) { + qam16_table_offset_re = 0; + qam16_table_offset_im = 0; + + if (x0[*jj] == 1) + qam16_table_offset_re+=2; + + *jj = *jj + 1; + + if (x0[*jj] == 1) + qam16_table_offset_im+=2; + + *jj = *jj + 1; + + if (x0[*jj] == 1) + qam16_table_offset_re+=1; + + *jj = *jj + 1; + + if (x0[*jj] == 1) + qam16_table_offset_im+=1; + + *jj = *jj + 1; + + for (int layer=first_layer0; layer<=(first_layer0+Nlayers0); layer++) { + ((int16_t*)&txdataF[layer][tti_offset])[0] = qam_table_s0[qam16_table_offset_re]; + ((int16_t*)&txdataF[layer][tti_offset])[1] = qam_table_s0[qam16_table_offset_im]; + } + } + + break; + + case 6: //64QAM + + + qam64_table_offset_re = 0; + qam64_table_offset_im = 0; + + if (x0[*jj] == 1) + qam64_table_offset_re+=4; + + *jj = *jj + 1; + + if (x0[*jj] == 1) + qam64_table_offset_im+=4; + + *jj = *jj + 1; + + if (x0[*jj] == 1) + qam64_table_offset_re+=2; + + *jj = *jj + 1; + + if (x0[*jj] == 1) + qam64_table_offset_im+=2; + + *jj = *jj + 1; + + if (x0[*jj] == 1) + qam64_table_offset_re+=1; + + *jj = *jj + 1; + + if (x0[*jj] == 1) + qam64_table_offset_im+=1; + + *jj = *jj + 1; + + for (int layer=first_layer0; layer<=(first_layer0+Nlayers0); layer++) { + ((int16_t*)&txdataF[layer][tti_offset])[0] = qam_table_s0[qam64_table_offset_re]; + ((int16_t*)&txdataF[layer][tti_offset])[1] = qam_table_s0[qam64_table_offset_im]; + } + + break; + + } + } + } else if (mimo_mode>=TM9_10) { msg("allocate_REs_in_RB() [dlsch.c] : ERROR, unknown mimo_mode %d\n",mimo_mode); return(-1); } - if (mimo_mode == ALAMOUTI) { - re++; // adjacent carriers are taken care of by precoding - *re_allocated = *re_allocated + 1; - - if (is_not_pilot(pilots,re,frame_parms->nushift,use2ndpilots)==0) { - re++; - *re_allocated = *re_allocated + 1; - } - } } @@ -1076,7 +1136,7 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF, LTE_DL_FRAME_PARMS *frame_parms) { - uint32_t tti_offset,aa; + uint32_t tti_offset; uint8_t re; uint8_t qam64_table_offset_re = 0; uint8_t qam64_table_offset_im = 0; @@ -1117,15 +1177,13 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF, case 2: //QPSK // printf("%d : %d,%d => ",tti_offset,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - for (aa=0; aanb_antennas_tx; aa++) - ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i + ((int16_t*)&txdataF[4][tti_offset])[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i - *jj = *jj + 1; + *jj = *jj + 1; - for (aa=0; aanb_antennas_tx; aa++) - ((int16_t*)&txdataF[aa][tti_offset])[1] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} + ((int16_t*)&txdataF[4][tti_offset])[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} - *jj = *jj + 1; + *jj = *jj + 1; // printf("%d,%d\n",((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); break; @@ -1156,12 +1214,8 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF, *jj=*jj+1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s[qam16_table_offset_re]; - ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s[qam16_table_offset_im]; - // ((int16_t *)&txdataF[aa][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - // ((int16_t *)&txdataF[aa][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); - } + ((int16_t *)&txdataF[4][tti_offset])[0]=qam_table_s[qam16_table_offset_re];//(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + ((int16_t *)&txdataF[4][tti_offset])[1]=qam_table_s[qam16_table_offset_im];//(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); break; @@ -1201,10 +1255,8 @@ int allocate_REs_in_RB_MCH(mod_sym_t **txdataF, *jj=*jj+1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s[qam64_table_offset_re];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s[qam64_table_offset_im];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); - } + ((int16_t *)&txdataF[4][tti_offset])[0]=qam_table_s[qam64_table_offset_re];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + ((int16_t *)&txdataF[4][tti_offset])[1]=qam_table_s[qam64_table_offset_im];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); break; @@ -1265,8 +1317,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, uint32_t subframe_offset, uint8_t num_pdcch_symbols, LTE_eNB_DLSCH_t *dlsch0, - LTE_eNB_DLSCH_t *dlsch1, - int32_t **beamforming_weights) + LTE_eNB_DLSCH_t *dlsch1) { LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; @@ -1287,9 +1338,9 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, int16_t qam16_table_a1[4],qam64_table_a1[8],qam16_table_b1[4],qam64_table_b1[8]; int16_t *qam_table_s0,*qam_table_s1; MIMO_mode_t mimo_mode = dlsch0_harq->mimo_mode; - int32_t **beamforming_weights_RB = beamforming_weights; uint8_t mprime=0,Ns; int8_t lprime=-1; + int aa=0; #ifdef DEBUG_DLSCH_MODULATION uint8_t Nl0 = dlsch0_harq->Nl; @@ -1392,6 +1443,12 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, else lprime=-1; } + + // mapping ue specific beamforming weights from UE specified DLSCH structure to common space + for (aa=0;aanb_antennas_tx;aa++){ + memcpy(phy_vars_eNB->lte_eNB_common_vars.ue_spec_bf_weights[0][0][aa],dlsch0->ue_spec_bf_weights[0][aa],frame_parms->ofdm_symbol_size*sizeof(int32_t)); + } + } Ns = 2*subframe_offset+(l>=(nsymb>>1)); @@ -1399,8 +1456,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, re_offset = frame_parms->first_carrier_offset; symbol_offset = (uint32_t)frame_parms->ofdm_symbol_size*(l+(subframe_offset*nsymb)); - //for (aa=0;aanb_antennas_tx;aa++) - // memset(&txdataF[aa][symbol_offset],0,frame_parms->ofdm_symbol_size<<2); + //memset(&txdataF[aa][symbol_offset],0,frame_parms->ofdm_symbol_size<<2); //printf("symbol_offset %d,subframe offset %d : pilots %d\n",symbol_offset,subframe_offset,pilots); for (rb=0; rbN_RB_DL; rb++) { @@ -1569,8 +1625,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, &jj2, re_offset, symbol_offset, - dlsch0->harq_processes[harq_pid], - (dlsch1==NULL) ? NULL : dlsch1->harq_processes[harq_pid], + dlsch0, + dlsch1, pilots, ((pilots) ? amp_rho_b : amp_rho_a), get_pmi(frame_parms->N_RB_DL,dlsch0->harq_processes[harq_pid],rb), @@ -1581,8 +1637,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, skip_half, lprime, mprime, - Ns, - beamforming_weights_RB); + Ns); if(mimo_mode==TM7 && lprime>=0) mprime +=3+frame_parms->Ncp; @@ -1590,20 +1645,17 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, } re_offset+=12; // go to next RB - beamforming_weights_RB +=12; - // check if we crossed the symbol boundary and skip DC if (re_offset >= frame_parms->ofdm_symbol_size) { - if (skip_dc == 0) //even number of RBs (doesn't straddle DC) - re_offset=1; - else - re_offset=7; // odd number of RBs - } - beamforming_weights_RB = beamforming_weights; - } - + if (skip_dc == 0) //even number of RBs (doesn't straddle DC) + re_offset=1; + else + re_offset=7; // odd number of RBs } + } + + } diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c index 69351e297f..10815bc3e0 100644 --- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c +++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c @@ -163,7 +163,7 @@ char phich_resource[6]; if (pbch_decoded) { - frame_parms->nb_antennas_tx_eNB = pbch_tx_ant; + frame_parms->nb_antenna_ports_eNB = pbch_tx_ant; // set initial transmission mode to 1 or 2 depending on number of detected TX antennas frame_parms->mode1_flag = (pbch_tx_ant==1); @@ -566,7 +566,7 @@ int initial_sync(PHY_VARS_UE *phy_vars_ue, runmode_t mode) phy_vars_ue->lte_frame_parms.N_RB_DL, phy_vars_ue->lte_frame_parms.phich_config_common.phich_duration, phich_string[phy_vars_ue->lte_frame_parms.phich_config_common.phich_resource], - phy_vars_ue->lte_frame_parms.nb_antennas_tx_eNB); + phy_vars_ue->lte_frame_parms.nb_antenna_ports_eNB); #if defined(OAI_USRP) || defined(EXMIMO) LOG_I(PHY,"[UE %d] Frame %d Measured Carrier Frequency %.0f Hz (offset %d Hz)\n", phy_vars_ue->Mod_id, diff --git a/openair1/PHY/LTE_TRANSPORT/pbch.c b/openair1/PHY/LTE_TRANSPORT/pbch.c index 0582a63956..21061c1654 100755 --- a/openair1/PHY/LTE_TRANSPORT/pbch.c +++ b/openair1/PHY/LTE_TRANSPORT/pbch.c @@ -200,7 +200,7 @@ int generate_pbch(LTE_eNB_PBCH *eNB_pbch, /* // scramble crc with PBCH CRC mask (Table 5.3.1.1-1 of 3GPP 36.212-860) - switch (frame_parms->nb_antennas_tx_eNB) { + switch (frame_parms->nb_antenna_ports_eNB) { case 1: crc = crc ^ (uint16_t) 0; break; @@ -232,7 +232,7 @@ int generate_pbch(LTE_eNB_PBCH *eNB_pbch, if (frame_parms->mode1_flag == 1) amask = 0x0000; else { - switch (frame_parms->nb_antennas_tx_eNB) { + switch (frame_parms->nb_antenna_ports_eNB) { case 1: amask = 0x0000; break; @@ -492,7 +492,7 @@ uint16_t pbch_extract(int **rxdataF, } } - for (aatx=0; aatx<4; aatx++) { //frame_parms->nb_antennas_tx_eNB;aatx++) { + for (aatx=0; aatx<4; aatx++) { //frame_parms->nb_antenna_ports_eNB;aatx++) { if (high_speed_flag == 1) dl_ch0 = &dl_ch_estimates[(aatx<<1)+aarx][LTE_CE_OFFSET+ch_offset+(symbol*(frame_parms->ofdm_symbol_size))]; else @@ -554,7 +554,7 @@ int pbch_channel_level(int **dl_ch_estimates_ext, uint32_t nsymb = (frame_parms->Ncp==0) ? 7:6; uint32_t symbol_mod = symbol % nsymb; - for (aatx=0; aatx<4; aatx++) //frame_parms->nb_antennas_tx_eNB;aatx++) + for (aatx=0; aatx<4; aatx++) //frame_parms->nb_antenna_ports_eNB;aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) { //clear average level @@ -624,7 +624,7 @@ void pbch_channel_compensation(int **rxdataF_ext, #endif symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; - for (aatx=0; aatx<4; aatx++) //frame_parms->nb_antennas_tx_eNB;aatx++) + for (aatx=0; aatx<4; aatx++) //frame_parms->nb_antenna_ports_eNB;aatx++) for (aarx=0; aarxnb_antennas_rx; aarx++) { #if defined(__x86_64__) || defined(__i386__) @@ -731,7 +731,7 @@ void pbch_detection_mrc(LTE_DL_FRAME_PARMS *frame_parms, symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; if (frame_parms->nb_antennas_rx>1) { - for (aatx=0; aatx<4; aatx++) { //frame_parms->nb_antennas_tx_eNB;aatx++) { + for (aatx=0; aatx<4; aatx++) { //frame_parms->nb_antenna_ports_eNB;aatx++) { #if defined(__x86_64__) || defined(__i386__) rxdataF_comp128_0 = (__m128i *)&rxdataF_comp[(aatx<<1)][symbol_mod*6*12]; rxdataF_comp128_1 = (__m128i *)&rxdataF_comp[(aatx<<1)+1][symbol_mod*6*12]; @@ -1077,7 +1077,7 @@ uint16_t rx_pbch_emul(PHY_VARS_UE *phy_vars_ue, if (pbch_phase == (phy_vars_ue->frame_rx % 4)) { if (uniformrandom() >= bler) { memcpy(phy_vars_ue->lte_ue_pbch_vars[eNB_id]->decoded_output,PHY_vars_eNB_g[eNB_id][CC_id]->pbch_pdu,PBCH_PDU_SIZE); - return(PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.nb_antennas_tx_eNB); + return(PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.nb_antenna_ports_eNB); } else return(-1); } else diff --git a/openair1/PHY/LTE_TRANSPORT/pcfich.c b/openair1/PHY/LTE_TRANSPORT/pcfich.c index 8e9038666b..aeac370001 100644 --- a/openair1/PHY/LTE_TRANSPORT/pcfich.c +++ b/openair1/PHY/LTE_TRANSPORT/pcfich.c @@ -217,7 +217,7 @@ void generate_pcfich(uint8_t num_pdcch_symbols, if ((i!=nushiftmod3)&&(i!=(nushiftmod3+3))) { txdataF[0][symbol_offset+reg_offset+i] = pcfich_d[0][m]; - if (frame_parms->nb_antennas_tx_eNB>1) + if (frame_parms->nb_antenna_ports_eNB>1) txdataF[1][symbol_offset+reg_offset+i] = pcfich_d[1][m]; m++; diff --git a/openair1/PHY/LTE_TRANSPORT/pilots.c b/openair1/PHY/LTE_TRANSPORT/pilots.c index 772a47e131..4c5409a8ae 100644 --- a/openair1/PHY/LTE_TRANSPORT/pilots.c +++ b/openair1/PHY/LTE_TRANSPORT/pilots.c @@ -70,7 +70,7 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB, // printf("tti %d : offset %d (slot %d)\n",tti,tti_offset,slot_offset); //Generate Pilots - //antenna 0 symbol 0 slot 0 + //antenna port 0 symbol 0 slot 0 lte_dl_cell_spec(phy_vars_eNB,&txdataF[0][tti_offset], amp, slot_offset, @@ -79,7 +79,7 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB, // printf("tti %d : second_pilot offset %d \n",tti,tti_offset+(second_pilot*samples_per_symbol)); - //antenna 0 symbol 3/4 slot 0 + //antenna port 0 symbol 3/4 slot 0 lte_dl_cell_spec(phy_vars_eNB,&txdataF[0][tti_offset+(second_pilot*samples_per_symbol)], amp, slot_offset, @@ -87,7 +87,7 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB, 0); // printf("tti %d : third_pilot offset %d \n",tti,tti_offset+((Nsymb>>1)*samples_per_symbol)); - //antenna 0 symbol 0 slot 1 + //antenna port 0 symbol 0 slot 1 lte_dl_cell_spec(phy_vars_eNB,&txdataF[0][tti_offset+((Nsymb>>1)*samples_per_symbol)], amp, 1+slot_offset, @@ -95,7 +95,7 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB, 0); // printf("tti %d : third_pilot offset %d \n",tti,tti_offset+(((Nsymb>>1)+second_pilot)*samples_per_symbol)); - //antenna 0 symbol 3/4 slot 1 + //antenna port 0 symbol 3/4 slot 1 lte_dl_cell_spec(phy_vars_eNB,&txdataF[0][tti_offset+(((Nsymb>>1)+second_pilot)*samples_per_symbol)], amp, 1+slot_offset, @@ -103,66 +103,35 @@ void generate_pilots(PHY_VARS_eNB *phy_vars_eNB, 0); - if (frame_parms->nb_antennas_tx > 1) { - if (frame_parms->mode1_flag) { - // antenna 1 symbol 0 slot 0 - lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset], - amp, - slot_offset, - 0, - 0); + if (frame_parms->nb_antenna_ports_eNB > 1) { - // antenna 1 symbol 3 slot 0 - lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(second_pilot*samples_per_symbol)], - amp, - slot_offset, - 1, - 0); - - //antenna 1 symbol 0 slot 1 - lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(Nsymb>>1)*samples_per_symbol], - amp, - 1+slot_offset, - 0, - 0); - - // antenna 1 symbol 3 slot 1 - lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(((Nsymb>>1)+second_pilot)*samples_per_symbol)], - amp, - 1+slot_offset, - 1, - 0); - - } else { - - // antenna 1 symbol 0 slot 0 + // antenna port 1 symbol 0 slot 0 lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset], amp, slot_offset, 0, 1); - // antenna 1 symbol 3 slot 0 + // antenna port 1 symbol 3 slot 0 lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(second_pilot*samples_per_symbol)], amp, slot_offset, 1, 1); - //antenna 1 symbol 0 slot 1 + //antenna port 1 symbol 0 slot 1 lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(Nsymb>>1)*samples_per_symbol], amp, 1+slot_offset, 0, 1); - // antenna 1 symbol 3 slot 1 + // antenna port 1 symbol 3 slot 1 lte_dl_cell_spec(phy_vars_eNB,&txdataF[1][tti_offset+(((Nsymb>>1)+second_pilot)*samples_per_symbol)], amp, 1+slot_offset, 1, 1); - } } } } @@ -193,7 +162,7 @@ int generate_pilots_slot(PHY_VARS_eNB *phy_vars_eNB, // printf("tti %d : offset %d (slot %d)\n",tti,tti_offset,slot_offset); //Generate Pilots - //antenna 0 symbol 0 slot 0 + //antenna port 0 symbol 0 slot 0 lte_dl_cell_spec(phy_vars_eNB, &txdataF[0][slot_offset], amp, @@ -212,44 +181,24 @@ int generate_pilots_slot(PHY_VARS_eNB *phy_vars_eNB, 0); } - if (frame_parms->nb_antennas_tx > 1) { - if (frame_parms->mode1_flag) { - // antenna 1 symbol 0 slot 0 + if (frame_parms->nb_antenna_ports_eNB > 1) { + + // antenna port 1 symbol 0 slot 0 + lte_dl_cell_spec(phy_vars_eNB, + &txdataF[1][slot_offset], + amp, + slot, + 0, + 1); + + if (first_pilot_only == 0) { + // antenna port 1 symbol 3 slot 0 lte_dl_cell_spec(phy_vars_eNB, - &txdataF[1][slot_offset], + &txdataF[1][slot_offset+(second_pilot*samples_per_symbol)], amp, slot, - 0, - 0); - - if (first_pilot_only==0) { - // antenna 1 symbol 3 slot 0 - lte_dl_cell_spec(phy_vars_eNB, - &txdataF[1][slot_offset+(second_pilot*samples_per_symbol)], - amp, - slot, - 1, - 0); - } - } else { - - // antenna 1 symbol 0 slot 0 - lte_dl_cell_spec(phy_vars_eNB, - &txdataF[1][slot_offset], - amp, - slot, - 0, + 1, 1); - - if (first_pilot_only == 0) { - // antenna 1 symbol 3 slot 0 - lte_dl_cell_spec(phy_vars_eNB, - &txdataF[1][slot_offset+(second_pilot*samples_per_symbol)], - amp, - slot, - 1, - 1); - } } } diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 1161950e8f..4d450ba5f5 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -63,8 +63,10 @@ void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch, uint8_t abstraction_flag); @param Mdlharq Maximum number of HARQ rounds (36-212/36-213) @params N_RB_DL total number of resource blocks (determine the operating BW) @param abstraction_flag Flag to indicate abstracted interface + @param nb_antenna_tx number of physical transmit antennas at eNB */ -LTE_eNB_DLSCH_t *new_eNB_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint8_t N_RB_DL, uint8_t abstraction_flag); +LTE_eNB_DLSCH_t *new_eNB_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint8_t +N_RB_DL, uint8_t abstraction_flag, LTE_DL_FRAME_PARMS* frame_parms); /** \fn free_ue_dlsch(LTE_UE_DLSCH_t *dlsch) \brief This function frees memory allocated for a particular DLSCH at UE @@ -157,7 +159,6 @@ void dlsch_encoding_emul(PHY_VARS_eNB *phy_vars_eNB, \param skip_half indicate that first or second half of RB must be skipped for PBCH/PSS/SSS \param ue_spec_rs UE specific RS indicator \param nb_antennas_tx_phy Physical antenna elements which can be different with antenna port number, especially in beamforming case - \param beamforming_weights_rb Beamforming weights applied on each antenna element and each carrier in case of TM7-10 \param use2ndpilots Set to use the pilots from antenna port 1 for PDSCH \param frame_parms Frame parameter descriptor */ @@ -168,8 +169,8 @@ int32_t allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB, uint32_t *jj2, uint16_t re_offset, uint32_t symbol_offset, - LTE_DL_eNB_HARQ_t *dlsch0_harq, - LTE_DL_eNB_HARQ_t *dlsch1_harq, + LTE_eNB_DLSCH_t *dlsch0, + LTE_eNB_DLSCH_t *dlsch1, uint8_t pilots, int16_t amp, uint8_t precoder_index, @@ -178,10 +179,9 @@ int32_t allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB, uint32_t *re_allocated, uint8_t skip_dc, uint8_t skip_half, - uint8_t lprime, - uint8_t mprime, - uint8_t Ns, - int32_t **beamforming_weights); + uint8_t lprime, + uint8_t mprime, + uint8_t Ns); /** \fn int32_t dlsch_modulation(mod_sym_t **txdataF, int16_t amp, @@ -198,8 +198,6 @@ int32_t allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB, @param num_pdcch_symbols Number of PDCCH symbols in this subframe @param dlsch0 Pointer to Transport Block 0 DLSCH descriptor for this allocation @param dlsch1 Pointer to Transport Block 0 DLSCH descriptor for this allocation - @param nb_antennas_tx_phy Physical antenna elements which can be different with antenna port number, especially in beamforming case - @param beamforming_weights Beamforming weights applied on each antenna element and each carrier in case of TM7-10 */ int32_t dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, mod_sym_t **txdataF, @@ -207,8 +205,7 @@ int32_t dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, uint32_t sub_frame_offset, uint8_t num_pdcch_symbols, LTE_eNB_DLSCH_t *dlsch0, - LTE_eNB_DLSCH_t *dlsch1, - int32_t **beamforming_weights); + LTE_eNB_DLSCH_t *dlsch1); /* \brief This function is the top-level routine for generation of the sub-frame signal (frequency-domain) for MCH. @param txdataF Table of pointers for frequency-domain TX signals @@ -331,6 +328,41 @@ int32_t generate_pbch(LTE_eNB_PBCH *eNB_pbch, int32_t generate_pbch_emul(PHY_VARS_eNB *phy_vars_eNB,uint8_t *pbch_pdu); + +/** \brief This function performs UE specific beamforming especially for + * transmission mode TM7-10 + @param txdataF Table of pointers for frequency-domain TX signals + @param txdataF_BF Table of pointers for frequency-domain TX signals +after beamforming + @param frame_parms Frame descriptor structure + @param ue_spec_bf_weights UE specific beamforming weights applied on +each antenna element and each carrier + @param slot Slot number + @param symbol Symbol index on which to act*/ +int ue_spec_beamforming(int32_t **txdataF, + int32_t **txdataF_BF, + LTE_DL_FRAME_PARMS *frame_parms, + int32_t ***ue_spec_bf_weights, + int slot, + int symbol); + +/** \brief This function performs cell specific beamforming for common + * data + @param txdataF Table of pointers for frequency-domain TX signals + @param txdataF_BF Table of pointers for frequency-domain TX signals + @param frame_parms Frame descriptor structure +after beamforming + @param cell_spec_bf_weights Common beamforming weights applied on each +antenna element and each carrier + @param slot Slot number + @param symbol Symbol index on which to act*/ +int cell_spec_beamforming(int32_t **txdataF, + int32_t **txdataF_BF, + LTE_DL_FRAME_PARMS *frame_parms, + int32_t ***cell_spec_bf_weights, + int slot, + int symbol); + /** \brief This function computes the LLRs for ML (max-logsum approximation) dual-stream QPSK/QPSK reception. @param stream0_in Input from channel compensated (MR combined) stream 0 @param stream1_in Input from channel compensated (MR combined) stream 1 diff --git a/openair1/PHY/MODULATION/slot_fep.c b/openair1/PHY/MODULATION/slot_fep.c index ec1c0045b0..b259bc5148 100644 --- a/openair1/PHY/MODULATION/slot_fep.c +++ b/openair1/PHY/MODULATION/slot_fep.c @@ -184,7 +184,7 @@ int slot_fep(PHY_VARS_UE *phy_vars_ue, if (phy_vars_ue->perfect_ce == 0) { if ((l==0) || (l==(4-frame_parms->Ncp))) { - for (aa=0; aanb_antennas_tx_eNB; aa++) { + for (aa=0; aanb_antenna_ports_eNB; aa++) { #ifdef DEBUG_FEP msg("Channel estimation eNB %d, aatx %d, slot %d, symbol %d\n",eNB_id,aa,Ns,l); diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c index bc3dbcf289..ba361247db 100644 --- a/openair1/PHY/TOOLS/lte_phy_scope.c +++ b/openair1/PHY/TOOLS/lte_phy_scope.c @@ -482,7 +482,7 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form, LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms; int nsymb_ce = frame_parms->ofdm_symbol_size;//*frame_parms->symbols_per_tti; uint8_t nb_antennas_rx = frame_parms->nb_antennas_rx; - uint8_t nb_antennas_tx = frame_parms->nb_antennas_tx_eNB; + uint8_t nb_antennas_tx = frame_parms->nb_antennas_ports_eNB; int16_t **rxsig_t; int16_t **chest_t; int16_t **chest_f; diff --git a/openair1/PHY/TOOLS/smbv.c b/openair1/PHY/TOOLS/smbv.c index 426fb5b68e..25585d0c1c 100644 --- a/openair1/PHY/TOOLS/smbv.c +++ b/openair1/PHY/TOOLS/smbv.c @@ -127,7 +127,7 @@ int smbv_write_config_from_frame_parms(const char* fname, LTE_DL_FRAME_PARMS *fr fprintf(f_ptr, "BB:EUTR:TDD:SPSC %d\n",frame_parms->tdd_config_S); // MIMO - fprintf(f_ptr, "BB:EUTR:DL:MIMO:CONF TX%d\n",frame_parms->nb_antennas_tx_eNB); + fprintf(f_ptr, "BB:EUTR:DL:MIMO:CONF TX%d\n",frame_parms->nb_antenna_ports_eNB); fprintf(f_ptr, "BB:EUTR:DL:MIMO:ANTA ANT1\n"); fprintf(f_ptr, "BB:EUTR:DL:MIMO:ANTB NONE\n"); diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index d9965b4e75..5697ff0dd2 100755 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -220,8 +220,8 @@ typedef struct PHY_VARS_eNB_s { LTE_eNB_PUSCH *lte_eNB_pusch_vars[NUMBER_OF_UE_MAX]; LTE_eNB_PRACH lte_eNB_prach_vars; LTE_eNB_DLSCH_t *dlsch_eNB[NUMBER_OF_UE_MAX][2]; // Nusers times two spatial streams - // old: LTE_eNB_DLSCH_t **dlsch_eNB[2]; // Nusers times two spatial streams - LTE_eNB_ULSCH_t *ulsch_eNB[NUMBER_OF_UE_MAX+1]; // Nusers + number of RA + // old: LTE_eNB_DLSCH_t **dlsch_eNB[2]; // Nusers times two spatial streams + LTE_eNB_ULSCH_t *ulsch_eNB[NUMBER_OF_UE_MAX+1]; // Nusers + number of RA LTE_eNB_DLSCH_t *dlsch_eNB_SI,*dlsch_eNB_ra; LTE_eNB_DLSCH_t *dlsch_eNB_MCH; LTE_eNB_UE_stats eNB_UE_stats[NUMBER_OF_UE_MAX]; diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h index f580340827..3de93e100e 100644 --- a/openair1/PHY/impl_defs_lte.h +++ b/openair1/PHY/impl_defs_lte.h @@ -530,12 +530,12 @@ typedef struct { uint32_t samples_per_tti; /// Number of OFDM/SC-FDMA symbols in one subframe (to be modified to account for potential different in UL/DL) uint16_t symbols_per_tti; - /// Number of Transmit antennas in node + /// Number of Physical transmit antennas in node uint8_t nb_antennas_tx; /// Number of Receive antennas in node uint8_t nb_antennas_rx; - /// Number of Transmit antennas in eNodeB - uint8_t nb_antennas_tx_eNB; + /// Number of Logical transmit antenna ports in eNodeB + uint8_t nb_antenna_ports_eNB; /// PRACH_CONFIG PRACH_CONFIG_COMMON prach_config_common; /// PUCCH Config Common (from 36-331 RRC spec) @@ -602,11 +602,17 @@ typedef struct { /// - third index: int32_t **txdata[3]; /// \brief holds the transmit data in the frequency domain. - /// For IFFT_FPGA this points to the same memory as PHY_vars->rx_vars[a].RX_DMA_BUFFER. + /// For IFFT_FPGA this points to the same memory as PHY_vars->rx_vars[a].RX_DMA_BUFFER. //? + /// - first index: eNB id [0..2] (hard coded) + /// - second index: tx antenna [0..14[ where 14 is the total supported antenna ports. + /// - third index: sample [0..] + mod_sym_t **txdataF[3]; + /// \brief holds the transmit data after beamforming in the frequency domain. + /// For IFFT_FPGA this points to the same memory as PHY_vars->rx_vars[a].RX_DMA_BUFFER. //? /// - first index: eNB id [0..2] (hard coded) /// - second index: tx antenna [0..nb_antennas_tx[ /// - third index: sample [0..] - mod_sym_t **txdataF[3]; + mod_sym_t **txdataF_BF[3]; /// \brief Holds the received data in time domain. /// Should point to the same memory as PHY_vars->rx_vars[a].RX_DMA_BUFFER. /// - first index: eNB id [0..2] (hard coded) @@ -627,6 +633,18 @@ typedef struct { /// - first index: eNB id [0..2] (hard coded) /// - second index: sample [0..samples_per_tti*10[ uint32_t *sync_corr[3]; + /// \brief Holds the cell specific beamforming weights + /// - first index: eNB id [0..2] (hard coded) + /// - second index: cell specific eNB antenna port index, up to 2 logical antenna ports are supported + /// - third index: tx antenna [0..nb_antennas_tx[ + /// - fourth index: sample [0..] + int32_t **cell_spec_bf_weights[3][2]; + /// \brief Holds the ue specific beamforming weights + /// - first index: eNB id [0..2] (hard coded) + /// - second index: ue specific eNB antenna port index, port5->index0, port7-15->index0-7 + /// - third index: tx antenna [0..nb_antennas_tx[ + /// - fourth index: sample [0..] + int32_t **ue_spec_bf_weights[3][8]; } LTE_eNB_COMMON; typedef struct { diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h index a0302fd526..0663d8152e 100755 --- a/openair1/PHY/impl_defs_top.h +++ b/openair1/PHY/impl_defs_top.h @@ -183,6 +183,7 @@ #define DMA_BLKS_PER_SLOT (SLOT_LENGTH_BYTES/2048) // Number of DMA blocks per slot #define SLOT_TIME_NS (SLOT_LENGTH_SAMPLES*(1e3)/7.68) // slot time in ns +#define NB_ANTENNA_PORTS_ENB 14 // total number of eNB antenna ports #ifdef EXMIMO #define TARGET_RX_POWER 55 // Target digital power for the AGC diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index aa4df65eff..106007cc22 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1434,7 +1434,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e if (abstraction_flag==0) { // clear the transmit data array for the current subframe - for (aa=0; aalte_frame_parms.nb_antennas_tx_eNB; aa++) { + for (aa=0; aalte_frame_parms.nb_antenna_ports_eNB; aa++) { memset(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][subframe*phy_vars_eNB->lte_frame_parms.ofdm_symbol_size*(phy_vars_eNB->lte_frame_parms.symbols_per_tti)], 0,phy_vars_eNB->lte_frame_parms.ofdm_symbol_size*(phy_vars_eNB->lte_frame_parms.symbols_per_tti)*sizeof(mod_sym_t)); @@ -2243,8 +2243,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e subframe, num_pdcch_symbols, phy_vars_eNB->dlsch_eNB_SI, - (LTE_eNB_DLSCH_t *)NULL, - (int32_t **)NULL); + (LTE_eNB_DLSCH_t *)NULL); stop_meas(&phy_vars_eNB->dlsch_modulation_stats); } @@ -2381,8 +2380,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e subframe, num_pdcch_symbols, phy_vars_eNB->dlsch_eNB_ra, - (LTE_eNB_DLSCH_t *)NULL, - (int32_t **)NULL); + (LTE_eNB_DLSCH_t *)NULL); } @@ -2560,8 +2558,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e subframe, num_pdcch_symbols, phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0], - phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][1], - (int32_t **)NULL); + phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][1]); stop_meas(&phy_vars_eNB->dlsch_modulation_stats); } diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 2501baff25..fcea2f53af 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -134,7 +134,7 @@ void lte_param_init(unsigned char N_tx_port_eNB, unsigned char N_tx_phy, unsigne lte_frame_parms->nushift = Nid_cell%6; lte_frame_parms->nb_antennas_tx = N_tx_phy; lte_frame_parms->nb_antennas_rx = N_rx; - lte_frame_parms->nb_antennas_tx_eNB = N_tx_port_eNB; + lte_frame_parms->nb_antenna_ports_eNB = N_tx_port_eNB; lte_frame_parms->phich_config_common.phich_resource = one; lte_frame_parms->tdd_config = tdd_config; lte_frame_parms->frame_type = (fdd_flag==1)?0 : 1; @@ -205,32 +205,59 @@ uint64_t DLSCH_alloc_pdu_1[2]; #define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2) //#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13 //#define DLSCH_RB_ALLOC 0x0001 -void do_OFDM_mod_l(mod_sym_t **txdataF, int32_t **txdata, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms) +void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms, uint8_t num_pdcch_symbols, unsigned char transmission_mode) { - int aa, slot_offset, slot_offset_F; + int aa, l, slot_offset, slot_offset_F; + mod_sym_t **txdataF = eNB_common_vars->txdataF[eNB_id]; + mod_sym_t **txdataF_BF = eNB_common_vars->txdataF_BF[eNB_id]; + int32_t **txdata = eNB_common_vars->txdata[eNB_id]; - slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); + //slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); - for (aa=0; aanb_antennas_tx; aa++) { - // printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc()); + // printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc()); + for (l=0; lsymbols_per_tti>>1; l++) { + + //printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); + if (lcell_spec_bf_weights,next_slot,l); + else + if (transmission_mode<7) + cell_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->cell_spec_bf_weights,next_slot,l); + else + ue_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->ue_spec_bf_weights,next_slot,l); - if (frame_parms->Ncp == 1) - PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input - &txdata[aa][slot_offset], // output - frame_parms->log2_symbol_size, // log2_fft_size - 6, // number of symbols - frame_parms->nb_prefix_samples, // number of prefix samples - CYCLIC_PREFIX); - else { - normal_prefix_mod(&txdataF[aa][slot_offset_F], - &txdata[aa][slot_offset], - 7, - frame_parms); + for (aa=0; aanb_antennas_tx; aa++) { + + if (frame_parms->Ncp == 1) + PHY_ofdm_mod(txdataF_BF[aa], // input + &txdata[aa][slot_offset+l*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES], // output + frame_parms->log2_symbol_size, // log2_fft_size + 1, // number of symbols + frame_parms->nb_prefix_samples, // number of prefix samples + CYCLIC_PREFIX); + else { + if (l==0) { + PHY_ofdm_mod(txdataF_BF[aa], // input + &txdata[aa][slot_offset], // output + frame_parms->log2_symbol_size, // log2_fft_size + 1, // number of symbols + frame_parms->nb_prefix_samples0, // number of prefix samples + CYCLIC_PREFIX); + + } else { + PHY_ofdm_mod(txdataF_BF[aa], // input + &txdata[aa][slot_offset+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(l-1)*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES], // output + frame_parms->log2_symbol_size, // log2_fft_size + 1, // number of symbols + frame_parms->nb_prefix_samples, // number of prefix samples + CYCLIC_PREFIX); + } + } + + } - - } } @@ -239,7 +266,8 @@ int main(int argc, char **argv) { int c; - int k,i,aa,aarx,aatx; + int k,i,j,aa,aarx,aatx; + int re; int s,Kr,Kr_bytes; @@ -253,7 +281,7 @@ int main(int argc, char **argv) uint8_t extended_prefix_flag=0,transmission_mode=1,n_tx_port=1,n_tx_phy=1,n_rx=1; uint16_t Nid_cell=0; - int32_t **beamforming_weights; + int32_t **ue_spec_bf_weights, **cell_spec_bf_weights; int eNB_id = 0, eNB_id_i = 1; unsigned char mcs1=0,mcs2=0,mcs_i=0,dual_stream_UE = 0,awgn_flag=0,round,dci_flag=0; @@ -585,7 +613,7 @@ int main(int argc, char **argv) //if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=8 && n_tx_phy!=16 && n_tx_phy!=64 && n_tx_phy!=128)) { if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=16 && n_tx_phy!=64)) { - msg("For TM7, physical antenna number should be an exponent of 4, maximum 64 antennas supported.\n"); + msg("Physical number of antennas not supported for TM7.\n"); exit(-1); } @@ -767,28 +795,21 @@ int main(int argc, char **argv) lte_param_init(n_tx_port,n_tx_phy,n_rx,transmission_mode,extended_prefix_flag,fdd_flag,Nid_cell,tdd_config,N_RB_DL,osf,perfect_ce); + frame_parms = &PHY_vars_eNB->lte_frame_parms; + + cell_spec_bf_weights = PHY_vars_eNB->lte_eNB_common_vars.cell_spec_bf_weights[0][0]; + for(aa=0;aaofdm_symbol_size;i++) { + cell_spec_bf_weights[aa][i] = 0x00007fff; + } + } + if (transmission_mode==7){ lte_gold_ue_spec_port5(PHY_vars_eNB->lte_gold_uespec_port5_table[0],Nid_cell,n_rnti); lte_gold_ue_spec_port5(PHY_vars_UE->lte_gold_uespec_port5_table,Nid_cell,n_rnti); - - beamforming_weights = (int32_t **)malloc(12*N_RB_DL*sizeof(int32_t*)); - for(i=0;i<12*N_RB_DL;i++){ - beamforming_weights[i]=(int32_t *)malloc(n_tx_phy*sizeof(int32_t)); - for(aa=0;aa>1; - else if (n_tx_phy==16) - beamforming_weights[i][aa] = 0x00007fff>>2; - else if (n_tx_phy==64) - beamforming_weights[i][aa] = 0x00007fff>>4;//3 - } - } - printf("***n_tx_phy=%d,n_tx_phy>>2=%d,beamforming_weights=%d\n",n_tx_phy,n_tx_phy>>2,beamforming_weights[0][0]); } + eNB_id_i = PHY_vars_UE->n_connected_eNB; printf("Setting mcs1 = %d\n",mcs1); @@ -810,8 +831,6 @@ int main(int argc, char **argv) txdata[1] = (int *)malloc16(FRAME_LENGTH_BYTES); */ - frame_parms = &PHY_vars_eNB->lte_frame_parms; - s_re = malloc(n_tx_phy*sizeof(double*)); s_im = malloc(n_tx_phy*sizeof(double*)); r_re = malloc(2*sizeof(double*)); @@ -1041,11 +1060,31 @@ int main(int argc, char **argv) for (k=0; kdlsch_eNB[k][i] = new_eNB_dlsch(Kmimo,8,N_RB_DL,0); + + PHY_vars_eNB->dlsch_eNB[k][i] = new_eNB_dlsch(Kmimo,8,N_RB_DL,0,&PHY_vars_UE->lte_frame_parms); if (!PHY_vars_eNB->dlsch_eNB[k][i]) { printf("Can't get eNB dlsch structures\n"); exit(-1); + } else { + // this initilisation may should be moved to another place + for (j=0; j<4; j++) { // antenna port 5,7-14 + + ue_spec_bf_weights = PHY_vars_eNB->dlsch_eNB[k][i]->ue_spec_bf_weights[j]; + + for (aa=0; aanb_antennas_tx; aa++) { + for (re=0;reofdm_symbol_size;re++) { + if (n_tx_phy==1 || n_tx_phy==2) + ue_spec_bf_weights[aa][re] = 0x00007fff; + else if (n_tx_phy==4) + ue_spec_bf_weights[aa][re] = 0x00007fff>>1; + else if (n_tx_phy==16) + ue_spec_bf_weights[aa][re] = 0x00007fff>>2; + else if (n_tx_phy==64) + ue_spec_bf_weights[aa][re] = 0x00007fff>>4; + } + } + } } PHY_vars_eNB->dlsch_eNB[k][i]->rnti = n_rnti+k; @@ -1064,7 +1103,7 @@ int main(int argc, char **argv) } // structure for SIC at UE - PHY_vars_UE->dlsch_eNB[0] = new_eNB_dlsch(Kmimo,8,N_RB_DL,0); + PHY_vars_UE->dlsch_eNB[0] = new_eNB_dlsch(Kmimo,8,N_RB_DL,0,&PHY_vars_eNB->lte_frame_parms); if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) { @@ -2221,8 +2260,7 @@ int main(int argc, char **argv) PMI_FEEDBACK: //printf("Trial %d : Round %d, pmi_feedback %d \n",trials,round,pmi_feedback); - //for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { - for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { + for (aa=0; aalte_eNB_common_vars.txdataF[eNB_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t)); } @@ -2738,8 +2776,7 @@ PMI_FEEDBACK: subframe, num_pdcch_symbols, PHY_vars_eNB->dlsch_eNB[k][0], - PHY_vars_eNB->dlsch_eNB[k][1], - beamforming_weights); + PHY_vars_eNB->dlsch_eNB[k][1]); stop_meas(&PHY_vars_eNB->dlsch_modulation_stats); /* if (trials==0 && round==0) @@ -2883,27 +2920,37 @@ PMI_FEEDBACK: } */ - do_OFDM_mod_l(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], - PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id], + do_OFDM_mod_l(&PHY_vars_eNB->lte_eNB_common_vars, + eNB_id, (subframe*2), - &PHY_vars_eNB->lte_frame_parms); + &PHY_vars_eNB->lte_frame_parms, + num_pdcch_symbols, + transmission_mode); - do_OFDM_mod_l(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], - PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id], + do_OFDM_mod_l(&PHY_vars_eNB->lte_eNB_common_vars, + eNB_id, (subframe*2)+1, - &PHY_vars_eNB->lte_frame_parms); + &PHY_vars_eNB->lte_frame_parms, + num_pdcch_symbols, + transmission_mode); stop_meas(&PHY_vars_eNB->ofdm_mod_stats); stop_meas(&PHY_vars_eNB->phy_proc_tx); - do_OFDM_mod_l(PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id], - PHY_vars_eNB->lte_eNB_common_vars.txdata[eNB_id], + /* do_OFDM_mod_l(&PHY_vars_eNB->lte_eNB_common_vars, + eNB_id, (subframe*2)+2, - &PHY_vars_eNB->lte_frame_parms); + &PHY_vars_eNB->lte_frame_parms); */ if (n_frames==1) { - write_output("txsigF0.m","txsF0", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][0][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], - nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); + if (transmission_mode<7) + write_output("txsigF0.m","txsF0", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][0][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], + nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); + else if (transmission_mode==7) + write_output("txsigF0.m","txsF0", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][5][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], + nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); + write_output("txsigF0_BF.m","txsF0_BF", &PHY_vars_eNB->lte_eNB_common_vars.txdataF_BF[eNB_id][0][0], + PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size,1,1); if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx>1)// to be updated write_output("txsigF1.m","txsF1", &PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNB_id][1][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], @@ -3144,7 +3191,7 @@ PMI_FEEDBACK: //write_output("channel.m","ch",desc1->ch[0],desc1->channel_length,1,8); //write_output("channelF.m","chF",desc1->chF[0],nb_samples,1,8); for(k=0; knb_antennas_tx_eNB; aa++) { + for(aa=0; aanb_antenna_ports_eNB; aa++) { for (aarx=0; aarxnb_antennas_rx; aarx++) { for (i=0; iN_RB_DL*12; i++) { ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[k][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(int16_t)( @@ -3173,7 +3220,7 @@ PMI_FEEDBACK: } } } else { - for(aa=0; aanb_antennas_tx_eNB; aa++) { + for(aa=0; aanb_antenna_ports_eNB; aa++) { for (aarx=0; aarxnb_antennas_rx; aarx++) { for (i=0; iN_RB_DL*12; i++) { ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+((l+(Ns%2)*pilot2)*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP); @@ -4347,16 +4394,11 @@ PMI_FEEDBACK: free(r_im[i]); } - if(transmission_mode == 7){ - for(i=0;i<12*N_RB_DL;i++) - free(beamforming_weights[i]); - } free(s_re); free(s_im); free(r_re); free(r_im); - free(beamforming_weights); // lte_sync_time_free(); diff --git a/openair1/SIMULATION/LTE_PHY/framegen.c b/openair1/SIMULATION/LTE_PHY/framegen.c index 21124eba8d..db85d1f251 100644 --- a/openair1/SIMULATION/LTE_PHY/framegen.c +++ b/openair1/SIMULATION/LTE_PHY/framegen.c @@ -401,7 +401,7 @@ void lte_param_init( unsigned char transmission_mode, lte_frame_parms->Nid_cell = Nid_cell; lte_frame_parms->nushift = Nid_cell%6; lte_frame_parms->nb_antennas_tx = (transmission_mode == 1) ? 1 : 2; - lte_frame_parms->nb_antennas_tx_eNB = (transmission_mode == 1) ? 1 : 2; + lte_frame_parms->nb_antenna_ports_eNB = (transmission_mode == 1) ? 1 : 2; lte_frame_parms->nb_antennas_rx = (transmission_mode == 1) ? 1 : 2; lte_frame_parms->mode1_flag = (transmission_mode == 1)? 1 : 0; lte_frame_parms->phich_config_common.phich_resource = oneSixth; diff --git a/openair1/SIMULATION/LTE_PHY/pbchsim.c b/openair1/SIMULATION/LTE_PHY/pbchsim.c index 67080836b7..3533c7529c 100644 --- a/openair1/SIMULATION/LTE_PHY/pbchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pbchsim.c @@ -88,7 +88,7 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi lte_frame_parms->Nid_cell = Nid_cell; lte_frame_parms->nushift = Nid_cell%6; lte_frame_parms->nb_antennas_tx = N_tx; - lte_frame_parms->nb_antennas_tx_eNB = N_tx; + lte_frame_parms->nb_antenna_ports_eNB = N_tx; lte_frame_parms->nb_antennas_rx = N_rx; // lte_frame_parms->Csrs = 2; // lte_frame_parms->Bsrs = 0; diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c index 1852e349ec..8c3feaf538 100644 --- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c @@ -85,7 +85,7 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi lte_frame_parms->Ncp = extended_prefix_flag; lte_frame_parms->Nid_cell = Nid_cell; lte_frame_parms->nushift = Nid_cell%6; - lte_frame_parms->nb_antennas_tx_eNB = N_tx; + lte_frame_parms->nb_antenna_ports_eNB = N_tx; lte_frame_parms->nb_antennas_tx = N_tx; lte_frame_parms->nb_antennas_rx = N_rx; lte_frame_parms->phich_config_common.phich_resource = one; //half @@ -858,7 +858,7 @@ int main(int argc, char **argv) break; } - eNB2UE = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB, + eNB2UE = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antenna_ports_eNB, PHY_vars_UE->lte_frame_parms.nb_antennas_rx, channel_model, BW, @@ -940,7 +940,7 @@ int main(int argc, char **argv) for (trial=0; triallte_eNB_common_vars.txdataF[eNb_id][aa][512*14*subframe],&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][0]); - for (aa=0; aalte_frame_parms.nb_antennas_tx_eNB; aa++) { + for (aa=0; aalte_frame_parms.nb_antenna_ports_eNB; aa++) { memset(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t)); /* @@ -1090,7 +1090,7 @@ int main(int argc, char **argv) if (n_frames==1) { write_output("txsigF0.m","txsF0", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][0],4*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX,1,1); - if (PHY_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB > 1) + if (PHY_vars_eNB->lte_frame_parms.nb_antenna_ports_eNB > 1) write_output("txsigF1.m","txsF1", PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][1],4*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX,1,1); } @@ -1098,7 +1098,7 @@ int main(int argc, char **argv) - for (aa=0; aalte_frame_parms.nb_antennas_tx_eNB; aa++) { + for (aa=0; aalte_frame_parms.nb_antenna_ports_eNB; aa++) { if (PHY_vars_eNB->lte_frame_parms.Ncp == 1) PHY_ofdm_mod(&PHY_vars_eNB->lte_eNB_common_vars.txdataF[eNb_id][aa][subframe*nsymb*PHY_vars_eNB->lte_frame_parms.ofdm_symbol_size], // input, &txdata[aa][subframe*PHY_vars_eNB->lte_frame_parms.samples_per_tti], // output @@ -1123,7 +1123,7 @@ int main(int argc, char **argv) for (i=0; i<2*nsymb*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES; i++) { - for (aa=0; aalte_frame_parms.nb_antennas_tx_eNB; aa++) { + for (aa=0; aalte_frame_parms.nb_antenna_ports_eNB; aa++) { if (awgn_flag == 0) { s_re[aa][i] = ((double)(((short *)txdata[aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) + (i<<1)]); s_im[aa][i] = ((double)(((short *)txdata[aa]))[(2*subframe*PHY_vars_UE->lte_frame_parms.samples_per_tti) + (i<<1)+1]); @@ -1211,7 +1211,7 @@ int main(int argc, char **argv) } } } else { - for(aa=0; aanb_antennas_tx_eNB; aa++) { + for(aa=0; aanb_antenna_ports_eNB; aa++) { for (aarx=0; aarxnb_antennas_rx; aarx++) { for (i=0; iN_RB_DL*12; i++) { ((int16_t *) PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size+LTE_CE_FILTER_LENGTH)*2]=(short)(AMP); diff --git a/openair1/SIMULATION/LTE_PHY/scansim.c b/openair1/SIMULATION/LTE_PHY/scansim.c index 24167984b2..3bc042b86b 100644 --- a/openair1/SIMULATION/LTE_PHY/scansim.c +++ b/openair1/SIMULATION/LTE_PHY/scansim.c @@ -88,7 +88,7 @@ void lte_param_init(unsigned char N_tx, unsigned char N_rx,unsigned char transmi lte_frame_parms->Nid_cell = Nid_cell; lte_frame_parms->nushift = Nid_cell%6; lte_frame_parms->nb_antennas_tx = N_tx; - lte_frame_parms->nb_antennas_tx_eNB = N_tx; + lte_frame_parms->nb_antenna_ports_eNB = N_tx; lte_frame_parms->nb_antennas_rx = N_rx; // lte_frame_parms->Csrs = 2; // lte_frame_parms->Bsrs = 0; From ad5e6a9eeae1d327abaac155f6b8f229507d608c Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 26 Nov 2015 11:48:53 +0100 Subject: [PATCH 022/132] ulsim and mbmssim adaption --- openair1/SIMULATION/LTE_PHY/mbmssim.c | 2 +- openair1/SIMULATION/LTE_PHY/ulsim.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c index 20d4e04cd8..9f426c9c6e 100644 --- a/openair1/SIMULATION/LTE_PHY/mbmssim.c +++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c @@ -403,7 +403,7 @@ int main(int argc, char **argv) 0); // Create transport channel structures for 2 transport blocks (MIMO) - PHY_vars_eNB->dlsch_eNB_MCH = new_eNB_dlsch(1,8,N_RB_DL,0); + PHY_vars_eNB->dlsch_eNB_MCH = new_eNB_dlsch(1,8,N_RB_DL,0,&PHY_vars_eNB->lte_frame_parms); if (!PHY_vars_eNB->dlsch_eNB_MCH) { printf("Can't get eNB dlsch structures\n"); diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index dd697899b8..050071fa02 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -693,7 +693,7 @@ int main(int argc, char **argv) // Create transport channel structures for 2 transport blocks (MIMO) for (i=0; i<2; i++) { - PHY_vars_eNB->dlsch_eNB[0][i] = new_eNB_dlsch(1,8,N_RB_DL,0); + PHY_vars_eNB->dlsch_eNB[0][i] = new_eNB_dlsch(1,8,N_RB_DL,0,&PHY_vars_eNB->lte_frame_parms); PHY_vars_UE->dlsch_ue[0][i] = new_ue_dlsch(1,8,MAX_TURBO_ITERATIONS,N_RB_DL,0); if (!PHY_vars_eNB->dlsch_eNB[0][i]) { From 4a4a878507ecabd8a003249d56b4e0c187da61c5 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 26 Nov 2015 11:49:48 +0100 Subject: [PATCH 023/132] dlsim adaption for new_eNB_dlsch() --- openair1/SIMULATION/LTE_PHY/dlsim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 5cb91e3025..43cf078b8f 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -1061,7 +1061,7 @@ int main(int argc, char **argv) // Create transport channel structures for 2 transport blocks (MIMO) for (i=0; i<2; i++) { - PHY_vars_eNB->dlsch_eNB[k][i] = new_eNB_dlsch(Kmimo,8,N_RB_DL,0,&PHY_vars_UE->lte_frame_parms); + PHY_vars_eNB->dlsch_eNB[k][i] = new_eNB_dlsch(Kmimo,8,N_RB_DL,0,&PHY_vars_eNB->lte_frame_parms); if (!PHY_vars_eNB->dlsch_eNB[k][i]) { printf("Can't get eNB dlsch structures\n"); From 8b56ae1755f5d76ba496fb126aa4f020c2cf3104 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 26 Nov 2015 17:21:14 +0100 Subject: [PATCH 024/132] bug fixed in do_OFDM_l() for the 7th symbol in a subframe --- openair1/SIMULATION/LTE_PHY/dlsim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 43cf078b8f..1bcbe57717 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -220,7 +220,7 @@ void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_sl for (l=0; lsymbols_per_tti>>1; l++) { //printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); - if (lcell_spec_bf_weights,next_slot,l); else if (transmission_mode<7) From b86efd9cbe12c74c698ea045540d739264b3d0e8 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 26 Nov 2015 17:59:29 +0100 Subject: [PATCH 025/132] add printf for debug mode in TM7 data extraction --- .../PHY/LTE_TRANSPORT/dlsch_demodulation.c | 172 +++++++++++++++--- 1 file changed, 143 insertions(+), 29 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index 3e5ec84d46..9a5e670481 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -52,7 +52,7 @@ #endif //#define DEBUG_PHY 1 -//#define DEBUG_DLSCH_DEMOD 1 +#define DEBUG_DLSCH_DEMOD 1 int avg[4]; @@ -4373,15 +4373,41 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, else rb_alloc_ind = 0; + if (rb_alloc_ind == 1) + nb_rb++; + // For second half of RBs skip DC carrier if (rb==(frame_parms->N_RB_DL>>1)) { rxF = &rxdataF[aarx][(1 + (symbol*(frame_parms->ofdm_symbol_size)))]; //dl_ch0++; } + + // PBCH + if ((subframe==0) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=nsymb>>1) && (l<((nsymb>>1) + 4))) { + rb_alloc_ind = 0; + } + + //SSS + if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==sss_symb) ) { + rb_alloc_ind = 0; + } + + + if (frame_parms->frame_type == FDD) { + //PSS + if (((subframe==0)||(subframe==5)) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + } + + if ((frame_parms->frame_type == TDD) && + (subframe==6)) { //TDD Subframe 6 + if ((rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l==pss_symb) ) { + rb_alloc_ind = 0; + } + } if (rb_alloc_ind==1) { - //*pmi_ext = (pmi>>((rb>>2)<<1))&3; - //memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); /* printf("rb %d\n",rb); @@ -4439,7 +4465,6 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, exit(-1); } - nb_rb++; } dl_ch0+=12; @@ -4517,7 +4542,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (rb_alloc_ind==1) { - //printf("rb %d/symbol %d pilots %d, uespec_pilots %d, (skip_half %d)\n",rb,l,pilots,uespec_pilots,skip_half); +#ifdef DEBUG_DLSCH_DEMOD + printf("rb %d/symbol %d pilots %d, uespec_pilots %d, (skip_half %d)\n",rb,l,pilots,uespec_pilots,skip_half); +#endif if (pilots==0 && uespec_pilots==0) { //printf("Extracting w/o pilots (symbol %d, rb %d, skip_half %d)\n",l,rb,skip_half); @@ -4525,16 +4552,24 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (skip_half==1) { memcpy(dl_ch0_ext,dl_ch0,6*sizeof(int)); - for (i=0; i<6; i++) + for (i=0; i<6; i++) { rxF_ext[i]=rxF[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif + } dl_ch0_ext+=6; rxF_ext+=6; } else if (skip_half==2) { memcpy(dl_ch0_ext,dl_ch0+6,6*sizeof(int)); - for (i=0; i<6; i++) + for (i=0; i<6; i++) { rxF_ext[i]=rxF[(i+6)]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif + } dl_ch0_ext+=6; rxF_ext+=6; @@ -4543,7 +4578,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, for (i=0; i<12; i++){ rxF_ext[i]=rxF[i]; - //printf("symbol %d, extract rb %d, re %d => (%d,%d)\n",symbol,rb,i,*(short *)&rxF[i],*(1+(short*)&rxF[i])); +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",symbol,rb,i,*(short *)&rxF[i],*(1+(short*)&rxF[i])); +#endif } dl_ch0_ext+=12; rxF_ext+=12; @@ -4556,8 +4593,10 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, for (i=0; i<6; i++) { if (i!=((frame_parms->nushift+poffset)%6)) { rxF_ext[j]=rxF[i]; - // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j++]=dl_ch0[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } @@ -4567,8 +4606,10 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, for (i=0; i<6; i++) { if (i!=((frame_parms->nushift+poffset)%6)) { rxF_ext[j]=rxF[(i+6)]; - // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j++]=dl_ch0[i+6]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } @@ -4579,9 +4620,10 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if ((i!=(frame_parms->nushift+poffset)) && (i!=((frame_parms->nushift+poffset+6)%12))) { rxF_ext[j]=rxF[i]; - //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); +#endif dl_ch0_ext[j++]=dl_ch0[i]; - //printf("symbol %d, extract rb %d => (%d,%d)\n",symbol,rb,*(short *)&dl_ch0[i],*(1+(short*)&dl_ch0[i])); } } @@ -4599,6 +4641,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ rxF_ext[j]=rxF[i]; dl_ch0_ext[j++]=dl_ch0[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } dl_ch0_ext+=6-(uespec_nushift+uespec_poffset<6)-(uespec_nushift+uespec_poffset+4<6)-((uespec_nushift+uespec_poffset+8)%12<6); @@ -4609,6 +4654,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ rxF_ext[j]=rxF[i]; dl_ch0_ext[j++]=dl_ch0[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } dl_ch0_ext+=4; @@ -4621,6 +4669,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ rxF_ext[j]=rxF[(i+6)]; dl_ch0_ext[j++]=dl_ch0[i+6]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } dl_ch0_ext+=6-(uespec_nushift+uespec_poffset>6)-(uespec_nushift+uespec_poffset+4>6)-((uespec_nushift+uespec_poffset+8)%12>6); @@ -4631,6 +4682,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ rxF_ext[j]=rxF[(i+6)]; dl_ch0_ext[j++]=dl_ch0[i+6]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } dl_ch0_ext+=4; @@ -4644,12 +4698,17 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ rxF_ext[j] = rxF[i]; dl_ch0_ext[j++] = dl_ch0[i]; - //printf("symbol %d, extract rb %d, re %d, j %d => (%d,%d)\n",symbol,rb,i,j-1,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d, j %d => (%d,%d)\n",symbol,rb,i,j-1,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); +#endif } } else{ if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ rxF_ext[j] = rxF[i]; dl_ch0_ext[j++]=dl_ch0[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } @@ -4685,7 +4744,8 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, else rb_alloc_ind = 0; - + if (rb_alloc_ind == 1) + nb_rb++; // PBCH if ((subframe==0) && (rb>=((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) { @@ -4719,6 +4779,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, for (i=0; i<6; i++) { dl_ch0_ext[i]=dl_ch0[i]; rxF_ext[i]=rxF[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; @@ -4726,6 +4789,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, for (; i<12; i++) { dl_ch0_ext[i]=dl_ch0[i]; rxF_ext[i]=rxF[(1+i-6)]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } dl_ch0_ext+=12; @@ -4737,6 +4803,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=((frame_parms->nushift+poffset)%6)) { dl_ch0_ext[j]=dl_ch0[i]; rxF_ext[j++]=rxF[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } @@ -4746,7 +4815,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=((frame_parms->nushift+6+poffset)%12)) { dl_ch0_ext[j]=dl_ch0[i]; rxF_ext[j++]=rxF[(1+i-6)]; - //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } @@ -4760,13 +4831,17 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ dl_ch0_ext[j]=dl_ch0[i]; rxF_ext[j++] = rxF[i]; - //printf("symbol %d, extract rb %d, re %d, j %d => (%d,%d)\n",symbol,rb,i,j-1,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); - //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } else { if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ dl_ch0_ext[j]=dl_ch0[i]; rxF_ext[j++] = rxF[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } } @@ -4778,13 +4853,17 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ dl_ch0_ext[j]=dl_ch0[i]; rxF_ext[j++]=rxF[(1+i-6)]; - // printf("symbol %d, extract rb %d, re %d, j %d => (%d,%d)\n",symbol,rb,i,j-1,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); - // printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j-1],*(1+(short*)&rxF_ext[j-1])); +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } else { if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ dl_ch0_ext[j]=dl_ch0[i]; rxF_ext[j++] = rxF[(1+i-6)]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } } @@ -4794,7 +4873,6 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, }// symbol_mod==0 - nb_rb++; } // rballoc==1 else { rxF = &rxdataF[aarx][((symbol*(frame_parms->ofdm_symbol_size)))]; @@ -4868,7 +4946,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, } if (rb_alloc_ind==1) { - // printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half); +#ifdef DEBUG_DLSCH_DEMOD + printf("rb %d/symbol %d (skip_half %d)\n",rb,l,skip_half); +#endif /* printf("rb %d\n",rb); for (i=0;i<12;i++) @@ -4880,8 +4960,12 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (skip_half==1) { memcpy(dl_ch0_ext,dl_ch0,6*sizeof(int)); - for (i=0; i<6; i++) + for (i=0; i<6; i++) { rxF_ext[i]=rxF[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif + } dl_ch0_ext+=6; rxF_ext+=6; @@ -4889,8 +4973,12 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, } else if (skip_half==2) { memcpy(dl_ch0_ext,dl_ch0+6,6*sizeof(int)); - for (i=0; i<6; i++) + for (i=0; i<6; i++) { rxF_ext[i]=rxF[i+6]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif + } dl_ch0_ext+=6; rxF_ext+=6; @@ -4899,8 +4987,12 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, memcpy(dl_ch0_ext,dl_ch0,12*sizeof(int)); //printf("symbol %d, extract rb %d, => (%d,%d)\n",symbol,rb,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); - for (i=0; i<12; i++) + for (i=0; i<12; i++) { rxF_ext[i]=rxF[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif + } dl_ch0_ext+=12; rxF_ext+=12; @@ -4913,8 +5005,10 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, for (i=0; i<6; i++) { if (i!=((frame_parms->nushift+poffset)%6)) { rxF_ext[j]=rxF[i]; - //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j++]=dl_ch0[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } @@ -4924,8 +5018,10 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, for (i=0; i<6; i++) { if (i!=((frame_parms->nushift+poffset)%6)) { rxF_ext[j]=rxF[(i+6)]; - //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); dl_ch0_ext[j++]=dl_ch0[i+6]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } @@ -4936,9 +5032,10 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if ((i!=(frame_parms->nushift+poffset)) && (i!=((frame_parms->nushift+poffset+6)%12))) { rxF_ext[j]=rxF[i]; - //printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[j],*(1+(short*)&rxF_ext[j])); +#endif dl_ch0_ext[j++]=dl_ch0[i]; - //printf("symbol %d, extract rb %d => (%d,%d)\n",symbol,rb,*(short *)&dl_ch0[i],*(1+(short*)&dl_ch0[i])); } } @@ -4954,6 +5051,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ rxF_ext[j]=rxF[i]; dl_ch0_ext[j++]=dl_ch0[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } dl_ch0_ext+=6-(uespec_nushift+uespec_poffset<6)-(uespec_nushift+uespec_poffset+4<6)-((uespec_nushift+uespec_poffset+8)%12<6); @@ -4964,6 +5064,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ rxF_ext[j]=rxF[i]; dl_ch0_ext[j++]=dl_ch0[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } dl_ch0_ext+=4; @@ -4976,6 +5079,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ rxF_ext[j]=rxF[i+6]; dl_ch0_ext[j++]=dl_ch0[i+6]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } dl_ch0_ext+=6-(uespec_nushift+uespec_poffset>6)-(uespec_nushift+uespec_poffset+4>6)-((uespec_nushift+uespec_poffset+8)%12>6); @@ -4986,6 +5092,9 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ rxF_ext[j]=rxF[(i+6)]; dl_ch0_ext[j++]=dl_ch0[i+6]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } dl_ch0_ext+=4; @@ -4998,12 +5107,17 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+4 && i!=(uespec_nushift+uespec_poffset+8)%12){ rxF_ext[j] = rxF[i]; dl_ch0_ext[j++]=dl_ch0[i]; - // printf("symbol %d, extract rb %d, re %d, j %d => (%d,%d)\n",symbol,rb,i,j-1,*(short *)&dl_ch0[j],*(1+(short*)&dl_ch0[i])); +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } else{ if (i!=uespec_nushift+uespec_poffset && i!=uespec_nushift+uespec_poffset+3 && i!=uespec_nushift+uespec_poffset+6 && i!=(uespec_nushift+uespec_poffset+9)%12){ rxF_ext[j] = rxF[i]; dl_ch0_ext[j++]=dl_ch0[i]; +#ifdef DEBUG_DLSCH_DEMOD + printf("extract rb %d, re %d => (%d,%d)\n",rb,i,*(short *)&rxF_ext[i],*(1+(short*)&rxF_ext[i])); +#endif } } } From 62e38a05c01608267d88477ee395a2df9feff78f Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 26 Nov 2015 18:03:39 +0100 Subject: [PATCH 026/132] comment debug mode in dlsch_demodulation --- openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index 9a5e670481..45a36e27a5 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -52,7 +52,7 @@ #endif //#define DEBUG_PHY 1 -#define DEBUG_DLSCH_DEMOD 1 +//#define DEBUG_DLSCH_DEMOD 1 int avg[4]; From bed11c711e536366ffe6c45e6a86a16306804f28 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 30 Nov 2015 15:29:10 +0100 Subject: [PATCH 027/132] dlsch data extraction bug fixed for special subframes in TM7 --- openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index 45a36e27a5..f578c6f3e4 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -4486,6 +4486,8 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, else rb_alloc_ind = 0; + if (rb_alloc_ind == 1) + nb_rb++; // PBCH if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=(nsymb>>1)) && (l<((nsymb>>1) + 4))) { @@ -4723,8 +4725,6 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, exit(-1); } - - nb_rb++; } dl_ch0+=12; @@ -4898,7 +4898,8 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, else rb_alloc_ind = 0; - + if (rb_alloc_ind==1) + nb_rb++; // PBCH if ((subframe==0) && (rb>((frame_parms->N_RB_DL>>1)-3)) && (rb<((frame_parms->N_RB_DL>>1)+3)) && (l>=nsymb>>1) && (l<((nsymb>>1) + 4))) { @@ -5128,8 +5129,6 @@ unsigned short dlsch_extract_rbs_TM7(int **rxdataF, } }// pilots=0 - - nb_rb++; } dl_ch0+=12; From 1096744662ea84bc15fe47cdd5821d9843ff30c5 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 30 Nov 2015 15:31:33 +0100 Subject: [PATCH 028/132] cell specific beamforming weights adaption nb of tx antennas --- openair1/SIMULATION/LTE_PHY/dlsim.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 1bcbe57717..5c1c8fc896 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -799,8 +799,15 @@ int main(int argc, char **argv) cell_spec_bf_weights = PHY_vars_eNB->lte_eNB_common_vars.cell_spec_bf_weights[0][0]; for(aa=0;aaofdm_symbol_size;i++) { - cell_spec_bf_weights[aa][i] = 0x00007fff; + for(re=0;reofdm_symbol_size;re++) { + if (n_tx_phy==1 || n_tx_phy==2) + cell_spec_bf_weights[aa][re] = 0x00007fff; + else if (n_tx_phy==4) + cell_spec_bf_weights[aa][re] = 0x00007fff>>1; + else if (n_tx_phy==16) + cell_spec_bf_weights[aa][re] = 0x00007fff>>2; + else if (n_tx_phy==64) + cell_spec_bf_weights[aa][re] = 0x00007fff>>4; } } From 6fc604d1820fd936a9015ea4ed80f4e6d2b912c0 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 19 Feb 2016 18:17:43 +0100 Subject: [PATCH 029/132] conflict resolve for pdcchsim.c --- openair1/SIMULATION/LTE_PHY/pdcchsim.c | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c index 23557aada2..3b171ad937 100644 --- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c @@ -750,25 +750,6 @@ int main(int argc, char **argv) subframe,NUMBER_OF_OFDM_CARRIERS, PHY_vars_eNB->lte_frame_parms.Ncp,PHY_vars_eNB->lte_frame_parms.samples_per_tti,nsymb); -<<<<<<< HEAD - switch (N_RB_DL) { - case 6: - BW = 1.25; - break; - - case 25: - BW = 5.00; - break; - - case 50: - BW = 10.00; - break; - - case 100: - BW = 20.00; - break; - } - eNB2UE = new_channel_desc_scm(PHY_vars_eNB->lte_frame_parms.nb_antenna_ports_eNB, PHY_vars_UE->lte_frame_parms.nb_antennas_rx, channel_model, From 71f64675816923d3a8d122e62b76d0a0120908bb Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 22 Feb 2016 17:28:50 +0100 Subject: [PATCH 030/132] adaption for lte-softmodem compilation --- openair1/PHY/LTE_TRANSPORT/proto.h | 2 +- openair1/PHY/TOOLS/lte_phy_scope.c | 2 +- targets/RT/USER/lte-softmodem.c | 28 ++++++++++++++-------------- targets/RT/USER/lte-ue.c | 2 +- targets/RT/USER/sched_rx_pdsch.c | 4 +++- targets/SIMU/USER/init_lte.c | 10 +++++----- 6 files changed, 25 insertions(+), 23 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index bed82c0e68..416bff82c4 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -56,7 +56,7 @@ void free_eNB_dlsch(LTE_eNB_DLSCH_t *dlsch); void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch, uint8_t abstraction_flag); -/** \fn new_eNB_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t abstraction_flag) +/** \fn new_eNB_dlsch(uint8_t Kmimo,uint8_t Mdlharq,uint32_t Nsoft,uint8_t abstraction_flag, LTE_DL_FRAME_PARMS* frame_parms) \brief This function allocates structures for a particular DLSCH at eNB @returns Pointer to DLSCH to be removed @param Kmimo Kmimo factor from 36-212/36-213 diff --git a/openair1/PHY/TOOLS/lte_phy_scope.c b/openair1/PHY/TOOLS/lte_phy_scope.c index 736e3e5ed7..5efa4eee7b 100644 --- a/openair1/PHY/TOOLS/lte_phy_scope.c +++ b/openair1/PHY/TOOLS/lte_phy_scope.c @@ -491,7 +491,7 @@ void phy_scope_UE(FD_lte_phy_scope_ue *form, LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_ue->lte_frame_parms; int nsymb_ce = frame_parms->ofdm_symbol_size;//*frame_parms->symbols_per_tti; uint8_t nb_antennas_rx = frame_parms->nb_antennas_rx; - uint8_t nb_antennas_tx = frame_parms->nb_antennas_ports_eNB; + uint8_t nb_antennas_tx = frame_parms->nb_antenna_ports_eNB; int16_t **rxsig_t; int16_t **chest_t; int16_t **chest_f; diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index baba632de1..cf1a374dae 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -2476,7 +2476,7 @@ static void get_options (int argc, char **argv) frame_parms[CC_id]->N_RB_DL = enb_properties->properties[i]->N_RB_DL[CC_id]; frame_parms[CC_id]->N_RB_UL = enb_properties->properties[i]->N_RB_DL[CC_id]; frame_parms[CC_id]->nb_antennas_tx = enb_properties->properties[i]->nb_antennas_tx[CC_id]; - frame_parms[CC_id]->nb_antennas_tx_eNB = enb_properties->properties[i]->nb_antennas_tx[CC_id]; + frame_parms[CC_id]->nb_antenna_ports_eNB = enb_properties->properties[i]->nb_antennas_tx[CC_id]; frame_parms[CC_id]->nb_antennas_rx = enb_properties->properties[i]->nb_antennas_rx[CC_id]; //} // j } @@ -2594,18 +2594,18 @@ int main( int argc, char **argv ) for (CC_id=0; CC_idframe_type = FDD; - frame_parms[CC_id]->tdd_config = 3; - frame_parms[CC_id]->tdd_config_S = 0; - frame_parms[CC_id]->N_RB_DL = 100; - frame_parms[CC_id]->N_RB_UL = 100; - frame_parms[CC_id]->Ncp = NORMAL; - frame_parms[CC_id]->Ncp_UL = NORMAL; - frame_parms[CC_id]->Nid_cell = Nid_cell; - frame_parms[CC_id]->num_MBSFN_config = 0; - frame_parms[CC_id]->nb_antennas_tx_eNB = 1; - frame_parms[CC_id]->nb_antennas_tx = 1; - frame_parms[CC_id]->nb_antennas_rx = 1; + frame_parms[CC_id]->frame_type = FDD; + frame_parms[CC_id]->tdd_config = 3; + frame_parms[CC_id]->tdd_config_S = 0; + frame_parms[CC_id]->N_RB_DL = 100; + frame_parms[CC_id]->N_RB_UL = 100; + frame_parms[CC_id]->Ncp = NORMAL; + frame_parms[CC_id]->Ncp_UL = NORMAL; + frame_parms[CC_id]->Nid_cell = Nid_cell; + frame_parms[CC_id]->num_MBSFN_config = 0; + frame_parms[CC_id]->nb_antenna_ports_eNB = 1; + frame_parms[CC_id]->nb_antennas_tx = 1; + frame_parms[CC_id]->nb_antennas_rx = 1; } for (CC_id=0; CC_idnb_antennas_tx = 1; frame_parms[CC_id]->nb_antennas_rx = 1; - frame_parms[CC_id]->nb_antennas_tx_eNB = (transmission_mode == 1) ? 1 : 2; //initial value overwritten by initial sync later + frame_parms[CC_id]->nb_antenna_ports_eNB = (transmission_mode == 1 || transmission_mode ==7) ? 1 : 2; //initial value overwritten by initial sync later } frame_parms[CC_id]->mode1_flag = (transmission_mode == 1) ? 1 : 0; diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 6293ad4264..d5bc2c8ee9 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -1636,7 +1636,7 @@ void *UE_thread(void *arg) UE->lte_frame_parms.phich_config_common.phich_duration, UE->lte_frame_parms.phich_config_common.phich_resource, UE->lte_frame_parms.Nid_cell, - UE->lte_frame_parms.nb_antennas_tx_eNB, + UE->lte_frame_parms.nb_antenna_ports_eNB, freq_offset, UE->lte_ue_common_vars.freq_offset, UE->PHY_measurements.rx_power_avg_dB[0], diff --git a/targets/RT/USER/sched_rx_pdsch.c b/targets/RT/USER/sched_rx_pdsch.c index be1ffbd752..66224bcf92 100644 --- a/targets/RT/USER/sched_rx_pdsch.c +++ b/targets/RT/USER/sched_rx_pdsch.c @@ -156,7 +156,9 @@ static void * rx_pdsch_thread(void *param) get_Qm(UE->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->mcs), UE->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->Nl, UE->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, - UE->frame_rx,subframe); + UE->frame_rx, + subframe, + UE->transmission_mode[eNB_id]); if ((UE->transmission_mode[eNB_id] == 5) && (UE->dlsch_ue[eNB_id][0]->harq_processes[harq_pid]->dl_power_off==0) && diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c index bbb99260eb..c031d34bca 100644 --- a/targets/SIMU/USER/init_lte.c +++ b/targets/SIMU/USER/init_lte.c @@ -76,7 +76,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms, for (i=0; idlsch_eNB[i][j] = new_eNB_dlsch(1,NUMBER_OF_HARQ_PID_MAX,NSOFT,frame_parms->N_RB_DL,abstraction_flag); + PHY_vars_eNB->dlsch_eNB[i][j] = new_eNB_dlsch(1,NUMBER_OF_HARQ_PID_MAX,NSOFT,frame_parms->N_RB_DL,abstraction_flag,frame_parms); if (!PHY_vars_eNB->dlsch_eNB[i][j]) { LOG_E(PHY,"Can't get eNB dlsch structures for UE %d \n", i); @@ -128,11 +128,11 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms, exit(-1); } - PHY_vars_eNB->dlsch_eNB_SI = new_eNB_dlsch(1,1,NSOFT,frame_parms->N_RB_DL, abstraction_flag); + PHY_vars_eNB->dlsch_eNB_SI = new_eNB_dlsch(1,1,NSOFT,frame_parms->N_RB_DL, abstraction_flag, frame_parms); LOG_D(PHY,"eNB %d : SI %p\n",eNB_id,PHY_vars_eNB->dlsch_eNB_SI); - PHY_vars_eNB->dlsch_eNB_ra = new_eNB_dlsch(1,1,NSOFT,frame_parms->N_RB_DL, abstraction_flag); + PHY_vars_eNB->dlsch_eNB_ra = new_eNB_dlsch(1,1,NSOFT,frame_parms->N_RB_DL, abstraction_flag, frame_parms); LOG_D(PHY,"eNB %d : RA %p\n",eNB_id,PHY_vars_eNB->dlsch_eNB_ra); - PHY_vars_eNB->dlsch_eNB_MCH = new_eNB_dlsch(1,NUMBER_OF_HARQ_PID_MAX,NSOFT,frame_parms->N_RB_DL, 0); + PHY_vars_eNB->dlsch_eNB_MCH = new_eNB_dlsch(1,NUMBER_OF_HARQ_PID_MAX,NSOFT,frame_parms->N_RB_DL, 0, frame_parms); LOG_D(PHY,"eNB %d : MCH %p\n",eNB_id,PHY_vars_eNB->dlsch_eNB_MCH); @@ -253,7 +253,7 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs], (frame_parms[CC_id])->Nid_cell = Nid_cell; (frame_parms[CC_id])->nushift = (Nid_cell%6); (frame_parms[CC_id])->nb_antennas_tx = (transmission_mode == 1) ? 1 : 2; - (frame_parms[CC_id])->nb_antennas_tx_eNB = (transmission_mode == 1) ? 1 : 2; + (frame_parms[CC_id])->nb_antenna_ports_eNB = (transmission_mode == 1 || transmission_mode == 7) ? 1 : 2; (frame_parms[CC_id])->nb_antennas_rx = (transmission_mode == 1) ? 1 : 2; (frame_parms[CC_id])->mode1_flag = (transmission_mode == 1) ? 1 : 0; From c7c9da4296f2e2282cb3c9b214efa42d3ac9bfa0 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 29 Feb 2016 14:53:15 +0100 Subject: [PATCH 031/132] cosmetic changes to enable multiple antenna transmission --- cmake_targets/CMakeLists.txt | 2 +- openair2/ENB_APP/enb_config.c | 8 ++++---- targets/RT/USER/lte-softmodem.c | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index a94da4b2b8..5a679cdf4a 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -119,7 +119,7 @@ endmacro(add_list_string_option) #################################################### # compilation flags ############################################# -set(CMAKE_BUILD_TYPE "Debug") +#set(CMAKE_BUILD_TYPE "Debug") if (CMAKE_BUILD_TYPE STREQUAL "") set(CMAKE_BUILD_TYPE "RelWithDebInfo") endif() diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index b437c7e264..0aa980a8a3 100755 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -938,16 +938,16 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->nb_antennas_tx[j] = nb_antennas_tx; - if ((nb_antennas_tx <1) || (nb_antennas_tx > 4)) + if ((nb_antennas_tx <1) || (nb_antennas_tx > 64)) AssertError (0, parse_errors ++, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for nb_antennas_tx choice: 1..4 !\n", + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for nb_antennas_tx choice: 1..64 !\n", lib_config_file_name_pP, i, nb_antennas_tx); enb_properties.properties[enb_properties_index]->nb_antennas_rx[j] = nb_antennas_rx; - if ((nb_antennas_rx <1) || (nb_antennas_rx > 4)) + if ((nb_antennas_rx <1) || (nb_antennas_rx > 64)) AssertError (0, parse_errors ++, - "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for nb_antennas_rx choice: 1..4 !\n", + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for nb_antennas_rx choice: 1..64 !\n", lib_config_file_name_pP, i, nb_antennas_rx); enb_properties.properties[enb_properties_index]->tx_gain[j] = tx_gain; diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index cf1a374dae..72d32fbdef 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -2393,8 +2393,8 @@ static void get_options (int argc, char **argv) case 'x': transmission_mode = atoi(optarg); - if (transmission_mode > 2) { - printf("Transmission mode > 2 (%d) not supported for the moment\n",transmission_mode); + if (transmission_mode > 2 && transmission_mode != 7) { + printf("Transmission mode %d not supported for the moment\n",transmission_mode); exit(-1); } break; @@ -2476,7 +2476,7 @@ static void get_options (int argc, char **argv) frame_parms[CC_id]->N_RB_DL = enb_properties->properties[i]->N_RB_DL[CC_id]; frame_parms[CC_id]->N_RB_UL = enb_properties->properties[i]->N_RB_DL[CC_id]; frame_parms[CC_id]->nb_antennas_tx = enb_properties->properties[i]->nb_antennas_tx[CC_id]; - frame_parms[CC_id]->nb_antenna_ports_eNB = enb_properties->properties[i]->nb_antennas_tx[CC_id]; + frame_parms[CC_id]->nb_antenna_ports_eNB = 1;//enb_properties->properties[i]->nb_antenna_ports_eNB[CC_id]; frame_parms[CC_id]->nb_antennas_rx = enb_properties->properties[i]->nb_antennas_rx[CC_id]; //} // j } From f02e6ca52634768748762084ca35a4a41799e75a Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 29 Feb 2016 17:15:26 +0100 Subject: [PATCH 032/132] add beamforming function --- openair1/PHY/LTE_TRANSPORT/beamforming.c | 211 +++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 openair1/PHY/LTE_TRANSPORT/beamforming.c diff --git a/openair1/PHY/LTE_TRANSPORT/beamforming.c b/openair1/PHY/LTE_TRANSPORT/beamforming.c new file mode 100644 index 0000000000..7a2b75d74e --- /dev/null +++ b/openair1/PHY/LTE_TRANSPORT/beamforming.c @@ -0,0 +1,211 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see . + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + +Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ + +/*! \file PHY/LTE_TRANSPORT/beamforming.c + * \brief + * \author R. Knopp, F. Kaltenberger, X. JIANG + * \date 2015 + * \version 0.1 + * \company Eurecom + * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,xiwen.jiang@eurecom.fr + * \note + * \warning + */ +#include "PHY/defs.h" +#include "PHY/extern.h" +#include "PHY/CODING/defs.h" +#include "PHY/CODING/extern.h" +#include "PHY/CODING/lte_interleaver_inline.h" +#include "PHY/LTE_TRANSPORT/defs.h" +#include "defs.h" +#include "UTIL/LOG/vcd_signal_dumper.h" + + +// ue_spec_beamforming: perform beamforming for data in transmission_mode TM7-TM10 +int ue_spec_beamforming(int32_t **txdataF, + int32_t **txdataF_BF, + LTE_DL_FRAME_PARMS *frame_parms, + int32_t ***ue_spec_bf_weights, + int slot, + int symbol) +{ + uint8_t p,aa; + uint16_t re=0; + int slot_offset_F; + + slot_offset_F = slot*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); + + // clear txdata_BF[aa][re] for each call of spec_spec_beamforming + for(aa=0;aanb_antennas_tx;aa++) + memset(txdataF_BF[aa],0,4*(frame_parms->ofdm_symbol_size)); + + for (re=0;reofdm_symbol_size;re++) { + if (txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually using TM7 + for (aa=0;aanb_antennas_tx;aa++) { + ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] + *((int16_t*)&ue_spec_bf_weights[0][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] + *((int16_t*)&ue_spec_bf_weights[0][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] + *((int16_t*)&ue_spec_bf_weights[0][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] + *((int16_t*)&ue_spec_bf_weights[0][aa][re])[0])>>15); + +/* printf("beamforming.c:txdataF[5][%d]=%d+j%d, ue_bf_weights[0][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", + slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, + ((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], + ((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], + aa,re, + ((int16_t*)&ue_spec_bf_weights[0][aa][re])[0],((int16_t*)&ue_spec_bf_weights[0][aa][re])[1], + aa,re, + ((int16_t*)&txdataF_BF[aa][re])[0], + ((int16_t*)&txdataF_BF[aa][re])[1]); */ + } + } + + if (txdataF[7][re+symbol*frame_parms->ofdm_symbol_size]!=0) { //that means this RE is actually using TM8-10 + for (p=0;p<8;p++) { + if (txdataF[p+7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually allocated + for (aa=0;aanb_antennas_tx;aa++) { + ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[p+7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] + *((int16_t*)&ue_spec_bf_weights[p][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p+7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] + *((int16_t*)&ue_spec_bf_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[p+7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] + *((int16_t*)&ue_spec_bf_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p+7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] + *((int16_t*)&ue_spec_bf_weights[p][aa][re])[0])>>15); + } + } + } + } + } +} + +// cell_spec_beamforming: performed for all common data +int cell_spec_beamforming(int32_t **txdataF, + int32_t **txdataF_BF, + LTE_DL_FRAME_PARMS *frame_parms, + int32_t ***cell_spec_bf_weights, + int slot, + int symbol) +{ + uint8_t p,aa; + uint16_t re=0; + int slot_offset_F; + + slot_offset_F = slot*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); + + // clear txdata_BF[aa][re] for each call of cell_spec_beamforming + for(aa=0;aanb_antennas_tx;aa++) + memset(txdataF_BF[aa],0,4*(frame_parms->ofdm_symbol_size)); + + for (re=0;reofdm_symbol_size;re++) { + for (p=0;pnb_antenna_ports_eNB;p++) { + if (txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually allocated + for (aa=0;aanb_antennas_tx;aa++) { + //printf("cell_spec_beamforming():txdata_BF[%d][%d]=%d+j%d\n",aa,re,((int16_t*)&txdataF_BF[aa][re])[0],((int16_t*)&txdataF_BF[aa][re])[1]); + + ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] + *((int16_t*)&cell_spec_bf_weights[p][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] + *((int16_t*)&cell_spec_bf_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] + *((int16_t*)&cell_spec_bf_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] + *((int16_t*)&cell_spec_bf_weights[p][aa][re])[0])>>15); + // printf("beamforming.c:txdata[%d][%d]=%d+j%d, cell_bf_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", + // p,slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, + // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], + // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], + // p,aa,re, + // ((int16_t*)&cell_spec_bf_weights[p][aa][re])[0],((int16_t*)&cell_spec_bf_weights[p][aa][re])[1], + // aa,re, + // ((int16_t*)&txdataF_BF[aa][re])[0], + // ((int16_t*)&txdataF_BF[aa][re])[1]); + } + } + } + } +} +/* +int ue_spec_beamforming(int32_t **txdataF, + int32_t **txdataF_BF, + LTE_DL_FRAME_PARMS *frame_parms, + LTE_eNB_DLSCH_t *dlsch0, + LTE_eNB_DLSCH_t *dlsch1, + int symbol) +{ + uint8_t p,aa; + uint16_t re=0; + + uint8_t harq_pid = dlsch0->current_harq_pid; + LTE_DL_eNB_HARQ_t *dlsch0_harq = dlsch0->harq_processes[harq_pid]; + LTE_DL_eNB_HARQ_t *dlsch1_harq; //= dlsch1->harq_processes[harq_pid]; + MIMO_mode_t mimo_mode = dlsch0_harq->mimo_mode; + int first_layer0 = dlsch0_harq->first_layer; + int Nlayers0 = dlsch0_harq->Nlayers; + + // Fill these in later for TM8-10 + int Nlayers1; + int first_layer1; + + if (dlsch1_harq) { + Nlayers1 = dlsch1_harq->Nlayers; + first_layer1 = dlsch1_harq->first_layer; + } + + //temp + if(mimo_mode==TM7){ + first_layer0 = 5; + Nlayers0=1; + } + + for (re=0;renb_antennas_tx;aa++) { + txdataF_BF[aa][re] += txdataF[p][re]*dlsch0->uespec_bf_weights[p][aa][re]; + } + } + } + + if(dlsch1_harq) { + for (p=first_layer1;pnb_antennas_tx;aa++) { + txdataF_BF[aa][re] += txdataF[p][re]*dlsch1->uespec_bf_weights[p][aa][re]; + } + } + } + } + + } +} */ From ea13be85b9ad0bccd55a0e8a4e6d9f7cfb885155 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 29 Feb 2016 17:49:33 +0100 Subject: [PATCH 033/132] enable n_tx=8 in dlsim.c --- openair1/SIMULATION/LTE_PHY/dlsim.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 7b38162784..6e2cafe8f9 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -601,10 +601,10 @@ int main(int argc, char **argv) } } - //if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=8 && n_tx_phy!=16 && n_tx_phy!=64 && n_tx_phy!=128)) { - if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=16 && n_tx_phy!=64)) { + if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=8 && n_tx_phy!=16 && n_tx_phy!=64 && n_tx_phy!=128)) { + // if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=16 && n_tx_phy!=64)) { msg("Physical number of antennas not supported for TM7.\n"); - exit(-1); + exit(-1); } break; @@ -715,7 +715,7 @@ int main(int argc, char **argv) for(re=0;reofdm_symbol_size;re++) { if (n_tx_phy==1 || n_tx_phy==2) cell_spec_bf_weights[aa][re] = 0x00007fff; - else if (n_tx_phy==4) + else if (n_tx_phy==4 || n_tx_phy==8) cell_spec_bf_weights[aa][re] = 0x00007fff>>1; else if (n_tx_phy==16) cell_spec_bf_weights[aa][re] = 0x00007fff>>2; From e3e30fbf07dd9747e29b66125bf70f6d8419736c Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 29 Feb 2016 18:16:12 +0100 Subject: [PATCH 034/132] add tm7 eNB config file --- .../CONF/enb.band38.tm7.exmimo2.conf | 169 ++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf new file mode 100644 index 0000000000..deff3db9dd --- /dev/null +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf @@ -0,0 +1,169 @@ +Active_eNBs = ( "eNB_Eurecom_LTEBox"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +eNBs = +( + { + ////////// Identification parameters: + eNB_ID = 0xe00; + + cell_type = "CELL_MACRO_ENB"; + + eNB_name = "eNB_Eurecom_LTEBox"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = "1"; + + mobile_country_code = "208"; + + mobile_network_code = "93"; + + ////////// Physical parameters: + + component_carriers = ( + { + frame_type = "TDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 38; + downlink_frequency = 2580000000L; + uplink_frequency_offset = 0; //-120000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 4; + nb_antennas_rx = 4; + tx_gain = 10; //25; + rx_gain = 10; //20; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -26; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -85; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + ////////// MME parameters: + mme_ip_address = ( { ipv4 = "192.168.12.70"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24"; + + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + + log_config : + { + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="debug"; + hw_log_verbosity ="medium"; + phy_log_level ="info"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="debug"; + rrc_log_verbosity ="medium"; + }; + } +); From bbd125a778e6cabc562779bb2c9d64d0e65941bc Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 1 Mar 2016 15:40:43 +0100 Subject: [PATCH 035/132] bug fixed for ULSIM --- openair1/SIMULATION/LTE_PHY/ulsim.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index 8ba3434f48..47e41f3e85 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -28,7 +28,7 @@ *******************************************************************************/ /*! \file ulsim.c - \brief Top-level DL simulator + \brief Top-level UL simulator \author R. Knopp \date 2011 - 2014 \version 0.1 @@ -468,6 +468,7 @@ int main(int argc, char **argv) } lte_param_init(1, + 1, n_rx, 1, extended_prefix_flag, From 71b76934293a7f54a89b33dcc5266d44c2e9cde1 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 1 Mar 2016 15:41:07 +0100 Subject: [PATCH 036/132] change back 'p' and 'q' options for dlsim --- openair1/SIMULATION/LTE_PHY/dlsim.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 6e2cafe8f9..ba7d02b340 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -447,7 +447,7 @@ int main(int argc, char **argv) n_ch_rlz= atof(optarg); break; - case 'q': + case 'p': extended_prefix_flag=1; break; @@ -554,7 +554,7 @@ int main(int argc, char **argv) print_perf=1; break; - case 'p': + case 'q': n_tx_port=atoi(optarg); if ((n_tx_port==0) || ((n_tx_port>2))) { @@ -647,7 +647,7 @@ int main(int argc, char **argv) printf("-g [A:M] Use 3GPP 25.814 SCM-A/B/C/D('A','B','C','D') or 36-101 EPA('E'), EVA ('F'),ETU('G') models (ignores delay spread and Ricean factor), Rayghleigh8 ('H'), Rayleigh1('I'), Rayleigh1_corr('J'), Rayleigh1_anticorr ('K'), Rice8('L'), Rice1('M')\n"); printf("-F forgetting factor (0 new channel every trial, 1 channel constant\n"); printf("-x Transmission mode (1,2,6,7 for the moment)\n"); - printf("-p Number of TX antennas ports used in eNB\n"); + printf("-q Number of TX antennas ports used in eNB\n"); printf("-y Number of physical TX antennas used in eNB\n"); printf("-z Number of RX antennas used in UE\n"); printf("-t MCS of interfering UE\n"); From 06c4b91b61ead3637be02c38bccf7babe47af437 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 17 Mar 2016 10:28:06 +0100 Subject: [PATCH 037/132] move beamforming function to PHY/MODULATION folder --- cmake_targets/CMakeLists.txt | 2 +- openair1/PHY/LTE_TRANSPORT/proto.h | 35 ------------------- .../beamforming.c | 8 ++--- openair1/PHY/MODULATION/defs.h | 34 ++++++++++++++++++ openair1/SIMULATION/LTE_PHY/dlsim.c | 8 ++--- 5 files changed, 43 insertions(+), 44 deletions(-) rename openair1/PHY/{LTE_TRANSPORT => MODULATION}/beamforming.c (98%) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 5a679cdf4a..7981ea1023 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -868,12 +868,12 @@ set(PHY_SRC ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/rar_tools.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/print_stats.c ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/initial_sync.c - ${OPENAIR1_DIR}/PHY/LTE_TRANSPORT/beamforming.c ${OPENAIR1_DIR}/PHY/MODULATION/ofdm_mod.c ${OPENAIR1_DIR}/PHY/MODULATION/slot_fep.c ${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_mbsfn.c ${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_ul.c ${OPENAIR1_DIR}/PHY/MODULATION/ul_7_5_kHz.c + ${OPENAIR1_DIR}/PHY/MODULATION/beamforming.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/freq_equalization.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_sync_time.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_sync_timefreq.c diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 416bff82c4..35de21c7b8 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -336,41 +336,6 @@ int32_t generate_pbch(LTE_eNB_PBCH *eNB_pbch, int32_t generate_pbch_emul(PHY_VARS_eNB *phy_vars_eNB,uint8_t *pbch_pdu); - -/** \brief This function performs UE specific beamforming especially for - * transmission mode TM7-10 - @param txdataF Table of pointers for frequency-domain TX signals - @param txdataF_BF Table of pointers for frequency-domain TX signals -after beamforming - @param frame_parms Frame descriptor structure - @param ue_spec_bf_weights UE specific beamforming weights applied on -each antenna element and each carrier - @param slot Slot number - @param symbol Symbol index on which to act*/ -int ue_spec_beamforming(int32_t **txdataF, - int32_t **txdataF_BF, - LTE_DL_FRAME_PARMS *frame_parms, - int32_t ***ue_spec_bf_weights, - int slot, - int symbol); - -/** \brief This function performs cell specific beamforming for common - * data - @param txdataF Table of pointers for frequency-domain TX signals - @param txdataF_BF Table of pointers for frequency-domain TX signals - @param frame_parms Frame descriptor structure -after beamforming - @param cell_spec_bf_weights Common beamforming weights applied on each -antenna element and each carrier - @param slot Slot number - @param symbol Symbol index on which to act*/ -int cell_spec_beamforming(int32_t **txdataF, - int32_t **txdataF_BF, - LTE_DL_FRAME_PARMS *frame_parms, - int32_t ***cell_spec_bf_weights, - int slot, - int symbol); - /** \brief This function computes the LLRs for ML (max-logsum approximation) dual-stream QPSK/QPSK reception. @param stream0_in Input from channel compensated (MR combined) stream 0 @param stream1_in Input from channel compensated (MR combined) stream 1 diff --git a/openair1/PHY/LTE_TRANSPORT/beamforming.c b/openair1/PHY/MODULATION/beamforming.c similarity index 98% rename from openair1/PHY/LTE_TRANSPORT/beamforming.c rename to openair1/PHY/MODULATION/beamforming.c index 7a2b75d74e..867ba0d53d 100644 --- a/openair1/PHY/LTE_TRANSPORT/beamforming.c +++ b/openair1/PHY/MODULATION/beamforming.c @@ -27,13 +27,13 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 069 *******************************************************************************/ -/*! \file PHY/LTE_TRANSPORT/beamforming.c +/*! \file PHY/MODULATION/beamforming.c * \brief - * \author R. Knopp, F. Kaltenberger, X. JIANG - * \date 2015 + * \author X. JIANG, F. Kaltenberger, R. KNOPP + * \date 2016 * \version 0.1 * \company Eurecom - * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,xiwen.jiang@eurecom.fr + * \email: xiwen.jiang@eurecom.fr,florian.kaltenberger@eurecom.fr,raymond.knopp@eurecom.fr * \note * \warning */ diff --git a/openair1/PHY/MODULATION/defs.h b/openair1/PHY/MODULATION/defs.h index 6005d6d49a..fec65b8679 100644 --- a/openair1/PHY/MODULATION/defs.h +++ b/openair1/PHY/MODULATION/defs.h @@ -99,6 +99,40 @@ void remove_625_Hz(PHY_VARS_eNB *phy_vars_eNB,int16_t *prach); void apply_625_Hz(PHY_VARS_UE *phy_vars_ue,int16_t *prach); +/** \brief This function performs UE specific beamforming especially for + * transmission mode TM7-10 + @param txdataF Table of pointers for frequency-domain TX signals + @param txdataF_BF Table of pointers for frequency-domain TX signals +after beamforming + @param frame_parms Frame descriptor structure + @param ue_spec_bf_weights UE specific beamforming weights applied on +each antenna element and each carrier + @param slot Slot number + @param symbol Symbol index on which to act*/ +int ue_spec_beamforming(int32_t **txdataF, + int32_t **txdataF_BF, + LTE_DL_FRAME_PARMS *frame_parms, + int32_t ***ue_spec_bf_weights, + int slot, + int symbol); + +/** \brief This function performs cell specific beamforming for common + * data + @param txdataF Table of pointers for frequency-domain TX signals + @param txdataF_BF Table of pointers for frequency-domain TX signals + @param frame_parms Frame descriptor structure +after beamforming + @param cell_spec_bf_weights Common beamforming weights applied on each +antenna element and each carrier + @param slot Slot number + @param symbol Symbol index on which to act*/ +int cell_spec_beamforming(int32_t **txdataF, + int32_t **txdataF_BF, + LTE_DL_FRAME_PARMS *frame_parms, + int32_t ***cell_spec_bf_weights, + int slot, + int symbol); + #endif /** @}*/ #endif diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index ba7d02b340..beb90006ae 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -134,12 +134,12 @@ void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_sl //printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); if (lcell_spec_bf_weights,next_slot,l); + cell_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->cell_spec_bf_weights[eNB_id],next_slot,l); else if (transmission_mode<7) - cell_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->cell_spec_bf_weights,next_slot,l); + cell_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->cell_spec_bf_weights[eNB_id],next_slot,l); else - ue_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->ue_spec_bf_weights,next_slot,l); + ue_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->ue_spec_bf_weights[eNB_id],next_slot,l); for (aa=0; aanb_antennas_tx; aa++) { @@ -1026,7 +1026,7 @@ int main(int argc, char **argv) for (re=0;reofdm_symbol_size;re++) { if (n_tx_phy==1 || n_tx_phy==2) ue_spec_bf_weights[aa][re] = 0x00007fff; - else if (n_tx_phy==4) + else if (n_tx_phy==4 || n_tx_phy==8) ue_spec_bf_weights[aa][re] = 0x00007fff>>1; else if (n_tx_phy==16) ue_spec_bf_weights[aa][re] = 0x00007fff>>2; From e196f5fcfb631e8815df27b996924fe7eec00255 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 21 Mar 2016 16:52:03 +0100 Subject: [PATCH 038/132] bug fixed in beamforming.c --- openair1/PHY/MODULATION/beamforming.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c index 867ba0d53d..157b8eb368 100644 --- a/openair1/PHY/MODULATION/beamforming.c +++ b/openair1/PHY/MODULATION/beamforming.c @@ -61,7 +61,7 @@ int ue_spec_beamforming(int32_t **txdataF, slot_offset_F = slot*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); - // clear txdata_BF[aa][re] for each call of spec_spec_beamforming + // clear txdata_BF[aa][re] for each call of ue_spec_beamforming for(aa=0;aanb_antennas_tx;aa++) memset(txdataF_BF[aa],0,4*(frame_parms->ofdm_symbol_size)); @@ -89,7 +89,7 @@ int ue_spec_beamforming(int32_t **txdataF, } } - if (txdataF[7][re+symbol*frame_parms->ofdm_symbol_size]!=0) { //that means this RE is actually using TM8-10 + if (txdataF[7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually using TM8-10 for (p=0;p<8;p++) { if (txdataF[p+7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually allocated for (aa=0;aanb_antennas_tx;aa++) { @@ -130,7 +130,6 @@ int cell_spec_beamforming(int32_t **txdataF, for (p=0;pnb_antenna_ports_eNB;p++) { if (txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually allocated for (aa=0;aanb_antennas_tx;aa++) { - //printf("cell_spec_beamforming():txdata_BF[%d][%d]=%d+j%d\n",aa,re,((int16_t*)&txdataF_BF[aa][re])[0],((int16_t*)&txdataF_BF[aa][re])[1]); ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] *((int16_t*)&cell_spec_bf_weights[p][aa][re])[0])>>15); @@ -154,6 +153,10 @@ int cell_spec_beamforming(int32_t **txdataF, } } } + + + + /* int ue_spec_beamforming(int32_t **txdataF, int32_t **txdataF_BF, From 9fca33136d955aa74f2d4e7556fa7e3261ef18e9 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 21 Mar 2016 16:53:35 +0100 Subject: [PATCH 039/132] move symbol level ifft including beamforming into ofdm_mod.c --- openair1/PHY/MODULATION/ofdm_mod.c | 55 +++++++++++++++++++++++++++++ openair1/SIMULATION/LTE_PHY/dlsim.c | 54 ---------------------------- 2 files changed, 55 insertions(+), 54 deletions(-) diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 3dd76c0fbb..e8344a1972 100755 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -276,4 +276,59 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t } +// OFDM modulation for each symbol +void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms, uint8_t num_pdcch_symbols, unsigned char transmission_mode) +{ + + int aa, l, slot_offset, slot_offset_F; + mod_sym_t **txdataF = eNB_common_vars->txdataF[eNB_id]; + mod_sym_t **txdataF_BF = eNB_common_vars->txdataF_BF[eNB_id]; + int32_t **txdata = eNB_common_vars->txdata[eNB_id]; + + //slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); + slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); + + // printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc()); + for (l=0; lsymbols_per_tti>>1; l++) { + + //printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); + if (lcell_spec_bf_weights[eNB_id],next_slot,l); + else + if (transmission_mode<7) + cell_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->cell_spec_bf_weights[eNB_id],next_slot,l); + else + ue_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->ue_spec_bf_weights[eNB_id],next_slot,l); + + for (aa=0; aanb_antennas_tx; aa++) { + + if (frame_parms->Ncp == 1) + PHY_ofdm_mod(txdataF_BF[aa], // input + &txdata[aa][slot_offset+l*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES], // output + frame_parms->ofdm_symbol_size, + 1, // number of symbols + frame_parms->nb_prefix_samples, // number of prefix samples + CYCLIC_PREFIX); + else { + if (l==0) { + PHY_ofdm_mod(txdataF_BF[aa], // input + &txdata[aa][slot_offset], // output + frame_parms->ofdm_symbol_size, + 1, // number of symbols + frame_parms->nb_prefix_samples0, // number of prefix samples + CYCLIC_PREFIX); + + } else { + PHY_ofdm_mod(txdataF_BF[aa], // input + &txdata[aa][slot_offset+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(l-1)*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES], // output + frame_parms->ofdm_symbol_size, + 1, // number of symbols + frame_parms->nb_prefix_samples, // number of prefix samples + CYCLIC_PREFIX); + } + } + } + } + +} /** @} */ diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index beb90006ae..81a27f4a53 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -118,60 +118,6 @@ uint64_t DLSCH_alloc_pdu_1[2]; #define CCCH_RB_ALLOC computeRIV(PHY_vars_eNB->lte_frame_parms.N_RB_UL,0,2) //#define DLSCH_RB_ALLOC 0x1fbf // igore DC component,RB13 //#define DLSCH_RB_ALLOC 0x0001 -void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms, uint8_t num_pdcch_symbols, unsigned char transmission_mode) -{ - - int aa, l, slot_offset, slot_offset_F; - mod_sym_t **txdataF = eNB_common_vars->txdataF[eNB_id]; - mod_sym_t **txdataF_BF = eNB_common_vars->txdataF_BF[eNB_id]; - int32_t **txdata = eNB_common_vars->txdata[eNB_id]; - - //slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); - slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); - - // printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc()); - for (l=0; lsymbols_per_tti>>1; l++) { - - //printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); - if (lcell_spec_bf_weights[eNB_id],next_slot,l); - else - if (transmission_mode<7) - cell_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->cell_spec_bf_weights[eNB_id],next_slot,l); - else - ue_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->ue_spec_bf_weights[eNB_id],next_slot,l); - - for (aa=0; aanb_antennas_tx; aa++) { - - if (frame_parms->Ncp == 1) - PHY_ofdm_mod(txdataF_BF[aa], // input - &txdata[aa][slot_offset+l*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES], // output - frame_parms->ofdm_symbol_size, - 1, // number of symbols - frame_parms->nb_prefix_samples, // number of prefix samples - CYCLIC_PREFIX); - else { - if (l==0) { - PHY_ofdm_mod(txdataF_BF[aa], // input - &txdata[aa][slot_offset], // output - frame_parms->ofdm_symbol_size, - 1, // number of symbols - frame_parms->nb_prefix_samples0, // number of prefix samples - CYCLIC_PREFIX); - - } else { - PHY_ofdm_mod(txdataF_BF[aa], // input - &txdata[aa][slot_offset+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(l-1)*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES], // output - frame_parms->ofdm_symbol_size, - 1, // number of symbols - frame_parms->nb_prefix_samples, // number of prefix samples - CYCLIC_PREFIX); - } - } - } - } - -} int main(int argc, char **argv) { From 9fcca73f538bf710d25f93ea9e03758d821a4b8e Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 21 Mar 2016 16:55:26 +0100 Subject: [PATCH 040/132] lte softmodem adaption for massive antennas (not complete) --- openair1/PHY/INIT/lte_init.c | 2 +- openair1/PHY/impl_defs_lte.h | 5 +++++ openair1/SCHED/phy_procedures_lte_eNb.c | 23 +++++++++++++++-------- targets/RT/USER/lte-softmodem.c | 4 ++-- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index e604d599a1..672a3a51ef 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -1305,7 +1305,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, for (i=0; i<2; i++) { // 2 is the total number of cell specific antenna ports eNB_common_vars->cell_spec_bf_weights[eNB_id][i] = (int32_t **)malloc16_clear(frame_parms->nb_antennas_tx*sizeof(int32_t*)); for (j=0; jnb_antennas_tx; j++) { - eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j] = (int32_t*)malloc16_clear(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); + eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j] = (int32_t *)malloc16_clear(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); #ifdef DEBUG_PUY msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->cell_spec_bf_weights[%d][%d][%d] = %p (%d bytes)\n", eNB_id,i,j,eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j], diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h index 134a92e15d..864d2d5d19 100644 --- a/openair1/PHY/impl_defs_lte.h +++ b/openair1/PHY/impl_defs_lte.h @@ -645,6 +645,11 @@ typedef struct { /// - third index: tx antenna [0..nb_antennas_tx[ /// - fourth index: sample [0..] int32_t **ue_spec_bf_weights[3][8]; + /// \brief Holds the tdd reciprocity calibration coefficients + /// - first index: eNB id [0..2] (hard coded) + /// - second index: tx antenna [0..nb_antennas_tx[ + /// - third index: frenquency [0..] + int32_t **tdd_calib_coeffs[3]; } LTE_eNB_COMMON; typedef struct { diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 082f0c0568..dece28f78e 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -2520,14 +2520,21 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e if (abstraction_flag==0) { start_meas(&phy_vars_eNB->ofdm_mod_stats); - do_OFDM_mod(phy_vars_eNB->lte_eNB_common_vars.txdataF[0], - phy_vars_eNB->lte_eNB_common_vars.txdata[0], - phy_vars_eNB->proc[sched_subframe].frame_tx,subframe<<1, - &phy_vars_eNB->lte_frame_parms); - do_OFDM_mod(phy_vars_eNB->lte_eNB_common_vars.txdataF[0], - phy_vars_eNB->lte_eNB_common_vars.txdata[0], - phy_vars_eNB->proc[sched_subframe].frame_tx,1+(subframe<<1), - &phy_vars_eNB->lte_frame_parms); + + do_OFDM_mod_l(phy_vars_eNB->lte_eNB_common_vars, + 0, + subframe<<1, + &phy_vars_eNB->lte_frame_parms, + num_pdcch_symbols, + eNB->transmission_mode[(uint8_t)UE_id]); + + do_OFDM_mod_l(phy_vars_eNB->lte_eNB_common_vars, + 0, + 1+(subframe<<1), + &phy_vars_eNB->lte_frame_parms, + num_pdcch_symbols, + eNB->transmission_mode[(uint8_t)UE_id]); + stop_meas(&phy_vars_eNB->ofdm_mod_stats); } diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 72d32fbdef..0fe4e2342c 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -2755,7 +2755,7 @@ int main( int argc, char **argv ) frame_parms[CC_id]->nb_antenna_ports_eNB = (transmission_mode == 1 || transmission_mode ==7) ? 1 : 2; //initial value overwritten by initial sync later } - frame_parms[CC_id]->mode1_flag = (transmission_mode == 1) ? 1 : 0; + frame_parms[CC_id]->mode1_flag = (transmission_mode == 1 || transmission_mode ==7) ? 1 : 0; frame_parms[CC_id]->phich_config_common.phich_resource = oneSixth; frame_parms[CC_id]->phich_config_common.phich_duration = normal; // UL RS Config @@ -3188,7 +3188,7 @@ int main( int argc, char **argv ) openair_daq_vars.timing_advance = 160; #endif if (setup_ue_buffers(UE,&openair0_cfg[0],rf_map)!=0) { - printf("Error setting up eNB buffer\n"); + printf("Error setting up UE buffer\n"); exit(-1); } From 3c7f2ff3cef9b9081fe90f079b99333c3d3fe2af Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 25 Mar 2016 09:19:34 +0100 Subject: [PATCH 041/132] fill dci for TM7 --- openair1/SCHED/phy_mac_stub.c | 2 +- openair1/SIMULATION/LTE_PHY/dlsim.c | 2 +- openair2/LAYER2/MAC/eNB_scheduler_dlsch.c | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/openair1/SCHED/phy_mac_stub.c b/openair1/SCHED/phy_mac_stub.c index 9bcba1072c..62ca6ea8d0 100644 --- a/openair1/SCHED/phy_mac_stub.c +++ b/openair1/SCHED/phy_mac_stub.c @@ -226,7 +226,7 @@ void fill_dci(DCI_PDU *DCI_pdu, uint8_t sched_subframe, PHY_VARS_eNB *phy_vars_e DCI_pdu->dci_alloc[0].format = format1; DCI_pdu->dci_alloc[0].ra_flag = 0; - if (transmission_mode<3) { + if (transmission_mode<3 || transmission_mode == 7) { //user 1 switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) { case 25: diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index cd2c89f3c2..206ea63ae0 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -1151,7 +1151,7 @@ int main(int argc, char **argv) P_RNTI, PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); - if(transmission_mode==7) + if (transmission_mode == 7) PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->mimo_mode = TM7; //Xiwen: to check about harq_pid num_dci++; diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c index 2a52d8779a..ca05786371 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c @@ -653,6 +653,7 @@ schedule_ue_spec( switch (mac_xface->get_transmission_mode(module_idP,CC_id,rnti)) { case 1: case 2: + case 7: default: switch (frame_parms[CC_id]->N_RB_DL) { case 6: @@ -1545,6 +1546,8 @@ fill_DLSCH_dci( case 1: case 2: + + case 7: LOG_D(MAC,"[eNB %d] CC_id %d Adding UE %d spec DCI for %d PRBS \n",module_idP, CC_id, UE_id, nb_rb); if (PHY_vars_eNB_g[module_idP][CC_id]->lte_frame_parms.frame_type == TDD) { From b6e7f7ec513496d5448ecbd8011fe577f59cc032 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 30 May 2016 17:58:31 +0200 Subject: [PATCH 042/132] tx_eNB -> ant_ports in oaisim --- targets/SIMU/USER/oaisim_functions.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index 72153c3ee7..f7e6b97d37 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -934,12 +934,12 @@ void init_openair1(void) PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_ACK_Index = beta_ACK; PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_RI_Index = beta_RI; PHY_vars_eNB_g[eNB_id][CC_id]->pusch_config_dedicated[UE_id].betaOffset_CQI_Index = beta_CQI; - PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.p_b = (frame_parms[CC_id]->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_A = rho_B + PHY_vars_eNB_g[eNB_id][CC_id]->lte_frame_parms.pdsch_config_common.p_b = (frame_parms[CC_id]->nb_antenna_ports_eNB>1) ? 1 : 0; // rho_A = rho_B PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_ACK_Index = beta_ACK; PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_RI_Index = beta_RI; PHY_vars_UE_g[UE_id][CC_id]->pusch_config_dedicated[eNB_id].betaOffset_CQI_Index = beta_CQI; - PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.pdsch_config_common.p_b = (frame_parms[CC_id]->nb_antennas_tx_eNB>1) ? 1 : 0; // rho_A = rho_B + PHY_vars_UE_g[UE_id][CC_id]->lte_frame_parms.pdsch_config_common.p_b = (frame_parms[CC_id]->nb_antenna_ports_eNB>1) ? 1 : 0; // rho_A = rho_B } } } From d621de7fb3f41a3083fd435833fce1b702a4f68a Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 30 May 2016 18:38:52 +0200 Subject: [PATCH 043/132] enable TM7 in oaisim --- targets/SIMU/USER/oaisim_functions.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index f7e6b97d37..1b29da3740 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -685,7 +685,7 @@ void get_simulation_options(int argc, char *argv[]) oai_emulation.info.transmission_mode[0] = atoi (optarg); if ((oai_emulation.info.transmission_mode[0] != 1) && (oai_emulation.info.transmission_mode[0] != 2) && (oai_emulation.info.transmission_mode[0] != 3) - && (oai_emulation.info.transmission_mode[0] != 5) && (oai_emulation.info.transmission_mode[0] != 6)) { + && (oai_emulation.info.transmission_mode[0] != 5) && (oai_emulation.info.transmission_mode[0] != 6) && (oai_emulation.info.transmission_mode[0] !=7)) { printf("Unsupported transmission mode %d\n",oai_emulation.info.transmission_mode[0]); exit(-1); } From 7ca6a84e200665d53e627ac600528e6b457c4be3 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 31 May 2016 17:37:19 +0200 Subject: [PATCH 044/132] bug fixed for oarf_get_frame --- targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc index 708910b4f7..e53dccd5db 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc @@ -192,14 +192,14 @@ DEFUN_DLD (oarf_get_frame, args, nargout,"Get frame") for (j=0; j Date: Tue, 31 May 2016 17:38:01 +0200 Subject: [PATCH 045/132] add exmimo octave api env to TDD rec proj --- targets/PROJECTS/TDDREC/s_init_params.m | 1 + 1 file changed, 1 insertion(+) diff --git a/targets/PROJECTS/TDDREC/s_init_params.m b/targets/PROJECTS/TDDREC/s_init_params.m index 9683ed2d17..be51524755 100644 --- a/targets/PROJECTS/TDDREC/s_init_params.m +++ b/targets/PROJECTS/TDDREC/s_init_params.m @@ -1,6 +1,7 @@ clear all close all addpath([getenv('OPENAIR_TARGETS') '/ARCH/EXMIMO/USERSPACE/OCTAVE']); +addpath([getenv('OPENAIR_DIR') '/cmake_targets/lte_build_oai/build']); %% -------- ExpressMIMO2 configuration -------- limeparms; From b1f64b22a6ea43368140076abd67664ef93e024e Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 31 May 2016 19:13:45 +0200 Subject: [PATCH 046/132] bug fixed for oarf_get_frame --- targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc index e53dccd5db..170f782a04 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc +++ b/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/oarf_get_frame.cc @@ -178,7 +178,7 @@ DEFUN_DLD (oarf_get_frame, args, nargout,"Get frame") printf("Info : Only resampling_factor of channel 0 is taken into account for copying received frame for all the other chains\n"); - ComplexMatrix dx (FRAME_LENGTH_COMPLEX_SAMPLES*4, numant*openair0_num_detected_cards); + ComplexMatrix dx (FRAME_LENGTH_COMPLEX_SAMPLES*4, MAX_ANTENNAS*openair0_num_detected_cards); /* // set the tx buffer to 0x00010001 to put switch in rx mode for (aa=0; aa Date: Wed, 15 Jun 2016 17:54:13 +0200 Subject: [PATCH 047/132] merge ue_spec beamforming and cell_spec beamforming to beam_precoding --- openair1/PHY/INIT/lte_init.c | 22 ++- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 2 +- openair1/PHY/MODULATION/beamforming.c | 185 +++++------------- openair1/PHY/MODULATION/defs.h | 35 +--- openair1/PHY/MODULATION/ofdm_mod.c | 13 +- openair1/PHY/impl_defs_lte.h | 15 +- openair1/SCHED/phy_procedures_lte_eNb.c | 19 +- openair1/SIMULATION/LTE_PHY/dlsim.c | 10 +- .../CONF/enb.band7.tm1.exmimo2.conf | 8 +- 9 files changed, 109 insertions(+), 200 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index c13373647d..f5e9fdae10 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -1235,7 +1235,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, LTE_eNB_PUSCH** const eNB_pusch_vars = phy_vars_eNB->lte_eNB_pusch_vars; LTE_eNB_SRS* const eNB_srs_vars = phy_vars_eNB->lte_eNB_srs_vars; LTE_eNB_PRACH* const eNB_prach_vars = &phy_vars_eNB->lte_eNB_prach_vars; - int i, j, eNB_id, UE_id; + int i, j, re, eNB_id, UE_id; phy_vars_eNB->total_dlsch_bitrate = 0; phy_vars_eNB->total_transmitted_bits = 0; @@ -1302,7 +1302,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, #endif } - for (i=0; i<2; i++) { // 2 is the total number of cell specific antenna ports + /*for (i=0; i<2; i++) { // 2 is the total number of cell specific antenna ports eNB_common_vars->cell_spec_bf_weights[eNB_id][i] = (int32_t **)malloc16_clear(frame_parms->nb_antennas_tx*sizeof(int32_t*)); for (j=0; jnb_antennas_tx; j++) { eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j] = (int32_t *)malloc16_clear(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); @@ -1310,11 +1310,25 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->cell_spec_bf_weights[%d][%d][%d] = %p (%d bytes)\n", eNB_id,i,j,eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j], OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); +#endif + } + } */ + + for (i=0; i<15; i++) { // 15 is the total number of antenna ports + eNB_common_vars->beam_weights[eNB_id][i] = (int32_t **)malloc16_clear(frame_parms->nb_antennas_tx*sizeof(int32_t*)); + for (j=0; jnb_antennas_tx; j++) { + eNB_common_vars->beam_weights[eNB_id][i][j] = (int32_t *)malloc16_clear(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); + for (re=0; rebeam_weights[eNB_id][i][j][re] = 0x00007fff; +#ifdef DEBUG_PUY + msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->beam_weights[%d][%d][%d] = %p (%d bytes)\n", + eNB_id,i,j,eNB_common_vars->beam_weights[eNB_id][i][j], + OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); #endif } } - for (i=0; i<8; i++) { //antenna port 5 for TM7, antenna port 7-15 for TM8-10 + /*for (i=0; i<8; i++) { //antenna port 5 for TM7, antenna port 7-15 for TM8-10 eNB_common_vars->ue_spec_bf_weights[eNB_id][i] = (int32_t **)malloc16_clear(frame_parms->nb_antennas_tx*sizeof(int32_t*)); for (j=0; jnb_antennas_tx; j++) { eNB_common_vars->ue_spec_bf_weights[eNB_id][i][j] = (int32_t*)malloc16_clear(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); @@ -1324,7 +1338,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); #endif } - } + } */ // RX vars eNB_common_vars->rxdata[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*) ); diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index a59667c3f6..f50b0a7567 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -1446,7 +1446,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, // mapping ue specific beamforming weights from UE specified DLSCH structure to common space for (aa=0;aanb_antennas_tx;aa++){ - memcpy(phy_vars_eNB->lte_eNB_common_vars.ue_spec_bf_weights[0][0][aa],dlsch0->ue_spec_bf_weights[0][aa],frame_parms->ofdm_symbol_size*sizeof(int32_t)); + memcpy(phy_vars_eNB->lte_eNB_common_vars.beam_weights[0][5][aa],dlsch0->ue_spec_bf_weights[0][aa],frame_parms->ofdm_symbol_size*sizeof(int32_t)); } } diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c index 157b8eb368..e37ab0e430 100644 --- a/openair1/PHY/MODULATION/beamforming.c +++ b/openair1/PHY/MODULATION/beamforming.c @@ -46,14 +46,12 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 069 #include "defs.h" #include "UTIL/LOG/vcd_signal_dumper.h" - -// ue_spec_beamforming: perform beamforming for data in transmission_mode TM7-TM10 -int ue_spec_beamforming(int32_t **txdataF, - int32_t **txdataF_BF, - LTE_DL_FRAME_PARMS *frame_parms, - int32_t ***ue_spec_bf_weights, - int slot, - int symbol) +int beam_precoding(int32_t **txdataF, + int32_t **txdataF_BF, + LTE_DL_FRAME_PARMS *frame_parms, + int32_t ***beam_weights, + int slot, + int symbol) { uint8_t p,aa; uint16_t re=0; @@ -66,41 +64,54 @@ int ue_spec_beamforming(int32_t **txdataF, memset(txdataF_BF[aa],0,4*(frame_parms->ofdm_symbol_size)); for (re=0;reofdm_symbol_size;re++) { + for (p=0; p<2; p++) { + if (txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { + for (aa=0;aanb_antennas_tx;aa++) { + ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[0][aa][re])[0])>>15); + + //printf("beamforming.c:txdata[%d][%d]=%d+j%d, beam_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", + // p,slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, + // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], + // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], + // p,aa,re, + // ((int16_t*)&beam_weights[p][aa][re])[0],((int16_t*)&beam_weights[p][aa][re])[1], + // aa,re, + // ((int16_t*)&txdataF_BF[aa][re])[0], + // ((int16_t*)&txdataF_BF[aa][re])[1]); + } + + } + } if (txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually using TM7 for (aa=0;aanb_antennas_tx;aa++) { - ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] - *((int16_t*)&ue_spec_bf_weights[0][aa][re])[0])>>15); - ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] - *((int16_t*)&ue_spec_bf_weights[0][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] - *((int16_t*)&ue_spec_bf_weights[0][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] - *((int16_t*)&ue_spec_bf_weights[0][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[5][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[5][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[5][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[5][aa][re])[0])>>15); + // printf("beamforming.c:txdata[%d][%d]=%d+j%d, beam_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", + // p,slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, + // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], + // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], + // p,aa,re, + // ((int16_t*)&beam_weights[p][aa][re])[0],((int16_t*)&beam_weights[p][aa][re])[1], + // aa,re, + // ((int16_t*)&txdataF_BF[aa][re])[0], + // ((int16_t*)&txdataF_BF[aa][re])[1]); -/* printf("beamforming.c:txdataF[5][%d]=%d+j%d, ue_bf_weights[0][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", - slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, - ((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], - ((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], - aa,re, - ((int16_t*)&ue_spec_bf_weights[0][aa][re])[0],((int16_t*)&ue_spec_bf_weights[0][aa][re])[1], - aa,re, - ((int16_t*)&txdataF_BF[aa][re])[0], - ((int16_t*)&txdataF_BF[aa][re])[1]); */ } } if (txdataF[7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually using TM8-10 - for (p=0;p<8;p++) { - if (txdataF[p+7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually allocated + for (p=7;p<15;p++) { + if (txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually allocated for (aa=0;aanb_antennas_tx;aa++) { - ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[p+7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] - *((int16_t*)&ue_spec_bf_weights[p][aa][re])[0])>>15); - ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p+7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] - *((int16_t*)&ue_spec_bf_weights[p][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[p+7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] - *((int16_t*)&ue_spec_bf_weights[p][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p+7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] - *((int16_t*)&ue_spec_bf_weights[p][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); } } } @@ -108,107 +119,3 @@ int ue_spec_beamforming(int32_t **txdataF, } } -// cell_spec_beamforming: performed for all common data -int cell_spec_beamforming(int32_t **txdataF, - int32_t **txdataF_BF, - LTE_DL_FRAME_PARMS *frame_parms, - int32_t ***cell_spec_bf_weights, - int slot, - int symbol) -{ - uint8_t p,aa; - uint16_t re=0; - int slot_offset_F; - - slot_offset_F = slot*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); - - // clear txdata_BF[aa][re] for each call of cell_spec_beamforming - for(aa=0;aanb_antennas_tx;aa++) - memset(txdataF_BF[aa],0,4*(frame_parms->ofdm_symbol_size)); - - for (re=0;reofdm_symbol_size;re++) { - for (p=0;pnb_antenna_ports_eNB;p++) { - if (txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually allocated - for (aa=0;aanb_antennas_tx;aa++) { - - ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] - *((int16_t*)&cell_spec_bf_weights[p][aa][re])[0])>>15); - ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] - *((int16_t*)&cell_spec_bf_weights[p][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0] - *((int16_t*)&cell_spec_bf_weights[p][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1] - *((int16_t*)&cell_spec_bf_weights[p][aa][re])[0])>>15); - // printf("beamforming.c:txdata[%d][%d]=%d+j%d, cell_bf_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", - // p,slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, - // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], - // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], - // p,aa,re, - // ((int16_t*)&cell_spec_bf_weights[p][aa][re])[0],((int16_t*)&cell_spec_bf_weights[p][aa][re])[1], - // aa,re, - // ((int16_t*)&txdataF_BF[aa][re])[0], - // ((int16_t*)&txdataF_BF[aa][re])[1]); - } - } - } - } -} - - - - -/* -int ue_spec_beamforming(int32_t **txdataF, - int32_t **txdataF_BF, - LTE_DL_FRAME_PARMS *frame_parms, - LTE_eNB_DLSCH_t *dlsch0, - LTE_eNB_DLSCH_t *dlsch1, - int symbol) -{ - uint8_t p,aa; - uint16_t re=0; - - uint8_t harq_pid = dlsch0->current_harq_pid; - LTE_DL_eNB_HARQ_t *dlsch0_harq = dlsch0->harq_processes[harq_pid]; - LTE_DL_eNB_HARQ_t *dlsch1_harq; //= dlsch1->harq_processes[harq_pid]; - MIMO_mode_t mimo_mode = dlsch0_harq->mimo_mode; - int first_layer0 = dlsch0_harq->first_layer; - int Nlayers0 = dlsch0_harq->Nlayers; - - // Fill these in later for TM8-10 - int Nlayers1; - int first_layer1; - - if (dlsch1_harq) { - Nlayers1 = dlsch1_harq->Nlayers; - first_layer1 = dlsch1_harq->first_layer; - } - - //temp - if(mimo_mode==TM7){ - first_layer0 = 5; - Nlayers0=1; - } - - for (re=0;renb_antennas_tx;aa++) { - txdataF_BF[aa][re] += txdataF[p][re]*dlsch0->uespec_bf_weights[p][aa][re]; - } - } - } - - if(dlsch1_harq) { - for (p=first_layer1;pnb_antennas_tx;aa++) { - txdataF_BF[aa][re] += txdataF[p][re]*dlsch1->uespec_bf_weights[p][aa][re]; - } - } - } - } - - } -} */ diff --git a/openair1/PHY/MODULATION/defs.h b/openair1/PHY/MODULATION/defs.h index fec65b8679..88c4e2a2d8 100644 --- a/openair1/PHY/MODULATION/defs.h +++ b/openair1/PHY/MODULATION/defs.h @@ -89,6 +89,8 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms); +void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms, uint8_t num_pdcch_symbols); + void remove_7_5_kHz(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe); void apply_7_5_kHz(PHY_VARS_UE *phy_vars_ue,int32_t*txdata,uint8_t subframe); @@ -99,39 +101,22 @@ void remove_625_Hz(PHY_VARS_eNB *phy_vars_eNB,int16_t *prach); void apply_625_Hz(PHY_VARS_UE *phy_vars_ue,int16_t *prach); -/** \brief This function performs UE specific beamforming especially for - * transmission mode TM7-10 - @param txdataF Table of pointers for frequency-domain TX signals - @param txdataF_BF Table of pointers for frequency-domain TX signals -after beamforming - @param frame_parms Frame descriptor structure - @param ue_spec_bf_weights UE specific beamforming weights applied on -each antenna element and each carrier - @param slot Slot number - @param symbol Symbol index on which to act*/ -int ue_spec_beamforming(int32_t **txdataF, - int32_t **txdataF_BF, - LTE_DL_FRAME_PARMS *frame_parms, - int32_t ***ue_spec_bf_weights, - int slot, - int symbol); - -/** \brief This function performs cell specific beamforming for common +/** \brief This function performs beamforming precoding for common * data @param txdataF Table of pointers for frequency-domain TX signals @param txdataF_BF Table of pointers for frequency-domain TX signals @param frame_parms Frame descriptor structure after beamforming - @param cell_spec_bf_weights Common beamforming weights applied on each + @param beam_weights Beamforming weights applied on each antenna element and each carrier @param slot Slot number @param symbol Symbol index on which to act*/ -int cell_spec_beamforming(int32_t **txdataF, - int32_t **txdataF_BF, - LTE_DL_FRAME_PARMS *frame_parms, - int32_t ***cell_spec_bf_weights, - int slot, - int symbol); +int beam_precoding(int32_t **txdataF, + int32_t **txdataF_BF, + LTE_DL_FRAME_PARMS *frame_parms, + int32_t ***beam_weights, + int slot, + int symbol); #endif /** @}*/ diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index e8344a1972..375c16c103 100755 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -277,10 +277,11 @@ void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t } // OFDM modulation for each symbol -void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms, uint8_t num_pdcch_symbols, unsigned char transmission_mode) +void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms, uint8_t num_pdcch_symbols) { int aa, l, slot_offset, slot_offset_F; + int8_t UE_id=0; mod_sym_t **txdataF = eNB_common_vars->txdataF[eNB_id]; mod_sym_t **txdataF_BF = eNB_common_vars->txdataF_BF[eNB_id]; int32_t **txdata = eNB_common_vars->txdata[eNB_id]; @@ -292,13 +293,8 @@ void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_sl for (l=0; lsymbols_per_tti>>1; l++) { //printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); - if (lcell_spec_bf_weights[eNB_id],next_slot,l); - else - if (transmission_mode<7) - cell_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->cell_spec_bf_weights[eNB_id],next_slot,l); - else - ue_spec_beamforming(txdataF,txdataF_BF,frame_parms,eNB_common_vars->ue_spec_bf_weights[eNB_id],next_slot,l); + + beam_precoding(txdataF,txdataF_BF,frame_parms,eNB_common_vars->beam_weights[eNB_id],next_slot,l); for (aa=0; aanb_antennas_tx; aa++) { @@ -331,4 +327,3 @@ void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_sl } } -/** @} */ diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h index 864d2d5d19..7a6130cef8 100644 --- a/openair1/PHY/impl_defs_lte.h +++ b/openair1/PHY/impl_defs_lte.h @@ -638,17 +638,24 @@ typedef struct { /// - second index: cell specific eNB antenna port index, up to 2 logical antenna ports are supported /// - third index: tx antenna [0..nb_antennas_tx[ /// - fourth index: sample [0..] - int32_t **cell_spec_bf_weights[3][2]; + // int32_t **cell_spec_bf_weights[3][2]; /// \brief Holds the ue specific beamforming weights /// - first index: eNB id [0..2] (hard coded) /// - second index: ue specific eNB antenna port index, port5->index0, port7-15->index0-7 /// - third index: tx antenna [0..nb_antennas_tx[ /// - fourth index: sample [0..] - int32_t **ue_spec_bf_weights[3][8]; + // int32_t **ue_spec_bf_weights[3][8]; + /// \brief Holds the ue specific beamforming weights + /// - first index: eNB id [0..2] (hard coded) + /// - second index: eNB antenna port index + /// - third index: tx antenna [0..nb_antennas_tx[ + /// - fourth index: sample [0..] + int32_t **beam_weights[3][15]; /// \brief Holds the tdd reciprocity calibration coefficients /// - first index: eNB id [0..2] (hard coded) - /// - second index: tx antenna [0..nb_antennas_tx[ - /// - third index: frenquency [0..] + /// - second index: ue specific eNB antenna port index, port5->index0, port7-15->index0-7 + /// - third index: tx antenna [0..nb_antennas_tx[ + /// - forth index: frenquency [0..] int32_t **tdd_calib_coeffs[3]; } LTE_eNB_COMMON; diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index bb6eb704e0..d2a350a4b8 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1610,7 +1610,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e phy_vars_eNB->dlsch_eNB_ra->active = 0; } - // Now scan UE specific DLSCH + // Now scan UE specific DLSCH for (UE_id=0; UE_iddlsch_eNB[(uint8_t)UE_id][0])&& @@ -1779,6 +1779,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->active = 0; //mac_xface->macphy_exit("first dlsch transmitted\n"); + } else if ((phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0])&& @@ -1791,6 +1792,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e //LOG_D(PHY,"[eNB %d] DCI: Clearing subframe_tx for subframe %d, UE %d\n",phy_vars_eNB->Mod_id,subframe,UE_id); #endif } + } @@ -1811,30 +1813,31 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e } - #ifdef EMOS phy_procedures_emos_eNB_TX(subframe, phy_vars_eNB); #endif + //cell-specific beamforming + #if !(defined(EXMIMO) || defined(OAI_USRP) || defined (CPRIGW)) if (abstraction_flag==0) { start_meas(&phy_vars_eNB->ofdm_mod_stats); - do_OFDM_mod_l(phy_vars_eNB->lte_eNB_common_vars, + //do_OFDM_mod (without l) ? + + do_OFDM_mod_l(&phy_vars_eNB->lte_eNB_common_vars, 0, subframe<<1, &phy_vars_eNB->lte_frame_parms, - num_pdcch_symbols, - phy_vars_eNB->transmission_mode[(uint8_t)UE_id]); + num_pdcch_symbols); - do_OFDM_mod_l(phy_vars_eNB->lte_eNB_common_vars, + do_OFDM_mod_l(&phy_vars_eNB->lte_eNB_common_vars, 0, 1+(subframe<<1), &phy_vars_eNB->lte_frame_parms, - num_pdcch_symbols, - phy_vars_eNB->transmission_mode[(uint8_t)UE_id]); + num_pdcch_symbols); stop_meas(&phy_vars_eNB->ofdm_mod_stats); } diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index f5c2446e86..19a0437bdf 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -643,7 +643,7 @@ int main(int argc, char **argv) frame_parms = &PHY_vars_eNB->lte_frame_parms; - cell_spec_bf_weights = PHY_vars_eNB->lte_eNB_common_vars.cell_spec_bf_weights[0][0]; + cell_spec_bf_weights = PHY_vars_eNB->lte_eNB_common_vars.beam_weights[0][0]; for(aa=0;aaofdm_symbol_size;re++) { if (n_tx_phy==1 || n_tx_phy==2) @@ -655,7 +655,7 @@ int main(int argc, char **argv) else if (n_tx_phy==64) cell_spec_bf_weights[aa][re] = 0x00007fff>>4; } - } + } if (transmission_mode==7){ lte_gold_ue_spec_port5(PHY_vars_eNB->lte_gold_uespec_port5_table[0],Nid_cell,n_rnti); @@ -2813,15 +2813,13 @@ PMI_FEEDBACK: eNB_id, (subframe*2), &PHY_vars_eNB->lte_frame_parms, - num_pdcch_symbols, - transmission_mode); + num_pdcch_symbols); do_OFDM_mod_l(&PHY_vars_eNB->lte_eNB_common_vars, eNB_id, (subframe*2)+1, &PHY_vars_eNB->lte_frame_parms, - num_pdcch_symbols, - transmission_mode); + num_pdcch_symbols); stop_meas(&PHY_vars_eNB->ofdm_mod_stats); stop_meas(&PHY_vars_eNB->phy_proc_tx); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf index 3ce32398f7..c0974d8703 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf @@ -154,13 +154,13 @@ eNBs = global_log_verbosity ="medium"; hw_log_level ="info"; hw_log_verbosity ="medium"; - phy_log_level ="warn"; + phy_log_level ="debug"; phy_log_verbosity ="medium"; - mac_log_level ="warn"; + mac_log_level ="debug"; mac_log_verbosity ="medium"; - rlc_log_level ="warn"; + rlc_log_level ="info"; rlc_log_verbosity ="medium"; - pdcp_log_level ="warn"; + pdcp_log_level ="info"; pdcp_log_verbosity ="medium"; rrc_log_level ="info"; rrc_log_verbosity ="medium"; From 81047e94af2092a83afcd9896c8ea9eb62b80ba2 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 17 Jun 2016 16:41:21 +0200 Subject: [PATCH 048/132] cosmetic changes --- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 1 - openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 14 +++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index eb13b52015..3f5fe2de84 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -204,7 +204,6 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_ for (i=0; i<4; i++) { dlsch->ue_spec_bf_weights[i] = (int32_t **)malloc16(nb_antennas_tx*sizeof(int32_t*)); - dlsch->ue_spec_bf_weights[i] = (int32_t **)malloc16(nb_antennas_tx*sizeof(int32_t*)); for (aa=0; aaue_spec_bf_weights[i][aa] = (int32_t *)malloc16(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index f50b0a7567..1cba160c1f 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -46,7 +46,7 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 069 #include "defs.h" #include "UTIL/LOG/vcd_signal_dumper.h" -//#define DEBUG_DLSCH_MODULATION +#define DEBUG_DLSCH_MODULATION //#define is_not_pilot(pilots,re,nushift,use2ndpilots) ((pilots==0) || ((re!=nushift) && (re!=nushift+6)&&((re!=nushift+3)||(use2ndpilots==1))&&((re!=nushift+9)||(use2ndpilots==1)))?1:0) @@ -387,8 +387,8 @@ break; *jj=*jj+1; - ((int16_t *)&txdataF[aa][tti_offset])[0]=qam_table_s0[qam64_table_offset_re];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); - ((int16_t *)&txdataF[aa][tti_offset])[1]=qam_table_s0[qam64_table_offset_im];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); + ((int16_t *)&txdataF[0][tti_offset])[0]=qam_table_s0[qam64_table_offset_re];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + ((int16_t *)&txdataF[0][tti_offset])[1]=qam_table_s0[qam64_table_offset_im];//(int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); break; @@ -1457,7 +1457,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, symbol_offset = (uint32_t)frame_parms->ofdm_symbol_size*(l+(subframe_offset*nsymb)); //memset(&txdataF[aa][symbol_offset],0,frame_parms->ofdm_symbol_size<<2); - //printf("symbol_offset %d,subframe offset %d : pilots %d\n",symbol_offset,subframe_offset,pilots); + // printf("symbol_offset %d,subframe offset %d : pilots %d\n",symbol_offset,subframe_offset,pilots); for (rb=0; rbN_RB_DL; rb++) { if (rb < 32) @@ -1618,7 +1618,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, qam_table_s1 = NULL; if (rb_alloc_ind > 0) { - // printf("Allocated rb %d/symbol %d, skip_half %d, subframe_offset %d, symbol_offset %d, re_offset %d, jj %d\n",rb,l,skip_half,subframe_offset,symbol_offset,re_offset,jj); + //printf("Allocated rb %d/symbol %d, skip_half %d, subframe_offset %d, symbol_offset %d, re_offset %d, jj %d\n",rb,l,skip_half,subframe_offset,symbol_offset,re_offset,jj); allocate_REs_in_RB(phy_vars_eNB, txdataF, &jj, @@ -1660,7 +1660,7 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, #ifdef DEBUG_DLSCH_MODULATION - msg("generate_dlsch : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch0_harq->nb_rb,dlsch0_harq->rb_alloc,mod_order0,Nl0,2,0,subframe_offset)); + msg("generate_dlsch : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch0_harq->nb_rb,dlsch0_harq->rb_alloc,mod_order0,Nl0,2,0,subframe_offset,1/*transmission mode*/)); #endif VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_MODULATION, VCD_FUNCTION_OUT); @@ -1759,7 +1759,7 @@ int mch_modulation(mod_sym_t **txdataF, #ifdef DEBUG_DLSCH_MODULATION - msg("generate_dlsch(MCH) : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch->harq_processes[0]->nb_rb,dlsch->harq_processes[0]->rb_alloc,mod_order,1,2,0,subframe_offset)); + msg("generate_dlsch(MCH) : jj = %d,re_allocated = %d (G %d)\n",jj,re_allocated,get_G(frame_parms,dlsch->harq_processes[0]->nb_rb,dlsch->harq_processes[0]->rb_alloc,mod_order,1,2,0,subframe_offset,1/*transmission mode*/)); #endif return (re_allocated); From 5a40c9a8c74cf0530a508278ff9e5eb0676c5264 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 17 Jun 2016 16:42:40 +0200 Subject: [PATCH 049/132] bug fixed for dlsch_modulation input --- openair1/SCHED/phy_procedures_lte_eNb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index d2a350a4b8..e03ffa2120 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1436,7 +1436,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e 1, num_pdcch_symbols,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe, - (phy_vars_eNB->transmission_mode[(uint8_t)UE_id]<7?0:phy_vars_eNB->transmission_mode[(uint8_t)UE_id])), + 0), 0, subframe<<1); @@ -1444,7 +1444,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e start_meas(&phy_vars_eNB->dlsch_modulation_stats); // for (sect_id=0;sect_idlte_eNB_common_vars.txdataF[0], AMP, subframe, From a04682d47a54d0f0d5890f29599306d1ed341bf4 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 17 Jun 2016 16:44:30 +0200 Subject: [PATCH 050/132] oaisim takes tx and rx antenna number from config file and transmission mode from the command line --- targets/SIMU/USER/init_lte.c | 8 ++++---- targets/SIMU/USER/init_lte.h | 1 + targets/SIMU/USER/oaisim_functions.c | 5 +++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c index 3b2bc34391..3463da77d8 100644 --- a/targets/SIMU/USER/init_lte.c +++ b/targets/SIMU/USER/init_lte.c @@ -229,7 +229,7 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs], uint8_t N_RB_DL, uint16_t Nid_cell, uint8_t cooperation_flag,uint8_t transmission_mode,uint8_t abstraction_flag, - int nb_antennas_rx, uint8_t eMBMS_active_state) + int nb_antennas_rx, int nb_antennas_tx, uint8_t eMBMS_active_state) { uint8_t eNB_id,UE_id,RN_id,CC_id; @@ -252,10 +252,10 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs], (frame_parms[CC_id])->Ncp = extended_prefix_flag; (frame_parms[CC_id])->Nid_cell = Nid_cell; (frame_parms[CC_id])->nushift = (Nid_cell%6); - (frame_parms[CC_id])->nb_antennas_tx = (transmission_mode == 1) ? 1 : 2; + (frame_parms[CC_id])->nb_antennas_tx = nb_antennas_tx; + (frame_parms[CC_id])->nb_antennas_rx = nb_antennas_rx; (frame_parms[CC_id])->nb_antenna_ports_eNB = (transmission_mode == 1 || transmission_mode == 7) ? 1 : 2; - (frame_parms[CC_id])->nb_antennas_rx = (transmission_mode == 1) ? 1 : 2; - (frame_parms[CC_id])->mode1_flag = (transmission_mode == 1) ? 1 : 0; + (frame_parms[CC_id])->mode1_flag = (frame_parms[CC_id])->nb_antenna_ports_eNB==1 ? 1 : 0; init_frame_parms(frame_parms[CC_id],1); diff --git a/targets/SIMU/USER/init_lte.h b/targets/SIMU/USER/init_lte.h index b00f1f8a3c..269863085d 100644 --- a/targets/SIMU/USER/init_lte.h +++ b/targets/SIMU/USER/init_lte.h @@ -57,4 +57,5 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs], uint8_t transmission_mode, uint8_t abstraction_flag, int nb_antennas_rx, + int nb_antennas_tx, uint8_t eMBMS_active_state); diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index 1b29da3740..326813181a 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -174,10 +174,11 @@ extern time_stats_t ul_chan_stats; extern int xforms; +const Enb_properties_array_t *enb_properties; + void get_simulation_options(int argc, char *argv[]) { int option; - const Enb_properties_array_t *enb_properties; char *conf_config_file_name = NULL; enum long_option_e { @@ -925,7 +926,7 @@ void init_openair1(void) // change the nb_connected_eNB for (CC_id=0; CC_idproperties[0]->nb_antennas_tx[CC_id],enb_properties->properties[0]->nb_antennas_tx[CC_id], oai_emulation.info.eMBMS_active_state); } for (eNB_id=0; eNB_id Date: Thu, 31 Mar 2016 11:34:32 +0200 Subject: [PATCH 051/132] transmission mode is now taken into account in RRC signalling small bugfix in dlsch_demodulation shunted out TM3-7 specific DCI generation in scheduler to enable basic operation. more work needed. --- .../PHY/LTE_TRANSPORT/dlsch_demodulation.c | 1 - openair2/LAYER2/MAC/eNB_scheduler_dlsch.c | 31 +++++-------------- openair2/RRC/LITE/MESSAGES/asn1_msg.c | 2 +- openair2/RRC/LITE/rrc_eNB.c | 2 +- .../CONF/enb.band7.exmimo2.conf | 2 +- 5 files changed, 11 insertions(+), 27 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index f578c6f3e4..aeca578ef5 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -829,7 +829,6 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, return(-1); break; } - return(0); } diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c index 58078082c0..2708f3bbb3 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c @@ -738,7 +738,8 @@ schedule_ue_spec( } break; - + /* + // this code is disabled for now - needs to be done properly case 4: // if (nb_rb>10) { ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 0; @@ -776,6 +777,7 @@ schedule_ue_spec( ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->dl_power_off = 1;//dl_pow_off[UE_id]; break; + */ } add_ue_dlsch_info(module_idP, @@ -1403,8 +1405,9 @@ schedule_ue_spec( break; + /* + // disabled for now as this needs to be done properly case 4: - // if (nb_rb>10) { ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->mcs1 = mcs; ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->harq_pid = harq_pid; ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->ndi1 = 1; @@ -1412,15 +1415,6 @@ schedule_ue_spec( ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->TPC = tpc; - //} - /* else { - ((DCI2_5MHz_2A_L10PRB_TDD_t*)DLSCH_dci)->mcs1 = eNB_UE_stats->DL_cqi[0]; - ((DCI2_5MHz_2A_L10PRB_TDD_t*)DLSCH_dci)->harq_pid = harq_pid; - ((DCI2_5MHz_2A_L10PRB_TDD_t*)DLSCH_dci)->ndi1 = 1; - ((DCI2_5MHz_2A_L10PRB_TDD_t*)DLSCH_dci)->rv1 = round&3; - ((DCI2_5MHz_2A_L10PRB_TDD_t*)DLSCH_dci)->tpmi = 5; - ((DCI2_5MHz_2A_L10PRB_TDD_t*)DLSCH_dci)->dai = (UE_list->UE_template[CC_id][UE_id].DAI-1)&3; - }*/ break; case 5: @@ -1451,6 +1445,7 @@ schedule_ue_spec( ((DCI1E_5MHz_2A_M10PRB_TDD_t*)DLSCH_dci)->TPC = tpc; break; + */ } // Toggle NDI for next time @@ -1732,9 +1727,9 @@ fill_DLSCH_dci( break; + /* case 4: - //if (nb_rb>10) { // DCI format 2_2A ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub); ((DCI2_5MHz_2A_TDD_t*)DLSCH_dci)->rah = 0; @@ -1746,17 +1741,6 @@ fill_DLSCH_dci( sizeof_DCI2_5MHz_2A_TDD_t, format2, 0); - /*} - else { - ((DCI2_5MHz_2A_L10PRB_TDD_t*)DLSCH_dci)->rballoc = allocate_prbs_sub(nb_rb,rballoc_sub); - add_ue_spec_dci(DCI_pdu, - DLSCH_dci, - rnti, - sizeof(DCI2_5MHz_2A_L10PRB_TDD_t), - 2,//aggregation, - sizeof_DCI2_5MHz_2A_L10PRB_TDD_t, - format2_2A_L10PRB); - }*/ break; case 5: @@ -1786,6 +1770,7 @@ fill_DLSCH_dci( format1E_2A_M10PRB, 0); break; + */ } } diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c index ff0adf713b..83fd5d357d 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c @@ -107,7 +107,7 @@ int errno; # endif #endif -//#define XER_PRINT +#define XER_PRINT extern Enb_properties_array_t enb_properties; typedef struct xer_sprint_string_s { diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index 42e28f752f..c53df65046 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -3289,7 +3289,7 @@ rrc_eNB_generate_RRCConnectionSetup( do_RRCConnectionSetup(ctxt_pP, ue_context_pP, (uint8_t*) eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.Payload, - (mac_xface->lte_frame_parms->nb_antennas_tx==2)?2:1, + mac_xface->get_transmission_mode(ctxt_pP->module_id,CC_id,ue_context_pP->ue_id_rnti), rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), mac_xface->lte_frame_parms, SRB_configList, diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf index bc9d15195c..6493c01167 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf @@ -47,7 +47,7 @@ eNBs = pucch_nCS_AN = 0; pucch_n1_AN = 32; pdsch_referenceSignalPower = -24; - pdsch_p_b = 0; + pdsch_p_b = 1; pusch_n_SB = 1; pusch_enable64QAM = "DISABLE"; pusch_hoppingMode = "interSubFrame"; From 61a6b0612960c135c9988b1a81f2a5be8b0795ca Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Wed, 22 Jun 2016 11:09:24 +0200 Subject: [PATCH 052/132] distinguish beamforming mode in rx_pdsch for SI, RA and data --- openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index aeca578ef5..831744bc09 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -100,7 +100,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, int avgs, rb; LTE_DL_UE_HARQ_t *dlsch0_harq,*dlsch1_harq = 0; - uint8_t beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]<7?0:phy_vars_ue->transmission_mode[eNB_id]; + uint8_t beamforming_mode; uint32_t *rballoc; switch (type) { @@ -108,12 +108,14 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, lte_ue_pdsch_vars = &phy_vars_ue->lte_ue_pdsch_vars_SI[eNB_id]; dlsch_ue = &phy_vars_ue->dlsch_ue_SI[eNB_id]; dlsch0_harq = dlsch_ue[0]->harq_processes[harq_pid]; + beamforming_mode = 0; break; case RA_PDSCH: lte_ue_pdsch_vars = &phy_vars_ue->lte_ue_pdsch_vars_ra[eNB_id]; dlsch_ue = &phy_vars_ue->dlsch_ue_ra[eNB_id]; dlsch0_harq = dlsch_ue[0]->harq_processes[harq_pid]; + beamforming_mode = 0; break; case PDSCH: @@ -121,6 +123,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, dlsch_ue = phy_vars_ue->dlsch_ue[eNB_id]; dlsch0_harq = dlsch_ue[0]->harq_processes[harq_pid]; dlsch1_harq = dlsch_ue[1]->harq_processes[harq_pid]; + beamforming_mode = phy_vars_ue->transmission_mode[eNB_id]<7?0:phy_vars_ue->transmission_mode[eNB_id]; break; default: @@ -204,7 +207,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, phy_vars_ue->high_speed_flag, frame_parms); } - } else if (beamforming_mode==0) {// if n_tx>1 + } else if (beamforming_mode==0) { //else if nb_antennas_ports_eNB==1 && beamforming_mode == 0 nb_rb = dlsch_extract_rbs_single(lte_ue_common_vars->rxdataF, lte_ue_common_vars->dl_ch_estimates[eNB_id], lte_ue_pdsch_vars[eNB_id]->rxdataF_ext, @@ -243,7 +246,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, phy_vars_ue->high_speed_flag, frame_parms); } - } else if (beamforming_mode==7) { //else n_tx>1 + } else if (beamforming_mode==7) { //else if beamforming_mode == 7 nb_rb = dlsch_extract_rbs_TM7(lte_ue_common_vars->rxdataF, lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates, lte_ue_pdsch_vars[eNB_id]->rxdataF_ext, From 4fa0810cdd9c8ddddd1585021279d140459f0e9a Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 24 Jun 2016 12:20:38 +0200 Subject: [PATCH 053/132] add tm7 case into asn1 message --- openair2/RRC/LITE/MESSAGES/asn1_msg.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openair2/RRC/LITE/MESSAGES/asn1_msg.c b/openair2/RRC/LITE/MESSAGES/asn1_msg.c index 83fd5d357d..aa7dcba62f 100644 --- a/openair2/RRC/LITE/MESSAGES/asn1_msg.c +++ b/openair2/RRC/LITE/MESSAGES/asn1_msg.c @@ -1602,6 +1602,7 @@ do_RRCConnectionSetup( // AntennaInfoDedicated__transmissionMode_tm2); switch (transmission_mode) { + default: case 1: physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm1; break; @@ -1634,6 +1635,10 @@ do_RRCConnectionSetup( case 6: physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm6; break; + + case 7: + physicalConfigDedicated2->antennaInfo->choice.explicitValue.transmissionMode= AntennaInfoDedicated__transmissionMode_tm7; + break; } From 6a8a551ef33f8def8c37ab9f955e1e290cea0dd0 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 24 Jun 2016 12:32:57 +0200 Subject: [PATCH 054/132] add beamforming_mode into generate eNB and UE dlsch parameters from DCI --- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 23 +++++++++--- openair1/PHY/LTE_TRANSPORT/proto.h | 6 ++-- openair1/SCHED/phy_procedures_lte_eNb.c | 9 +++-- openair1/SCHED/phy_procedures_lte_ue.c | 16 +++++---- openair1/SIMULATION/LTE_PHY/dlsim.c | 48 +++++++++++++++---------- 5 files changed, 68 insertions(+), 34 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index f1bf0da14f..a01b31ee90 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -872,7 +872,8 @@ int generate_eNB_dlsch_params_from_dci(int frame, uint16_t si_rnti, uint16_t ra_rnti, uint16_t p_rnti, - uint16_t DL_pmi_single) + uint16_t DL_pmi_single, + uint8_t beamforming_mode) { uint8_t harq_pid = UINT8_MAX; @@ -1244,7 +1245,13 @@ int generate_eNB_dlsch_params_from_dci(int frame, dlsch0_harq->Nl = 1; // dlsch[0]->layer_index = 0; - dlsch0_harq->mimo_mode = (frame_parms->mode1_flag == 1) ? SISO : ALAMOUTI; + if (beamforming_mode == 0) + dlsch0_harq->mimo_mode = (frame_parms->mode1_flag == 1) ? SISO : ALAMOUTI; + else if (beamforming_mode == 7) + dlsch0_harq->mimo_mode = TM7; + else + LOG_E(PHY,"Invalid beamforming mode %dL\n", beamforming_mode); + dlsch0_harq->dl_power_off = 1; /* if (dlsch[0]->harq_processes[harq_pid]->first_tx == 1) { @@ -3854,7 +3861,8 @@ int generate_ue_dlsch_params_from_dci(int frame, PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated, uint16_t si_rnti, uint16_t ra_rnti, - uint16_t p_rnti) + uint16_t p_rnti, + uint8_t beamforming_mode) { uint8_t harq_pid=0; @@ -4171,6 +4179,7 @@ int generate_ue_dlsch_params_from_dci(int frame, dlsch0_harq->rvidx = rv; dlsch0_harq->Nl = 1; // dlsch[0]->layer_index = 0; + dlsch0_harq->mimo_mode = frame_parms->mode1_flag == 1 ?SISO : ALAMOUTI; dlsch0_harq->dl_power_off = 1; //no power offset @@ -4521,7 +4530,13 @@ int generate_ue_dlsch_params_from_dci(int frame, dlsch[0]->rnti = rnti; - dlsch0_harq->mimo_mode = (frame_parms->mode1_flag == 1) ? SISO : ALAMOUTI; + if (beamforming_mode == 0) + dlsch0_harq->mimo_mode = (frame_parms->mode1_flag == 1) ? SISO : ALAMOUTI; + else if (beamforming_mode == 7) + dlsch0_harq->mimo_mode = TM7; + else + LOG_E(PHY,"Not supported beamforming mode %d\n",beamforming_mode); + dlsch0 = dlsch[0]; diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 35de21c7b8..7535a26470 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -1424,7 +1424,8 @@ int generate_ue_dlsch_params_from_dci(int frame, PDSCH_CONFIG_DEDICATED *pdsch_config_dedicated, uint16_t si_rnti, uint16_t ra_rnti, - uint16_t p_rnti); + uint16_t p_rnti, + uint8_t beamforming_mode); int32_t generate_eNB_dlsch_params_from_dci(int frame, uint8_t subframe, @@ -1437,7 +1438,8 @@ int32_t generate_eNB_dlsch_params_from_dci(int frame, uint16_t si_rnti, uint16_t ra_rnti, uint16_t p_rnti, - uint16_t DL_pmi_single); + uint16_t DL_pmi_single, + uint8_t beamforming_mode); int32_t generate_eNB_ulsch_params_from_rar(uint8_t *rar_pdu, frame_t frame, diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index e03ffa2120..e9ee770545 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1094,7 +1094,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e SI_RNTI, 0, P_RNTI, - phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe] = DCI_pdu->dci_alloc[i].firstCCE; @@ -1129,7 +1130,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e SI_RNTI, DCI_pdu->dci_alloc[i].rnti, P_RNTI, - phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); // mac_xface->macphy_exit("Transmitted RAR, exiting\n"); @@ -1187,7 +1189,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e SI_RNTI, 0, P_RNTI, - phy_vars_eNB->eNB_UE_stats[(uint8_t)UE_id].DL_pmi_single); + phy_vars_eNB->eNB_UE_stats[(uint8_t)UE_id].DL_pmi_single, + phy_vars_eNB->transmission_mode[(uint8_t)UE_id]>7?0:phy_vars_eNB->transmission_mode[(uint8_t)UE_id]); LOG_D(PHY,"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d subframe %d: Generated dlsch params\n", phy_vars_eNB->Mod_id,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->current_harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe); diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 0ad6505149..d87a8479f5 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -132,7 +132,7 @@ void dump_dlsch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t subframe,uint8_t phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, phy_vars_ue->frame_rx, subframe, - phy_vars_ue->transmission_mode[eNB_id]); + phy_vars_ue->transmission_mode[eNB_id]); write_output("rxsigF0.m","rxsF0", phy_vars_ue->lte_ue_common_vars.rxdataF[0],2*nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,2,1); write_output("rxsigF0_ext.m","rxsF0_ext", phy_vars_ue->lte_ue_pdsch_vars[0]->rxdataF_ext[0],2*nsymb*phy_vars_ue->lte_frame_parms.ofdm_symbol_size,1,1); @@ -2143,7 +2143,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst phy_vars_ue->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI)==0)) { + P_RNTI, + phy_vars_ue->transmission_mode[eNB_id]>7?0:phy_vars_ue->transmission_mode[eNB_id])==0)) { #ifdef DIAG_PHY @@ -2211,7 +2212,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst phy_vars_ue->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI)==0) { + P_RNTI, + 0)==0) { phy_vars_ue->dlsch_SI_received[eNB_id]++; @@ -2255,7 +2257,8 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst phy_vars_ue->pdsch_config_dedicated, SI_RNTI, phy_vars_ue->prach_resources[eNB_id]->ra_RNTI, - P_RNTI)==0) { + P_RNTI, + 0)==0) { phy_vars_ue->dlsch_ra_received[eNB_id]++; @@ -2790,7 +2793,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->num_pdcch_symbols, frame_rx, subframe_prev, - phy_vars_ue->transmission_mode[eNB_id]); + 0); #ifdef DEBUG_PHY_PROC LOG_D(PHY,"Decoding DLSCH_SI : rb_alloc %x : nb_rb %d G %d TBS %d, num_pdcch_sym %d\n",phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[0], @@ -2853,8 +2856,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[2], phy_vars_ue->dlsch_ue_SI[eNB_id]->harq_processes[0]->rb_alloc_even[3]); #endif - - // dump_dlsch_SI(phy_vars_ue,eNB_id,subframe_prev); + // dump_dlsch_SI(phy_vars_ue,eNB_id,subframe_prev); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_OUT); stop_meas(&phy_vars_ue->phy_proc_rx); return(-1); diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 19a0437bdf..6e78ad1a56 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -1149,10 +1149,11 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + transmission_mode<7?0:transmission_mode); - if (transmission_mode == 7) - PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->mimo_mode = TM7; //Xiwen: to check about harq_pid + /*if (transmission_mode == 7) + PHY_vars_eNB->dlsch_eNB[0][0]->harq_processes[0]->mimo_mode = TM7; //Xiwen: to check about harq_pid*/ num_dci++; num_ue_spec_dci++; @@ -1292,7 +1293,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); num_common_dci++; num_dci++; @@ -1459,7 +1461,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); num_dci++; num_ue_spec_dci++; @@ -1599,7 +1602,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); num_common_dci++; num_dci++; @@ -1767,7 +1771,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); num_dci++; num_ue_spec_dci++; @@ -1907,7 +1912,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[0].DL_pmi_single, + 0); num_common_dci++; num_dci++; @@ -1936,7 +1942,8 @@ int main(int argc, char **argv) SI_RNTI, 0, P_RNTI, - PHY_vars_eNB->eNB_UE_stats[k].DL_pmi_single); + PHY_vars_eNB->eNB_UE_stats[k].DL_pmi_single, + 0); dump_dci(&PHY_vars_eNB->lte_frame_parms,&dci_alloc[num_dci]); num_ue_spec_dci++; @@ -3226,7 +3233,8 @@ PMI_FEEDBACK: PHY_vars_UE->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI)==0)) { + P_RNTI==0, + transmission_mode<7?0:transmission_mode))) { //dump_dci(&PHY_vars_UE->lte_frame_parms,&dci_alloc_rx[i]); coded_bits_per_codeword = get_G(&PHY_vars_eNB->lte_frame_parms, PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->nb_rb, @@ -3237,8 +3245,8 @@ PMI_FEEDBACK: 0, subframe, (transmission_mode<7?0:transmission_mode)); - if (transmission_mode==7 && common_flag==0) - PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->mimo_mode = TM7; + /*if (transmission_mode==7 && common_flag==0) + PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->mimo_mode = TM7; */ /* rate = (double)dlsch_tbs25[get_I_TBS(PHY_vars_UE->dlsch_ue[0][0]->harq_processes[PHY_vars_UE->dlsch_ue[0][0]->current_harq_pid]->mcs)][PHY_vars_UE->dlsch_ue[0][0]->nb_rb-1]/(coded_bits_per_codeword); @@ -3289,9 +3297,10 @@ PMI_FEEDBACK: PHY_vars_UE->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI); - if(transmission_mode==7 && common_flag==0) - PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->mimo_mode = TM7; + P_RNTI, + transmission_mode<7?0:transmission_mode); + /*if(transmission_mode==7 && common_flag==0) + PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->mimo_mode = TM7;*/ break; case 3: @@ -3306,7 +3315,8 @@ PMI_FEEDBACK: PHY_vars_UE->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI); + P_RNTI, + 0); // printf("Rate: TM3 (after) round %d (%d) first_tx %d\n",round,PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->round,PHY_vars_UE->dlsch_ue[0][0]->harq_processes[0]->first_tx); break; @@ -3321,7 +3331,8 @@ PMI_FEEDBACK: PHY_vars_UE->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI); + P_RNTI, + 0); break; case 5: @@ -3336,7 +3347,8 @@ PMI_FEEDBACK: PHY_vars_UE->pdsch_config_dedicated, SI_RNTI, 0, - P_RNTI); + P_RNTI, + 0); break; } From 7d7cbc57f84fd19dd0e35f90880648a52c9ccd8f Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 24 Jun 2016 18:09:06 +0200 Subject: [PATCH 055/132] set transmission mode in phy_config_dedicated_[UE|eNB] after RRCConnectionReconfiguration(eNB) and RRCConnectionReconfigurationComplete(UE) --- openair1/PHY/INIT/lte_init.c | 62 ++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index f5e9fdae10..c1f8c89b55 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -663,6 +663,39 @@ void phy_config_dedicated_eNB(uint8_t Mod_id, if (physicalConfigDedicated) { phy_vars_eNB->physicalConfigDedicated[UE_id] = physicalConfigDedicated; LOG_I(PHY,"phy_config_dedicated_eNB: physicalConfigDedicated=%p\n",physicalConfigDedicated); + + if (physicalConfigDedicated->antennaInfo) { + switch(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode) { + case AntennaInfoDedicated__transmissionMode_tm1: + phy_vars_eNB->transmission_mode[UE_id] = 1; + break; + case AntennaInfoDedicated__transmissionMode_tm2: + phy_vars_eNB->transmission_mode[UE_id] = 2; + break; + case AntennaInfoDedicated__transmissionMode_tm3: + phy_vars_eNB->transmission_mode[UE_id] = 3; + break; + case AntennaInfoDedicated__transmissionMode_tm4: + phy_vars_eNB->transmission_mode[UE_id] = 4; + break; + case AntennaInfoDedicated__transmissionMode_tm5: + phy_vars_eNB->transmission_mode[UE_id] = 5; + break; + case AntennaInfoDedicated__transmissionMode_tm6: + phy_vars_eNB->transmission_mode[UE_id] = 6; + break; + case AntennaInfoDedicated__transmissionMode_tm7: + phy_vars_eNB->transmission_mode[UE_id] = 7; + lte_gold_ue_spec_port5(phy_vars_eNB->lte_gold_uespec_port5_table[0],phy_vars_eNB->lte_frame_parms.Nid_cell,rnti); + break; + default: + LOG_E(PHY,"Unknown transmission mode!\n"); + break; + } + } else { + LOG_D(PHY,"[eNB %d] Frame %d: Received NULL radioResourceConfigDedicated->antennaInfo from eNB %d\n",Mod_id, phy_vars_eNB->proc[8].frame_tx,UE_id); + } + } else { LOG_E(PHY,"[eNB %d] Frame %d: Received NULL radioResourceConfigDedicated from eNB %d\n",Mod_id, phy_vars_eNB->proc[8].frame_tx,UE_id); return; @@ -825,6 +858,35 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t CH_index, phy_vars_ue->transmission_mode[CH_index] = 1+(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode); LOG_D(PHY,"Transmission Mode %d\n",phy_vars_ue->transmission_mode[CH_index]); LOG_D(PHY,"\n"); + switch(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode) { + case AntennaInfoDedicated__transmissionMode_tm1: + phy_vars_ue->transmission_mode[CH_index] = 1; + break; + case AntennaInfoDedicated__transmissionMode_tm2: + phy_vars_ue->transmission_mode[CH_index] = 2; + break; + case AntennaInfoDedicated__transmissionMode_tm3: + phy_vars_ue->transmission_mode[CH_index] = 3; + break; + case AntennaInfoDedicated__transmissionMode_tm4: + phy_vars_ue->transmission_mode[CH_index] = 4; + break; + case AntennaInfoDedicated__transmissionMode_tm5: + phy_vars_ue->transmission_mode[CH_index] = 5; + break; + case AntennaInfoDedicated__transmissionMode_tm6: + phy_vars_ue->transmission_mode[CH_index] = 6; + break; + case AntennaInfoDedicated__transmissionMode_tm7: + phy_vars_ue->transmission_mode[CH_index] = 7; + lte_gold_ue_spec_port5(phy_vars_ue->lte_gold_uespec_port5_table, phy_vars_ue->lte_frame_parms.Nid_cell, phy_vars_ue->lte_ue_pdcch_vars[CH_index]->crnti); + break; + default: + LOG_E(PHY,"Unknown transmission mode!\n"); + break; + } + } else { + LOG_D(PHY,"[UE %d] Frame %d: Received NULL physicalConfigDedicated->antennaInfo from eNB %d\n",Mod_id, phy_vars_ue->frame_rx,CH_index); } if (physicalConfigDedicated->schedulingRequestConfig) { From 95808aec1062d66d124955407d36f79e6579f8ba Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 24 Jun 2016 18:11:21 +0200 Subject: [PATCH 056/132] add ue_TransmissionMode in RrcConfigurationReq --- openair2/RRC/LITE/rrc_eNB.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index c53df65046..6b591e0c35 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -99,7 +99,7 @@ #include "SIMULATION/TOOLS/defs.h" // for taus -//#define XER_PRINT +#define XER_PRINT #ifdef PHY_EMUL extern EMULATION_VARS *Emul_vars; @@ -3289,7 +3289,8 @@ rrc_eNB_generate_RRCConnectionSetup( do_RRCConnectionSetup(ctxt_pP, ue_context_pP, (uint8_t*) eNB_rrc_inst[ctxt_pP->module_id].carrier[CC_id].Srb0.Tx_buffer.Payload, - mac_xface->get_transmission_mode(ctxt_pP->module_id,CC_id,ue_context_pP->ue_id_rnti), + //mac_xface->get_transmission_mode(ctxt_pP->module_id,CC_id,ue_context_pP->ue_id_rnti), + (mac_xface->lte_frame_parms->nb_antenna_ports_eNB==2)?2:1, //at this point we do not have the UE capability information, so it can only be TM1 or TM2 rrc_eNB_get_next_transaction_identifier(ctxt_pP->module_id), mac_xface->lte_frame_parms, SRB_configList, From 224498cf3bfd631bd16bb7fd6217a7516a6ec888 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 24 Jun 2016 18:13:02 +0200 Subject: [PATCH 057/132] add ue_TransmissionMode in RrcConfigurationReq --- openair2/COMMON/rrc_messages_types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index 816b936895..ffe194265f 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -179,7 +179,7 @@ typedef struct RrcConfigurationReq_s { long ue_TimersAndConstants_t311[MAX_NUM_CCs]; long ue_TimersAndConstants_n310[MAX_NUM_CCs]; long ue_TimersAndConstants_n311[MAX_NUM_CCs]; - + long ue_TransmissionMode[MAX_NUM_CCs]; } RrcConfigurationReq; // UE: NAS -> RRC messages From cd8cc1a35c8d07b2782ef79865b12200e75dde0b Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Fri, 1 Jul 2016 13:19:18 +0200 Subject: [PATCH 058/132] added ue_transmission_mode and nb_antenna_ports to eNB config file transmisison mode gets set with RRCReconfiguration --- openair2/ENB_APP/enb_app.c | 3 ++ openair2/ENB_APP/enb_config.c | 46 ++++++++++++++++++- openair2/ENB_APP/enb_config.h | 7 +-- openair2/RRC/LITE/defs.h | 3 ++ openair2/RRC/LITE/rrc_eNB.c | 19 ++++++-- .../CONF/enb.band7.exmimo2.conf | 9 ++-- .../CONF/enb.band7.tm1.exmimo2.conf | 3 ++ targets/SIMU/USER/init_lte.c | 24 +++++----- targets/SIMU/USER/init_lte.h | 4 +- targets/SIMU/USER/oaisim_functions.c | 19 +++++++- 10 files changed, 109 insertions(+), 28 deletions(-) diff --git a/openair2/ENB_APP/enb_app.c b/openair2/ENB_APP/enb_app.c index 6d95c215db..7ce2a0fa6d 100644 --- a/openair2/ENB_APP/enb_app.c +++ b/openair2/ENB_APP/enb_app.c @@ -187,6 +187,9 @@ static void configure_rrc(uint32_t enb_id, const Enb_properties_array_t *enb_pro RRC_CONFIGURATION_REQ (msg_p).ue_TimersAndConstants_n310[CC_id] = enb_properties->properties[enb_id]->ue_TimersAndConstants_n310[CC_id]; RRC_CONFIGURATION_REQ (msg_p).ue_TimersAndConstants_t311[CC_id] = enb_properties->properties[enb_id]->ue_TimersAndConstants_t311[CC_id]; RRC_CONFIGURATION_REQ (msg_p).ue_TimersAndConstants_n311[CC_id] = enb_properties->properties[enb_id]->ue_TimersAndConstants_n311[CC_id]; + + RRC_CONFIGURATION_REQ (msg_p).ue_TransmissionMode[CC_id] = enb_properties->properties[enb_id]->ue_TransmissionMode[CC_id]; + } itti_send_msg_to_task (TASK_RRC_ENB, ENB_MODULE_ID_TO_INSTANCE(enb_id), msg_p); diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c index d2f5c0dda5..0dad2a10ee 100755 --- a/openair2/ENB_APP/enb_config.c +++ b/openair2/ENB_APP/enb_config.c @@ -84,6 +84,7 @@ #define ENB_CONFIG_STRING_NID_CELL "Nid_cell" #define ENB_CONFIG_STRING_N_RB_DL "N_RB_DL" #define ENB_CONFIG_STRING_CELL_MBSFN "Nid_cell_mbsfn" +#define ENB_CONFIG_STRING_NB_ANT_PORTS "nb_antenna_ports" #define ENB_CONFIG_STRING_NB_ANT_TX "nb_antennas_tx" #define ENB_CONFIG_STRING_NB_ANT_RX "nb_antennas_rx" #define ENB_CONFIG_STRING_TX_GAIN "tx_gain" @@ -145,6 +146,7 @@ #define ENB_CONFIG_STRING_UETIMERS_T311 "ue_TimersAndConstants_t311" #define ENB_CONFIG_STRING_UETIMERS_N310 "ue_TimersAndConstants_n310" #define ENB_CONFIG_STRING_UETIMERS_N311 "ue_TimersAndConstants_n311" +#define ENB_CONFIG_STRING_UE_TRANSMISSION_MODE "ue_TransmissionMode" #define ENB_CONFIG_STRING_SRB1 "srb1_parameters" #define ENB_CONFIG_STRING_SRB1_TIMER_POLL_RETRANSMIT "timer_poll_retransmit" @@ -322,6 +324,7 @@ void enb_config_display(void) printf( "\n\tCell ID for CC %d:\t%"PRId16":\n",j,enb_properties.properties[i]->Nid_cell[j]); printf( "\tN_RB_DL for CC %d:\t%"PRId16":\n",j,enb_properties.properties[i]->N_RB_DL[j]); + printf( "\tnb_antenna_ports for CC %d:\t%d:\n",j,enb_properties.properties[i]->nb_antenna_ports[j]); printf( "\tnb_antennas_tx for CC %d:\t%d:\n",j,enb_properties.properties[i]->nb_antennas_tx[j]); printf( "\tnb_antennas_rx for CC %d:\t%d:\n",j,enb_properties.properties[i]->nb_antennas_rx[j]); @@ -411,6 +414,8 @@ void enb_config_display(void) printf( "\tue_TimersAndConstants_t311 for CC %d:\t%ld:\n",j,enb_properties.properties[i]->ue_TimersAndConstants_t311[j]); printf( "\tue_TimersAndConstants_n311 for CC %d:\t%ld:\n",j,enb_properties.properties[i]->ue_TimersAndConstants_n311[j]); + printf( "\tue_TransmissionMode for CC %d:\t%ld:\n",j,enb_properties.properties[i]->ue_TransmissionMode[j]); + } for (j=0; j < enb_properties.properties[i]->num_otg_elements; j++) { @@ -526,6 +531,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) libconfig_int Nid_cell = 0; libconfig_int Nid_cell_mbsfn = 0; libconfig_int N_RB_DL = 0; + libconfig_int nb_antenna_ports = 0; libconfig_int nb_antennas_tx = 0; libconfig_int nb_antennas_rx = 0; libconfig_int tx_gain = 0; @@ -589,7 +595,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) libconfig_int ue_TimersAndConstants_t311 = 0; libconfig_int ue_TimersAndConstants_n310 = 0; libconfig_int ue_TimersAndConstants_n311 = 0; - + libconfig_int ue_TransmissionMode = 0; libconfig_int srb1_timer_poll_retransmit = 0; @@ -797,6 +803,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_NID_CELL, &Nid_cell) && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_N_RB_DL, &N_RB_DL) && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_CELL_MBSFN, &Nid_cell_mbsfn) + && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_NB_ANT_PORTS, &nb_antenna_ports) && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_NB_ANT_TX, &nb_antennas_tx) && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_NB_ANT_RX, &nb_antennas_rx) && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_TX_GAIN, &tx_gain) @@ -852,6 +859,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_UETIMERS_T311, &ue_TimersAndConstants_t311) && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_UETIMERS_N310, &ue_TimersAndConstants_n310) && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_UETIMERS_N311, &ue_TimersAndConstants_n311) + && config_setting_lookup_int(component_carrier, ENB_CONFIG_STRING_UE_TRANSMISSION_MODE, &ue_TransmissionMode) #ifdef Rel10 @@ -968,6 +976,13 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) enb_properties.properties[enb_properties_index]->nb_antennas_tx[j] = nb_antennas_tx; + if ((nb_antenna_ports <1) || (nb_antenna_ports > 2)) + AssertError (0, parse_errors ++, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for nb_antenna_ports choice: 1..2 !\n", + lib_config_file_name_pP, i, nb_antenna_ports); + + enb_properties.properties[enb_properties_index]->nb_antenna_ports[j] = nb_antenna_ports; + if ((nb_antennas_tx <1) || (nb_antennas_tx > 64)) AssertError (0, parse_errors ++, "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for nb_antennas_tx choice: 1..64 !\n", @@ -1832,6 +1847,35 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP) break; } + + switch (ue_TransmissionMode) { + case 1: + enb_properties.properties[enb_properties_index]->ue_TransmissionMode[j] = AntennaInfoDedicated__transmissionMode_tm1; + break; + case 2: + enb_properties.properties[enb_properties_index]->ue_TransmissionMode[j] = AntennaInfoDedicated__transmissionMode_tm2; + break; + case 3: + enb_properties.properties[enb_properties_index]->ue_TransmissionMode[j] = AntennaInfoDedicated__transmissionMode_tm3; + break; + case 4: + enb_properties.properties[enb_properties_index]->ue_TransmissionMode[j] = AntennaInfoDedicated__transmissionMode_tm4; + break; + case 5: + enb_properties.properties[enb_properties_index]->ue_TransmissionMode[j] = AntennaInfoDedicated__transmissionMode_tm5; + break; + case 6: + enb_properties.properties[enb_properties_index]->ue_TransmissionMode[j] = AntennaInfoDedicated__transmissionMode_tm6; + break; + case 7: + enb_properties.properties[enb_properties_index]->ue_TransmissionMode[j] = AntennaInfoDedicated__transmissionMode_tm7; + break; + default: + AssertError (0, parse_errors ++, + "Failed to parse eNB configuration file %s, enb %d unknown value \"%d\" for ue_TransmissionMode choice: 1,2,3,4,5,6,7", + lib_config_file_name_pP, i, ue_TransmissionMode); + break; + } } } diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h index 5f7f2636a3..4bdaf67514 100755 --- a/openair2/ENB_APP/enb_config.h +++ b/openair2/ENB_APP/enb_config.h @@ -136,9 +136,10 @@ typedef struct Enb_properties_s { int16_t Nid_cell[1+MAX_NUM_CCs];// for testing, change later int16_t N_RB_DL[1+MAX_NUM_CCs];// for testing, change later - int nb_antennas_tx[1+MAX_NUM_CCs]; + int nb_antenna_ports[1+MAX_NUM_CCs]; + int nb_antennas_tx[1+MAX_NUM_CCs]; int nb_antennas_rx[1+MAX_NUM_CCs]; - int tx_gain[1+MAX_NUM_CCs]; + int tx_gain[1+MAX_NUM_CCs]; int rx_gain[1+MAX_NUM_CCs]; long prach_root[1+MAX_NUM_CCs]; long prach_config_index[1+MAX_NUM_CCs]; @@ -198,7 +199,7 @@ typedef struct Enb_properties_s { long ue_TimersAndConstants_t311[1+MAX_NUM_CCs]; long ue_TimersAndConstants_n310[1+MAX_NUM_CCs]; long ue_TimersAndConstants_n311[1+MAX_NUM_CCs]; - + long ue_TransmissionMode[1+MAX_NUM_CCs]; long srb1_timer_poll_retransmit; long srb1_timer_reordering; diff --git a/openair2/RRC/LITE/defs.h b/openair2/RRC/LITE/defs.h index 78240de082..2603cbbb01 100644 --- a/openair2/RRC/LITE/defs.h +++ b/openair2/RRC/LITE/defs.h @@ -430,6 +430,9 @@ typedef struct eNB_RRC_INST_s { /// localization list for aggregated measurements from PHY struct list loc_list; #endif + + //pointer to configuration + RrcConfigurationReq *configuration; } eNB_RRC_INST; #define MAX_UE_CAPABILITY_SIZE 255 diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index 6b591e0c35..90cf172f37 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -1133,8 +1133,8 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration( int i; // configure SRB1/SRB2, PhysicalConfigDedicated, MAC_MainConfig for UE - //eNB_RRC_INST* rrc_inst = &eNB_rrc_inst[ctxt_pP->module_id]; - //struct PhysicalConfigDedicated** physicalConfigDedicated = &ue_context_pP->ue_context.physicalConfigDedicated; + eNB_RRC_INST* rrc_inst = &eNB_rrc_inst[ctxt_pP->module_id]; + struct PhysicalConfigDedicated** physicalConfigDedicated = &ue_context_pP->ue_context.physicalConfigDedicated; struct SRB_ToAddMod *SRB2_config = NULL; struct SRB_ToAddMod__rlc_Config *SRB2_rlc_config = NULL; @@ -1360,6 +1360,14 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration( //sps_RA_ConfigList_rlola = NULL; #endif + //change the transmission mode for the primary component carrier + //TODO: change TM for secondary CC in SCelltoaddmodlist + if (*physicalConfigDedicated) + if ((*physicalConfigDedicated)->antennaInfo) { + (*physicalConfigDedicated)->antennaInfo->choice.explicitValue.transmissionMode = rrc_inst->configuration->ue_TransmissionMode[0]; + LOG_D(RRC,"Setting transmission mode to %d+1\n",rrc_inst->configuration->ue_TransmissionMode[0]); + } + // Measurement ID list MeasId_list = CALLOC(1, sizeof(*MeasId_list)); memset((void *)MeasId_list, 0, sizeof(*MeasId_list)); @@ -1672,10 +1680,10 @@ rrc_eNB_generate_defaultRRCConnectionReconfiguration( (DRB_ToAddModList_t*)*DRB_configList, (DRB_ToReleaseList_t*)NULL, // DRB2_list, (struct SPS_Config*)NULL, // *sps_Config, -#ifdef EXMIMO_IOT - NULL, NULL, NULL, NULL,NULL, -#else (struct PhysicalConfigDedicated*)*physicalConfigDedicated, +#ifdef EXMIMO_IOT + NULL, NULL, NULL,NULL, +#else (MeasObjectToAddModList_t*)MeasObj_list, (ReportConfigToAddModList_t*)ReportConfig_list, (QuantityConfig_t*)quantityConfig, @@ -3449,6 +3457,7 @@ openair_rrc_lite_eNB_init( eNB_rrc_inst[ctxt.module_id].initial_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL); eNB_rrc_inst[ctxt.module_id].s1ap_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL); + eNB_rrc_inst[ctxt.module_id].configuration = configuration; /// System Information INIT diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf index 6493c01167..68e5f8b056 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.exmimo2.conf @@ -33,6 +33,7 @@ eNBs = Nid_cell = 0; N_RB_DL = 25; Nid_cell_mbsfn = 0; + nb_antenna_ports = 2; nb_antennas_tx = 2; nb_antennas_rx = 2; tx_gain = 25; @@ -97,6 +98,8 @@ eNBs = ue_TimersAndConstants_t311 = 10000; ue_TimersAndConstants_n310 = 20; ue_TimersAndConstants_n311 = 1; + + ue_TransmissionMode = 2; } ); @@ -165,13 +168,13 @@ eNBs = */ log_config : { - global_log_level ="info"; + global_log_level ="debug"; global_log_verbosity ="medium"; hw_log_level ="debug"; hw_log_verbosity ="medium"; - phy_log_level ="info"; + phy_log_level ="debug"; phy_log_verbosity ="medium"; - mac_log_level ="info"; + mac_log_level ="debug"; mac_log_verbosity ="high"; rlc_log_level ="info"; rlc_log_verbosity ="medium"; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf index c0974d8703..15cb63a5b7 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.exmimo2.conf @@ -33,6 +33,7 @@ eNBs = Nid_cell = 0; N_RB_DL = 25; Nid_cell_mbsfn = 0; + nb_antenna_ports = 1; nb_antennas_tx = 1; nb_antennas_rx = 1; tx_gain = 25; @@ -97,6 +98,8 @@ eNBs = ue_TimersAndConstants_t311 = 10000; ue_TimersAndConstants_n310 = 20; ue_TimersAndConstants_n311 = 1; + + ue_TransmissionMode = 1; } ); diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c index 3463da77d8..5514984a7d 100644 --- a/targets/SIMU/USER/init_lte.c +++ b/targets/SIMU/USER/init_lte.c @@ -53,7 +53,6 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms, uint8_t eNB_id, uint8_t Nid_cell, uint8_t cooperation_flag, - uint8_t transmission_mode, uint8_t abstraction_flag) { @@ -72,7 +71,6 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms, LOG_I(PHY,"init eNB: number of ue max %d number of enb max %d number of harq pid max %d\n", NUMBER_OF_UE_MAX, NUMBER_OF_eNB_MAX, NUMBER_OF_HARQ_PID_MAX); LOG_I(PHY,"init eNB: N_RB_DL %d\n", frame_parms->N_RB_DL); - LOG_I(PHY,"init eNB: Transmission mode %d\n", transmission_mode); for (i=0; itransmission_mode[i] = transmission_mode; + PHY_vars_eNB->transmission_mode[i] = frame_parms->nb_antenna_ports_eNB==1 ? 1 : 2; #ifdef LOCALIZATION PHY_vars_eNB->ulsch_eNB[1+i]->aggregation_period_ms = 5000; // 5000 milliseconds // could be given as an argument (TBD)) struct timeval ts; @@ -156,8 +154,8 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms, PHY_VARS_UE* init_lte_UE(LTE_DL_FRAME_PARMS *frame_parms, uint8_t UE_id, - uint8_t abstraction_flag, - uint8_t transmission_mode) + uint8_t abstraction_flag) + { int i,j; @@ -190,7 +188,7 @@ PHY_VARS_UE* init_lte_UE(LTE_DL_FRAME_PARMS *frame_parms, PHY_vars_UE->dlsch_ue_SI[i] = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag); PHY_vars_UE->dlsch_ue_ra[i] = new_ue_dlsch(1,1,NSOFT,MAX_TURBO_ITERATIONS,frame_parms->N_RB_DL, abstraction_flag); - PHY_vars_UE->transmission_mode[i] = transmission_mode; + PHY_vars_UE->transmission_mode[i] = frame_parms->nb_antenna_ports_eNB==1 ? 1 : 2; } PHY_vars_UE->lte_frame_parms.pucch_config_common.deltaPUCCH_Shift = 1; @@ -228,8 +226,12 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs], uint8_t extended_prefix_flag, uint8_t N_RB_DL, uint16_t Nid_cell, - uint8_t cooperation_flag,uint8_t transmission_mode,uint8_t abstraction_flag, - int nb_antennas_rx, int nb_antennas_tx, uint8_t eMBMS_active_state) + uint8_t cooperation_flag, + uint8_t nb_antenna_ports, + uint8_t abstraction_flag, + int nb_antennas_rx, + int nb_antennas_tx, + uint8_t eMBMS_active_state) { uint8_t eNB_id,UE_id,RN_id,CC_id; @@ -254,7 +256,7 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs], (frame_parms[CC_id])->nushift = (Nid_cell%6); (frame_parms[CC_id])->nb_antennas_tx = nb_antennas_tx; (frame_parms[CC_id])->nb_antennas_rx = nb_antennas_rx; - (frame_parms[CC_id])->nb_antenna_ports_eNB = (transmission_mode == 1 || transmission_mode == 7) ? 1 : 2; + (frame_parms[CC_id])->nb_antenna_ports_eNB = nb_antenna_ports; (frame_parms[CC_id])->mode1_flag = (frame_parms[CC_id])->nb_antenna_ports_eNB==1 ? 1 : 0; init_frame_parms(frame_parms[CC_id],1); @@ -277,7 +279,7 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs], PHY_vars_eNB_g[eNB_id] = (PHY_VARS_eNB**) malloc(MAX_NUM_CCs*sizeof(PHY_VARS_eNB*)); for (CC_id=0; CC_idMod_id=eNB_id; PHY_vars_eNB_g[eNB_id][CC_id]->CC_id=CC_id; } @@ -294,7 +296,7 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs], (frame_parms[CC_id])->nb_antennas_rx = nb_antennas_rx; - PHY_vars_UE_g[UE_id][CC_id] = init_lte_UE(frame_parms[CC_id], UE_id,abstraction_flag,transmission_mode); + PHY_vars_UE_g[UE_id][CC_id] = init_lte_UE(frame_parms[CC_id], UE_id,abstraction_flag); PHY_vars_UE_g[UE_id][CC_id]->Mod_id=UE_id; PHY_vars_UE_g[UE_id][CC_id]->CC_id=CC_id; } diff --git a/targets/SIMU/USER/init_lte.h b/targets/SIMU/USER/init_lte.h index 269863085d..e033b27e47 100644 --- a/targets/SIMU/USER/init_lte.h +++ b/targets/SIMU/USER/init_lte.h @@ -34,13 +34,11 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms, uint8_t eNB_id, uint8_t Nid_cell, uint8_t cooperation_flag, - uint8_t transmission_mode, uint8_t abstraction_flag); PHY_VARS_UE* init_lte_UE(LTE_DL_FRAME_PARMS *frame_parms, uint8_t UE_id, - uint8_t abstraction_flag, - uint8_t transmission_mode); + uint8_t abstraction_flag); PHY_VARS_RN* init_lte_RN(LTE_DL_FRAME_PARMS *frame_parms, uint8_t RN_id, diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index 326813181a..4ce98cd701 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -683,6 +683,7 @@ void get_simulation_options(int argc, char *argv[]) break; case 'x': + /* oai_emulation.info.transmission_mode[0] = atoi (optarg); if ((oai_emulation.info.transmission_mode[0] != 1) && (oai_emulation.info.transmission_mode[0] != 2) && (oai_emulation.info.transmission_mode[0] != 3) @@ -690,6 +691,9 @@ void get_simulation_options(int argc, char *argv[]) printf("Unsupported transmission mode %d\n",oai_emulation.info.transmission_mode[0]); exit(-1); } + */ + printf("Option -x deprecated. Please set transmission mode in eNB config file\n"); + exit(-1); break; @@ -925,8 +929,19 @@ void init_openair1(void) // change the nb_connected_eNB for (CC_id=0; CC_idproperties[0]->nb_antennas_tx[CC_id],enb_properties->properties[0]->nb_antennas_tx[CC_id], oai_emulation.info.eMBMS_active_state); + init_lte_vars (&frame_parms[CC_id], + oai_emulation.info.frame_type[CC_id], + oai_emulation.info.tdd_config[CC_id], + oai_emulation.info.tdd_config_S[CC_id], + oai_emulation.info.extended_prefix_flag[CC_id], + oai_emulation.info.N_RB_DL[CC_id], + Nid_cell, + cooperation_flag, + enb_properties->properties[0]->nb_antenna_ports[CC_id], + abstraction_flag, + enb_properties->properties[0]->nb_antennas_tx[CC_id], + enb_properties->properties[0]->nb_antennas_tx[CC_id], + oai_emulation.info.eMBMS_active_state); } for (eNB_id=0; eNB_id Date: Fri, 1 Jul 2016 13:20:15 +0200 Subject: [PATCH 059/132] mostly bugfixes --- openair1/PHY/INIT/defs.h | 12 ++ openair1/PHY/INIT/lte_init.c | 4 +- openair1/PHY/LTE_TRANSPORT/defs.h | 4 +- .../PHY/LTE_TRANSPORT/dlsch_demodulation.c | 2 +- openair1/SCHED/phy_procedures_lte_eNb.c | 2 +- openair1/SCHED/phy_procedures_lte_ue.c | 2 +- openair1/SIMULATION/LTE_PHY/dlsim.c | 22 +-- openair2/RRC/LITE/rrc_UE.c | 2 +- .../CONF/enb.band7.tm7.exmimo2.conf | 179 ++++++++++++++++++ 9 files changed, 210 insertions(+), 19 deletions(-) create mode 100644 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf diff --git a/openair1/PHY/INIT/defs.h b/openair1/PHY/INIT/defs.h index f08ca678db..58b04e7e01 100644 --- a/openair1/PHY/INIT/defs.h +++ b/openair1/PHY/INIT/defs.h @@ -337,6 +337,18 @@ int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf); void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms); #endif +void lte_param_init(unsigned char N_tx_port_eNB, + unsigned char N_tx_phy, + unsigned char N_rx, + unsigned char transmission_mode, + uint8_t extended_prefix_flag, + frame_t frame_type, + uint16_t Nid_cell, + uint8_t tdd_config, + uint8_t N_RB_DL, + uint8_t threequarter_fs, + uint8_t osf, + uint32_t perfect_ce); /** @} */ #endif diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index c1f8c89b55..25a77aa024 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -1338,7 +1338,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, // TX vars eNB_common_vars->txdata[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*)); eNB_common_vars->txdataF[eNB_id] = (mod_sym_t **)malloc16(NB_ANTENNA_PORTS_ENB*sizeof(mod_sym_t*)); - eNB_common_vars->txdataF_BF[eNB_id] = (mod_sym_t ***)malloc16(frame_parms->nb_antennas_tx*sizeof(mod_sym_t**)); + eNB_common_vars->txdataF_BF[eNB_id] = (mod_sym_t **)malloc16(frame_parms->nb_antennas_tx*sizeof(mod_sym_t*)); for (i=0; i<14; i++) { eNB_common_vars->txdataF[eNB_id][i] = (mod_sym_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t) ); @@ -1350,7 +1350,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, } for (i=0; inb_antennas_tx; i++) { - eNB_common_vars->txdataF_BF[eNB_id][i] = (mod_sym_t*)malloc16_clear( OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(mod_sym_t*) ); + eNB_common_vars->txdataF_BF[eNB_id][i] = (mod_sym_t*)malloc16_clear( OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(mod_sym_t) ); #ifdef USER_MODE eNB_common_vars->txdata[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) ); #else // USER_MODE diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h index ae1d339770..22b70672e8 100644 --- a/openair1/PHY/LTE_TRANSPORT/defs.h +++ b/openair1/PHY/LTE_TRANSPORT/defs.h @@ -239,9 +239,9 @@ typedef struct { typedef struct { /// TX buffers for UE-spec transmission (antenna ports 5 or 7..14, prior to precoding) - uint32_t *txdataF[8]; + int32_t *txdataF[8]; /// beamforming weights for UE-spec transmission (antenna ports 5 or 7..14), for each codeword, maximum 4 layers? - uint32_t **ue_spec_bf_weights[4]; + int32_t **ue_spec_bf_weights[4]; /// Allocated RNTI (0 means DLSCH_t is not currently used) uint16_t rnti; /// Active flag for baseband transmitter processing diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index 831744bc09..916883cc23 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -96,7 +96,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue, LTE_UE_DLSCH_t **dlsch_ue; unsigned char aatx,aarx; - unsigned short nb_rb; + unsigned short nb_rb=0; int avgs, rb; LTE_DL_UE_HARQ_t *dlsch0_harq,*dlsch1_harq = 0; diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index e9ee770545..f7a978545f 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1190,7 +1190,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e 0, P_RNTI, phy_vars_eNB->eNB_UE_stats[(uint8_t)UE_id].DL_pmi_single, - phy_vars_eNB->transmission_mode[(uint8_t)UE_id]>7?0:phy_vars_eNB->transmission_mode[(uint8_t)UE_id]); + phy_vars_eNB->transmission_mode[(uint8_t)UE_id]<7?0:phy_vars_eNB->transmission_mode[(uint8_t)UE_id]); LOG_D(PHY,"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d subframe %d: Generated dlsch params\n", phy_vars_eNB->Mod_id,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->current_harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe); diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index d87a8479f5..cfaca44a43 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -2144,7 +2144,7 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst SI_RNTI, 0, P_RNTI, - phy_vars_ue->transmission_mode[eNB_id]>7?0:phy_vars_ue->transmission_mode[eNB_id])==0)) { + (phy_vars_ue->transmission_mode[eNB_id]<7)?0:phy_vars_ue->transmission_mode[eNB_id])==0)) { #ifdef DIAG_PHY diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 6e78ad1a56..7c58488e2d 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -3359,17 +3359,17 @@ PMI_FEEDBACK: if (dlsch_active == 1) { - if (transmission_mode==7) { - if (PHY_vars_UE->lte_frame_parms.Ncp==0) { - if ((Ns==(2*subframe) && ((l==3) || (l==6))) || - Ns==(1+(2*subframe)) && ((l==2) || (l==5))) { - if (perfect_ce==0) - lte_dl_bf_channel_estimation(PHY_vars_UE,eNB_id,0,Ns,5,l+7*(Ns%2==1)); - } - } else { - msg("Beamforming channel estimation not supported yet for TM7 extented CP.\n"); - } - } + if (transmission_mode==7) { + if (PHY_vars_UE->lte_frame_parms.Ncp==0) { + if ((Ns==(2*subframe) && ((l==3) || (l==6))) || + (Ns==(1+2*subframe) && ((l==2) || (l==5)))) { + if (perfect_ce==0) + lte_dl_bf_channel_estimation(PHY_vars_UE,eNB_id,0,Ns,5,l+7*(Ns%2==1)); + } + } else { + msg("Beamforming channel estimation not supported yet for TM7 extented CP.\n"); + } + } if ((Ns==(1+(2*subframe))) && (l==0)) {// process PDSCH symbols 1,2,3,4,5,(6 Normal Prefix) diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c index 7da26897e8..19d7b9a36e 100644 --- a/openair2/RRC/LITE/rrc_UE.c +++ b/openair2/RRC/LITE/rrc_UE.c @@ -103,7 +103,7 @@ extern UE_MAC_INST *UE_mac_inst; extern void *bigphys_malloc(int); #endif -//#define XER_PRINT +#define XER_PRINT extern int8_t dB_fixed2(uint32_t x,uint32_t y); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf new file mode 100644 index 0000000000..dedf4797bc --- /dev/null +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf @@ -0,0 +1,179 @@ +Active_eNBs = ( "eNB_Eurecom_LTEBox"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +eNBs = +( + { + ////////// Identification parameters: + eNB_ID = 0xe00; + + cell_type = "CELL_MACRO_ENB"; + + eNB_name = "eNB_Eurecom_LTEBox"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = "1"; + + mobile_country_code = "208"; + + mobile_network_code = "93"; + + ////////// Physical parameters: + + component_carriers = ( + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2680000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antenna_ports = 1; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + tx_gain = 25; + rx_gain = 20; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -26; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -80; /*-85;*/ + pusch_alpha = "AL1"; + pucch_p0_Nominal = -108; /* -108 */ + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + + ue_TransmissionMode = 7; + } + ); + + + srb1_parameters : + { + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + timer_poll_retransmit = 80; + + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] + timer_reordering = 35; + + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] + timer_status_prohibit = 0; + + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] + poll_pdu = 4; + + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] + poll_byte = 99999; + + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] + max_retx_threshold = 4; + } + + # ------- SCTP definitions + SCTP : + { + # Number of streams to use in input/output + SCTP_INSTREAMS = 2; + SCTP_OUTSTREAMS = 2; + }; + + ////////// MME parameters: + mme_ip_address = ( { ipv4 = "192.168.12.171"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + ENB_INTERFACE_NAME_FOR_S1_MME = "eth2"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.80/24"; + + ENB_INTERFACE_NAME_FOR_S1U = "eth2"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.80/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + + log_config : + { + global_log_level ="debug"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="debug"; + phy_log_verbosity ="medium"; + mac_log_level ="debug"; + mac_log_verbosity ="medium"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + gtpu_log_level ="error"; + gtpu_log_verbosity ="medium"; + udp_log_level ="error"; + udp_log_verbosity ="medium"; + osa_log_level ="warn"; + osa_log_verbosity ="low"; + }; + + } +); From 08f73c72d829bb1dad6acbc35447be6b168dedf3 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 5 Jul 2016 15:11:12 +0200 Subject: [PATCH 060/132] resolve conflict when merge develop --- openair1/PHY/INIT/lte_init.c | 6 ++--- openair1/PHY/LTE_REFSIG/defs.h | 2 +- openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c | 8 +++---- openair1/PHY/LTE_REFSIG/lte_dl_uespec.c | 4 ++-- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 2 +- openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c | 4 ++-- openair1/PHY/LTE_TRANSPORT/proto.h | 3 +-- openair1/PHY/MODULATION/ofdm_mod.c | 4 ++-- openair1/SIMULATION/LTE_PHY/dlsim.c | 22 ++----------------- 9 files changed, 18 insertions(+), 37 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 218a6b166c..17622db1ae 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -1334,7 +1334,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, eNB_common_vars->txdataF_BF[eNB_id] = (int32_t **)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*)); for (i=0; i<14; i++) { - eNB_common_vars->txdataF[eNB_id][i] = (mod_sym_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t) ); + eNB_common_vars->txdataF[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t) ); #ifdef DEBUG_PHY msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdataF[%d][%d] = %p (%d bytes)\n", eNB_id,i,eNB_common_vars->txdataF[eNB_id][i], @@ -1343,7 +1343,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, } for (i=0; inb_antennas_tx; i++) { - eNB_common_vars->txdataF_BF[eNB_id][i] = (mod_sym_t*)malloc16_clear( OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(mod_sym_t) ); + eNB_common_vars->txdataF_BF[eNB_id][i] = (int32_t*)malloc16_clear( OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t) ); #ifdef USER_MODE eNB_common_vars->txdata[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) ); #else // USER_MODE @@ -1352,7 +1352,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, #ifdef DEBUG_PHY msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdataF_BF[%d][%d][%d] = %p (%d bytes)\n", eNB_id,i,j,eNB_common_vars->txdataF_BF[eNB_id][i][j], - OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(mod_sym_t)); + OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdata[%d][%d] = %p\n",eNB_id,i,eNB_common_vars->txdata[eNB_id][i]); #endif } diff --git a/openair1/PHY/LTE_REFSIG/defs.h b/openair1/PHY/LTE_REFSIG/defs.h index 9377368d7d..e8c3f7c807 100644 --- a/openair1/PHY/LTE_REFSIG/defs.h +++ b/openair1/PHY/LTE_REFSIG/defs.h @@ -139,7 +139,7 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *phy_vars_ue, @param nRB_PDSCH number of allocated PDSCH RBs */ int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, - mod_sym_t *output, + int32_t *output, unsigned char Ns, unsigned char p, int lprime, diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c b/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c index d029f959ed..a1926ba6b4 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_ue_spec.c @@ -55,7 +55,7 @@ int Wbar_NCP[8][4] = {{1,1,1,1},{1,-1,1,-1},{1,1,1,1},{1,-1,1,-1},{1,1,-1,-1},{- /* int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, uint8_t UE_id, - mod_sym_t *output, + int32_t *output, short amp, uint8_t Ns, uint8_t lprime, @@ -63,7 +63,7 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, int SS_flag) { - mod_sym_t qpsk[4],nqpsk[4]; + int32_t qpsk[4],nqpsk[4]; int16_t k=0,a; int mprime,ind,ind_dword,ind_qpsk_symb; unsigned nushift,kprime; @@ -133,14 +133,14 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, - mod_sym_t *output, + int32_t *output, unsigned char Ns, unsigned char p, int lprime, int SS_flag, uint16_t nRB_PDSCH) { - mod_sym_t qpsk[4],nqpsk[4],*qpsk_p,*output_p; + int32_t qpsk[4],nqpsk[4],*qpsk_p,*output_p; int w,mprime,ind,l,ind_dword,ind_qpsk_symb,nPRB; short pamp; diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c index 7b788514f5..5f30180883 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c @@ -133,14 +133,14 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, - mod_sym_t *output, + int32_t *output, unsigned char Ns, unsigned char p, int lprime, int SS_flag, uint16_t nRB_PDSCH) { - mod_sym_t qpsk[4],nqpsk[4],*qpsk_p,*output_p; + int32_t qpsk[4],nqpsk[4],*qpsk_p,*output_p; int w,mprime,ind,l,ind_dword,ind_qpsk_symb,nPRB; short pamp; diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 723e3eee90..b96d60a8f6 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -232,7 +232,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB, int s=1; int mprime2 = mprime,ind,ind_dword,ind_qpsk_symb; - mod_sym_t qpsk[4]; + int32_t qpsk[4]; gain_lin_QPSK = (int16_t)((amp*ONE_OVER_SQRT2_Q15)>>15); // if (mimo_mode == LARGE_CDD) gain_lin_QPSK>>=1; diff --git a/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c b/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c index 4651308dfd..4a9010fca0 100644 --- a/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c +++ b/openair1/PHY/LTE_TRANSPORT/pilots_ue_spec.c @@ -42,7 +42,7 @@ void generate_ue_spec_pilots(PHY_VARS_eNB *phy_vars_eNB, uint8_t UE_id, - mod_sym_t **txdataF, + int32_t **txdataF, int16_t amp, uint16_t Ntti, uint8_t beamforming_mode) @@ -127,7 +127,7 @@ void generate_ue_spec_pilots(PHY_VARS_eNB *phy_vars_eNB, } /*int generate_ue_spec_pilots_slot(PHY_VARS_eNB *phy_vars_eNB, - mod_sym_t **txdataF, + int32_t **txdataF, int16_t amp, uint16_t slot, int first_pilot_only) diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 17338ebb78..d775aea822 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -306,10 +306,9 @@ int32_t generate_mbsfn_pilot(PHY_VARS_eNB *phy_vars_eNB, int16_t amp, uint16_t subframe); -<<<<<<< HEAD void generate_ue_spec_pilots(PHY_VARS_eNB *phy_vars_eNB, uint8_t UE_id, - mod_sym_t **txdataF, + int32_t **txdataF, int16_t amp, uint16_t Ntti, uint8_t beamforming_mode); diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 23d5ed1269..1f7aeb533a 100755 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -296,8 +296,8 @@ void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_sl int aa, l, slot_offset, slot_offset_F; int8_t UE_id=0; - mod_sym_t **txdataF = eNB_common_vars->txdataF[eNB_id]; - mod_sym_t **txdataF_BF = eNB_common_vars->txdataF_BF[eNB_id]; + int32_t **txdataF = eNB_common_vars->txdataF[eNB_id]; + int32_t **txdataF_BF = eNB_common_vars->txdataF_BF[eNB_id]; int32_t **txdata = eNB_common_vars->txdata[eNB_id]; //slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 886d02c954..378c79803b 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -505,11 +505,8 @@ int main(int argc, char **argv) exit(-1); } - if (transmission_mode>1 && transmission_mode<7){ + if (transmission_mode>1 && transmission_mode<7) { n_tx_port = 2; - n_tx_phy = n_tx_port; - } else if (transmission_mode==7){ - n_tx_port = 1; } break; @@ -521,14 +518,10 @@ int main(int argc, char **argv) if(n_tx_phy==1) { msg("n_tx_phy must be >1 for transmission_mode %d\n",transmission_mode); exit(-1); - } else if (n_tx_phy!=n_tx_port) { // to be changed - msg("For transmission mode TM2-TM6, physical antenna number should be the same as antenna port number.\n"); - exit(-1); - } + } } if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=8 && n_tx_phy!=16 && n_tx_phy!=64 && n_tx_phy!=128)) { - // if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=16 && n_tx_phy!=64)) { msg("Physical number of antennas not supported for TM7.\n"); exit(-1); } @@ -616,8 +609,6 @@ int main(int argc, char **argv) } else NB_RB = 4; - /*if ((transmission_mode > 1) && (n_tx != 2)) - printf("n_tx must be >1 for transmission_mode %d\n",transmission_mode);*/ if (xforms==1) { fl_initialize (&argc, argv, NULL, 0, 0); @@ -673,15 +664,6 @@ int main(int argc, char **argv) snr1 = snr0+snr_int; printf("SNR0 %f, SNR1 %f\n",snr0,snr1); - /* - txdataF = (int **)malloc16(2*sizeof(int*)); - txdataF[0] = (int *)malloc16(FRAME_LENGTH_BYTES); - txdataF[1] = (int *)malloc16(FRAME_LENGTH_BYTES); - - txdata = (int **)malloc16(2*sizeof(int*)); - txdata[0] = (int *)malloc16(FRAME_LENGTH_BYTES); - txdata[1] = (int *)malloc16(FRAME_LENGTH_BYTES); - */ s_re = malloc(n_tx_phy*sizeof(double*)); s_im = malloc(n_tx_phy*sizeof(double*)); From 35bdc94092db108dec4ec5a07ec76e3d4ce75051 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Wed, 6 Jul 2016 10:28:27 +0200 Subject: [PATCH 061/132] fixing a few bugs after merge --- openair1/PHY/INIT/lte_init.c | 6 +++--- openair1/PHY/LTE_REFSIG/defs.h | 2 +- openair1/PHY/LTE_REFSIG/lte_dl_uespec.c | 4 ++-- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 2 +- openair1/PHY/LTE_TRANSPORT/proto.h | 3 +-- openair1/PHY/MODULATION/ofdm_mod.c | 4 ++-- targets/RT/USER/lte-softmodem.c | 4 ++-- 7 files changed, 12 insertions(+), 13 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 218a6b166c..17622db1ae 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -1334,7 +1334,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, eNB_common_vars->txdataF_BF[eNB_id] = (int32_t **)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*)); for (i=0; i<14; i++) { - eNB_common_vars->txdataF[eNB_id][i] = (mod_sym_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(mod_sym_t) ); + eNB_common_vars->txdataF[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t) ); #ifdef DEBUG_PHY msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdataF[%d][%d] = %p (%d bytes)\n", eNB_id,i,eNB_common_vars->txdataF[eNB_id][i], @@ -1343,7 +1343,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, } for (i=0; inb_antennas_tx; i++) { - eNB_common_vars->txdataF_BF[eNB_id][i] = (mod_sym_t*)malloc16_clear( OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(mod_sym_t) ); + eNB_common_vars->txdataF_BF[eNB_id][i] = (int32_t*)malloc16_clear( OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t) ); #ifdef USER_MODE eNB_common_vars->txdata[eNB_id][i] = (int32_t*)malloc16_clear( FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(int32_t) ); #else // USER_MODE @@ -1352,7 +1352,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, #ifdef DEBUG_PHY msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdataF_BF[%d][%d][%d] = %p (%d bytes)\n", eNB_id,i,j,eNB_common_vars->txdataF_BF[eNB_id][i][j], - OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(mod_sym_t)); + OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->txdata[%d][%d] = %p\n",eNB_id,i,eNB_common_vars->txdata[eNB_id][i]); #endif } diff --git a/openair1/PHY/LTE_REFSIG/defs.h b/openair1/PHY/LTE_REFSIG/defs.h index 9377368d7d..e8c3f7c807 100644 --- a/openair1/PHY/LTE_REFSIG/defs.h +++ b/openair1/PHY/LTE_REFSIG/defs.h @@ -139,7 +139,7 @@ int lte_dl_cell_spec_rx(PHY_VARS_UE *phy_vars_ue, @param nRB_PDSCH number of allocated PDSCH RBs */ int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, - mod_sym_t *output, + int32_t *output, unsigned char Ns, unsigned char p, int lprime, diff --git a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c index 7b788514f5..5f30180883 100644 --- a/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c +++ b/openair1/PHY/LTE_REFSIG/lte_dl_uespec.c @@ -133,14 +133,14 @@ int lte_dl_ue_spec(PHY_VARS_eNB *phy_vars_eNB, int lte_dl_ue_spec_rx(PHY_VARS_UE *phy_vars_ue, - mod_sym_t *output, + int32_t *output, unsigned char Ns, unsigned char p, int lprime, int SS_flag, uint16_t nRB_PDSCH) { - mod_sym_t qpsk[4],nqpsk[4],*qpsk_p,*output_p; + int32_t qpsk[4],nqpsk[4],*qpsk_p,*output_p; int w,mprime,ind,l,ind_dword,ind_qpsk_symb,nPRB; short pamp; diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 723e3eee90..b96d60a8f6 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -232,7 +232,7 @@ int allocate_REs_in_RB(PHY_VARS_eNB *phy_vars_eNB, int s=1; int mprime2 = mprime,ind,ind_dword,ind_qpsk_symb; - mod_sym_t qpsk[4]; + int32_t qpsk[4]; gain_lin_QPSK = (int16_t)((amp*ONE_OVER_SQRT2_Q15)>>15); // if (mimo_mode == LARGE_CDD) gain_lin_QPSK>>=1; diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index 17338ebb78..d775aea822 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -306,10 +306,9 @@ int32_t generate_mbsfn_pilot(PHY_VARS_eNB *phy_vars_eNB, int16_t amp, uint16_t subframe); -<<<<<<< HEAD void generate_ue_spec_pilots(PHY_VARS_eNB *phy_vars_eNB, uint8_t UE_id, - mod_sym_t **txdataF, + int32_t **txdataF, int16_t amp, uint16_t Ntti, uint8_t beamforming_mode); diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 23d5ed1269..1f7aeb533a 100755 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -296,8 +296,8 @@ void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_sl int aa, l, slot_offset, slot_offset_F; int8_t UE_id=0; - mod_sym_t **txdataF = eNB_common_vars->txdataF[eNB_id]; - mod_sym_t **txdataF_BF = eNB_common_vars->txdataF_BF[eNB_id]; + int32_t **txdataF = eNB_common_vars->txdataF[eNB_id]; + int32_t **txdataF_BF = eNB_common_vars->txdataF_BF[eNB_id]; int32_t **txdata = eNB_common_vars->txdata[eNB_id]; //slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 38723e6152..8b48148955 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -3069,7 +3069,7 @@ int main( int argc, char **argv ) for (CC_id=0; CC_idNid_cell,cooperation_flag,transmission_mode,abstraction_flag); + PHY_vars_eNB_g[0][CC_id] = init_lte_eNB(frame_parms[CC_id],0,frame_parms[CC_id]->Nid_cell,cooperation_flag,abstraction_flag); PHY_vars_eNB_g[0][CC_id]->CC_id = CC_id; if (phy_test==1) From a5b57ddce4b5a8f3538c72a39235e09ca263158f Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Wed, 6 Jul 2016 15:01:58 +0200 Subject: [PATCH 062/132] dci decoding procedure --- openair1/PHY/INIT/lte_init.c | 4 ++-- openair1/PHY/LTE_TRANSPORT/dci.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 17622db1ae..f667379331 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -473,7 +473,7 @@ void phy_config_dedicated_eNB_step2(PHY_VARS_eNB *phy_vars_eNB) if (physicalConfigDedicated->antennaInfo) { phy_vars_eNB->transmission_mode[UE_id] = 1+(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode); - LOG_D(PHY,"Transmission Mode %d\n",phy_vars_eNB->transmission_mode[UE_id]); + LOG_D(PHY,"eNB:Transmission Mode %d\n",phy_vars_eNB->transmission_mode[UE_id]); LOG_D(PHY,"\n"); } @@ -845,7 +845,7 @@ void phy_config_dedicated_ue(uint8_t Mod_id,int CC_id,uint8_t CH_index, if (physicalConfigDedicated->antennaInfo) { phy_vars_ue->transmission_mode[CH_index] = 1+(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode); - LOG_D(PHY,"Transmission Mode %d\n",phy_vars_ue->transmission_mode[CH_index]); + LOG_D(PHY,"UE:Transmission Mode %d\n",phy_vars_ue->transmission_mode[CH_index]); LOG_D(PHY,"\n"); switch(physicalConfigDedicated->antennaInfo->choice.explicitValue.transmissionMode) { case AntennaInfoDedicated__transmissionMode_tm1: diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index d7fc7042a5..da2fe77141 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -3339,7 +3339,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, // These are for CRNTI based on transmission mode - if (tmode < 3) { + if ((tmode < 3) || (tmode == 7)) { // Now check UE_SPEC format 1 search spaces at aggregation 1 old_dci_cnt=dci_cnt; dci_decoding_procedure0(lte_ue_pdcch_vars,0,subframe, @@ -3684,7 +3684,7 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, &CCEmap1, &CCEmap2); //#endif - } else if (tmode >=5) { // This is MU-MIMO + } else if ((tmode==5) || (tmode==6)) { // This is MU-MIMO // Now check UE_SPEC format 1E_2A_M10PRB search spaces aggregation 1 #ifdef DEBUG_DCI_DECODING From 4763438131a7ab3ca3ae31bb0147dbf39f0cdcbb Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 15 Jul 2016 16:48:41 +0200 Subject: [PATCH 063/132] bug fixed for ue_spec_bf_weights initialisation --- .../oaisim_noS1_build_oai/CMakeLists.template | 1 - openair1/PHY/INIT/lte_init.c | 24 ------------- .../lte_dl_bf_channel_estimation.c | 2 +- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 8 ----- openair1/PHY/MODULATION/beamforming.c | 22 ++++++------ openair1/SCHED/phy_procedures_lte_ue.c | 11 ++++++ openair1/SIMULATION/LTE_PHY/dlsim.c | 35 ++++++++++++------- targets/SIMU/USER/init_lte.c | 14 +++++++- 8 files changed, 59 insertions(+), 58 deletions(-) diff --git a/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template b/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template index 6d8fc6d26a..20015eb42a 100644 --- a/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template +++ b/cmake_targets/oaisim_noS1_build_oai/CMakeLists.template @@ -1,6 +1,5 @@ cmake_minimum_required(VERSION 2.8) -set ( CMAKE_BUILD_TYPE "RelWithDebInfo" ) set ( ADDR_CONF False ) set ( DEBUG_OMG False ) set ( DISABLE_XER_PRINT False ) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index f667379331..9780f226bd 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -1357,18 +1357,6 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, #endif } - /*for (i=0; i<2; i++) { // 2 is the total number of cell specific antenna ports - eNB_common_vars->cell_spec_bf_weights[eNB_id][i] = (int32_t **)malloc16_clear(frame_parms->nb_antennas_tx*sizeof(int32_t*)); - for (j=0; jnb_antennas_tx; j++) { - eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j] = (int32_t *)malloc16_clear(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); -#ifdef DEBUG_PUY - msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->cell_spec_bf_weights[%d][%d][%d] = %p (%d bytes)\n", - eNB_id,i,j,eNB_common_vars->cell_spec_bf_weights[eNB_id][i][j], - OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); -#endif - } - } */ - for (i=0; i<15; i++) { // 15 is the total number of antenna ports eNB_common_vars->beam_weights[eNB_id][i] = (int32_t **)malloc16_clear(frame_parms->nb_antennas_tx*sizeof(int32_t*)); for (j=0; jnb_antennas_tx; j++) { @@ -1383,18 +1371,6 @@ int phy_init_lte_eNB(PHY_VARS_eNB *phy_vars_eNB, } } - /*for (i=0; i<8; i++) { //antenna port 5 for TM7, antenna port 7-15 for TM8-10 - eNB_common_vars->ue_spec_bf_weights[eNB_id][i] = (int32_t **)malloc16_clear(frame_parms->nb_antennas_tx*sizeof(int32_t*)); - for (j=0; jnb_antennas_tx; j++) { - eNB_common_vars->ue_spec_bf_weights[eNB_id][i][j] = (int32_t*)malloc16_clear(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); -#ifdef DEBUG_PUY - msg("[openair][LTE_PHY][INIT] lte_eNB_common_vars->ue_spec_bf_weights[%d][%d][%d] = %p (%d bytes)\n", - eNB_id,i,j,eNB_common_vars->ue_spec_bf_weights[eNB_id][i][j], - OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); -#endif - } - } */ - // RX vars eNB_common_vars->rxdata[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*) ); eNB_common_vars->rxdata_7_5kHz[eNB_id] = (int32_t**)malloc16(frame_parms->nb_antennas_rx*sizeof(int32_t*) ); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c index 5fecc9c34f..80df031c41 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -708,7 +708,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, } } //aarx - //printf("[dlsch bf ch est]: dl_bf_estimates[0][600] %d, %d \n",*(short *)&dl_bf_ch_estimates[0][600],*(short*)&phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0][600]); + // printf("[dlsch bf ch est]: dl_bf_estimates[0][600] %d, %d \n",*(short *)&dl_bf_ch_estimates[0][600],*(short*)&phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0][600]); return(0); diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index e79aa11feb..48498a4873 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -204,14 +204,6 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_ put_harq_pid_in_freelist(dlsch, i); } - for (i=0; i<4; i++) { - dlsch->ue_spec_bf_weights[i] = (int32_t **)malloc16(nb_antennas_tx*sizeof(int32_t*)); - - for (aa=0; aaue_spec_bf_weights[i][aa] = (int32_t *)malloc16(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); - } - } - if (exit_flag==0) { for (i=0; iharq_processes[i]->round=0; diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c index e37ab0e430..2e38b7cb93 100644 --- a/openair1/PHY/MODULATION/beamforming.c +++ b/openair1/PHY/MODULATION/beamforming.c @@ -91,16 +91,18 @@ int beam_precoding(int32_t **txdataF, ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[5][aa][re])[1])>>15); ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[5][aa][re])[1])>>15); ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[5][aa][re])[0])>>15); - // printf("beamforming.c:txdata[%d][%d]=%d+j%d, beam_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", - // p,slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, - // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], - // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], - // p,aa,re, - // ((int16_t*)&beam_weights[p][aa][re])[0],((int16_t*)&beam_weights[p][aa][re])[1], - // aa,re, - // ((int16_t*)&txdataF_BF[aa][re])[0], - // ((int16_t*)&txdataF_BF[aa][re])[1]); - +/* + printf("beamforming.c:txdata[5][%d]=%d+j%d, beam_weights[5][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", + slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, + ((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], + ((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], + aa,re, + ((int16_t*)&beam_weights[5][aa][re])[0], + ((int16_t*)&beam_weights[5][aa][re])[1], + aa,re, + ((int16_t*)&txdataF_BF[aa][re])[0], + ((int16_t*)&txdataF_BF[aa][re])[1]); +*/ } } diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 9241c59508..36a7f525e3 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -2557,10 +2557,21 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac if ((slot_rx%2)==1) // odd slots phy_vars_ue->dlsch_ue[eNB_id][0]->active = 0; } + } #endif + if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) { + if (phy_vars_ue->transmission_mode[eNB_id]==7) { + if (phy_vars_ue->lte_frame_parms.Ncp==0) { + if (((slot_rx%2)==0 && ((l==3) || (l==6))) || ((slot_rx%2)==1 && ((l==2) || (l==5)))) + lte_dl_bf_channel_estimation(phy_vars_ue,eNB_id,0,slot_rx,5,l+7*(slot_rx%2==1)); + } else { + LOG_E(PHY,"[UE %d]Beamforming channel estimation not supported yet for TM7 extented CP.\n",phy_vars_ue->Mod_id); + } + } + } // process last DLSCH symbols + invoke decoding if (((slot_rx%2)==0) && (l==0)) { // Regular PDSCH diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 378c79803b..dd535064d1 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -119,7 +119,8 @@ int main(int argc, char **argv) uint8_t extended_prefix_flag=0,transmission_mode=1,n_tx_port=1,n_tx_phy=1,n_rx=1; uint16_t Nid_cell=0; - int32_t **ue_spec_bf_weights, **cell_spec_bf_weights; + int32_t **cell_spec_bf_weights; + int32_t *ue_spec_bf_weights; int eNB_id = 0, eNB_id_i = 1; unsigned char mcs1=0,mcs2=0,mcs_i=0,dual_stream_UE = 0,awgn_flag=0,round,dci_flag=0; @@ -932,23 +933,31 @@ int main(int argc, char **argv) exit(-1); } else { // this initilisation may should be moved to another place - for (j=0; j<4; j++) { // antenna port 5,7-14 + for (j=0; j<4; j++) { + PHY_vars_eNB->dlsch_eNB[k][i]->ue_spec_bf_weights[j] = (int32_t **)malloc16(n_tx_phy*sizeof(int32_t*)); + + for (aa=0; aadlsch_eNB[k][i]->ue_spec_bf_weights[j][aa] = (int32_t *)malloc16(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); + ue_spec_bf_weights = PHY_vars_eNB->dlsch_eNB[k][i]->ue_spec_bf_weights[j][aa]; + + for (re=0;reofdm_symbol_size;re++) { + if (n_tx_phy==1 || n_tx_phy==2) + ue_spec_bf_weights[re] = 0x00007fff; + else if (n_tx_phy==4 || n_tx_phy==8) + ue_spec_bf_weights[re] = 0x00007fff>>1; + else if (n_tx_phy==16) + ue_spec_bf_weights[re] = 0x00007fff>>2; + else if (n_tx_phy==64) + ue_spec_bf_weights[re] = 0x00007fff>>4; + } + + } + } ue_spec_bf_weights = PHY_vars_eNB->dlsch_eNB[k][i]->ue_spec_bf_weights[j]; for (aa=0; aanb_antennas_tx; aa++) { - for (re=0;reofdm_symbol_size;re++) { - if (n_tx_phy==1 || n_tx_phy==2) - ue_spec_bf_weights[aa][re] = 0x00007fff; - else if (n_tx_phy==4 || n_tx_phy==8) - ue_spec_bf_weights[aa][re] = 0x00007fff>>1; - else if (n_tx_phy==16) - ue_spec_bf_weights[aa][re] = 0x00007fff>>2; - else if (n_tx_phy==64) - ue_spec_bf_weights[aa][re] = 0x00007fff>>4; - } } - } } PHY_vars_eNB->dlsch_eNB[k][i]->rnti = n_rnti+k; diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c index 985cb6036c..512187a52b 100644 --- a/targets/SIMU/USER/init_lte.c +++ b/targets/SIMU/USER/init_lte.c @@ -53,7 +53,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms, uint8_t abstraction_flag) { - int i,j; + int i,j,layer,aa,re; PHY_VARS_eNB* PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB)); memset(PHY_vars_eNB,0,sizeof(PHY_VARS_eNB)); PHY_vars_eNB->Mod_id=eNB_id; @@ -79,6 +79,18 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms, } else { LOG_D(PHY,"dlsch_eNB[%d][%d] => %p\n",i,j,PHY_vars_eNB->dlsch_eNB[i][j]); PHY_vars_eNB->dlsch_eNB[i][j]->rnti=0; + + for (layer=0; layer<4; layer++) { + PHY_vars_eNB->dlsch_eNB[i][j]->ue_spec_bf_weights[layer] = (int32_t **)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*)); + + for (aa=0; aanb_antennas_tx; aa++) { + PHY_vars_eNB->dlsch_eNB[i][j]->ue_spec_bf_weights[layer][aa] = (int32_t *)malloc16(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); + for (re=0;redlsch_eNB[i][j]->ue_spec_bf_weights[layer][aa][re] = 0x00007fff; + } + } + } + } } From 79e8653f03c1dfadec022922d7a441e2a0d42edd Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Fri, 15 Jul 2016 16:52:08 +0200 Subject: [PATCH 064/132] add read_F.c to openairinterface1/PHY/TOOLS --- openair1/PHY/TOOLS/read_F.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 openair1/PHY/TOOLS/read_F.c diff --git a/openair1/PHY/TOOLS/read_F.c b/openair1/PHY/TOOLS/read_F.c new file mode 100644 index 0000000000..32ade0dfdb --- /dev/null +++ b/openair1/PHY/TOOLS/read_F.c @@ -0,0 +1,24 @@ +#include +#include + +int f_read(char *calibF_fname, int nb_antM, int nb_freq, int16_t (*calibF_mtx)[nb_freq*2]){ + + FILE *calibF_fd; + int i,j,l,calibF_e; + + calibF_fd = fopen(calibF_fname,"r"); + + if (calibF_fd) { + printf("Loading Calibration matrix from %s\n", calibF_fname); + + for(i=0;i Date: Fri, 22 Jul 2016 19:51:24 +0200 Subject: [PATCH 065/132] change the MAX_CARDS to 16 --- targets/ARCH/EXMIMO/DEFS/openair_device.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/targets/ARCH/EXMIMO/DEFS/openair_device.h b/targets/ARCH/EXMIMO/DEFS/openair_device.h index 2be7b7f088..519693461e 100755 --- a/targets/ARCH/EXMIMO/DEFS/openair_device.h +++ b/targets/ARCH/EXMIMO/DEFS/openair_device.h @@ -33,8 +33,8 @@ // Maximum number of concurrently supported cards // -#define MAX_CARDS 8 -#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0}; +#define MAX_CARDS 16 +#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /** PCIe subsystem configuration Space From 987ffdd8a0b6122efca57a652ee8204e738f786a Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 25 Jul 2016 14:25:22 +0200 Subject: [PATCH 066/132] add ue spec channel estimation in UE RX procedure (TM7 works for DLSCH) --- .../lte_dl_bf_channel_estimation.c | 70 ++++++++++++++----- openair1/SCHED/phy_procedures_lte_ue.c | 29 +++++--- 2 files changed, 71 insertions(+), 28 deletions(-) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c index 80df031c41..4d20cfe522 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -32,7 +32,7 @@ #include "defs.h" #include "PHY/defs.h" #include "filt16_32.h" -//#define DEBUG_CH +//#define DEBUG_BF_CH int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, uint8_t eNB_id, @@ -373,19 +373,25 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); multadd_real_vector_complex_scalar(fl,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + printf("symbol=%d,rxF[0]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2; ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); multadd_real_vector_complex_scalar(fm,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[8],rxF[9],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + printf("symbol=%d,rxF[4]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[8],rxF[9],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2; ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); multadd_real_vector_complex_scalar(fr,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[16],rxF[17],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + printf("symbol=%d,rxF[8]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[16],rxF[17],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2; } @@ -447,13 +453,17 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); multadd_real_vector_complex_scalar(fl_dc,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + //printf("symbol=%d,rxF[0]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2;; ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); multadd_real_vector_complex_scalar(fm_dc,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[8],rxF[9],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + //printf("symbol=%d,rxF[4]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[8],rxF[9],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2;; rxF = (short *)&rxdataF[aarx][symbol*(frame_parms->ofdm_symbol_size)]; @@ -461,13 +471,17 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, ch[0] = (short)(((int)pil[0]*rxF[6] - (int)pil[1]*rxF[7])>>15); ch[1] = (short)(((int)pil[0]*rxF[7] + (int)pil[1]*rxF[6])>>15); multadd_real_vector_complex_scalar(fr_dc,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[6],rxF[7],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + //printf("symbol=%d,rxF[3]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[6],rxF[7],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2;; } else { ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); multadd_real_vector_complex_scalar(fl_dc,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + //printf("symbol=%d,rxF[0]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2;; rxF = (short *)&rxdataF[aarx][symbol*(frame_parms->ofdm_symbol_size)]; @@ -475,13 +489,17 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, ch[0] = (short)(((int)pil[0]*rxF[2] - (int)pil[1]*rxF[3])>>15); ch[1] = (short)(((int)pil[0]*rxF[3] + (int)pil[1]*rxF[2])>>15); multadd_real_vector_complex_scalar(fm_dc,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[2],rxF[3],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + //printf("symbol=%d,rxF[1]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[2],rxF[3],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2;; ch[0] = (short)(((int)pil[0]*rxF[10] - (int)pil[1]*rxF[11])>>15); ch[1] = (short)(((int)pil[0]*rxF[11] + (int)pil[1]*rxF[10])>>15); multadd_real_vector_complex_scalar(fr_dc,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[10],rxF[11],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + //printf("symbol=%d,rxF[5]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[10],rxF[11],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2;; } } // rballoc==1 @@ -604,19 +622,25 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, ch[0] = (short)(((int)pil[0]*rxF[0] - (int)pil[1]*rxF[1])>>15); ch[1] = (short)(((int)pil[0]*rxF[1] + (int)pil[1]*rxF[0])>>15); multadd_real_vector_complex_scalar(fl,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + printf("symbol=%d,rxF[0]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[0],rxF[1],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2; ch[0] = (short)(((int)pil[0]*rxF[8] - (int)pil[1]*rxF[9])>>15); ch[1] = (short)(((int)pil[0]*rxF[9] + (int)pil[1]*rxF[8])>>15); multadd_real_vector_complex_scalar(fm,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[8],rxF[9],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + printf("symbol=%d,rxF[4]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[8],rxF[9],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2; ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); multadd_real_vector_complex_scalar(fr,ch,dl_bf_ch,16); - //printf("symbol=%d,rxF[%d]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,pil_offset,rxF[16],rxF[17],pil[0],pil[1],ch[0],ch[1]); +#ifdef DEBUG_BF_CH + printf("symbol=%d,rxF[8]=(%d,%d),pil=(%d,%d),ch=(%d,%d)\n",symbol,rxF[16],rxF[17],pil[0],pil[1],ch[0],ch[1]); +#endif pil+=2; } @@ -641,7 +665,9 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, if (phy_vars_ue->perfect_ce == 0) { dl_bf_ch = (short *)&dl_bf_ch_estimates[aarx][ch_offset]; - //printf("dlsch_bf_ch_est.c:symbol %d, dl_bf_ch (%d,%d)\n",symbol,dl_bf_ch[0],dl_bf_ch[1]); +#ifdef DEBUG_BF_CH + printf("[dlsch_bf_ch_est.c]:symbol %d, dl_bf_ch (%d,%d)\n",symbol,dl_bf_ch[0],dl_bf_ch[1]); +#endif if (phy_vars_ue->high_speed_flag == 0) { multadd_complex_vector_real_scalar(dl_bf_ch, @@ -655,7 +681,9 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, // printf("Interpolating %d->0\n",4-phy_vars_ue->lte_frame_parms.Ncp); // dl_bf_ch_prev = (short *)&dl_bf_ch_estimates[aarx][(4-phy_vars_ue->lte_frame_parms.Ncp)*(frame_parms->ofdm_symbol_size)]; dl_bf_ch_prev = (short *)&dl_bf_ch_estimates[aarx][pilot3*(frame_parms->ofdm_symbol_size)]; - +#ifdef DEBUG_BF_CH + printf("[dlsch_bf_ch_est.c] symbol=%d, dl_bf_ch_prev=(%d,%d), dl_bf_ch=(%d,%d)\n", symbol, dl_bf_ch_prev[0], dl_bf_ch_prev[1], dl_bf_ch[0], dl_bf_ch[1]); +#endif // pilot spacing 5 symbols (1/5,2/5,3/5,4/5 combination) multadd_complex_vector_real_scalar(dl_bf_ch_prev,26214,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),1,frame_parms->ofdm_symbol_size); multadd_complex_vector_real_scalar(dl_bf_ch,6554,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),0,frame_parms->ofdm_symbol_size); @@ -670,6 +698,9 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, multadd_complex_vector_real_scalar(dl_bf_ch,26214,dl_bf_ch-(2*(frame_parms->ofdm_symbol_size)),0,frame_parms->ofdm_symbol_size); } else if (symbol == pilot1) { dl_bf_ch_prev = (short *)&dl_bf_ch_estimates[aarx][pilot0*(frame_parms->ofdm_symbol_size)]; +#ifdef DEBUG_BF_CH + printf("[dlsch_bf_ch_est.c] symbol=%d, dl_bf_ch_prev=(%d,%d), dl_bf_ch=(%d,%d)\n", symbol, dl_bf_ch_prev[0], dl_bf_ch_prev[1], dl_bf_ch[0], dl_bf_ch[1]); +#endif // pilot spacing 3 symbols (1/3,2/3 combination) multadd_complex_vector_real_scalar(dl_bf_ch_prev,21845,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),1,frame_parms->ofdm_symbol_size); @@ -680,6 +711,9 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, } else if (symbol == pilot2) { dl_bf_ch_prev = (short *)&dl_bf_ch_estimates[aarx][pilot1*(frame_parms->ofdm_symbol_size)]; +#ifdef DEBUG_BF_CH + printf("[dlsch_bf_ch_est.c] symbol=%d, dl_bf_ch_prev=(%d,%d), dl_bf_ch=(%d,%d)\n", symbol, dl_bf_ch_prev[0], dl_bf_ch_prev[1], dl_bf_ch[0], dl_bf_ch[1]); +#endif multadd_complex_vector_real_scalar(dl_bf_ch_prev,21845,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),1,frame_parms->ofdm_symbol_size); multadd_complex_vector_real_scalar(dl_bf_ch,10923,dl_bf_ch_prev+(2*(frame_parms->ofdm_symbol_size)),0,frame_parms->ofdm_symbol_size); @@ -707,8 +741,10 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, } } } //aarx - - // printf("[dlsch bf ch est]: dl_bf_estimates[0][600] %d, %d \n",*(short *)&dl_bf_ch_estimates[0][600],*(short*)&phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0][600]); + +#ifdef DEBUG_BF_CH + printf("[dlsch_bf_ch_est.c]: dl_bf_estimates[0][600] %d, %d \n",*(short *)&dl_bf_ch_estimates[0][600],*(short*)&phy_vars_ue->lte_ue_pdsch_vars[eNB_id]->dl_bf_ch_estimates[0][600]); +#endif return(0); diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 36a7f525e3..a4c40036aa 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -2562,16 +2562,6 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac #endif - if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) { - if (phy_vars_ue->transmission_mode[eNB_id]==7) { - if (phy_vars_ue->lte_frame_parms.Ncp==0) { - if (((slot_rx%2)==0 && ((l==3) || (l==6))) || ((slot_rx%2)==1 && ((l==2) || (l==5)))) - lte_dl_bf_channel_estimation(phy_vars_ue,eNB_id,0,slot_rx,5,l+7*(slot_rx%2==1)); - } else { - LOG_E(PHY,"[UE %d]Beamforming channel estimation not supported yet for TM7 extented CP.\n",phy_vars_ue->Mod_id); - } - } - } // process last DLSCH symbols + invoke decoding if (((slot_rx%2)==0) && (l==0)) { // Regular PDSCH @@ -3092,7 +3082,8 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac } - if ((((slot_rx%2)==0) && ((l==pilot1))) || + if ((((slot_rx%2)==0) && (l==pilot1) && (phy_vars_ue->transmission_mode[eNB_id]<7)) || + (((slot_rx%2)==0) && (l==3) && (phy_vars_ue->transmission_mode[eNB_id]==7)) || ((pmch_flag==1)&&(l==1))) { #ifdef DEBUG_PHY_PROC @@ -3114,6 +3105,22 @@ int phy_procedures_UE_RX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstrac #endif } + // TM7 UE specific channel estimation +#ifdef DEBUG_PHY_PROC + LOG_D(PHY,"[UE %d] BF: dlsch->active in subframe %d => %d, l=%d\n",phy_vars_ue->Mod_id,subframe_rx,phy_vars_ue->dlsch_ue[eNB_id][0]->active, l); +#endif + if (phy_vars_ue->dlsch_ue[eNB_id][0]->active == 1) { + if (phy_vars_ue->transmission_mode[eNB_id]==7) { + if (phy_vars_ue->lte_frame_parms.Ncp==0) { + if (((slot_rx%2)==0 && ((l==3) || (l==6))) || ((slot_rx%2)==1 && ((l==2) || (l==5)))) + //LOG_D(PHY,"[UE %d] dlsch->active in subframe %d => %d, l=%d\n",phy_vars_ue->Mod_id,subframe_rx,phy_vars_ue->dlsch_ue[eNB_id][0]->active, l); + lte_dl_bf_channel_estimation(phy_vars_ue,eNB_id,0,slot_rx,5,l+7*(slot_rx%2==1)); + } else { + LOG_E(PHY,"[UE %d]Beamforming channel estimation not supported yet for TM7 extented CP.\n",phy_vars_ue->Mod_id); + } + } + } + if (abstraction_flag==0) { if (((slot_rx%2)==1) && (l==0)) { From e3dbfa3dde100d5c7d3a05b866168101e4231743 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 26 Jul 2016 11:43:10 +0200 Subject: [PATCH 067/132] some cleanup --- openair1/PHY/impl_defs_lte.h | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h index 73974623f7..f61aa2dcc9 100644 --- a/openair1/PHY/impl_defs_lte.h +++ b/openair1/PHY/impl_defs_lte.h @@ -632,19 +632,8 @@ typedef struct { /// - first index: eNB id [0..2] (hard coded) /// - second index: sample [0..samples_per_tti*10[ uint32_t *sync_corr[3]; - /// \brief Holds the cell specific beamforming weights - /// - first index: eNB id [0..2] (hard coded) - /// - second index: cell specific eNB antenna port index, up to 2 logical antenna ports are supported - /// - third index: tx antenna [0..nb_antennas_tx[ - /// - fourth index: sample [0..] - // int32_t **cell_spec_bf_weights[3][2]; - /// \brief Holds the ue specific beamforming weights - /// - first index: eNB id [0..2] (hard coded) - /// - second index: ue specific eNB antenna port index, port5->index0, port7-15->index0-7 - /// - third index: tx antenna [0..nb_antennas_tx[ - /// - fourth index: sample [0..] - // int32_t **ue_spec_bf_weights[3][8]; - /// \brief Holds the ue specific beamforming weights + // int32_t **beam_weights[3][15]; + /// \brief Holds the beamforming weights /// - first index: eNB id [0..2] (hard coded) /// - second index: eNB antenna port index /// - third index: tx antenna [0..nb_antennas_tx[ From fdde582e9208e9c3ab47cfd728f46655cded432c Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 11 Aug 2016 16:29:43 +0200 Subject: [PATCH 068/132] bug fixed in pbch for nb_antennas_tx>1 --- openair1/PHY/LTE_TRANSPORT/pbch.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/pbch.c b/openair1/PHY/LTE_TRANSPORT/pbch.c index cba6a16fa4..3ad974dab6 100755 --- a/openair1/PHY/LTE_TRANSPORT/pbch.c +++ b/openair1/PHY/LTE_TRANSPORT/pbch.c @@ -74,7 +74,7 @@ int allocate_pbch_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, MIMO_mode_t mimo_mode = (frame_parms->mode1_flag==1)?SISO:ALAMOUTI; - uint32_t tti_offset,aa; + uint32_t tti_offset; uint8_t re; int16_t gain_lin_QPSK; int16_t re_off=re_offset; @@ -99,15 +99,11 @@ int allocate_pbch_REs_in_RB(LTE_DL_FRAME_PARMS *frame_parms, *re_allocated = *re_allocated + 1; // printf("%d(%d) : %d,%d => ",tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i - } + ((int16_t*)&txdataF[0][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i *jj = *jj + 1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[1] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} - } + ((int16_t*)&txdataF[0][tti_offset])[1] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} *jj = *jj + 1; } else if (mimo_mode == ALAMOUTI) { From 9f4a849115c6fa90f96ef4243b8a7deeff843520 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Thu, 18 Aug 2016 12:46:02 +0200 Subject: [PATCH 069/132] added prototypes to compute beamforming weights --- cmake_targets/CMakeLists.txt | 1 + openair1/PHY/MODULATION/beamforming.c | 1 - openair1/PHY/MODULATION/compute_bf_weights.c | 54 ++++++++++++++++++++ openair1/PHY/MODULATION/defs.h | 7 +++ openair1/PHY/impl_defs_lte.h | 9 ++++ 5 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 openair1/PHY/MODULATION/compute_bf_weights.c diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 02a6ac5151..1027718d48 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -976,6 +976,7 @@ set(PHY_SRC ${OPENAIR1_DIR}/PHY/MODULATION/slot_fep_ul.c ${OPENAIR1_DIR}/PHY/MODULATION/ul_7_5_kHz.c ${OPENAIR1_DIR}/PHY/MODULATION/beamforming.c + ${OPENAIR1_DIR}/PHY/MODULATION/compute_bf_weights.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/freq_equalization.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_sync_time.c ${OPENAIR1_DIR}/PHY/LTE_ESTIMATION/lte_sync_timefreq.c diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c index 2e38b7cb93..00bb9e5dca 100644 --- a/openair1/PHY/MODULATION/beamforming.c +++ b/openair1/PHY/MODULATION/beamforming.c @@ -120,4 +120,3 @@ int beam_precoding(int32_t **txdataF, } } } - diff --git a/openair1/PHY/MODULATION/compute_bf_weights.c b/openair1/PHY/MODULATION/compute_bf_weights.c new file mode 100644 index 0000000000..620380737c --- /dev/null +++ b/openair1/PHY/MODULATION/compute_bf_weights.c @@ -0,0 +1,54 @@ +#include +#include +#include "PHY/impl_defs_lte.h" + +int f_read(char *calibF_fname, int nb_ant, int nb_freq, int32_t **tdd_calib_coeffs){ + + FILE *calibF_fd; + int i,j,l,calibF_e; + + calibF_fd = fopen(calibF_fname,"r"); + + if (calibF_fd) { + printf("Loading Calibration matrix from %s\n", calibF_fname); + + for(i=0;irx_vars[a].RX_DMA_BUFFER. From 7b114b08dbdf961a195232033de3db511ee3c032 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Thu, 18 Aug 2016 12:48:54 +0200 Subject: [PATCH 070/132] adding functions to compute bf weights to dlsim --- openair1/PHY/LTE_TRANSPORT/defs.h | 2 ++ openair1/PHY/MODULATION/compute_bf_weights.c | 4 ++- openair1/PHY/impl_defs_lte.h | 8 ++---- openair1/SIMULATION/LTE_PHY/dlsim.c | 30 ++++++++++++++++++++ 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/defs.h b/openair1/PHY/LTE_TRANSPORT/defs.h index 8bcf312c3e..e0029be318 100644 --- a/openair1/PHY/LTE_TRANSPORT/defs.h +++ b/openair1/PHY/LTE_TRANSPORT/defs.h @@ -242,6 +242,8 @@ typedef struct { int32_t *txdataF[8]; /// beamforming weights for UE-spec transmission (antenna ports 5 or 7..14), for each codeword, maximum 4 layers? int32_t **ue_spec_bf_weights[4]; + /// dl channel estimates (estimated from ul channel estimates) + int32_t **calib_dl_ch_estimates; /// Allocated RNTI (0 means DLSCH_t is not currently used) uint16_t rnti; /// Active flag for baseband transmitter processing diff --git a/openair1/PHY/MODULATION/compute_bf_weights.c b/openair1/PHY/MODULATION/compute_bf_weights.c index 620380737c..32a91c11f5 100644 --- a/openair1/PHY/MODULATION/compute_bf_weights.c +++ b/openair1/PHY/MODULATION/compute_bf_weights.c @@ -47,8 +47,10 @@ int compute_BF_weights(int32_t **beam_weights, int32_t **calib_dl_ch_estimates, } // temporal test function +/* void main(){ // initialization // compare printf("Hello world!\n"); -} \ No newline at end of file +} +*/ diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h index 9cbff7fdb6..9d075dd9bb 100644 --- a/openair1/PHY/impl_defs_lte.h +++ b/openair1/PHY/impl_defs_lte.h @@ -641,18 +641,16 @@ typedef struct { /// - first index: eNB id [0..2] (hard coded) /// - second index: sample [0..samples_per_tti*10[ uint32_t *sync_corr[3]; - // int32_t **beam_weights[3][15]; /// \brief Holds the beamforming weights /// - first index: eNB id [0..2] (hard coded) - /// - second index: eNB antenna port index + /// - second index: eNB antenna port index (hard coded) /// - third index: tx antenna [0..nb_antennas_tx[ /// - fourth index: sample [0..] int32_t **beam_weights[3][15]; /// \brief Holds the tdd reciprocity calibration coefficients /// - first index: eNB id [0..2] (hard coded) - /// - second index: ue specific eNB antenna port index, port5->index0, port7-15->index0-7 - /// - third index: tx antenna [0..nb_antennas_tx[ - /// - forth index: frenquency [0..] + /// - second index: tx antenna [0..nb_antennas_tx[ + /// - third index: frequency [0..] int32_t **tdd_calib_coeffs[3]; } LTE_eNB_COMMON; diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index dd535064d1..1a34e59f5a 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -991,6 +991,9 @@ int main(int argc, char **argv) PHY_vars_eNB->eNB_UE_stats[1].DL_pmi_single = 0; } + //TODO: allocate memory for calibration matrix and calib_dl_ch_estimates in init_lte.c + //for first tests initialze calibration matrix with idendity + //read_calibration_matrix(calib_fname, nb_ant, nb_freq, PHY_vars_eNB->lte_eNB_common_vars.tdd_calib_coeffs[0]); if (input_fd==NULL) { @@ -2142,6 +2145,32 @@ int main(int argc, char **argv) PMI_FEEDBACK: + //make sure dlsim is called with perfect channel estimation option (for freq_channel) + //fill drs_ch_estimates with data from eNB2UE->chF + for(aa=0; aanb_antenna_ports_eNB; aa++) { + for (aarx=0; aarxnb_antennas_rx; aarx++) { + for (i=0; iN_RB_DL*12; i++) { + for (l=0; lsymbols_per_tti; l++) { + ((int16_t *) PHY_vars_eNB->lte_eNB_pusch_vars[0]->drs_ch_estimates[0][(aa<<1)+aarx])[2*i+(l*frame_parms->ofdm_symbol_size)*2]=(int16_t)(eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP); + //printf("x=%d,AMP=%d\n",eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x,AMP); + ((int16_t *) PHY_vars_eNB->lte_eNB_pusch_vars[0]->drs_ch_estimates[0][(aa<<1)+aarx])[2*i+1+(l*frame_parms->ofdm_symbol_size)*2]=(int16_t)(eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP); + } + } + } + } + + estimate_DLCSI_from_ULCSI(PHY_vars_eNB->dlsch_eNB[0][0]->calib_dl_ch_estimates, + &PHY_vars_eNB->lte_eNB_pusch_vars[0]->drs_ch_estimates[0][0/*position of second DMRS*/], + PHY_vars_eNB->lte_eNB_common_vars.tdd_calib_coeffs[0], + frame_parms->nb_antennas_tx, + frame_parms->N_RB_DL*12); + + compute_BF_weights(PHY_vars_eNB->dlsch_eNB[0][0]->ue_spec_bf_weights[0], + PHY_vars_eNB->dlsch_eNB[0][0]->calib_dl_ch_estimates, + MRT, + frame_parms->nb_antennas_tx, + frame_parms->N_RB_DL*12); + //printf("Trial %d : Round %d, pmi_feedback %d \n",trials,round,pmi_feedback); for (aa=0; aalte_eNB_common_vars.txdataF[eNB_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t)); @@ -3088,6 +3117,7 @@ PMI_FEEDBACK: eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].y*AMP); if (transmission_mode == 7){ + //this should include the BF weights! Will not work for a random channel if (PHY_vars_UE->high_speed_flag==0) { ((int16_t *)PHY_vars_UE->lte_ue_pdsch_vars[0]->dl_bf_ch_estimates[(aa<<1)+aarx])[2*i]=(int16_t)( eNB2UE[round]->chF[aarx+(aa*frame_parms->nb_antennas_rx)][i].x*AMP); From cc6ca6fc122113ef19e89febcfda89a861220c17 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 18 Aug 2016 17:29:03 +0200 Subject: [PATCH 071/132] bug fixed for PSS and SSS generation --- openair1/PHY/LTE_TRANSPORT/pss.c | 4 ++-- openair1/PHY/LTE_TRANSPORT/sss.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/pss.c b/openair1/PHY/LTE_TRANSPORT/pss.c index e2a4c549da..f14f7cf326 100644 --- a/openair1/PHY/LTE_TRANSPORT/pss.c +++ b/openair1/PHY/LTE_TRANSPORT/pss.c @@ -80,12 +80,12 @@ int generate_pss(int32_t **txdataF, return(-1); } - a = (frame_parms->nb_antennas_tx == 1) ? amp: (amp*ONE_OVER_SQRT2_Q15)>>15; + a = (frame_parms->nb_antenna_ports_eNB == 1) ? amp: (amp*ONE_OVER_SQRT2_Q15)>>15; //printf("[PSS] amp=%d, a=%d\n",amp,a); Nsymb = (frame_parms->Ncp==NORMAL)?14:12; - for (aa=0; aanb_antennas_tx; aa++) { + for (aa=0; aanb_antenna_ports_eNB; aa++) { // aa = 0; // The PSS occupies the inner 6 RBs, which start at diff --git a/openair1/PHY/LTE_TRANSPORT/sss.c b/openair1/PHY/LTE_TRANSPORT/sss.c index 34d55daaea..bd38db80d5 100644 --- a/openair1/PHY/LTE_TRANSPORT/sss.c +++ b/openair1/PHY/LTE_TRANSPORT/sss.c @@ -67,10 +67,10 @@ int generate_sss(int32_t **txdataF, Nsymb = (frame_parms->Ncp==NORMAL)?14:12; k = frame_parms->ofdm_symbol_size-3*12+5; - a = (frame_parms->nb_antennas_tx == 1) ? amp : (amp*ONE_OVER_SQRT2_Q15)>>15; + a = (frame_parms->nb_antenna_ports_eNB == 1) ? amp : (amp*ONE_OVER_SQRT2_Q15)>>15; for (i=0; i<62; i++) { - for (aa=0; aanb_antennas_tx; aa++) { + for (aa=0; aanb_antenna_ports_eNB; aa++) { ((int16_t*)txdataF[aa])[2*(slot_offset*Nsymb/2*frame_parms->ofdm_symbol_size + symbol*frame_parms->ofdm_symbol_size + k)] = From e10ed0bec865aeb80ca7e8c3a995a9a73941434f Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 18 Aug 2016 17:30:12 +0200 Subject: [PATCH 072/132] EXMIMO duplex mode always set to FDD --- targets/RT/USER/lte-softmodem.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 8b48148955..5511b4a15f 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -3278,9 +3278,11 @@ int main( int argc, char **argv ) openair0_cfg[card].rx_bw = 1.5e6; } + /* if (frame_parms[0]->frame_type==TDD) openair0_cfg[card].duplex_mode = duplex_mode_TDD; else //FDD + */ openair0_cfg[card].duplex_mode = duplex_mode_FDD; From 0985080287eb84ae08827c3409f2ff22041c99dd Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 18 Aug 2016 17:34:25 +0200 Subject: [PATCH 073/132] add tm7 tdd config file --- openair1/PHY/INIT/lte_parms.c | 1 + .../GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/INIT/lte_parms.c b/openair1/PHY/INIT/lte_parms.c index fa0e731af9..7930549f67 100644 --- a/openair1/PHY/INIT/lte_parms.c +++ b/openair1/PHY/INIT/lte_parms.c @@ -191,6 +191,7 @@ void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms) printf("frame_parms->tdd_config=%d\n",frame_parms->tdd_config); printf("frame_parms->tdd_config_S=%d\n",frame_parms->tdd_config_S); printf("frame_parms->mode1_flag=%d\n",frame_parms->mode1_flag); + printf("frame_parms->nb_antenna_ports_eNB=%d\n",frame_parms->nb_antenna_ports_eNB); printf("frame_parms->nb_antennas_tx=%d\n",frame_parms->nb_antennas_tx); printf("frame_parms->nb_antennas_rx=%d\n",frame_parms->nb_antennas_rx); printf("frame_parms->ofdm_symbol_size=%d\n",frame_parms->ofdm_symbol_size); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf index deff3db9dd..f9b765d1e0 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf @@ -33,8 +33,9 @@ eNBs = Nid_cell = 0; N_RB_DL = 25; Nid_cell_mbsfn = 0; - nb_antennas_tx = 4; - nb_antennas_rx = 4; + nb_antenna_ports = 1; + nb_antennas_tx = 1; + nb_antennas_rx = 1; tx_gain = 10; //25; rx_gain = 10; //20; prach_root = 0; @@ -97,6 +98,8 @@ eNBs = ue_TimersAndConstants_t311 = 10000; ue_TimersAndConstants_n310 = 20; ue_TimersAndConstants_n311 = 1; + + ue_TransmissionMode = 7; } ); @@ -152,7 +155,7 @@ eNBs = { global_log_level ="info"; global_log_verbosity ="medium"; - hw_log_level ="debug"; + hw_log_level ="info"; hw_log_verbosity ="medium"; phy_log_level ="info"; phy_log_verbosity ="medium"; From 1cbb2c5caa169c26e8d99942be60f1ea5841ac68 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 18 Aug 2016 19:08:51 +0200 Subject: [PATCH 074/132] memory allocation for calibration coefficients and dlsch ue spec bf weight --- openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 20 +++++++++++++++++++- openair1/SIMULATION/LTE_PHY/dlsim.c | 5 +---- targets/SIMU/USER/init_lte.c | 12 ------------ 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index 48498a4873..9d7f5597cf 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -123,7 +123,8 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_ { LTE_eNB_DLSCH_t *dlsch; - unsigned char exit_flag = 0,i,j,r,aa; + unsigned char exit_flag = 0,i,j,r,aa,layer; + int re; unsigned char bw_scaling =1; uint8_t nb_antennas_tx = frame_parms->nb_antennas_tx; @@ -154,6 +155,23 @@ LTE_eNB_DLSCH_t *new_eNB_dlsch(unsigned char Kmimo,unsigned char Mdlharq,uint32_ dlsch->Mlimit = 4; dlsch->Nsoft = Nsoft; + for (layer=0; layer<4; layer++) { + dlsch->ue_spec_bf_weights[layer] = (int32_t**)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*)); + + for (aa=0; aanb_antennas_tx; aa++) { + dlsch->ue_spec_bf_weights[layer][aa] = (int32_t *)malloc16(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); + for (re=0;reue_spec_bf_weights[layer][aa][re] = 0x00007fff; + } + } + } + + dlsch->calib_dl_ch_estimates = (int32_t**)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*)); + for (aa=0; aanb_antennas_tx; aa++) { + dlsch->calib_dl_ch_estimates[aa] = (int32_t *)malloc16(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); + + } + for (i=0; i<10; i++) dlsch->harq_ids[i] = Mdlharq; diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 1a34e59f5a..294dbf3b44 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -934,13 +934,10 @@ int main(int argc, char **argv) } else { // this initilisation may should be moved to another place for (j=0; j<4; j++) { - PHY_vars_eNB->dlsch_eNB[k][i]->ue_spec_bf_weights[j] = (int32_t **)malloc16(n_tx_phy*sizeof(int32_t*)); - for (aa=0; aadlsch_eNB[k][i]->ue_spec_bf_weights[j][aa] = (int32_t *)malloc16(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); ue_spec_bf_weights = PHY_vars_eNB->dlsch_eNB[k][i]->ue_spec_bf_weights[j][aa]; - for (re=0;reofdm_symbol_size;re++) { + for (re=0;re %p\n",i,j,PHY_vars_eNB->dlsch_eNB[i][j]); PHY_vars_eNB->dlsch_eNB[i][j]->rnti=0; - - for (layer=0; layer<4; layer++) { - PHY_vars_eNB->dlsch_eNB[i][j]->ue_spec_bf_weights[layer] = (int32_t **)malloc16(frame_parms->nb_antennas_tx*sizeof(int32_t*)); - - for (aa=0; aanb_antennas_tx; aa++) { - PHY_vars_eNB->dlsch_eNB[i][j]->ue_spec_bf_weights[layer][aa] = (int32_t *)malloc16(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); - for (re=0;redlsch_eNB[i][j]->ue_spec_bf_weights[layer][aa][re] = 0x00007fff; - } - } - } - } } From bc9c4cfebc0c904a925b02984f0cc8c0c4e3aeaa Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 22 Aug 2016 10:33:43 +0200 Subject: [PATCH 075/132] do_OFDM_mod_rt to perform on each symbol --- targets/RT/USER/lte-softmodem.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 5511b4a15f..cab7e15b27 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -962,7 +962,21 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) ((subframe_select(&phy_vars_eNB->lte_frame_parms,subframe)==SF_S))) { // LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot); + do_OFDM_mod_l(&phy_vars_eNB->lte_eNB_common_vars, + 0, + subframe<<1, + &phy_vars_eNB->lte_frame_parms); + + // if S-subframe generate first slot only + if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_DL) { + do_OFDM_mod_l(&phy_vars_eNB->lte_eNB_common_vars, + 0, + 1+(subframe<<1), + &phy_vars_eNB->lte_frame_parms); + } + +/* for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { if (phy_vars_eNB->lte_frame_parms.Ncp == EXTENDED) { PHY_ofdm_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F], @@ -989,7 +1003,9 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) 7, &(phy_vars_eNB->lte_frame_parms)); } + } */ + for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { // if S-subframe generate first slot only if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_S) len = phy_vars_eNB->lte_frame_parms.samples_per_tti>>1; @@ -1012,9 +1028,13 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti)) tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti; - ((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0] = ((short*)dummy_tx_b)[2*i]<lte_eNB_common_vars.txdata[0][aa][tx_offset])[0] = ((short*)dummy_tx_b)[2*i]<lte_eNB_common_vars.txdata[0][aa][tx_offset])[1] = ((short*)dummy_tx_b)[2*i+1]<lte_eNB_common_vars.txdata[0][aa][tx_offset])[1] = ((short*)dummy_tx_b)[2*i+1]<lte_eNB_common_vars.txdata[0][aa][tx_offset])[0] = ((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0]<lte_eNB_common_vars.txdata[0][aa][tx_offset])[1] = ((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1]<lte_frame_parms,subframe) == SF_S) { From f277acfef5f8ab68765c0fbe81c24e14073ac090 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 22 Aug 2016 10:35:11 +0200 Subject: [PATCH 076/132] remove num_pdcch_symb from paramters of dp_OFDM_mod_l --- openair1/PHY/MODULATION/defs.h | 2 +- openair1/PHY/MODULATION/ofdm_mod.c | 14 +++++++++----- openair1/SCHED/phy_procedures_lte_eNb.c | 10 ++-------- openair1/SIMULATION/LTE_PHY/dlsim.c | 6 ++---- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/openair1/PHY/MODULATION/defs.h b/openair1/PHY/MODULATION/defs.h index 597d433df8..92d4988f77 100644 --- a/openair1/PHY/MODULATION/defs.h +++ b/openair1/PHY/MODULATION/defs.h @@ -89,7 +89,7 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA void do_OFDM_mod(int32_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms); -void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms, uint8_t num_pdcch_symbols); +void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms); void remove_7_5_kHz(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe); diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 1f7aeb533a..3139a7bc08 100755 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -291,19 +291,17 @@ void do_OFDM_mod(int32_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t ne } // OFDM modulation for each symbol -void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms, uint8_t num_pdcch_symbols) +void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms) { - int aa, l, slot_offset, slot_offset_F; - int8_t UE_id=0; + int aa, l, slot_offset; int32_t **txdataF = eNB_common_vars->txdataF[eNB_id]; int32_t **txdataF_BF = eNB_common_vars->txdataF_BF[eNB_id]; int32_t **txdata = eNB_common_vars->txdata[eNB_id]; - //slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1); - // printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc()); + //printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc()); for (l=0; lsymbols_per_tti>>1; l++) { //printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); @@ -312,6 +310,8 @@ void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_sl for (aa=0; aanb_antennas_tx; aa++) { + //PMCH case not implemented... + if (frame_parms->Ncp == 1) PHY_ofdm_mod(txdataF_BF[aa], // input &txdata[aa][slot_offset+l*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES], // output @@ -335,6 +335,10 @@ void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_sl 1, // number of symbols frame_parms->nb_prefix_samples, // number of prefix samples CYCLIC_PREFIX); + + /* printf("txdata[%d][%d]=%d\n",aa, + slot_offset+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(l-1)*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES, + &txdata[aa][slot_offset+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(l-1)*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES]);*/ } } } diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 3c2b1bdf17..523e54c448 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1649,27 +1649,21 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e phy_procedures_emos_eNB_TX(subframe, phy_vars_eNB); #endif - //cell-specific beamforming - #if !(defined(EXMIMO) || defined(OAI_USRP) || defined (CPRIGW)) if (abstraction_flag==0) { start_meas(&phy_vars_eNB->ofdm_mod_stats); - //do_OFDM_mod (without l) ? - do_OFDM_mod_l(&phy_vars_eNB->lte_eNB_common_vars, 0, subframe<<1, - &phy_vars_eNB->lte_frame_parms, - num_pdcch_symbols); + &phy_vars_eNB->lte_frame_parms); do_OFDM_mod_l(&phy_vars_eNB->lte_eNB_common_vars, 0, 1+(subframe<<1), - &phy_vars_eNB->lte_frame_parms, - num_pdcch_symbols); + &phy_vars_eNB->lte_frame_parms); stop_meas(&phy_vars_eNB->ofdm_mod_stats); } diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 294dbf3b44..0ea247f440 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -2835,14 +2835,12 @@ PMI_FEEDBACK: do_OFDM_mod_l(&PHY_vars_eNB->lte_eNB_common_vars, eNB_id, (subframe*2), - &PHY_vars_eNB->lte_frame_parms, - num_pdcch_symbols); + &PHY_vars_eNB->lte_frame_parms); do_OFDM_mod_l(&PHY_vars_eNB->lte_eNB_common_vars, eNB_id, (subframe*2)+1, - &PHY_vars_eNB->lte_frame_parms, - num_pdcch_symbols); + &PHY_vars_eNB->lte_frame_parms); stop_meas(&PHY_vars_eNB->ofdm_mod_stats); stop_meas(&PHY_vars_eNB->phy_proc_tx); From fd068005dfec6e15524ca4fd37d2440cb2523159 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 22 Aug 2016 10:36:16 +0200 Subject: [PATCH 077/132] cosmetic changes --- openair1/PHY/MODULATION/beamforming.c | 31 ++++++++++--------- .../CONF/enb.band38.tm7.exmimo2.conf | 4 +-- .../CONF/enb.band7.tm7.exmimo2.conf | 6 ++-- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c index 00bb9e5dca..3aa7810aec 100644 --- a/openair1/PHY/MODULATION/beamforming.c +++ b/openair1/PHY/MODULATION/beamforming.c @@ -72,15 +72,15 @@ int beam_precoding(int32_t **txdataF, ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[0][aa][re])[0])>>15); - //printf("beamforming.c:txdata[%d][%d]=%d+j%d, beam_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", - // p,slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, - // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], - // ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], - // p,aa,re, - // ((int16_t*)&beam_weights[p][aa][re])[0],((int16_t*)&beam_weights[p][aa][re])[1], - // aa,re, - // ((int16_t*)&txdataF_BF[aa][re])[0], - // ((int16_t*)&txdataF_BF[aa][re])[1]); + /*printf("beamforming.c:txdata[%d][%d]=%d+j%d, beam_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", + p,slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, + ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], + ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], + p,aa,re, + ((int16_t*)&beam_weights[p][aa][re])[0],((int16_t*)&beam_weights[p][aa][re])[1], + aa,re, + ((int16_t*)&txdataF_BF[aa][re])[0], + ((int16_t*)&txdataF_BF[aa][re])[1]); */ } } @@ -90,9 +90,9 @@ int beam_precoding(int32_t **txdataF, ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[5][aa][re])[0])>>15); ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[5][aa][re])[1])>>15); ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[5][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[5][aa][re])[0])>>15); -/* - printf("beamforming.c:txdata[5][%d]=%d+j%d, beam_weights[5][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[5][aa][re])[0])>>15); + + /* printf("beamforming.c:txdata[5][%d]=%d+j%d, beam_weights[5][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, ((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], ((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], @@ -101,8 +101,8 @@ int beam_precoding(int32_t **txdataF, ((int16_t*)&beam_weights[5][aa][re])[1], aa,re, ((int16_t*)&txdataF_BF[aa][re])[0], - ((int16_t*)&txdataF_BF[aa][re])[1]); -*/ + ((int16_t*)&txdataF_BF[aa][re])[1]); */ + } } @@ -119,4 +119,7 @@ int beam_precoding(int32_t **txdataF, } } } + +return 0; + } diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf index f9b765d1e0..6209fbe150 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band38.tm7.exmimo2.conf @@ -34,8 +34,8 @@ eNBs = N_RB_DL = 25; Nid_cell_mbsfn = 0; nb_antenna_ports = 1; - nb_antennas_tx = 1; - nb_antennas_rx = 1; + nb_antennas_tx = 3; + nb_antennas_rx = 3; tx_gain = 10; //25; rx_gain = 10; //20; prach_root = 0; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf index dedf4797bc..d26ebbe735 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf @@ -34,8 +34,8 @@ eNBs = N_RB_DL = 25; Nid_cell_mbsfn = 0; nb_antenna_ports = 1; - nb_antennas_tx = 1; - nb_antennas_rx = 1; + nb_antennas_tx = 2; + nb_antennas_rx = 2; tx_gain = 25; rx_gain = 20; prach_root = 0; @@ -153,7 +153,7 @@ eNBs = log_config : { - global_log_level ="debug"; + global_log_level ="info"; global_log_verbosity ="medium"; hw_log_level ="info"; hw_log_verbosity ="medium"; From 394c4cab6ad9c9944aae2b8ca9785b7b971cfd71 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 22 Aug 2016 20:06:13 +0200 Subject: [PATCH 078/132] antenna number bug fixed --- targets/SIMU/USER/init_lte.c | 3 +-- targets/SIMU/USER/oaisim_functions.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/targets/SIMU/USER/init_lte.c b/targets/SIMU/USER/init_lte.c index 4a71b0aad9..e90605dcc8 100644 --- a/targets/SIMU/USER/init_lte.c +++ b/targets/SIMU/USER/init_lte.c @@ -291,8 +291,7 @@ void init_lte_vars(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs], for (CC_id=0; CC_idnb_antennas_tx = 1; - (frame_parms[CC_id])->nb_antennas_rx = nb_antennas_rx; - + (frame_parms[CC_id])->nb_antennas_rx = 1; // UE rx number hard coded PHY_vars_UE_g[UE_id][CC_id] = init_lte_UE(frame_parms[CC_id], UE_id,abstraction_flag); PHY_vars_UE_g[UE_id][CC_id]->Mod_id=UE_id; diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index e96881d2d3..89921d1151 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -971,7 +971,7 @@ void init_openair1(void) cooperation_flag, enb_properties->properties[0]->nb_antenna_ports[CC_id], abstraction_flag, - enb_properties->properties[0]->nb_antennas_tx[CC_id], + enb_properties->properties[0]->nb_antennas_rx[CC_id], enb_properties->properties[0]->nb_antennas_tx[CC_id], oai_emulation.info.eMBMS_active_state); } From fc1e26d07409162521a2d1e4e92317123032d830 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 23 Aug 2016 18:21:45 +0200 Subject: [PATCH 079/132] add VCD by function name for beam precoding and do_ofdm_l --- openair1/PHY/MODULATION/ofdm_mod.c | 8 +++++--- openair1/SIMULATION/LTE_PHY/dlsim.c | 4 ---- openair2/UTIL/LOG/vcd_signal_dumper.c | 2 ++ openair2/UTIL/LOG/vcd_signal_dumper.h | 2 ++ targets/RT/USER/lte-softmodem.c | 7 ++++++- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 3139a7bc08..44ca2dff9f 100755 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -38,6 +38,7 @@ This section deals with basic functions for OFDM Modulation. #include "PHY/defs.h" #include "UTIL/LOG/log.h" +#include "UTIL/LOG/vcd_signal_dumper.h" //static short temp2[2048*4] __attribute__((aligned(16))); @@ -306,7 +307,9 @@ void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_sl //printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_BEAM_PRECODING,1); beam_precoding(txdataF,txdataF_BF,frame_parms,eNB_common_vars->beam_weights[eNB_id],next_slot,l); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_BEAM_PRECODING,0); for (aa=0; aanb_antennas_tx; aa++) { @@ -336,9 +339,8 @@ void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_sl frame_parms->nb_prefix_samples, // number of prefix samples CYCLIC_PREFIX); - /* printf("txdata[%d][%d]=%d\n",aa, - slot_offset+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(l-1)*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES, - &txdata[aa][slot_offset+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(l-1)*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES]);*/ + /* printf("txdata[%d][%d]=%d\n",aa,slot_offset+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(l-1)*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES,txdata[aa][slot_offset+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(l-1)*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES]); + * */ } } } diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 0ea247f440..78308ade0d 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -951,10 +951,6 @@ int main(int argc, char **argv) } } - ue_spec_bf_weights = PHY_vars_eNB->dlsch_eNB[k][i]->ue_spec_bf_weights[j]; - - for (aa=0; aanb_antennas_tx; aa++) { - } } PHY_vars_eNB->dlsch_eNB[k][i]->rnti = n_rnti+k; diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c index 78e481f3d6..4e38aac6eb 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.c +++ b/openair2/UTIL/LOG/vcd_signal_dumper.c @@ -275,6 +275,8 @@ const char* eurecomFunctionsNames[] = { "phy_eNB_dlsch_modulation", "phy_eNB_dlsch_encoding", "phy_eNB_dlsch_scrambling", + "phy_eNB_beam_precoding", + "phy_eNB_ofdm_mod_l", /* MAC signals */ "macxface_macphy_init", diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h index 0592e78b50..4bc11a281c 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.h +++ b/openair2/UTIL/LOG/vcd_signal_dumper.h @@ -249,6 +249,8 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_MODULATION, VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ENCODING, VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_SCRAMBLING, + VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_BEAM_PRECODING, + VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_OFDM_MODULATION, /* MAC signals */ VCD_SIGNAL_DUMPER_FUNCTIONS_MACPHY_INIT, diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index cab7e15b27..bd7d41610e 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -958,10 +958,13 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) slot_offset = subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti; + if ((subframe_select(&phy_vars_eNB->lte_frame_parms,subframe)==SF_DL)|| ((subframe_select(&phy_vars_eNB->lte_frame_parms,subframe)==SF_S))) { // LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_OFDM_MODULATION,1); + do_OFDM_mod_l(&phy_vars_eNB->lte_eNB_common_vars, 0, subframe<<1, @@ -974,6 +977,8 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) 1+(subframe<<1), &phy_vars_eNB->lte_frame_parms); } + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_OFDM_MODULATION,0); /* @@ -1289,7 +1294,7 @@ static void* eNB_thread_tx( void* param ) break; } } - + do_OFDM_mod_rt( proc->subframe_tx, PHY_vars_eNB_g[0][proc->CC_id] ); /* short *txdata = (short*)&PHY_vars_eNB_g[0][proc->CC_id]->lte_eNB_common_vars.txdata[0][0][proc->subframe_tx*PHY_vars_eNB_g[0][proc->CC_id]->lte_frame_parms.samples_per_tti]; From 1f8c702fbb1ec9bf782ad9ed07aa6ec7c66217b6 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 25 Aug 2016 17:44:16 +0200 Subject: [PATCH 080/132] support more >1 EXMIMO2 cards --- openair1/PHY/impl_defs_lte.h | 8 ++--- targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c | 10 ++++-- .../ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c | 31 +++++++++-------- targets/RT/USER/lte-softmodem.c | 33 +++++++++++-------- 4 files changed, 48 insertions(+), 34 deletions(-) diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h index 9d075dd9bb..ab8abd15de 100644 --- a/openair1/PHY/impl_defs_lte.h +++ b/openair1/PHY/impl_defs_lte.h @@ -1040,13 +1040,13 @@ typedef struct { /// first index: ? [0..1023] (hard coded) int16_t *prachF; /// \brief ?. - /// first index: rx antenna [0..3] (hard coded) \note Hard coded array size indexed by \c nb_antennas_rx. + /// first index: rx antenna [0..63] (hard coded) \note Hard coded array size indexed by \c nb_antennas_rx. /// second index: ? [0..ofdm_symbol_size*12[ - int16_t *rxsigF[4]; + int16_t *rxsigF[64]; /// \brief local buffer to compute prach_ifft (necessary in case of multiple CCs) - /// first index: rx antenna [0..3] (hard coded) \note Hard coded array size indexed by \c nb_antennas_rx. + /// first index: rx antenna [0..63] (hard coded) \note Hard coded array size indexed by \c nb_antennas_rx. /// second index: ? [0..2047] (hard coded) - int16_t *prach_ifft[4]; + int16_t *prach_ifft[64]; } LTE_eNB_PRACH; typedef struct { diff --git a/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c b/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c index 4427f4c8af..8153a44164 100755 --- a/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c +++ b/targets/ARCH/EXMIMO/DRIVER/eurecom/fileops.c @@ -277,14 +277,18 @@ int openair_device_ioctl(struct inode *inode,struct file *filp, unsigned int cmd printk("[openair][IOCTL] : openair_DUMP_CONFIG(%d): exmimo_pci_kvirt[%d].exmimo_config_ptr = %p (phys %08x)\n", (int)arg, (int)arg, exmimo_pci_kvirt[(int)arg].exmimo_config_ptr, p_exmimo_pci_phys[(int)arg]->exmimo_config_ptr); - /*printk("EXMIMO_CONFIG: freq0 %d Hz, freq1 %d Hz, freqtx0 %d Hz, freqtx1 %d Hz, \nRX gain0 %d dB, RX Gain1 %d dB\n", + printk("[openair][IOCTL]: EXMIMO_CONFIG: freq0 %u Hz, freq1 %u Hz, freqtx0 %u Hz, freqtx1 %u Hz, \nRX gain0 %d dB, RX Gain1 %d dB, autocal (%d,%d,%d,%d)\n", exmimo_pci_kvirt[(int)arg].exmimo_config_ptr->rf.rf_freq_rx[0], exmimo_pci_kvirt[(int)arg].exmimo_config_ptr->rf.rf_freq_rx[1], exmimo_pci_kvirt[(int)arg].exmimo_config_ptr->rf.rf_freq_tx[0], exmimo_pci_kvirt[(int)arg].exmimo_config_ptr->rf.rf_freq_tx[1], exmimo_pci_kvirt[(int)arg].exmimo_config_ptr->rf.rx_gain[0][0], - exmimo_pci_kvirt[(int)arg].exmimo_config_ptr->rf.rx_gain[1][0]); - */ + exmimo_pci_kvirt[(int)arg].exmimo_config_ptr->rf.rx_gain[1][0], + exmimo_pci_kvirt[(int)arg].exmimo_config_ptr->rf.do_autocal[0], + exmimo_pci_kvirt[(int)arg].exmimo_config_ptr->rf.do_autocal[1], + exmimo_pci_kvirt[(int)arg].exmimo_config_ptr->rf.do_autocal[2], + exmimo_pci_kvirt[(int)arg].exmimo_config_ptr->rf.do_autocal[3]); + exmimo_send_pccmd((int)arg, EXMIMO_CONFIG); diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c index 427cd47be8..c4d85d3d1a 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c @@ -252,7 +252,7 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) { // Initialize card // exmimo_config_t *p_exmimo_config; exmimo_id_t *p_exmimo_id; - int ret; + int ret, card; ret = openair0_open(); @@ -276,15 +276,17 @@ int device_init(openair0_device *device, openair0_config_t *openair0_cfg) { printf ("Detected %d number of cards, %d number of antennas.\n", openair0_num_detected_cards, openair0_num_antennas[0]); } - // p_exmimo_config = openair0_exmimo_pci[0].exmimo_config_ptr; - p_exmimo_id = openair0_exmimo_pci[0].exmimo_id_ptr; + for (card=0; cardboard_exmimoversion, p_exmimo_id->board_hwrev, p_exmimo_id->board_swrev); + printf("Card %d: ExpressMIMO %d, HW Rev %d, SW Rev 0x%d\n", card, p_exmimo_id->board_exmimoversion, p_exmimo_id->board_hwrev, p_exmimo_id->board_swrev); - // check if the software matches firmware - if (p_exmimo_id->board_swrev!=BOARD_SWREV_CNTL2) { - printf("Software revision %d and firmware revision %d do not match. Please update either the firmware or the software!\n",BOARD_SWREV_CNTL2,p_exmimo_id->board_swrev); - return(-1); + // check if the software matches firmware + if (p_exmimo_id->board_swrev!=BOARD_SWREV_CNTL2) { + printf("Software revision %d and firmware revision %d do not match. Please update either the firmware or the software!\n",BOARD_SWREV_CNTL2,p_exmimo_id->board_swrev); + return(-1); + } } device->type = EXMIMO_DEV; @@ -361,11 +363,17 @@ int openair0_config(openair0_config_t *openair0_cfg, int UE_flag) #endif for (ant=0; ant<4; ant++) { + p_exmimo_config->rf.rf_freq_rx[ant] = 0; + p_exmimo_config->rf.rf_freq_tx[ant] = 0; + p_exmimo_config->rf.rf_mode[ant] = 0; + p_exmimo_config->rf.rx_gain[ant][0] = 0; + p_exmimo_config->rf.tx_gain[ant][0] = 0; + if (openair0_cfg[card].rx_freq[ant] || openair0_cfg[card].tx_freq[ant]) { ACTIVE_RF += (1<rf.rf_mode[ant] = RF_MODE_BASE; p_exmimo_config->rf.do_autocal[ant] = 1;//openair0_cfg[card].autocal[ant]; - printf("card %d, antenna %d, autocal %d\n",card,ant,openair0_cfg[card].autocal[ant]); + printf("card %d, antenna %d, autocal %d\n",card,ant,p_exmimo_config->rf.do_autocal[ant]); } if (openair0_cfg[card].tx_freq[ant]) { @@ -396,10 +404,7 @@ int openair0_config(openair0_config_t *openair0_cfg, int UE_flag) p_exmimo_config->rf.rf_mode[ant] += LNAByp; break; } - } else { - p_exmimo_config->rf.rf_mode[ant] = 0; - p_exmimo_config->rf.do_autocal[ant] = 0; - } + } p_exmimo_config->rf.rf_local[ant] = rf_local[ant]; p_exmimo_config->rf.rf_rxdc[ant] = rf_rxdc[ant]; diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index bd7d41610e..a5dd06e221 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -2926,7 +2926,8 @@ int main( int argc, char **argv ) if (rf_config_file[0] == '\0') openair0_cfg[0].configFilename = NULL; else - openair0_cfg[0].configFilename = rf_config_file; + for (card=0; cardnb_antennas_rx; i++) { - printf("Mapping eNB CC_id %d, rx_ant %d, freq %u on card %d, chain %d\n",CC_id,i,downlink_frequency[CC_id][i]+uplink_frequency_offset[CC_id][i],rf_map[CC_id].card,rf_map[CC_id].chain+i); + card = i/4; + ant = i%4; + printf("Mapping eNB CC_id %d, rx_ant %d, freq %u on card %d, chain %d\n",CC_id,i,downlink_frequency[CC_id][ant]+uplink_frequency_offset[CC_id][ant],rf_map[CC_id].card+card, rf_map[CC_id].chain+ant); free(phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i]); - phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i] = (int32_t*) openair0_exmimo_pci[rf_map[CC_id].card].adc_head[rf_map[CC_id].chain+i]; + phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i] = (int32_t*) openair0_exmimo_pci[rf_map[CC_id].card+card].adc_head[rf_map[CC_id].chain+ant]; - if (openair0_cfg[rf_map[CC_id].card].rx_freq[rf_map[CC_id].chain+i]) { + if (openair0_cfg[rf_map[CC_id].card+card].rx_freq[rf_map[CC_id].chain+ant]) { printf("Error with rf_map! A channel has already been allocated!\n"); return(-1); } else { - openair0_cfg[rf_map[CC_id].card].rx_freq[rf_map[CC_id].chain+i] = downlink_frequency[CC_id][i]+uplink_frequency_offset[CC_id][i]; - openair0_cfg[rf_map[CC_id].card].rx_gain[rf_map[CC_id].chain+i] = rx_gain[CC_id][i]; - openair0_cfg[rf_map[CC_id].card].rx_num_channels++; + openair0_cfg[rf_map[CC_id].card+card].rx_freq[rf_map[CC_id].chain+ant] = downlink_frequency[CC_id][ant]+uplink_frequency_offset[CC_id][ant]; + openair0_cfg[rf_map[CC_id].card+card].rx_gain[rf_map[CC_id].chain+ant] = rx_gain[CC_id][ant]; + openair0_cfg[rf_map[CC_id].card+card].rx_num_channels++; } printf("rxdata[%d] @ %p\n",i,phy_vars_eNB[CC_id]->lte_eNB_common_vars.rxdata[0][i]); @@ -3982,17 +3985,19 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c } for (i=0; inb_antennas_tx; i++) { - printf("Mapping eNB CC_id %d, tx_ant %d, freq %u on card %d, chain %d\n",CC_id,i,downlink_frequency[CC_id][i],rf_map[CC_id].card,rf_map[CC_id].chain+i); + card = i/4; + ant = i%4; + printf("Mapping eNB CC_id %d, tx_ant %d, freq %u on card %d chain %d\n",CC_id,i,downlink_frequency[CC_id][ant],rf_map[CC_id].card+card,rf_map[CC_id].chain+ant); free(phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i]); - phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i] = (int32_t*) openair0_exmimo_pci[rf_map[CC_id].card].dac_head[rf_map[CC_id].chain+i]; + phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i] = (int32_t*) openair0_exmimo_pci[rf_map[CC_id].card+card].dac_head[rf_map[CC_id].chain+ant]; - if (openair0_cfg[rf_map[CC_id].card].tx_freq[rf_map[CC_id].chain+i]) { + if (openair0_cfg[rf_map[CC_id].card+card].tx_freq[rf_map[CC_id].chain+ant]) { printf("Error with rf_map! A channel has already been allocated!\n"); return(-1); } else { - openair0_cfg[rf_map[CC_id].card].tx_freq[rf_map[CC_id].chain+i] = downlink_frequency[CC_id][i]; - openair0_cfg[rf_map[CC_id].card].tx_gain[rf_map[CC_id].chain+i] = tx_gain[CC_id][i]; - openair0_cfg[rf_map[CC_id].card].tx_num_channels++; + openair0_cfg[rf_map[CC_id].card+card].tx_freq[rf_map[CC_id].chain+ant] = downlink_frequency[CC_id][ant]; + openair0_cfg[rf_map[CC_id].card+card].tx_gain[rf_map[CC_id].chain+ant] = tx_gain[CC_id][ant]; + openair0_cfg[rf_map[CC_id].card+card].tx_num_channels++; } printf("txdata[%d] @ %p\n",i,phy_vars_eNB[CC_id]->lte_eNB_common_vars.txdata[0][i]); From eac26b014fcc81c2676c3a754412e6f8e8f503cf Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Tue, 30 Aug 2016 15:59:24 +0200 Subject: [PATCH 081/132] enabling deadline scheduler by default for EXMIMO2 --- cmake_targets/build_oai | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 935c57f0f1..625e2fcf5e 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -333,7 +333,7 @@ function main() { #By default: EXMIMO: enable if [ "$FORCE_DEADLINE_SCHEDULER_FLAG_USER" = "" ]; then if [ "$HW" = "EXMIMO" ] ; then - DEADLINE_SCHEDULER_FLAG_USER="False" + DEADLINE_SCHEDULER_FLAG_USER="True" elif [ "$HW" = "ETHERNET" ] ; then DEADLINE_SCHEDULER_FLAG_USER="True" elif [ "$HW" = "OAI_USRP" ] ; then From cf672ca01684cece6c557a5d48803c2e82654f29 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 30 Aug 2016 17:11:39 +0200 Subject: [PATCH 082/132] temporary fix for exmimo2 build (no longer requires libboost) to be tested with USRP --- cmake_targets/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index a537f17e31..bfd2db6199 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -556,7 +556,7 @@ elseif (${RF_BOARD} STREQUAL "OAI_USRP") set(HW_SOURCE ${HW_SOURCE} ${OPENAIR_TARGETS}/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp) LINK_DIRECTORIES("/opt/lib") - set(option_HW_lib "-luhd -rdynamic -ldl") + set(option_HW_lib "-luhd -rdynamic -ldl -lboost_system") elseif (${RF_BOARD} STREQUAL "OAI_BLADERF") include_directories("${OPENAIR_TARGETS}/ARCH/BLADERF/USERSPACE/LIB/") @@ -1644,7 +1644,7 @@ target_link_libraries (lte-softmodem -ldl target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES}) target_link_libraries (lte-softmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_HW_lib} ${option_TP_lib} ${XFORMS_LIBRARIES} ) -target_link_libraries (lte-softmodem ${LIBBOOST_LIBRARIES} -lboost_system) #Added manually as it is not found for some reason for USRP +#target_link_libraries (lte-softmodem ${LIBBOOST_LIBRARIES} -lboost_system) #Added manually as it is not found for some reason for USRP target_link_libraries (lte-softmodem ${LIB_LMS_LIBRARIES}) target_link_libraries (lte-softmodem ${T_LIB}) @@ -1680,7 +1680,7 @@ target_link_libraries (lte-softmodem-nos1 target_link_libraries (lte-softmodem-nos1 ${LIBXML2_LIBRARIES}) target_link_libraries (lte-softmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${option_HW_lib} ${option_TP_lib} ${XFORMS_LIBRARIES} ) -target_link_libraries (lte-softmodem-nos1 ${LIBBOOST_LIBRARIES} -lboost_system) #Added manually as it is not found for some reason for USRP +#target_link_libraries (lte-softmodem-nos1 ${LIBBOOST_LIBRARIES} -lboost_system) #Added manually as it is not found for some reason for USRP target_link_libraries (lte-softmodem-nos1 ${LIB_LMS_LIBRARIES}) target_link_libraries (lte-softmodem-nos1 ${T_LIB}) @@ -1703,7 +1703,7 @@ target_link_libraries(rrh_gw UTIL LFDS -Wl,--end-group ) target_link_libraries (rrh_gw rt pthread m ) -target_link_libraries (rrh_gw ${option_HW_lib} ${option_TP_lib} ${LIBBOOST_LIBRARIES} -lboost_system ) #Added manually as it is not found for some reason for USRP +target_link_libraries (rrh_gw ${option_HW_lib} ${option_TP_lib} ${LIBBOOST_LIBRARIES}) #Added manually as it is not found for some reason for USRP target_link_libraries (rrh_gw ${LIB_LMS_LIBRARIES}) target_link_libraries (rrh_gw ${T_LIB}) From c37446507ae21aff9fd4364ba8d63b19fcf66799 Mon Sep 17 00:00:00 2001 From: ROBERT Benoit Date: Tue, 25 Oct 2016 16:51:37 +0200 Subject: [PATCH 083/132] Add testing capabilities for OAI UE in autotest framework Autotest Framework modifications: -> paramiko.Transport((hostname, ports)) : issue on my configuration -> add --test-suite command line parameter to select a different test suite XML file (default is test_case_list.xml) -> add patch file functionnality when installing remote machine : required to add LOG printing for pass/fail evaluation -> add lte-softmodem-noS1 test class - fork of lte-softmodem with the following modification - no EPC management on lte-softmodem-noS1 class - add cell synchronization detection as a precondition for test results analysis - add metric extraction for pass/fail criteria (metrics are defined in XML file) - generate graphics for performances metrics (used in the HTML report -> not available in this delivery) Patch files: -> autotest_ue_cell_synch_event.patch : Add log for cell synchronization detection -> autotest_ue_dlsch_bitrate_metric.patch : Add log for DLSCH bitrate capture -> 3gpplte_turbo_decoder_sse_8bit.patch : hotfix for turbo decoder in autotest (issue followed in oai1B project) -> phy_test__target_dl_mcs.patch : hotfix for --phy-test configuration (MCS) --- cmake_targets/autotests/autotest_analyser.py | 161 + .../autotests/lib_autotest_analyser.py | 414 +++ .../3gpplte_turbo_decoder_sse_8bit.patch | 25 + .../autotest_ue_cell_synch_event.patch | 18 + .../autotest_ue_dlsch_bitrate_metric.patch | 19 + .../patches/phy_test__target_dl_mcs.patch | 17 + .../autotests/run_exec_lte-softmodem_tests.py | 664 +++- .../autotests/run_lte-softmodem-nos1_tests.py | 2785 ++++++++++++++ .../autotests/testsuite_ue_noS1_eurecom.xml | 3214 +++++++++++++++++ 9 files changed, 7315 insertions(+), 2 deletions(-) create mode 100755 cmake_targets/autotests/autotest_analyser.py create mode 100644 cmake_targets/autotests/lib_autotest_analyser.py create mode 100644 cmake_targets/autotests/patches/3gpplte_turbo_decoder_sse_8bit.patch create mode 100644 cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch create mode 100644 cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch create mode 100644 cmake_targets/autotests/patches/phy_test__target_dl_mcs.patch create mode 100755 cmake_targets/autotests/run_lte-softmodem-nos1_tests.py create mode 100644 cmake_targets/autotests/testsuite_ue_noS1_eurecom.xml diff --git a/cmake_targets/autotests/autotest_analyser.py b/cmake_targets/autotests/autotest_analyser.py new file mode 100755 index 0000000000..a75727ad65 --- /dev/null +++ b/cmake_targets/autotests/autotest_analyser.py @@ -0,0 +1,161 @@ +#! /usr/bin/python +#****************************************************************************** +# +# \file autotest_analyser.py +# +# \par Informations +# - \b Project : UED Autotest Framework +# - \b Software : +# +# \date 16 september 2016 +# +# \version 0.1 +# +# \brief helper to test lib_autotest_analyser.py +# +# \author Benoit ROBERT (benoit.robert@syrtem.com) +# +# \par Statement of Ownership +# COPYRIGHT (c) 2016 BY SYRTEM S.A.R.L +# This software is furnished under license and may be used and copied +# only in accordance with the terms of such license and with the inclusion +# of the above COPYRIGHT notice. This SOFTWARE or any other copies thereof +# may not be provided or otherwise made available to any other person. +# No title to and ownership of the SOFTWARE is hereby transferred. +# +# The information in this SOFTWARE is subject to change without notice +# and should not be constructed as a commitment by SYRTEM. +# SYRTEM assumes no responsibility for the use or reliability of its +# SOFTWARE on equipment or platform not explicitly validated by SYRTEM. +# +# ******************************************************************************* + +import os +import getopt +import sys +from subprocess import call + + + +#test_cases = ('030001', '030901', '031001', '031601', '031701', '031801', '031901', '032001', '032101', '032201', '032301', '032501', '032601', '032801') +test_cases = ('030030' , '030030' ) + +nb_run = 3 + +def error_opt(msg): + print("Option error: " + msg) + + +def main(args): + try: + analyser = __import__("lib_autotest_analyser") + except ImportError as err: + print('Import error: ' + str(err)) + exit(0) + + + log_path = 'log_save_2016-08-14/log/' + + + + metric = {} + metric['id'] = 'UE_DLSCH_BITRATE' + metric['description'] = 'UE downlink physical throughput' + metric['regex'] = '(UE_DLSCH_BITRATE) =\s+(\d+\.\d+) kbps.+frame = (\d+)\)' + metric['unit_of_meas'] = 'kbps' + metric['min_limit'] = 14668.8 + + +#report_path = log_path+'/report/' + +#os.system(' mkdir -p ' + report_path) + +#analyser.create_report_html(report_path) + +#return(0) + + for test_case in test_cases: + +# print test_case + if test_case == '030001': + metric['min_limit'] = 500.0 + if test_case == '030901': + metric['min_limit'] = 640.0 + if test_case == '031001': + metric['min_limit'] = 3200.0 + if test_case == '031601': + metric['min_limit'] = 5920.0 + if test_case == '031701': + metric['min_limit'] = 6000.0 + if test_case == '031801': + metric['min_limit'] = 6200.0 + if test_case == '031901': + metric['min_limit'] = 7000.0 + if test_case == '032001': + metric['min_limit'] = 7800.0 + if test_case == '032101': + metric['min_limit'] = 8000.0 + if test_case == '032201': + metric['min_limit'] = 9000.0 + if test_case == '032301': + metric['min_limit'] = 10000.0 + if test_case == '032501': + metric['min_limit'] = 11000.0 + if test_case == '032601': + metric['min_limit'] = 12000.0 + if test_case == '032801': + metric['min_limit'] = 12500.0 + + if test_case == '035201': + metric['min_limit'] = 14668.8 + if test_case == '036001': + metric['min_limit'] = 25363.2 + + + + for i in range(0, nb_run): + fname = 'log//'+test_case+'/run_'+str(i)+'/UE_exec_'+str(i)+'_.log' + args = {'metric' : metric, + 'file' : fname } + + cell_synch_status = analyser.check_cell_synchro(fname) + if cell_synch_status == 'CELL_SYNCH': + print '!!!!!!!!!!!!!! Cell synchronized !!!!!!!!!!!' + metric_checks_flag = 0 + else : + print '!!!!!!!!!!!!!! Cell NOT NOT synchronized !!!!!!!!!!!' + +# metric_extracted = analyser.do_extract_metrics(args) + +# print "min = "+ str( metric_extracted['metric_min'] ) +# print "min_index = "+ str( metric_extracted['metric_min_index'] ) +# print "max = "+ str( metric_extracted['metric_max'] ) +# print "max_index = "+ str( metric_extracted['metric_max_index'] ) +# print "mean = "+ str( metric_extracted['metric_mean'] ) +# print "median = "+ str( metric_extracted['metric_median'] ) + +# verdict = analyser.do_check_verdict(metric, metric_extracted) +# print verdict + +# fname= 'report/2016-9-8_toto/'+test_case+'/UE_metric_UE_DLSCH_BITRATE_'+str(i)+'_.png' +# fname= 'report/UE_metric_UE_DLSCH_BITRATE_'+test_case+'_'+str(i)+'.png' + +# print fname +# analyser.do_img_metrics(metric, metric_extracted, fname) + +# fname = 'log//'+test_case+'/run_'+str(i)+'/UE_traffic_'+str(i)+'_.log' + +# args = {'file' : fname } + +# traffic_metrics = analyser.do_extract_traffic_metrics(args) + +# fname= 'report/iperf_'+test_case+'_'+str(i)+'.png' + +# print fname +# analyser.do_img_traffic(traffic_metrics, fname) + + + +if __name__ == "__main__": + main(sys.argv) + diff --git a/cmake_targets/autotests/lib_autotest_analyser.py b/cmake_targets/autotests/lib_autotest_analyser.py new file mode 100644 index 0000000000..92dcc31e48 --- /dev/null +++ b/cmake_targets/autotests/lib_autotest_analyser.py @@ -0,0 +1,414 @@ +#****************************************************************************** +# +# \file lib_autotest_analyser.py +# +# \par Informations +# - \b Project : UED Autotest Framework +# - \b Software : +# +# \date 16 september 2016 +# +# \version 0.1 +# +# \brief library to extract metrics from autotest logs and assign a verdict +# +# \author Benoit ROBERT (benoit.robert@syrtem.com) +# +# \par Statement of Ownership +# COPYRIGHT (c) 2016 BY SYRTEM S.A.R.L +# This software is furnished under license and may be used and copied +# only in accordance with the terms of such license and with the inclusion +# of the above COPYRIGHT notice. This SOFTWARE or any other copies thereof +# may not be provided or otherwise made available to any other person. +# No title to and ownership of the SOFTWARE is hereby transferred. +# +# The information in this SOFTWARE is subject to change without notice +# and should not be constructed as a commitment by SYRTEM. +# SYRTEM assumes no responsibility for the use or reliability of its +# SOFTWARE on equipment or platform not explicitly validated by SYRTEM. +# +# ******************************************************************************* + + +import re +from pylab import * +from matplotlib.font_manager import FontProperties + +import os +from jinja2 import Environment, FileSystemLoader + + +PATH = os.path.dirname(os.path.abspath(__file__)) +TEMPLATE_ENVIRONMENT = Environment( + autoescape=False, + loader=FileSystemLoader(os.path.join(PATH, 'templates')), + trim_blocks=False) + + +def render_template(template_filename, context): + return TEMPLATE_ENVIRONMENT.get_template(template_filename).render(context) + + + +def init(args = None): + return + + +# +# +# +def do_extract_metrics(args): + +# print "" +# print "do_extract_metrics ... " + + fname = args['file'] + metric = args['metric'] +# print(fname) +# print 'metric id = ' + metric['id'] +# print 'metric regex = ' + metric['regex'] + + count = 0 + mmin = 0 + mmin_index = 0 + mmax = 0 + mmax_index = 0 + mean = 0 + median = 0 + + + output = np.fromregex(fname,metric['regex'], [('id', 'S20'), ('metric', np.float), ('frame', np.int)] ) +# print 'T0T0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' +# print output + count = output['metric'].size +# print count + if count > 0: + mmin = np.amin(output['metric']); + mmin_index = np.argmin(output['metric']); + mmax = np.amax(output['metric']); + mmax_index = np.argmax(output['metric']); + mean = np.mean(output['metric']); + median = np.median(output['metric']); + +# print ( ( (metric['min_limit'] > output['metric']).sum() / float(output['metric'].size) ) * 100 ) + + ret = { 'metric_count' : count, + 'metric_buf' : output, + 'metric_min' : mmin, + 'metric_min_index' : mmin_index, + 'metric_max' : mmax, + 'metric_max_index' : mmax_index, + 'metric_mean' : mean, + 'metric_median' : median, + } + return(ret) + +# +# +# +def do_check_verdict(metric_def, metric_data): + verdict = 'INCON' + + pass_fail_stat = metric_def['pass_fail_stat'] + + if pass_fail_stat == 'max_value': + metric_stat = metric_data['metric_max'] + elif pass_fail_stat == 'min_value': + metric_stat = metric_data['metric_min'] + elif pass_fail_stat == 'mean_value': + metric_stat = metric_data['metric_mean'] + elif pass_fail_stat == 'median_value': + metric_stat = metric_data['metric_median'] + else : + print "do_check_verdict -> undef metric stat (pass_fail_stat in xml file)" + return verdict + + if 'max_limit' in metric_def: + if metric_stat > metric_def['max_limit']: + verdict = 'FAIL' + else: + verdict = 'PASS' + + if 'min_limit' in metric_def: + if metric_stat < metric_def['min_limit']: + verdict = 'FAIL' + else: + verdict = 'PASS' + return verdict + + +def do_print_metrics(metric_def, metric_data): + + + if metric_data['metric_count'] > 0 : + +# output = np.array( metric_data['metric_buf'] , [('id', 'S20'), ('metric', np.float), ('frame', np.int)]) + output = metric_data['metric_buf'] +# print output + + fontP = FontProperties() + fontP.set_size('small') + + plt.scatter(output['frame'], output['metric'], color='b', alpha=0.33, s = 1 ) + plt.plot([0, output['frame'][metric_data['metric_count']-1]],[ metric_def['min_limit'],metric_def['min_limit']], 'r-', lw=2) # Red straight line + + plt.title('Physical throughput ') + plt.xlabel('frame') + plt.ylabel(metric_def['id']) + plt.legend(prop=fontP) + mng = plt.get_current_fig_manager() + plt.show() + +def do_img_metrics(metric_def, metric_data, fname): + + + if metric_data['metric_count'] > 0 : + +# output = np.array( metric_data['metric_buf'] , [('id', 'S20'), ('metric', np.float), ('frame', np.int)]) + output = metric_data['metric_buf'] +# print 'TITI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!' +# print output + +# print metric_def['min_limit'] +# print metric_data['metric_count'] +# print output['frame'][metric_data['metric_count']-1] + + fontP = FontProperties() + fontP.set_size('small') + + plt.figure() + +# print output['frame'].size +# print output['metric'].size + + plt.scatter(output['frame'], output['metric'], color='b', alpha=0.33, s = 1 , label=metric_def['id']) + plt.plot([0, output['frame'][metric_data['metric_count']-1]],[ metric_def['min_limit'],metric_def['min_limit']], 'r-', lw=2, label='min limit') # Red straight line + + plt.title('Physical throughput ('+metric_def['unit_of_meas']+')') + plt.xlabel('frame') + plt.ylabel(metric_def['id']) + + # Set graphic minimum Y axis + # ------------------------- + if metric_data['metric_min'] == 0 : + plt.ylim(ymin=-metric_def['min_limit']/10) + else : + plt.ylim(ymin=0) + + y_axis_max = 0 + if metric_data['metric_max'] > metric_def['min_limit']: + y_axis_max =metric_data['metric_max']+metric_data['metric_max']/10 + else: + y_axis_max =metric_def['min_limit']+metric_def['min_limit']/10 + + plt.ylim(ymax=y_axis_max) + + lgd = plt.legend(prop=fontP, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) + mng = plt.get_current_fig_manager() + plt.savefig(fname, bbox_extra_artists=(lgd,), bbox_inches='tight') + plt.close() + +# with open(fname, 'r') as f: +# for line in f: +# m = re.search(metric['regex'], line) +# if m : +# print m.group(1) + " -> "+m.group(2) + + + + +def do_extract_traffic_metrics(args): + + print "" + print "do_extract_traffic_metrics ... " + + fname = args['file'] + +# print(fname) +# print 'metric id = ' + metric['id'] + +#[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +#[ 3] 0.0- 1.0 sec 238 KBytes 1.95 Mbits/sec 0.980 ms 2/ 174 (1.1%) +# [ 3] 0.0- 1.0 sec 63.2 KBytes 517 Kbits/sec 0.146 ms 1/ 45 (2.2%) + +# iperf_regex = '[\s*(\d+)]\s+\d+\.\d+-\s*(\d+\.\d+)\s+sec\s+(\d+).+(\d+\.\d+).+(\d+\.\d+).+(\d+)\/\s*(\d+)\s+\((\d+\.\d+)\%\)' + # ID 0.0 1.0 63.2 KByte 517 Kbits/s 0.146 + iperf_regex = '\[\s*(\d+)\]\s+(\d+\.*\d*)-\s*(\d+\.*\d*)\s+sec\s+(\d+\.*\d*)\s+(\D+)\s+(\d+\.*\d*)\s+(\D+)\s+(\d+\.*\d*)\s+ms\s+(\d+)\/\s*(\d+)\s+\((\d+\.*\d*)\%\)' +# print 'iperf regex = ' + iperf_regex + + count = 0 + bw_min = 0 + bw_max = 0 + bw_mean = 0 + bw_median = 0 + jitter_min = 0 + jitter_max = 0 + jitter_mean = 0 + jitter_median = 0 + + rl_min = 0 + rl_max = 0 + rl_mean = 0 + rl_median = 0 + + interval_stop_max = 0 + + output = np.fromregex(fname,iperf_regex, [('id', np.int) , ('interval_start', np.float), ('interval_stop', np.float), ('transfer', np.float), ('transfer_uom', 'S20') ,('bandwidth', np.float), ('bandwidth_uom', 'S20') ,('jitter', np.float), ('lost', np.int) , ('total', np.int), ('rate_lost', np.float) ] ) + + count = output['id'].size -1 + # remove last line that is an iperf result resume + + if count > 0: + + output= np.delete(output, (count), axis=0 ) +# print output + + bw_min = np.amin(output['bandwidth']); + bw_max = np.amax(output['bandwidth']); + bw_mean = np.mean(output['bandwidth']); + bw_median = np.median(output['bandwidth']); + + jitter_min = np.amin(output['jitter']); + jitter_max = np.amax(output['jitter']); + jitter_mean = np.mean(output['jitter']); + jitter_median = np.median(output['jitter']); + + rl_min = np.amin(output['rate_lost']); + rl_max = np.amax(output['rate_lost']); + rl_mean = np.mean(output['rate_lost']); + rl_median = np.median(output['rate_lost']); + + interval_stop_max = np.amax(output['interval_stop']); + + else : + count = 0 + + + ret = { 'traffic_count' : count, + 'traffic_buf' : output, + 'bw_min' : bw_min, + 'bw_max' : bw_max, + 'bw_mean' : bw_mean, + 'bw_median' : bw_median, + 'jitter_min' : jitter_min, + 'jitter_max' : jitter_max, + 'jitter_mean' : jitter_mean, + 'jitter_median' : jitter_median, + 'rl_min' : rl_min, + 'rl_max' : rl_max, + 'rl_mean' : rl_mean, + 'rl_median' : rl_median, + 'interval_stop_max' : interval_stop_max + } + return(ret) + + + + +def do_img_traffic(traffic_data, fname): + + + if traffic_data['traffic_count'] > 0 : + + output = traffic_data['traffic_buf'] + + + fontP = FontProperties() + fontP.set_size('small') + + fig = plt.figure(1) + + ax1= plt.subplot(311) + plt.plot(output['interval_stop'], output['bandwidth'], color='b' ) + ax1.set_title('Bandwidth (Mbits/s)') + ax1.set_ylim(ymin=-1) + ax1.set_xlim(xmax=np.amax(output['interval_stop'])) + text='min: '+str(traffic_data['bw_min'])+'\nmax: '+str(traffic_data['bw_max'])+'\nmean: '+str(traffic_data['bw_mean'])+'\nmedian: '+str(traffic_data['bw_median']) + ax1.text( np.amax(output['interval_stop'])+10,0,text) + + + ax2=plt.subplot(312) + plt.plot(output['interval_stop'], output['jitter'], color='b' ) + ax2.set_title('Jitter (ms)') + ax2.set_xlim(xmax=np.amax(output['interval_stop'])) + ax2.set_ylim(ymin=-1) + text='min: '+str(traffic_data['jitter_min'])+'\nmax: '+str(traffic_data['jitter_max'])+'\nmean: '+str(traffic_data['jitter_mean'])+'\nmedian: '+str(traffic_data['jitter_median']) + ax2.text( np.amax(output['interval_stop'])+10,0,text) + + ax3=plt.subplot(313) + plt.plot(output['interval_stop'], output['rate_lost'], color='b') + ax3.set_title('Loss rate %') + ax3.set_xlim(xmax=np.amax(output['interval_stop'])) + ax3.set_ylim(ymin=-1) + text='min: '+str(traffic_data['rl_min'])+'\nmax: '+str(traffic_data['rl_max'])+'\nmean: '+str(traffic_data['rl_mean'])+'\nmedian: '+str(traffic_data['rl_median']) + ax3.text( np.amax(output['interval_stop'])+10,0,text) + + +# plt.title('Physical throughput ('+metric_def['unit_of_meas']+')') + plt.xlabel('time (s)') +# plt.ylabel(metric_def['id']) + + # Set graphic minimum Y axis + # ------------------------- +# if traffic_data['bw_min'] == 0 : +# plt.ylim(ymin=-metric_def['min_limit']/10) +# else : +# plt.ylim(ymin=0) + +# y_axis_max = 0 +# if traffic_data['metric_max'] > metric_def['min_limit']: +# y_axis_max =traffic_data['metric_max']+traffic_data['metric_max']/10 +# else: +# y_axis_max =metric_def['min_limit']+metric_def['min_limit']/10 +# +# plt.ylim(ymax=y_axis_max) + + plt.tight_layout() + + lgd = plt.legend(prop=fontP, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) + mng = plt.get_current_fig_manager() + plt.savefig(fname, bbox_inches='tight') + plt.close() + + + + +def create_report_html(context): + fname = context['report_path']+"/index.html" + + # + with open(fname, 'w') as f: + html = render_template('index.html', context) + f.write(html) + + +def create_test_report_detailed_html(context, fname ): + with open(fname, 'w') as f: + html = render_template('testcase_report.html', context) + f.write(html) + + +def check_cell_synchro(fname): + + with open(fname, 'r') as f: + for line in f: + + m = re.search('AUTOTEST Cell Sync \:', line) + if m : + print line + return 'CELL_SYNCH' + + return 'CELL_NOT_SYNCH' + + +def check_exec_seg_fault(fname): + + with open(fname, 'r') as f: + for line in f: + m = re.search('Segmentation fault', line) + if m : + print line + return 'SEG_FAULT' + + return 'NO_SEG_FAULT' + diff --git a/cmake_targets/autotests/patches/3gpplte_turbo_decoder_sse_8bit.patch b/cmake_targets/autotests/patches/3gpplte_turbo_decoder_sse_8bit.patch new file mode 100644 index 0000000000..957778f332 --- /dev/null +++ b/cmake_targets/autotests/patches/3gpplte_turbo_decoder_sse_8bit.patch @@ -0,0 +1,25 @@ +diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c +index d2c7ac6..0853373 100644 +--- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c ++++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c +@@ -493,7 +493,7 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho + + #endif + +- if (frame_length > 6143) { ++ if (frame_length > 6144) { + LOG_E(PHY,"compute_beta: frame_length %d\n",frame_length); + return; + } +@@ -979,6 +979,11 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, + } else + n2 = n; + ++ if(n2<256) ++ { ++ printf("phy_threegpplte_turbo_decoder8 : frame length < 256\n"); ++ return 255; ++ } + + for (iind=0; iind < 188 && f1f2mat[iind].nb_bits != n; iind++); + diff --git a/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch b/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch new file mode 100644 index 0000000000..8c80d55871 --- /dev/null +++ b/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch @@ -0,0 +1,18 @@ +diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c +index 71372d9..763397b 100644 +--- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c ++++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c +@@ -477,6 +477,13 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) + //#endif + + if (ue->UE_scan_carrier == 0) { ++ ++ /* SYRTEM */ ++ printf("AUTOTEST Cell Sync : frame = %d, rx_offset %d, freq_offset %d \n", ++ ue->proc.proc_rxtx[0].frame_rx, ++ ue->rx_offset, ++ ue->common_vars.freq_offset ); ++ + if (ue->mac_enabled==1) { + LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id); + //mac_resynch(); diff --git a/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch b/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch new file mode 100644 index 0000000000..e8213960e1 --- /dev/null +++ b/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch @@ -0,0 +1,19 @@ +diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c +index 3ed4c79..da88000 100644 +--- a/openair1/SCHED/phy_procedures_lte_ue.c ++++ b/openair1/SCHED/phy_procedures_lte_ue.c +@@ -2944,6 +2944,14 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin + LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n", + ue->Mod_id,frame_rx,ue->total_TBS[eNB_id], + ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0); ++ ++ /* SYRTEM */ ++ if ((frame_rx % 100 == 0)) { ++ printf("AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", (float) ue->bitrate[eNB_id]/1000.0, frame_rx); ++ /* End of SYRTEM */ ++ } ++ ++ + } + + diff --git a/cmake_targets/autotests/patches/phy_test__target_dl_mcs.patch b/cmake_targets/autotests/patches/phy_test__target_dl_mcs.patch new file mode 100644 index 0000000000..ec8c43cb72 --- /dev/null +++ b/cmake_targets/autotests/patches/phy_test__target_dl_mcs.patch @@ -0,0 +1,17 @@ + +diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c +index 96645f8..a7f1dfb 100644 +--- a/targets/RT/USER/lte-softmodem.c ++++ b/targets/RT/USER/lte-softmodem.c +@@ -1602,6 +1602,11 @@ int main( int argc, char **argv ) + PHY_vars_eNB_g[0][CC_id] = init_lte_eNB(frame_parms[CC_id],0,frame_parms[CC_id]->Nid_cell,abstraction_flag); + PHY_vars_eNB_g[0][CC_id]->CC_id = CC_id; + ++ PHY_vars_eNB_g[0][CC_id]->ue_dl_rb_alloc=0x1fff; ++ PHY_vars_eNB_g[0][CC_id]->target_ue_dl_mcs=target_dl_mcs; ++ PHY_vars_eNB_g[0][CC_id]->ue_ul_nb_rb=6; ++ PHY_vars_eNB_g[0][CC_id]->target_ue_ul_mcs=target_ul_mcs; ++ + if (phy_test==1) PHY_vars_eNB_g[0][CC_id]->mac_enabled = 0; + else PHY_vars_eNB_g[0][CC_id]->mac_enabled = 1; + diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py index 1dfd67b682..796235a77f 100755 --- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py +++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py @@ -37,6 +37,8 @@ import math #from time import clock import xml.etree.ElementTree as ET import re +from colorama import Fore, Back, Style + import numpy as np import log @@ -167,7 +169,7 @@ def sftp_module (username, password, hostname, ports, paramList,logfile): #paramiko logfile path should not be changed with multiple calls. The logs seem to in first file regardless error = "" #The lines below are outside exception loop to be sure to terminate the test case if the network connectivity goes down or there is authentication failure - transport = paramiko.Transport(hostname, ports) + transport = paramiko.Transport((hostname, ports)) transport.connect(username = username, password = password) sftp = paramiko.SFTPClient.from_transport(transport) # index =0 @@ -1042,6 +1044,609 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , write_file(xmlFile, xml, mode="w") + + +# \brief handler for executing test cases (lte-softmodem-noS1) +# \param testcase name of testcase +# \param oldprogramList list of programs which must be terminated before running a test case +# \param logdirOAI5GRepo directory on remote machine which has openairinterface5g repo installed +# \param logdirOpenaircnRepo directory on remote machine which has openair-cn repo installed +# \param MachineList list of all machines on which test cases can be run +# \param user username with which to login +# \param password password with which to login +# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) +# \param ExmimoRfStop command to stop EXMIMO Card +# \param nruns_lte-softmodem global parameter to override number of runs (nruns) within the test case +def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, user, password, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, timeout_cmd): + #We ignore the password sent to this function for secuirity reasons for password present in log files + #It is recommended to add a line in /etc/sudoers that looks something like below. The line below will run sudo without password prompt + # your_user_name ALL=(ALL:ALL) NOPASSWD: ALL + + indent="\t" + threads=[] + + # + # Test case parameters + # ----------------------------------------------------------------------------- + testcase_verdict = 'PASS' + testcase_time_start = datetime.datetime.now() + testcase_name = testcase.get('id') + testcase_class = testcase.findtext('class',default='') + testcase_desc = testcase.findtext('desc',default='') + if timeout_cmd == '': + timeout_cmd = testcase.findtext('TimeOut_cmd',default='') + timeout_cmd = int(float(timeout_cmd)) + timeout_thread = timeout_cmd + 60 #Timeout_thread is more than that of cmd to have room for compilation time, etc + if nruns_lte_softmodem == '': + nruns = testcase.findtext('nruns',default='') + else: + nruns = nruns_lte_softmodem + nruns = int(float(nruns)) + tags = testcase.findtext('tags',default='') + + max_ntries = testcase.findtext('max_ntries',default='') + if max_ntries : + max_ntries = int(float(max_ntries)) + else : + max_ntries = nruns + + print( indent + "> testcase time start : " + str(testcase_time_start) ) + print( indent + "> testcase class : " + testcase_class ) + print( indent + "> testcase description : " + testcase_desc ) + print( indent + "> testcase timeout : " + str(timeout_cmd) ) + print( indent + "> testcase thread timeout : " + str(timeout_thread) ) + print( indent + "> number of runs : " + str(nruns) ) + print( indent + "> number of max tries : " + str(max_ntries) ) + print( indent + "> testcase tags : " + tags ) + + logdir_local_testcase = openairdir_local + '/cmake_targets/autotests/log/'+ testcasename + logdir_eNB_testcase = logdirOAI5GRepo +'/cmake_targets/autotests/log/'+ testcasename + logdir_UE_testcase = logdirOAI5GRepo +'/cmake_targets/autotests/log/'+ testcasename + + # + # Local checks for test cases + # ----------------------------------------------- + + # Logging directory + if (not os.path.exists(logdir_local_testcase)): + os.system('mkdir -p ' + logdir_local_testcase) + + # + # REMOTE MACHINE COMPILATION + # ------------------------------------------------ + + eNBMachine = testcase.findtext('eNB',default='') + eNB_config_file = testcase.findtext('eNB_config_file',default='') + eNB_compile_prog = testcase.findtext('eNB_compile_prog',default='') + eNB_compile_prog_args = testcase.findtext('eNB_compile_prog_args',default='') + + logfile_compile_eNB = logdir_eNB_testcase + '/eNB_compile.log' + logfile_task_eNB_compile_out = logdir_eNB_testcase + '/eNB_task_compile_out.log' + logfile_task_eNB_compile = logdir_local_testcase + '/eNB_task_compile.log' + + # Check that machine is in test setup machine list + print( Fore.WHITE + indent + "> testcase eNB machine :"), + if (eNBMachine not in MachineList): + print( Fore.RED + eNBMachine + " not in test setup machine list") + testcase_verdict = 'INCON' + else : + print eNBMachine, + # get machine description + eNBMachineDesc = MachineDescDic[eNBMachine] + index_eNBMachine = MachineList.index(eNBMachine) + # check that openairinterface is installed on machine + oai_eNB = openair('localdomain', eNBMachine) + oai_eNB.connect(user, password) + cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep --color=never OPENAIR' + res= oai_eNB.send_recv(cmd) + m = re.search('OPENAIR_HOME', res, re.DOTALL) + if m: + print + # Create testcase directory on remote eNB + cmd = 'rm -fr ' + logdir_eNB_testcase + ' ; mkdir -p ' + logdir_eNB_testcase + result = oai_eNB.send_recv(cmd) + + # Check if we need to compile lte-softmodem-noS1 on remote machine + eNB_compile_cmd = eNB_compile_prog + ' '+ eNB_compile_prog_args + if ('last_compile_prog' in eNBMachineDesc) and eNBMachineDesc['last_compile_prog'] == eNB_compile_cmd: + print( Fore.WHITE + indent + "> eNB machine compilation : skipped -> "+eNB_compile_cmd ) + else: + print( Fore.WHITE + indent + "> eNB machine compilation : triggered -> "+eNB_compile_cmd ) + eNBMachineDesc['last_compile_prog'] = eNB_compile_prog + ' '+ eNB_compile_prog_args # if last compilation is the same do not compile again + task_eNB_compile = ' ( uname -a ; date \n' + task_eNB_compile = task_eNB_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_eNB_compile = task_eNB_compile + 'env |grep OPENAIR \n' + task_eNB_compile = task_eNB_compile + update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' + if eNB_compile_cmd != "": + task_eNB_compile = task_eNB_compile + ' ( ' + eNB_compile_cmd + ' ) > ' + logfile_compile_eNB + ' 2>&1 \n' + task_eNB_compile = task_eNB_compile + ' date ) > ' + logfile_task_eNB_compile_out + ' 2>&1 ' + write_file(logfile_task_eNB_compile, task_eNB_compile, mode="w") + + + thread_eNB = oaiThread(1, "eNB_thread_compile", eNBMachine, user, password , task_eNB_compile, False, timeout_thread) + threads.append(thread_eNB) + thread_eNB.start() + + else: + print( Fore.RED + " -> OAI5G not properly setup ! please check REMOTE MACHINE PREPARATION step") + testcase_verdict = 'INCON' + + + UEMachine = testcase.findtext('UE',default='') + UE_config_file = testcase.findtext('UE_config_file',default='') + UE_compile_prog = testcase.findtext('UE_compile_prog',default='') + UE_compile_prog_args = testcase.findtext('UE_compile_prog_args',default='') + + logfile_compile_UE = logdir_UE_testcase + '/UE_compile.log' + logfile_task_UE_compile_out = logdir_UE_testcase + '/UE_task_compile_out.log' + logfile_task_UE_compile = logdir_local_testcase + '/UE_task_compile.log' + + # Check that machine is in test setup machine list + print( Fore.WHITE + indent + "> testcase UE machine :"), + if (UEMachine not in MachineList): + print( Fore.RED + UEMachine + " not in test setup machine list") + testcase_verdict = 'INCON' + else : + print UEMachine, + # get machine description + UEMachineDesc = MachineDescDic[UEMachine] + index_UEMachine = MachineList.index(UEMachine) + # check that openairinterface is installed on machine + oai_UE = openair('localdomain', UEMachine) + oai_UE.connect(user, password) + cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep --color=never OPENAIR' + res= oai_UE.send_recv(cmd) + m = re.search('OPENAIR_HOME', res, re.DOTALL) + if m: + print + # Create testcase directory on remote UE + cmd = 'rm -fr ' + logdir_UE_testcase + ' ; mkdir -p ' + logdir_UE_testcase + result = oai_UE.send_recv(cmd) + + # Check if we need to compile lte-softmodem-noS1 on remote machine + UE_compile_cmd = UE_compile_prog + ' '+ UE_compile_prog_args + if ('last_compile_prog' in UEMachineDesc) and UEMachineDesc['last_compile_prog'] == UE_compile_cmd: + print( Fore.WHITE + indent + "> UE machine compilation : skipped -> "+UE_compile_cmd ) + else: + print( Fore.WHITE + indent + "> UE machine compilation : triggered -> "+UE_compile_cmd ) + UEMachineDesc['last_compile_prog'] = UE_compile_prog + ' '+ UE_compile_prog_args + task_UE_compile = ' ( uname -a ; date \n' + task_UE_compile = task_UE_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_UE_compile = task_UE_compile + 'env |grep OPENAIR \n' + task_UE_compile = task_UE_compile + update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' + if UE_compile_cmd != "": + task_UE_compile = task_UE_compile + ' ( ' + UE_compile_cmd + ' ) > ' + logfile_compile_UE + ' 2>&1 \n' + task_UE_compile = task_UE_compile + ' date ) > ' + logfile_task_UE_compile_out + ' 2>&1 ' + write_file(logfile_task_UE_compile, task_UE_compile, mode="w") + + thread_UE = oaiThread(2, "UE_thread_compile", UEMachine, user, password , task_UE_compile, False, timeout_thread) + threads.append(thread_UE) + thread_UE.start() + + else: + print( Fore.RED + " -> OAI5G not properly setup ! please check REMOTE MACHINE PREPARATION step") + testcase_verdict = 'INCON' + + + + + + + # Wait for Compilation thread to terminate + #----------------------------------------- + for t in threads: + t.join() + + # TODO check that compilation is succeed + + #first we compile all the programs +# thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE_compile, False, timeout_thread) +# threads.append(thread_UE) +# thread_UE.start() + + + + + +# index_UEMachine = MachineList.index(UEMachine) +# oai_UE = openair('localdomain', UEMachine) +# oai_UE.connect(user, password) +# res = oai_UE.send_recv(cmd) +# res = oai_eNB.send_recv(cmd) + + + + # + # RUN LOOP + # ------------------------------------------------ + if testcase_verdict != 'PASS': # if something went wrong to not run test cases + max_ntries=0 + + runs_results = [] + nb_runs = 0 + nb_run_pass = 0 + nb_run_failed = 0 + nb_run_inc = 0 + nb_run_skip = 0 + + nb_seg_fault = 0 + + for run in range(0,max_ntries): + + if nruns == nb_run_pass + nb_run_failed: + break + + nb_runs += 1 + + # + # RUN initialization + # ---------------------------------------------------- + print (Fore.WHITE + indent + "> RUN_"+str(run).zfill(2)+" : " ), + + sys.stdout.flush() + + run_start_time=datetime.datetime.now() + + logdir_local_run = openairdir_local + '/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) + logdir_eNB_run = logdirOAI5GRepo +'/cmake_targets/autotests/log/' + testcasename + '/run_' + str(run) + logdir_UE_run = logdirOAI5GRepo +'/cmake_targets/autotests/log/' + testcasename + '/run_' + str(run) + + cmd = 'rm -fr ' + logdir_eNB_run + ' ; mkdir -p ' + logdir_eNB_run + result = oai_eNB.send_recv(cmd) + cmd = 'rm -fr ' + logdir_UE_run + ' ; mkdir -p ' + logdir_UE_run + result = oai_UE.send_recv(cmd) + cmd = ' rm -fr ' + logdir_local_run + ' ; mkdir -p ' + logdir_local_run + result = os.system(cmd) + + + # + # RUN parametrization + # ---------------------------------------------------- + eNB_pre_exec = testcase.findtext('eNB_pre_exec',default='') + eNB_pre_exec_args = testcase.findtext('eNB_pre_exec_args',default='') + eNB_main_exec = testcase.findtext('eNB_main_exec',default='') + eNB_main_exec_args = testcase.findtext('eNB_main_exec_args',default='') + eNB_traffic_exec = testcase.findtext('eNB_traffic_exec',default='') + eNB_traffic_exec_args = testcase.findtext('eNB_traffic_exec_args',default='') + eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='True') + + logfile_exec_eNB = logdir_eNB_run + '/eNB_exec' + '_' + str(run) + '_.log' + logfile_pre_exec_eNB = logdir_eNB_run + '/eNB_pre_exec' + '_' + str(run) + '_.log' + logfile_task_eNB_out = logdir_eNB_run + '/eNB_task_out' + '_' + str(run) + '_.log' + logfile_traffic_eNB = logdir_eNB_run + '/eNB_traffic' + '_' + str(run) + '_.log' + logfile_task_eNB = logdir_local_run + '/eNB_task' + '_' + str(run) + '_.log' + + task_eNB = ' ( uname -a ; date \n' + task_eNB = task_eNB + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_eNB = task_eNB + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' + if eNB_pre_exec != "": + task_eNB = task_eNB + ' ( date; ' + eNB_pre_exec + ' '+ eNB_pre_exec_args + ' ) > ' + logfile_pre_exec_eNB + ' 2>&1 \n' + if eNB_main_exec != "": + task_eNB = task_eNB + ' ( date; ' + addsudo(eNB_main_exec + ' ' + eNB_main_exec_args, '') + ' ) > ' + logfile_exec_eNB + ' 2>&1 & \n' + task_eNB = task_eNB + 'array_exec_pid+=($!) \n' + task_eNB = task_eNB + 'echo eNB_main_exec PID = $! \n' + if eNB_traffic_exec != "": + cmd_traffic = eNB_traffic_exec + ' ' + eNB_traffic_exec_args + if cmd_traffic.find('-c') >= 0: + cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 80) + task_eNB = task_eNB + ' (date; ' + cmd_traffic + ' ) > ' + logfile_traffic_eNB + ' 2>&1 & \n' + task_eNB = task_eNB + 'array_exec_pid+=($!) \n' + task_eNB = task_eNB + 'echo eNB_traffic_exec PID = $! \n' + #terminate the eNB test case after timeout_cmd seconds + task_eNB = task_eNB + finalize_deploy_script (timeout_cmd, eNB_terminate_missing_procs) + ' \n' + #task_eNB = task_eNB + 'sleep ' + str(timeout_cmd) + ' \n' + task_eNB = task_eNB + 'handle_ctrl_c' + '\n' + task_eNB = task_eNB + ' ) > ' + logfile_task_eNB_out + ' 2>&1 ' + write_file(logfile_task_eNB, task_eNB, mode="w") + + + UE_pre_exec = testcase.findtext('UE_pre_exec',default='') + UE_pre_exec_args = testcase.findtext('UE_pre_exec_args',default='') + UE_main_exec = testcase.findtext('UE_main_exec',default='') + UE_main_exec_args = testcase.findtext('UE_main_exec_args',default='') + UE_traffic_exec = testcase.findtext('UE_traffic_exec',default='') + UE_traffic_exec_args = testcase.findtext('UE_traffic_exec_args',default='') + UE_terminate_missing_procs = testcase.findtext('UE_terminate_missing_procs',default='True') + UE_search_expr_true = testcase.findtext('UE_search_expr_true','') + + logfile_exec_UE = logdir_UE_run + '/UE_exec' + '_' + str(run) + '_.log' + logfile_pre_exec_UE = logdir_UE_run + '/UE_pre_exec' + '_' + str(run) + '_.log' + logfile_task_UE_out = logdir_UE_run + '/UE_task_out' + '_' + str(run) + '_.log' + logfile_traffic_UE = logdir_UE_run + '/UE_traffic' + '_' + str(run) + '_.log' + logfile_task_UE = logdir_local_run + '/UE_task' + '_' + str(run) + '_.log' + + + task_UE = ' ( uname -a ; date \n' + task_UE = task_UE + 'array_exec_pid=()' + '\n' + task_UE = task_UE + 'cd ' + logdirOAI5GRepo + '\n' + task_UE = task_UE + 'source oaienv \n' + task_UE = task_UE + 'source cmake_targets/tools/build_helper \n' + task_UE = task_UE + 'env |grep OPENAIR \n' + if UE_pre_exec != "": + task_UE = task_UE + ' ( date; ' + UE_pre_exec + ' '+ UE_pre_exec_args + ' ) > ' + logfile_pre_exec_UE + ' 2>&1 \n' + if UE_main_exec != "": + task_UE = task_UE + ' ( date; ' + addsudo(UE_main_exec + ' ' + UE_main_exec_args, '') + ' ) > ' + logfile_exec_UE + ' 2>&1 & \n' + task_UE = task_UE + 'array_exec_pid+=($!) \n' + task_UE = task_UE + 'echo UE_main_exec PID = $! \n' + if UE_traffic_exec != "": + cmd_traffic = UE_traffic_exec + ' ' + UE_traffic_exec_args + if cmd_traffic.find('-c') >= 0: + cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60) + task_UE = task_UE + ' ( date; ' + cmd_traffic + ' ) >' + logfile_traffic_UE + ' 2>&1 & \n' + task_UE = task_UE + 'array_exec_pid+=($!) \n' + task_UE = task_UE + 'echo UE_traffic_exec PID = $! \n' + #terminate the UE test case after timeout_cmd seconds + task_UE = task_UE + finalize_deploy_script (timeout_cmd, UE_terminate_missing_procs) + ' \n' + #task_UE = task_UE + 'sleep ' + str(timeout_cmd) + ' \n' + task_UE = task_UE + 'handle_ctrl_c' + '\n' + task_UE = task_UE + ' ) > ' + logfile_task_UE_out + ' 2>&1 ' + write_file(logfile_task_UE, task_UE, mode="w") + #task_UE = 'echo \" ' + task_UE + '\" > ' + logfile_script_UE + ' 2>&1 ; ' + task_UE + + + + + + + + # + # RUN work + # ---------------------------------------------------- + thread_eNB = oaiThread(1, "eNB_thread", eNBMachine, user, password , task_eNB, False, timeout_thread) + thread_UE = oaiThread(2, "UE_thread", UEMachine, user, password , task_UE, False, timeout_thread) + threads=[] + threads.append(thread_eNB) + threads.append(thread_UE) + thread_eNB.start() + thread_UE.start() + for t in threads: + t.join() + + # + # + #----------------------------------------------------- + cleanOldProgramsAllMachines([oai_eNB, oai_UE] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB_run, logdir_UE_run], logdirOAI5GRepo) + + SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB_run, logdir_local_testcase, "get_all") + #print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE + SSHSessionWrapper(UEMachine, user, None, password, logdir_UE_run, logdir_local_testcase, "get_all") + + metric_checks_flag = 1 + + fname = logdir_local_run+ '/UE_exec' + '_' + str(run) + '_.log' + cell_synch_status = analyser.check_cell_synchro(fname) + if cell_synch_status == 'CELL_SYNCH': + print '!!!!!!!!!!!!!! Cell synchronized !!!!!!!!!!!' + else : + print '!!!!!!!!!!!!!! Cell NOT NOT synchronized !!!!!!!!!!!' + metric_checks_flag = 0 + + ue_seg_fault_status = analyser.check_exec_seg_fault(fname) + if ue_seg_fault_status == 'SEG_FAULT' : + nb_seg_fault += 1 + + # + # Check metrics + #---------------------------------------------------- + runs_metrics = [] + run_traffic = [] + + if metric_checks_flag : + verdict = 'PASS' + + # UE side metrics + metricList=testcase.findall('UE_metric') + for metric in metricList: + metric_def = {} + metric_def['id'] = metric.get('id') + metric_def['description'] = metric.get('description') + metric_def['regex'] = metric.get('regex') + metric_def['unit_of_meas'] = metric.get('unit_of_meas') + metric_def['pass_fail_stat']= metric.get('pass_fail_stat') + metric_min_lim = metric.get('min_limit') + if metric_min_lim: + metric_def['min_limit'] = float(metric_min_lim) + metric_max_lim = metric.get('max_limit') + if metric_max_lim: + metric_def['max_limit'] = float(metric_max_lim) + + fname = logdir_local_run+ '/UE_exec' + '_' + str(run) + '_.log' + + args = {'metric' : metric_def, + 'file' : fname } + + metric_extracted = analyser.do_extract_metrics(args) + + print "\t > Metric "+metric_def['id']+" :" + print "\t\t> min = "+ str( metric_extracted['metric_min'] ) + print "\t\t> min_index = "+ str( metric_extracted['metric_min_index'] ) + print "\t\t> max = "+ str( metric_extracted['metric_max'] ) + print "\t\t> max_index = "+ str( metric_extracted['metric_max_index'] ) + print "\t\t> mean = "+ str( metric_extracted['metric_mean'] ) + print "\t\t> median = "+ str( metric_extracted['metric_median'] ) + + verdict = analyser.do_check_verdict(metric_def, metric_extracted) + + metric_fig = logdir_local_run+ '/UE_metric_'+ metric_def['id']+'_' + str(run) + '_.png' + analyser.do_img_metrics(metric_def, metric_extracted, metric_fig) + + + metric_fig_report = '../log/'+ testcasename + '/run_' + str(run) + '/UE_metric_'+ metric_def['id']+'_' + str(run) + '_.png' + + run_metrics = dict( metric_id = metric_def['id'], + metric_desc = metric_def['description'], + metric_uom = metric_def['unit_of_meas'], + metric_min = metric_extracted['metric_min'], + metric_min_index= metric_extracted['metric_min_index'], + metric_max = metric_extracted['metric_max'], + metric_max_index= metric_extracted['metric_max_index'], + metric_mean = metric_extracted['metric_mean'], + metric_median = metric_extracted['metric_median'], + metric_fig = metric_fig_report) + + if metric_def['pass_fail_stat'] : + run_metrics['pass_fail_stat'] = metric_def['pass_fail_stat'] + if metric_min_lim : + run_metrics['pass_fail_min_limit'] = metric_def['min_limit'] + if metric_max_lim : + run_metrics['pass_fail_max_limit'] = metric_def['max_limit'] + + runs_metrics.append(run_metrics) + + # Traffic analysis + if UE_traffic_exec != "": + + fname = logdir_local_run+ '/UE_traffic' + '_' + str(run) + '_.log' + args = {'file' : fname } + traffic_metrics = analyser.do_extract_traffic_metrics(args) + traffic_fig = logdir_local_run+ '/UE_traffic'+'_' + str(run) + '_.png' + analyser.do_img_traffic(traffic_metrics, traffic_fig) + + traffic_fig_report= '../log/'+ testcasename + '/run_' + str(run) + '/UE_traffic'+'_' + str(run) + '_.png' + + dur_pass_fail_crit = 'none' + if traffic_metrics['traffic_count'] == 0 : + verdict = 'FAIL' + elif UE_search_expr_true != "": + traffic_duration_limit = float(UE_search_expr_true) + dur_pass_fail_crit = str(traffic_duration_limit) + # print 'traffic_duration_limit = '+str(traffic_duration_limit) + # print 'traffic_metrics[interval_stop_max] = '+str(traffic_metrics['interval_stop_max']) + if traffic_metrics['interval_stop_max'] < traffic_duration_limit : + verdict = 'FAIL' + + + run_traffic = dict( traffic_count = traffic_metrics['traffic_count'], + bw_min = traffic_metrics['bw_min'], + bw_max = traffic_metrics['bw_max'], + bw_mean = traffic_metrics['bw_mean'], + bw_median = traffic_metrics['bw_median'], + jitter_min = traffic_metrics['jitter_min'], + jitter_max = traffic_metrics['jitter_max'], + jitter_mean = traffic_metrics['jitter_mean'], + jitter_median = traffic_metrics['jitter_median'], + rl_min = traffic_metrics['rl_min'], + rl_max = traffic_metrics['rl_max'], + rl_mean = traffic_metrics['rl_mean'], + rl_median = traffic_metrics['rl_median'], + iperf_duration = traffic_metrics['interval_stop_max'], + dur_pass_fail_crit = dur_pass_fail_crit, + traffic_fig = traffic_fig_report ) + else: + run_traffic = dict( traffic_count = 0) + + else : + verdict = 'SKIP' + + + + # + # RUN verdict and finalization + # ---------------------------------------------------- + run_stop_time=datetime.datetime.now() + run_duration = run_stop_time-run_start_time +# print (Fore.WHITE + ("duration=" :"), + print (Fore.WHITE + indent + "> RUN duration : "+ str(run_duration) +"s" ) + + print (Fore.WHITE + indent + "> RUN verdict :"), + + if verdict == 'PASS': + nb_run_pass += 1 + print ( Fore.GREEN + verdict) + elif verdict == 'FAIL': + nb_run_failed += 1 + testcase_verdict = 'FAIL' + print ( Fore.RED + verdict) + elif verdict == 'SKIP': + nb_run_skip += 1 + print ( Fore.YELLOW + verdict) + else: + nb_run_inc += 1 + if testcase_verdict == 'PASS' : testcase_verdict = 'INCON' + print (Fore.YELLOW+'INCONCLUSIVE') + + run_results = dict( run_id=str(run), + run_start_time = run_start_time, + run_stop_time = run_stop_time , + run_verdict = verdict, + ue_seg_fault_status = ue_seg_fault_status, + run_duration = run_duration, + runs_metrics = runs_metrics, + run_traffic = run_traffic) + runs_results.append(run_results) + + # END RUN LOOP + #---------------------------------------------------- + + # Test case duration + # ---------------------------------- + testcase_time_stop = datetime.datetime.now() + print(Fore.WHITE + indent + "> testcase time stop : " + str(testcase_time_start) ), + print " -> TestCase duration = "+str(testcase_time_stop - testcase_time_start) + + # Save remote log files + # ----------------------------------- + #Now we change the permissions of the logfiles to avoid some of them being with root permissions + cmd = 'sudo -E chown -R ' + user + ' ' + logdir_eNB_testcase + res= oai_eNB.send_recv(cmd) + cmd = 'sudo -E chown -R ' + user + ' ' + logdir_UE_testcase + res= oai_UE.send_recv(cmd) + + # Save remote log files on MTC + #print "Copying files from eNBMachine " + eNBMachine + "logdir_eNB = " + logdir_eNB + SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB_testcase, openairdir_local + '/cmake_targets/autotests/log/', "get_all") + #print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE + SSHSessionWrapper(UEMachine, user, None, password, logdir_UE_testcase, openairdir_local + '/cmake_targets/autotests/log/', "get_all") + + oai_eNB.disconnect() + oai_UE.disconnect() + + # Set test case final verdict + # ----------------------------------- + test_result_string = 'do be completed' + + if testcase_verdict == 'PASS': + if nb_run_pass == 0 : + testcase_verdict = 'INCON' + + print(Fore.WHITE + indent + "> testcase final verdict :"), + if testcase_verdict == 'PASS': + print ( Fore.GREEN + testcase_verdict) + elif testcase_verdict == 'FAIL': + print ( Fore.RED + testcase_verdict) + else: + print (Fore.YELLOW+'INCONCLUSIVE') + + duration= testcase_time_stop - testcase_time_start + xmlFile = logdir_local_testcase + '/test.' + testcasename + '.xml' + xml="\n \n" + write_file(xmlFile, xml, mode="w") + + + test_result = dict(testcase_name=testcasename, + testcaseclass=testcaseclass, + testcase_verdict = testcase_verdict, + testcase_time_start=testcase_time_start, + testcase_time_stop=testcase_time_stop, + tags=tags, + nruns=nb_runs, + nb_run_pass = nb_run_pass, + nb_run_skip = nb_run_skip, + nb_run_failed = nb_run_failed, + nb_run_inc=nb_run_inc, + nb_seg_fault = nb_seg_fault, + testcase_timeout=timeout_cmd, + testcase_duration = duration, + testcase_eNBMachine =eNBMachine, + testcase_UEMachine =UEMachine, + runs_results = runs_results) + #test_results.append(test_result) + + return testcase_verdict + + + + # \brief This function searches if test case is present in list of test cases that need to be executed by user # \param testcasename the test case to search for # \param testcasegroup list that is passed from the arguments @@ -1149,12 +1754,14 @@ if openairdir_local is None: locallogdir = openairdir_local + '/cmake_targets/autotests/log' MachineList = '' MachineListGeneric='' +MachineDescDic={} flag_remove_logdir=False flag_start_testcase=False nruns_lte_softmodem='' flag_skip_git_head_check=False flag_skip_oai_install=False Timeout_cmd='' +xmlInputFile='' print "Number of arguments argc = " + str(len(sys.argv)) #for index in range(1,len(sys.argv) ): # print "argv_" + str(index) + " : " + sys.argv[index] @@ -1218,6 +1825,9 @@ while i < len (sys.argv): i = i +1 elif arg == '--skip-oai-install': flag_skip_oai_install=True + elif arg == '--test-suite' : + xmlInputFile = sys.argv[i+1] + i = i +1 elif arg == '-h' : print "-s: This flag *MUST* be set to start the test cases" print "-r: Remove the log directory in autotests" @@ -1235,6 +1845,7 @@ while i < len (sys.argv): print "--skip-git-head-check: skip checking of GitHead remote/local branch (only for debugging)" print "--timeout_cmd: Override the default parameter (timeout_cmd) in test_case_list.xml. This parameter is in seconds and should be > 120" print "--skip-oai-install: Skips the openairinterface5g installer" + print "--test-suite: Select a XML test-suite file" sys.exit() else : print "Unrecongnized Option: <" + arg + ">. Use -h to see valid options" @@ -1264,6 +1875,13 @@ cmd='ps aux |grep \"/usr/bin/ssh -q -l guptar\"| awk \'{print $2}\' | sudo xargs os.system(cmd) +try: + analyser = __import__("lib_autotest_analyser") +except ImportError as err: + print('Import error: ' + str(err)) + exit(0) + + if flag_start_testcase == False: print "You need to start the testcase by passing option -s. Use -h to see all options. Aborting now..." sys.exit(1) @@ -1286,12 +1904,14 @@ os.system(cmd) print "host = " + host print "user = " + user -xmlInputFile=os.environ.get('OPENAIR_DIR')+"/cmake_targets/autotests/test_case_list.xml" +if xmlInputFile == '': + xmlInputFile=os.environ.get('OPENAIR_DIR')+"/cmake_targets/autotests/test_case_list.xml" NFSResultsDir = '/mnt/sradio' cleanupOldProgramsScript = '$OPENAIR_DIR/cmake_targets/autotests/tools/remove_old_programs.bash' logdir = '/tmp/' + 'OAITestFrameWork-' + user + '/' logdirOAI5GRepo = logdir + 'openairinterface5g/' logdirOpenaircnRepo = logdir + 'openair-cn/' +patchdir = logdirOAI5GRepo + 'cmake_targets/autotests/patches/' if flag_remove_logdir == True: print "Removing directory: " + locallogdir @@ -1333,6 +1953,8 @@ ExmimoRfStop = xmlRoot.findtext('ExmimoRfStop',default='') if nruns_lte_softmodem == '': nruns_lte_softmodem = xmlRoot.findtext('nruns_lte-softmodem',default='') +OAI5GpatchFileList=xmlRoot.findall('OAI5GPatchFile') + print "MachineList = " + MachineList print "GitOpenair-cnRepo = " + GitOpenaircnRepo print "GitOAI5GRepo = " + GitOAI5GRepo @@ -1365,6 +1987,7 @@ MachineListGeneric = MachineListGeneric.split() #index=0 for machine in MachineList: oai_list.append( openair('localdomain',machine)) + MachineDescDic[machine]={} #index = index + 1 @@ -1475,6 +2098,7 @@ for oai in oai_list: cmd = cmd + 'git checkout ' + GitOpenaircnRepoBranch + '\n' cmd = cmd + 'env |grep OPENAIR' + '\n' cmd = cmd + ' cd ' + logdir + '\n' + cmd = cmd + 'mkdir -p ' + patchdir + '\n' cmd = cmd + ' ) > ' + setuplogfile + ' 2>&1 \n' #cmd = cmd + 'echo \' ' + cmd + '\' > ' + setup_script + ' 2>&1 \n ' #result = oai_list[index].send_recv(cmd, False, 300 ) @@ -1500,8 +2124,27 @@ for t in threads_init_setup: localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' port = 22 + + #Now we copy patch files and apply them + print "Installating patch files on machine " + MachineList[index] + for patchFile in OAI5GpatchFileList: + localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/patches/')+patchFile.get('name') + remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/patches/'+patchFile.get('name') + if patchFile.get('machine') == MachineList[index] or patchFile.get('machine') == None: + if os.path.isfile(localfile): + print "\t> PATCH FILE :"+localfile + paramList=[] + paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) + sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) + cmd = ' cd ' + logdirOAI5GRepo + ' ;git apply cmake_targets/autotests/patches/'+patchFile.get('name') + res = oai_list[index].send_recv(cmd) paramList=[] + + setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' + localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' + remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) #sftp_module (user, pw, MachineList[index], port, localfile, remotefile, sftp_log, "get") @@ -1574,6 +2217,23 @@ for testcase in testcaseList: SSHSessionWrapper('localhost', user, None, pw , NFSTestsResultsDir , locallogdir, "put_all") oai_localhost.disconnect() + elif testcaseclass == 'lte-softmodem-noS1' : + eNBMachine = testcase.findtext('eNB',default='') + UEMachine = testcase.findtext('UE',default='') + if (eNBMachine not in MachineList)|(UEMachine not in MachineList): + print "One of the machines is not in the machine list" + print "eNBMachine : " + eNBMachine + "UEMachine : " + UEMachine + "MachineList : " + ','.join(MachineList) + print "testcasename = " + testcasename + " class = " + testcaseclass + threadListGlobal = wait_testcaseclass_generic_threads(threadListGlobal, Timeout_execution) + + handle_testcaseclass_softmodem_noS1 (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, user, pw, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, Timeout_cmd ) + + #The lines below are copied from below to trace the failure of some of the machines in test setup. These lines below need to be removed in long term + print "Creating xml file for overall results..." + cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " + res=os.system(cmd) + os.system('sync') + elif (testcaseclass == 'compilation'): threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox,Timeout_execution, ExmimoRfStop) elif (testcaseclass == 'execution'): diff --git a/cmake_targets/autotests/run_lte-softmodem-nos1_tests.py b/cmake_targets/autotests/run_lte-softmodem-nos1_tests.py new file mode 100755 index 0000000000..19939f0d5c --- /dev/null +++ b/cmake_targets/autotests/run_lte-softmodem-nos1_tests.py @@ -0,0 +1,2785 @@ +#! /usr/bin/python +#****************************************************************************** + +# OpenAirInterface +# Copyright(c) 1999 - 2014 Eurecom + +# OpenAirInterface is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + + +# OpenAirInterface is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with OpenAirInterface.The full GNU General Public License is +# included in this distribution in the file called "COPYING". If not, +# see . + +# Contact Information +# OpenAirInterface Admin: openair_admin@eurecom.fr +# OpenAirInterface Tech : openair_tech@eurecom.fr +# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr + +# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + +# *******************************************************************************/ +# \author Rohit Gupta +# \version 0.1 +# @ingroup _test + + +#****************************************************************************** +# +# \file run_lte-softmodem-nos1_tests.py +# +# \par Informations +# - \b Project : UED Autotest Framework +# - \b Software : +# +# \date 16 september 2016 +# +# \version 0.1 +# +# \brief master test script to run test class 'handle_testcaseclass_softmodem_noS1' +# This script is largely inspired by 'run_exec_lte-softmodem_tests.py', and +# reused parts of it. +# +# \author Benoit ROBERT (benoit.robert@syrtem.com) +# +# \par Statement of Ownership +# COPYRIGHT (c) 2016 BY SYRTEM S.A.R.L +# This software is furnished under license and may be used and copied +# only in accordance with the terms of such license and with the inclusion +# of the above COPYRIGHT notice. This SOFTWARE or any other copies thereof +# may not be provided or otherwise made available to any other person. +# No title to and ownership of the SOFTWARE is hereby transferred. +# +# The information in this SOFTWARE is subject to change without notice +# and should not be constructed as a commitment by SYRTEM. +# SYRTEM assumes no responsibility for the use or reliability of its +# SOFTWARE on equipment or platform not explicitly validated by SYRTEM. +# +# ******************************************************************************* + +import tempfile +import threading +import sys +import traceback +import wave +import os +import time +import datetime +import getpass +import math #from time import clock +import xml.etree.ElementTree as ET +import re + +from colorama import Fore, Back, Style + +import numpy as np + +import log + +from openair import * + +import paramiko + +import subprocess +import commands +sys.path.append('/opt/ssh') +sys.path.append(os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/')) + +from lib_autotest import * +import ssh +from ssh import SSHSession +import argparse + + +def exit_prog(exit_val): + print(Style.RESET_ALL), + sys.exit(exit_val) + +# \brief write a string to a file +# \param filename name of file +# \param string string to write +# \mode file opening mode (default=write) +def write_file(filename, string, mode="w"): + text_file = open(filename, mode) + text_file.write(string) + text_file.close() + +# \brief function to check if test case passed throughput test +# \param filename name of file which has throughput results (usually from iperf -s ... +# \param min_tput minimum throughput +# \param max_tuput maximum throughput +# \param average average throughput +# \param min_duration minimum duration of throughput +#The throughput values found in file must be higher than values from from arguments 2,3,4,5 +#The function returns True if throughput conditions are saisfied else it returns fails +def tput_test(filename, min_tput, max_tput, average, min_duration): + + if os.path.exists(filename): + with open (filename, "r") as myfile: + data=myfile.read() + p=re.compile('(\d*.\d*) Mbits/sec') + array=p.findall(data) + array = [ float(x) for x in array ] + duration = array.__len__() + if duration !=0: + min_list = min(array) + max_list = max(array) + average_list = np.mean(array) + else: + min_list = 0 + max_list = 0 + average_list=0 + tput_string=' ( '+ "min=%0.2f" % min_list + ' Mbps / ' + "max=%0.2f" % max_list + ' Mbps / ' + "avg=%0.2f" % average_list + ' Mbps / ' + "dur=%0.2f" % duration + ' s) ' + if (min_list >= min_tput and max_list >= max_tput and average_list >= average and duration >= min_duration): + return True , tput_string + else: + return False , tput_string + else: + return False , tput_string + +# \brief Convert string to float or return None if there is exception +def try_convert_to_float(string, fail=None): + try: + return float(string) + except Exception: + return fail; + +# \brief get throughput statistics from log file +# \param search_expr search expression found in test_case_list.xml file +# \param logfile_traffic logfile which has traffic statistics +def tput_test_search_expr (search_expr, logfile_traffic): + result=0 + tput_string='' + if search_expr !='': + if search_expr.find('throughput_test')!= -1 : + p= re.compile('min\s*=\s*(\d*.\d*)\s*Mbits/sec') + min_tput=p.findall(search_expr) + if min_tput.__len__()==1: + min_tput = min_tput[0] + else: + min_tput = None + + p= re.compile('max\s*=\s*(\d*.\d*)\s*Mbits/sec') + max_tput=p.findall(search_expr) + if max_tput.__len__()==1: + max_tput = max_tput[0] + else: + max_tput = None + + p= re.compile('average\s*=\s*(\d*.\d*)\s*Mbits/sec') + avg_tput=p.findall(search_expr) + if avg_tput.__len__()==1: + avg_tput=avg_tput[0] + else: + avg_tput = None + + p= re.compile('duration\s*=\s*(\d*.\d*)\s*s') + duration=p.findall(search_expr) + if duration.__len__()==1: + duration = duration[0] + else: + duration = None + + min_tput = try_convert_to_float(min_tput) + max_tput = try_convert_to_float(max_tput) + avg_tput = try_convert_to_float(avg_tput) + duration = try_convert_to_float(duration) + + if (min_tput != None and max_tput != None and avg_tput != None and duration != None ): + result, tput_string = tput_test(logfile_traffic, min_tput, max_tput, avg_tput, duration) + else: + result=1 + + return result, tput_string + +# \brief function to copy files to/from remote machine +# \param username user with which to make sftp connection +# \param password password of user +# \param hostname host to connect +# \ports port of remote machine on which server is listening +# \paramList This is list of operations as a set {operation: "get/put", localfile: "filename", remotefile: "filename" +# \param logfile Ignored currently and set once at the beginning of program +def sftp_module (username, password, hostname, ports, paramList,logfile): + #localD = localfile + #remoteD = remotefile + #fd, paramiko_logfile = tempfile.mkstemp() + #res = os.close(fd ) + #paramiko logfile path should not be changed with multiple calls. The logs seem to in first file regardless + error = "" + #The lines below are outside exception loop to be sure to terminate the test case if the network connectivity goes down or there is authentication failure + transport = paramiko.Transport((hostname, ports)) + transport.connect(username = username, password = password) + sftp = paramiko.SFTPClient.from_transport(transport) + # index =0 + for param in paramList: + try: + operation = param["operation"] + localD = param["localfile"] + remoteD = param["remotefile"] + if operation == "put": + sftp.put(remotepath=remoteD, localpath=localD) + elif operation == "get": + sftp.get(remotepath=remoteD, localpath=localD) + else : + print "sftp_module: unidentified operation:<" + operation + "> Exiting now" + print "hostname = " + hostname + print "ports = " + ports + print "localfile = " + localD + print "remotefile = " + remoteD + print "operation = " + operation + sys.exit() + except Exception, e: + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n username = ' + username + '\n hostname = ' + hostname + '\n localfile = ' + localD + '\n remotefile = ' + remoteD + '\n operation = ' + operation + '\nlogfile = ' + logfile + '\n ports = ' + str(ports) + '\n' + error = error + traceback.format_exc() + print error + + sftp.close() + transport.close() + res = os.system('\n echo \'SFTP Module Log for Machine: <' + hostname + '> starts...\' >> ' + logfile + ' 2>&1 ') + res = os.system('cat ' + paramiko_logfile + ' >> ' + logfile + ' 2>&1 \n') + write_file(logfile, error, "a") + res = os.system('\n echo \'SFTP Module Log for Machine: <' + hostname + '> ends...\' >> ' + logfile + ' 2>&1 \n') + +# \brief bash script stub put at the end of scripts to terminate it +# \param timeout_cmd terminate script after timeout_cmd seconds +# \param terminate_missing_procs if True terminate all the processes launched by script if one of them terminates prematurely (due to error) +def finalize_deploy_script (timeout_cmd, terminate_missing_procs='False'): + cmd = 'declare -i timeout_cmd='+str(timeout_cmd) + '\n' + if terminate_missing_procs == 'True': + cmd = cmd + """ + #The code below checks if one the processes launched in background has crashed. + #If it does, then the code below terminates all the child processes created by this script + declare -i wakeup_interval=1 + declare -i step=0 + echo \"Array pid = ${array_exec_pid[@]}\" + while [ "$step" -lt "$timeout_cmd" ] + do + declare -i break_while_loop=0 + #Iterate over each process ID in array_exec_pid + for i in "${array_exec_pid[@]}" + do + numchild=`pstree -p $i | perl -ne 's/\((\d+)\)/print " $1"/ge' |wc -w` + echo "PID = $i, numchild = $numchild" + if [ "$numchild" -eq "0" ] ; then + echo "Process ID $i has finished unexpectedly. Now preparing to kill all the processes " + break_while_loop=1 + break + fi + done + if [ "$break_while_loop" -eq "1" ] ; then + break + fi + step=$(( step + wakeup_interval )) + sleep $wakeup_interval + done + echo "Final time step (Duration of test case) = $step " + date + """ + else: + #We do not terminate the script if one of the processes has existed prematurely + cmd = cmd + 'sleep ' + str(timeout_cmd) + ' ; date \n' + + return cmd + +# \brief run python script and update config file params of test case +# \param oai module with already open connection +# \param config_string config string taken from xml file +# \param logdirRepo directory of remote repository +# \param python_script python script location +def update_config_file(oai, config_string, logdirRepo, python_script): + cmd="" + if config_string : + stringArray = config_string.splitlines() + #python_script = '$OPENAIR_DIR/targets/autotests/tools/search_repl.py' + for string in stringArray: + #split the string based on space now + string1=string.split() + cmd = cmd + 'python ' + python_script + ' ' + logdirRepo+'/'+string1[0] + ' ' + string1[1] + ' '+ string1[2] + '\n' + #cmd = cmd + 'perl -p -i -e \'s/'+ string1[1] + '\\s*=\\s*"\\S*"\\s*/' + string1[1] + ' = "' + string1[2] +'"' + '/g\' ' + logdirRepo + '/' +string1[0] + '\n' + return cmd + #result = oai.send_recv(cmd) + +# \brief thread safe sshsession wrapper due to occasional connection issues with ssh +# \param machine name of machine +# \param username user login for remote machine +# \param key_file file name which has keys to enable passwordless login +# \param password password for remote machine +# \param logdir_remote remote directory +# \param logdir_local_base local directory +# \param operation operation to perform (get_all, put_all) transfers recursively for directories +def SSHSessionWrapper(machine, username, key_file, password, logdir_remote, logdir_local_base, operation): + max_tries = 100 + i=0 + while i <= max_tries: + i = i +1 + try: + ssh = SSHSession(machine , username, key_file, password) + if operation == "get_all": + ssh.get_all(logdir_remote , logdir_local_base) + elif operation == "put_all": + ssh.put_all(logdir_local_base, logdir_remote ) + else: + print "Error: Uknown operation in SSHSessionWrapper. Exiting now..." + sys.exit(1) + break + except Exception, e: + error='' + error = error + ' In Class = function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n username = ' + username + '\n machine = ' + machine + '\n logdir_remote = ' + logdir_remote + '\n logdir_local_base = ' + logdir_local_base + error = error + traceback.format_exc() + print error + print " Retrying again in 1 seconds" + time.sleep(1) + print "Continuing ..." + if i ==max_tries: + print "Fatal Error: Max no of retries reached. Exiting now..." + sys.exit(1) + + + +# \briefFunction to clean old programs that might be running from earlier execution +# \param oai - parameter for making connection to machine +# \parm programList list of programs that must be terminated before execution of any test case +# \param CleanUpAluLteBox program to terminate AlU Bell Labs LTE Box +# \param ExmimoRfStop String to stop EXMIMO card (specified in test_case_list.xml) +def cleanOldPrograms(oai, programList, CleanUpAluLteBox, ExmimoRfStop, logdir, logdirOAI5GRepo): + cmd = 'killall -9 ' + programList + result = oai.send(cmd, True) +# print "\t\t > "+cmd +# print "\t\t < "+result + +# print "Killing old programs on ..." + result + programArray = programList.split() + programListJoin = '|'.join(programArray) + cmd = " ( date ;echo \"Starting cleaning old programs.. \" ; dmesg|tail ; echo \"Current disk space.. \" ; df -h )>& " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync" + result=oai.send_recv(cmd) +# print "\t\t > "+cmd +# print "\t\t < "+result + + cmd = cleanupOldProgramsScript + ' ' + '\''+programListJoin+'\'' + #result = oai.send_recv(cmd) + #print result + result = oai.send_expect_false(cmd, 'Match found', False) +# print "\t\t > "+cmd +# print "\t\t < "+result + +# print "Looking for old programs..." + result + res=oai.send_recv(CleanUpAluLteBox, True) +# print "\t\t > "+CleanUpAluLteBox +# print "\t\t < "+res + cmd= " echo \"Starting EXmimoRF Stop... \" >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync "; + result = oai.send_recv(cmd) +# print "\t\t > "+cmd +# print "\t\t < "+result + cmd = "( " + "cd " + logdirOAI5GRepo + " ; source oaienv ; " + ExmimoRfStop + " ) >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync " +# print "cleanoldprograms cmd = " + cmd + res=oai.send_recv(cmd, False, timeout=600) +# print "\t\t > "+cmd +# print "\t\t < "+res + + cmd= " echo \"Stopping EXmimoRF Stop... \" >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync "; + result = oai.send_recv(cmd) +# print "\t\t > "+cmd +# print "\t\t < "+result + + #res = oai.send_recv(ExmimoRfStop, False) + cmd = " ( date ;echo \"Finished cleaning old programs.. \" ; dmesg | tail)>> $HOME/.oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync" + res=oai.send_recv(cmd) +# print "\t\t > "+cmd +# print "\t\t < "+res + +# \brief Class thread to launch a generic command on remote machine +# \param threadID number of thread (for book keeping) +# \param threadname string of threadname (for book keeping) +# \param machine machine name on which to run the command +# \param username username with which to login +# \param password password with which to login +# \param cmd command as a string to run on remote machine +# \parma sudo if True sudo is set +# \param timeout timeout of command in seconds +class oaiThread (threading.Thread): + def __init__(self, threadID, threadname, machine, username, password, cmd, sudo, timeout): + threading.Thread.__init__(self) + self.threadID = threadID + self.threadname = threadname + self.machine = machine + self.username = username + self.password = password + self.cmd = cmd + self.sudo = sudo + self.timeout = timeout + def run(self): + try: + oai = openair('localdomain',self.machine) + oai.connect(self.username, self.password) + # print "Starting " + self.threadname + " on machine " + self.machine + result = oai.send_recv(self.cmd, self.sudo, self.timeout) + #print "result = " + result + #print "Exiting " + self.threadname + oai.disconnect() + except Exception, e: + error='' + error = error + ' In class oaiThread, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n threadID = ' + str(self.threadID) + '\n threadname = ' + self.threadname + '\n timeout = ' + str(self.timeout) + '\n machine = ' + self.machine + '\n cmd = ' + self.cmd + '\n timeout = ' + str(self.timeout) + '\n username = ' + self.username + '\n' + error = error + traceback.format_exc() + print error + + +# \brief This class runs test cases with class {execution, compilatation} +# \param threadID number of thread (for book keeping) +# \param name string of threadname (for book keeping) +# \param machine machine name on which to run the command +# \param logdirOAI5GRepo directory on remote machine which as openairinterface5g repo installed +# \param testcasename name of test case to run on remote machine +# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) +# \param user username with which to login +# \param password password with which to login +# \param timeout timeout of command in seconds +# \param ExmimoRfStop command to stop EXMIMO Card +class testCaseThread_generic (threading.Thread): + def __init__(self, threadID, name, machine, logdirOAI5GRepo, testcasename,oldprogramList, CleanupAluLteBox, user, password, timeout, ExmimoRfStop): + threading.Thread.__init__(self) + self.threadID = threadID + self.name = name + self.testcasename = testcasename + self.timeout = timeout + self.machine = machine + self.logdirOAI5GRepo = logdirOAI5GRepo + self.oldprogramList = oldprogramList + self.CleanupAluLteBox = CleanupAluLteBox + self.password=password + self.ExmimoRfStop = ExmimoRfStop + self.user = user + def run(self): + try: + mypassword='' + #addsudo = 'echo \'' + mypassword + '\' | sudo -S -E ' + addpass = 'echo \'' + mypassword + '\' | ' + #user = getpass.getuser() + print "Starting test case : " + self.testcasename + " On machine " + self.machine + " timeout = " + str(self.timeout) + oai = openair('localdomain',self.machine) + oai.connect(self.user, self.password) + #cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox, self.ExmimoRfStop) + logdir_local = os.environ.get('OPENAIR_DIR') + logdir_local_testcase = logdir_local +'/cmake_targets/autotests/log/'+ self.testcasename + logdir_local_base = logdir_local +'/cmake_targets/autotests/log/' + logdir_remote_testcase = self.logdirOAI5GRepo + '/cmake_targets/autotests/log/' + self.testcasename + logdir_remote = self.logdirOAI5GRepo + '/cmake_targets/autotests/log/' + logfile_task_testcasename = logdir_local_testcase + '/test_task' + '_' + self.testcasename + '_.log' + logfile_task_testcasename_out = logdir_remote + '/test_task_out' + '_' + self.testcasename + '_.log' + #print "logdir_local_testcase = " + logdir_local_testcase + #print "logdir_remote_testcase = " + logdir_remote_testcase + #if os.path.exists(logdir_local_testcase) == True : + # os.removedirs(logdir_local_testcase) + #os.mkdir(logdir_local_testcase) + os.system("rm -fr " + logdir_local_testcase ) + os.system("mkdir -p " + logdir_local_testcase) + cmd = "mkdir -p " + logdir_remote_testcase + res = oai.send_recv(cmd, False, self.timeout) + #print "res = " + res + + cmd = "( cd " + self.logdirOAI5GRepo + " \n " + cmd = cmd + "source oaienv \n" + cmd = cmd + "$OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash --run-group \"" + self.testcasename + "\" -p \'\'" + cmd = cmd + " ) >& " + logfile_task_testcasename_out + " ; " + "mkdir -p " + logdir_remote_testcase + "; mv " + logfile_task_testcasename_out + " " +logdir_remote_testcase + + #print "cmd = " + cmd + res = oai.send_recv(cmd, False, self.timeout) + #print "res = " + res + #print "ThreadID = " + str(self.threadID) + "ThreadName: " + self.name + " testcasename: " + self.testcasename + "Execution Result = " + res + write_file(logfile_task_testcasename, cmd, mode="w") + #Now we copy all the remote files + #ssh = SSHSession(self.machine , username=user, key_file=None, password=self.password) + #ssh.get_all(logdir_remote_testcase , logdir_local_base) + SSHSessionWrapper(self.machine, self.user, None, self.password, logdir_remote_testcase, logdir_local_base, "get_all") + print "Finishing test case : " + self.testcasename + " On machine " + self.machine + #cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox, self.ExmimoRfStop) + #oai.kill(user,mypassword) + oai.disconnect() + except Exception, e: + error='' + error = error + ' In Class = testCaseThread_generic, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n threadID = ' + str(self.threadID) + '\n threadName = ' + self.name + '\n testcasename = ' + self.testcasename + '\n machine = ' + self.machine + '\n logdirOAI5GRepo = ' + self.logdirOAI5GRepo + '\n' + '\n timeout = ' + str(self.timeout) + '\n user = ' + self.user + error = error + traceback.format_exc() + print error + print "Continuing with next test case..." + #sys.exit() + + + +# \bried function to run a command as a sudo +# \param cmd command as a string +# \param password password to be supplied +def addsudo (cmd, password=""): + cmd = 'echo \'' + password + '\' | sudo -S -E bash -c \' ' + cmd + '\' ' + return cmd + +# \brief handler for executing test cases (compilation, execution) +# \param name of testcase +# \param threadListGeneric list of threads which are already running on remote machines +# \param oldprogramList list of programs which must be terminated before running a test case +# \param logdirOAI5GRepo directory on remote machine which as openairinterface5g repo installed +# \param MachineList list of all machines on which generic test cases can be run +# \param user username with which to login +# \param password password with which to login +# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) +# \param timeout timeout of command in seconds +# \param ExmimoRfStop command to stop EXMIMO Card +def handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramList, logdirOAI5GRepo, MachineList, user, password, CleanupAluLteBox,timeout, ExmimoRfStop): + try: + mypassword=password + MachineListFree=[] + threadListNew=[] + while MachineListFree.__len__() == 0 : + MachineListBusy=[] + MachineListFree=[] + threadListNew=[] + #first we need to find the list of free machines that we could run our test case + if threadListGeneric.__len__() ==0 : + #This means no thread is started yet + MachineListFree = MachineList[:] + else : + for param in threadListGeneric : + thread_id = param["thread_id"] + machine = param["Machine"] + testcasenameold = param["testcasename"] + thread_id.join(1) + if thread_id.isAlive() == True: + threadListNew.append(param) + print "thread_id is alive: testcasename: " + testcasenameold + " on machine "+ machine + if machine not in MachineListBusy: + MachineListBusy.append(machine) + else : + print "thread_id is finished: testcasename: " + testcasenameold + " on machine " + machine + #threadListGeneric.remove(param) + #if machine not in MachineListFree: + # MachineListFree.append(machine) + #Now we check if there is at least one free machine + MachineListFree = MachineList[:] + for machine in MachineListBusy: + if machine in MachineListFree: + MachineListFree.remove(machine) + print "MachineListFree = " + ','.join(MachineListFree) + print "MachineListBusy = " + ','.join(MachineListBusy) + print "MachineList = " + ','.join(MachineList) + machine = MachineListFree[0] + thread = testCaseThread_generic(1,"Generic Thread_"+testcasename+"_"+ "machine_", machine, logdirOAI5GRepo, testcasename, oldprogramList, CleanupAluLteBox, user, password, timeout, ExmimoRfStop) + param={"thread_id":thread, "Machine":machine, "testcasename":testcasename} + thread.start() + threadListNew.append(param) + return threadListNew + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n testcasename = ' + testcasename + '\n logdirOAI5GRepo = ' + logdirOAI5GRepo + '\n MachineList = ' + ','.join(MachineList) + '\n timeout = ' + str(timeout) + '\n' + 'user = ' + user + error = error + traceback.format_exc() + print error + print "Continuing..." + #sys.exit(1) + +# \brief Blocking wait for all threads related to generic testcase execution, class (compilation and execution) +# \param threadListGeneric list of threads which are running on remote machines +# \param timeout time to wait on threads in seconds +def wait_testcaseclass_generic_threads(threadListGeneric, timeout = 1): + threadListGenericNew=[] + for param in threadListGeneric: + thread_id = param["thread_id"] + machine = param["Machine"] + testcasenameold = param["testcasename"] + thread_id.join(timeout) + if thread_id.isAlive() == True: + threadListGenericNew.append(param) + print "thread_id on machine: " + machine + " is still alive: testcasename: " + testcasenameold + print " Exiting now..." + sys.exit(1) + else: + print "thread_id on machine: " + machine + " is stopped: testcasename: " + testcasenameold + #threadListGeneric.remove(param) + return threadListGenericNew + + +# \brief handler for executing test cases (lte-softmodem) +# \param testcase name of testcase +# \param oldprogramList list of programs which must be terminated before running a test case +# \param logdirOAI5GRepo directory on remote machine which has openairinterface5g repo installed +# \param logdirOpenaircnRepo directory on remote machine which has openair-cn repo installed +# \param MachineList list of all machines on which test cases can be run +# \param user username with which to login +# \param password password with which to login +# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) +# \param ExmimoRfStop command to stop EXMIMO Card +# \param nruns_lte-softmodem global parameter to override number of runs (nruns) within the test case +def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, user, password, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, timeout_cmd): + #We ignore the password sent to this function for secuirity reasons for password present in log files + #It is recommended to add a line in /etc/sudoers that looks something like below. The line below will run sudo without password prompt + # your_user_name ALL=(ALL:ALL) NOPASSWD: ALL + mypassword='' + #addsudo = 'echo \'' + mypassword + '\' | sudo -S -E ' + addpass = 'echo \'' + mypassword + '\' | ' + #user = getpass.getuser() + testcasename = testcase.get('id') + testcaseclass = testcase.findtext('class',default='') + if timeout_cmd == '': + timeout_cmd = testcase.findtext('TimeOut_cmd',default='') + timeout_cmd = int(float(timeout_cmd)) + #Timeout_thread is more than that of cmd to have room for compilation time, etc + timeout_thread = timeout_cmd + 300 + if nruns_lte_softmodem == '': + nruns = testcase.findtext('nruns',default='') + else: + nruns = nruns_lte_softmodem + nruns = int(float(nruns)) + tags = testcase.findtext('tags',default='') + + RRHMachine = testcase.findtext('RRH',default='') + RRH_compile_prog = testcase.findtext('RRH_compile_prog',default='') + RRH_compile_prog_args = testcase.findtext('RRH_compile_prog_args',default='') + RRH_pre_exec = testcase.findtext('RRH_pre_exec',default='') + RRH_pre_exec_args = testcase.findtext('RRH_pre_exec_args',default='') + RRH_main_exec = testcase.findtext('RRH_main_exec',default='') + RRH_main_exec_args = testcase.findtext('RRH_main_exec_args',default='') + RRH_terminate_missing_procs = testcase.findtext('RRH_terminate_missing_procs',default='True') + + + eNBMachine = testcase.findtext('eNB',default='') + eNB_config_file = testcase.findtext('eNB_config_file',default='') + eNB_compile_prog = testcase.findtext('eNB_compile_prog',default='') + eNB_compile_prog_args = testcase.findtext('eNB_compile_prog_args',default='') + eNB_pre_exec = testcase.findtext('eNB_pre_exec',default='') + eNB_pre_exec_args = testcase.findtext('eNB_pre_exec_args',default='') + eNB_main_exec = testcase.findtext('eNB_main_exec',default='') + eNB_main_exec_args = testcase.findtext('eNB_main_exec_args',default='') + eNB_traffic_exec = testcase.findtext('eNB_traffic_exec',default='') + eNB_traffic_exec_args = testcase.findtext('eNB_traffic_exec_args',default='') + eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='True') + eNB_search_expr_true = testcase.findtext('eNB_search_expr_true','') + if re.compile('\w+').match(eNB_search_expr_true) != None: + eNB_search_expr_true = eNB_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' + + UEMachine = testcase.findtext('UE',default='') + UE_config_file = testcase.findtext('UE_config_file',default='') + UE_compile_prog = testcase.findtext('UE_compile_prog',default='') + UE_compile_prog_args = testcase.findtext('UE_compile_prog_args',default='') + UE_pre_exec = testcase.findtext('UE_pre_exec',default='') + UE_pre_exec_args = testcase.findtext('UE_pre_exec_args',default='') + UE_main_exec = testcase.findtext('UE_main_exec',default='') + UE_main_exec_args = testcase.findtext('UE_main_exec_args',default='') + UE_traffic_exec = testcase.findtext('UE_traffic_exec',default='') + UE_traffic_exec_args = testcase.findtext('UE_traffic_exec_args',default='') + UE_terminate_missing_procs = testcase.findtext('UE_terminate_missing_procs',default='True') + UE_search_expr_true = testcase.findtext('UE_search_expr_true','') + UE_stop_script = testcase.findtext('UE_stop_script','') + if re.compile('\w+').match(UE_search_expr_true) != None: + UE_search_expr_true = UE_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' + + EPCMachine = testcase.findtext('EPC',default='') + EPC_config_file = testcase.findtext('EPC_config_file',default='') + EPC_compile_prog = testcase.findtext('EPC_compile_prog',default='') + EPC_compile_prog_args = testcase.findtext('EPC_compile_prog_args',default='') + HSS_compile_prog = testcase.findtext('HSS_compile_prog',default='') + HSS_compile_prog_args = testcase.findtext('HSS_compile_prog_args',default='') + + EPC_pre_exec= testcase.findtext('EPC_pre_exec',default='') + EPC_pre_exec_args = testcase.findtext('EPC_pre_exec_args',default='') + EPC_main_exec= testcase.findtext('EPC_main_exec',default='') + EPC_main_exec_args = testcase.findtext('EPC_main_exec_args',default='') + HSS_main_exec= testcase.findtext('HSS_main_exec',default='') + HSS_main_exec_args = testcase.findtext('HSS_main_exec_args',default='') + EPC_traffic_exec = testcase.findtext('EPC_traffic_exec',default='') + EPC_traffic_exec_args = testcase.findtext('EPC_traffic_exec_args',default='') + EPC_terminate_missing_procs = testcase.findtext('EPC_terminate_missing_procs',default='True') + EPC_search_expr_true = testcase.findtext('EPC_search_expr_true','') + if re.compile('\w+').match(EPC_search_expr_true) != None: + EPC_search_expr_true = EPC_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' + + index_eNBMachine = MachineList.index(eNBMachine) + index_UEMachine = MachineList.index(UEMachine) +# index_EPCMachine = MachineList.index(EPCMachine) + cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep OPENAIR' + oai_eNB = openair('localdomain', eNBMachine) + oai_eNB.connect(user, password) + res= oai_eNB.send_recv(cmd) + oai_UE = openair('localdomain', UEMachine) + oai_UE.connect(user, password) +# print cmd + res = oai_UE.send_recv(cmd) +# print res +# oai_EPC = openair('localdomain', EPCMfachine) +# oai_EPC.connect(user, password) + res = oai_eNB.send_recv(cmd) + if RRHMachine != '': + cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep OPENAIR' + index_RRHMachine = MachineList.index(RRHMachine) + oai_RRH = openair('localdomain', RRHMachine) + oai_RRH.connect(user, password) + res= oai_RRH.send_recv(cmd) + #cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) + #cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) + #cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) + logdir_local = os.environ.get('OPENAIR_DIR') + if logdir_local is None: + print "Environment variable OPENAIR_DIR not set correctly" + sys.exit() + + #Make the log directory of test case + #cmd = 'mkdir -p ' + logdir_eNB + #result = oai_eNB.send_recv(cmd) + #cmd = 'mkdir -p ' + logdir_UE + #print cmd + #result = oai_UE.send_recv(cmd) + #print result + #cmd = 'mkdir -p ' + logdir_EPC + #result = oai_EPC.send_recv(cmd) + + print "Updating the config files for ENB/UE/EPC..." + #updating the eNB/UE/EPC configuration file from the test case + #update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo) + #update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo) + #update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo) + test_result=1 + test_result_string='' + start_time=time.time() + for run in range(0,nruns): + run_result=1 + run_result_string='' + logdir_eNB = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) + logdir_RRH = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) + logdir_UE = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) + logdir_EPC = logdirOpenaircnRepo+'/TEST/autotests/log/'+ testcasename + '/run_' + str(run) + logdir_local_testcase = logdir_local + '/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) + #Make the log directory of test case + if RRHMachine != '': + cmd = 'rm -fr ' + logdir_RRH + ' ; mkdir -p ' + logdir_RRH + result = oai_RRH.send_recv(cmd) + cmd = 'rm -fr ' + logdir_eNB + ' ; mkdir -p ' + logdir_eNB + result = oai_eNB.send_recv(cmd) + cmd = 'rm -fr ' + logdir_UE + ' ; mkdir -p ' + logdir_UE +# print cmd + result = oai_UE.send_recv(cmd) + # print result + cmd = 'rm -fr ' + logdir_EPC + '; mkdir -p ' + logdir_EPC +# result = oai_EPC.send_recv(cmd) + cmd = ' rm -fr ' + logdir_local_testcase + ' ; mkdir -p ' + logdir_local_testcase + result = os.system(cmd) + + if RRHMachine != '': + logfile_compile_RRH = logdir_RRH + '/RRH_compile' + '_' + str(run) + '_.log' + logfile_exec_RRH = logdir_RRH + '/RRH_exec' + '_' + str(run) + '_.log' + logfile_pre_exec_RRH = logdir_RRH + '/RRH_pre_exec' + '_' + str(run) + '_.log' + logfile_task_RRH_compile_out = logdir_RRH + '/RRH_task_compile_out' + '_' + str(run) + '_.log' + logfile_task_RRH_compile = logdir_local_testcase + '/RRH_task_compile' + '_' + str(run) + '_.log' + logfile_task_RRH_out = logdir_RRH + '/RRH_task_out' + '_' + str(run) + '_.log' + logfile_task_RRH = logdir_local_testcase + '/RRH_task' + '_' + str(run) + '_.log' + task_RRH_compile = ' ( uname -a ; date \n' + task_RRH_compile = task_RRH_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_RRH_compile = task_RRH_compile + 'env |grep OPENAIR \n' + if RRH_compile_prog != "": + task_RRH_compile = task_RRH_compile + ' ( ' + RRH_compile_prog + ' '+ RRH_compile_prog_args + ' ) > ' + logfile_compile_RRH + ' 2>&1 \n' + task_RRH_compile = task_RRH_compile + ' date ) > ' + logfile_task_RRH_compile_out + ' 2>&1 ' + write_file(logfile_task_RRH_compile, task_RRH_compile, mode="w") + + task_RRH = ' ( uname -a ; date \n' + task_RRH = task_RRH + ' export OPENAIR_TESTDIR=' + logdir_RRH + '\n' + task_RRH = task_RRH + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_RRH = task_RRH + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' + + if RRH_pre_exec != "": + task_RRH = task_RRH + ' ( date; ' + RRH_pre_exec + ' '+ RRH_pre_exec_args + ' ) > ' + logfile_pre_exec_RRH + ' 2>&1 \n' + if RRH_main_exec != "": + task_RRH = task_RRH + ' ( date; ' + addsudo(RRH_main_exec + ' ' + RRH_main_exec_args, mypassword) + ' ) > ' + logfile_exec_RRH + ' 2>&1 & \n' + task_RRH = task_RRH + 'array_exec_pid+=($!) \n' + task_RRH = task_RRH + 'echo eNB_main_exec PID = $! \n' + #terminate the eNB test case after timeout_cmd seconds + task_RRH = task_RRH + finalize_deploy_script (timeout_cmd, RRH_terminate_missing_procs) + ' \n' + task_RRH = task_RRH + 'handle_ctrl_c' + '\n' + task_RRH = task_RRH + ' ) > ' + logfile_task_RRH_out + ' 2>&1 ' + write_file(logfile_task_RRH, task_RRH, mode="w") + + logfile_compile_eNB = logdir_eNB + '/eNB_compile' + '_' + str(run) + '_.log' + logfile_exec_eNB = logdir_eNB + '/eNB_exec' + '_' + str(run) + '_.log' + logfile_pre_exec_eNB = logdir_eNB + '/eNB_pre_exec' + '_' + str(run) + '_.log' + logfile_traffic_eNB = logdir_eNB + '/eNB_traffic' + '_' + str(run) + '_.log' + logfile_task_eNB_compile_out = logdir_eNB + '/eNB_task_compile_out' + '_' + str(run) + '_.log' + logfile_task_eNB_compile = logdir_local_testcase + '/eNB_task_compile' + '_' + str(run) + '_.log' + logfile_task_eNB_out = logdir_eNB + '/eNB_task_out' + '_' + str(run) + '_.log' + logfile_task_eNB = logdir_local_testcase + '/eNB_task' + '_' + str(run) + '_.log' + logfile_local_traffic_eNB_out = logdir_local_testcase + '/eNB_traffic' + '_' + str(run) + '_.log' + logfile_tshark_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.log' + logfile_pcap_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.pcap' + logfile_pcap_zip_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.pcap.zip' + logfile_pcap_tmp_eNB = '/tmp/' + '/eNB_tshark' + '_' + str(run) + '_.pcap' + + task_eNB_compile = ' ( uname -a ; date \n' + task_eNB_compile = task_eNB_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_eNB_compile = task_eNB_compile + 'env |grep OPENAIR \n' + task_eNB_compile = task_eNB_compile + update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' + if eNB_compile_prog != "": + task_eNB_compile = task_eNB_compile + ' ( ' + eNB_compile_prog + ' '+ eNB_compile_prog_args + ' ) > ' + logfile_compile_eNB + ' 2>&1 \n' + task_eNB_compile = task_eNB_compile + ' date ) > ' + logfile_task_eNB_compile_out + ' 2>&1 ' + write_file(logfile_task_eNB_compile, task_eNB_compile, mode="w") + + task_eNB = ' ( uname -a ; date \n' + task_eNB = task_eNB + ' export OPENAIR_TESTDIR=' + logdir_eNB + '\n' + task_eNB = task_eNB + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_eNB = task_eNB + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' + + if eNB_pre_exec != "": + task_eNB = task_eNB + ' ( date; ' + eNB_pre_exec + ' '+ eNB_pre_exec_args + ' ) > ' + logfile_pre_exec_eNB + ' 2>&1 \n' + if eNB_main_exec != "": + task_eNB = task_eNB + ' ( date; ' + addsudo(eNB_main_exec + ' ' + eNB_main_exec_args, mypassword) + ' ) > ' + logfile_exec_eNB + ' 2>&1 & \n' + task_eNB = task_eNB + 'array_exec_pid+=($!) \n' + task_eNB = task_eNB + 'echo eNB_main_exec PID = $! \n' + if eNB_traffic_exec != "": + cmd_traffic = eNB_traffic_exec + ' ' + eNB_traffic_exec_args + if cmd_traffic.find('-c') >= 0: + cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60) + task_eNB = task_eNB + ' (date; ' + cmd_traffic + ' ) > ' + logfile_traffic_eNB + ' 2>&1 & \n' + task_eNB = task_eNB + 'array_exec_pid+=($!) \n' + task_eNB = task_eNB + 'echo eNB_traffic_exec PID = $! \n' + + task_eNB = task_eNB + ' (date; sudo rm -f ' + logfile_pcap_tmp_eNB + ' ; sudo -E tshark -i lo -s 65535 -a duration:' + str(timeout_cmd-10)+ ' -w ' + logfile_pcap_tmp_eNB+ ' ; sudo -E chown ' + user + ' ' + logfile_pcap_tmp_eNB + ' ; zip -j -9 ' + logfile_pcap_zip_eNB + ' ' + logfile_pcap_tmp_eNB + ' ) > ' + logfile_tshark_eNB + ' 2>&1 & \n ' + task_eNB = task_eNB + 'array_exec_pid+=($!) \n' + task_eNB = task_eNB + 'echo eNB_tshark_exec PID = $! \n' + #terminate the eNB test case after timeout_cmd seconds + task_eNB = task_eNB + finalize_deploy_script (timeout_cmd, eNB_terminate_missing_procs) + ' \n' + #task_eNB = task_eNB + 'sleep ' + str(timeout_cmd) + ' \n' + task_eNB = task_eNB + 'handle_ctrl_c' + '\n' + task_eNB = task_eNB + ' ) > ' + logfile_task_eNB_out + ' 2>&1 ' + write_file(logfile_task_eNB, task_eNB, mode="w") + + #task_eNB = 'echo \" ' + task_eNB + '\" > ' + logfile_script_eNB + ' 2>&1 ; ' + task_eNB + logfile_compile_UE = logdir_UE + '/UE_compile' + '_' + str(run) + '_.log' + logfile_exec_UE = logdir_UE + '/UE_exec' + '_' + str(run) + '_.log' + logfile_pre_exec_UE = logdir_UE + '/UE_pre_exec' + '_' + str(run) + '_.log' + logfile_traffic_UE = logdir_UE + '/UE_traffic' + '_' + str(run) + '_.log' + logfile_task_UE_out = logdir_UE + '/UE_task_out' + '_' + str(run) + '_.log' + logfile_task_UE = logdir_local_testcase + '/UE_task' + '_' + str(run) + '_.log' + logfile_task_UE_compile_out = logdir_UE + '/UE_task_compile_out' + '_' + str(run) + '_.log' + logfile_task_UE_compile = logdir_local_testcase + '/UE_task_compile' + '_' + str(run) + '_.log' + logfile_local_traffic_UE_out = logdir_local_testcase + '/UE_traffic' + '_' + str(run) + '_.log' + + task_UE_compile = ' ( uname -a ; date \n' + task_UE_compile = task_UE_compile + 'array_exec_pid=()' + '\n' + task_UE_compile = task_UE_compile + 'cd ' + logdirOAI5GRepo + '\n' + task_UE_compile = task_UE_compile + 'source oaienv \n' + task_UE_compile = task_UE_compile + 'source cmake_targets/tools/build_helper \n' + task_UE_compile = task_UE_compile + 'env |grep OPENAIR \n' + task_UE_compile = task_UE_compile + update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' + if UE_compile_prog != "": + task_UE_compile = task_UE_compile + ' ( ' + UE_compile_prog + ' '+ UE_compile_prog_args + ' ) > ' + logfile_compile_UE + ' 2>&1 \n' + task_UE_compile = task_UE_compile + ' ) > ' + logfile_task_UE_compile_out + ' 2>&1 ' + write_file(logfile_task_UE_compile, task_UE_compile, mode="w") + + task_UE = ' ( uname -a ; date \n' + task_UE = task_UE + 'array_exec_pid=()' + '\n' + task_UE = task_UE + 'cd ' + logdirOAI5GRepo + '\n' + task_UE = task_UE + 'source oaienv \n' + task_UE = task_UE + 'source cmake_targets/tools/build_helper \n' + task_UE = task_UE + 'env |grep OPENAIR \n' + if UE_pre_exec != "": + task_UE = task_UE + ' ( date; ' + UE_pre_exec + ' '+ UE_pre_exec_args + ' ) > ' + logfile_pre_exec_UE + ' 2>&1 \n' + if UE_main_exec != "": + task_UE = task_UE + ' ( date; ' + addsudo(UE_main_exec + ' ' + UE_main_exec_args, mypassword) + ' ) > ' + logfile_exec_UE + ' 2>&1 & \n' + task_UE = task_UE + 'array_exec_pid+=($!) \n' + task_UE = task_UE + 'echo UE_main_exec PID = $! \n' + if UE_traffic_exec != "": + cmd_traffic = UE_traffic_exec + ' ' + UE_traffic_exec_args + if cmd_traffic.find('-c') >= 0: + cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60) + task_UE = task_UE + ' ( date; ' + cmd_traffic + ' ) >' + logfile_traffic_UE + ' 2>&1 & \n' + task_UE = task_UE + 'array_exec_pid+=($!) \n' + task_UE = task_UE + 'echo UE_traffic_exec PID = $! \n' + #terminate the UE test case after timeout_cmd seconds + task_UE = task_UE + finalize_deploy_script (timeout_cmd, UE_terminate_missing_procs) + ' \n' + #task_UE = task_UE + 'sleep ' + str(timeout_cmd) + ' \n' + task_UE = task_UE + 'handle_ctrl_c' + '\n' + task_UE = task_UE + ' ) > ' + logfile_task_UE_out + ' 2>&1 ' + write_file(logfile_task_UE, task_UE, mode="w") + #task_UE = 'echo \" ' + task_UE + '\" > ' + logfile_script_UE + ' 2>&1 ; ' + task_UE + + logfile_compile_EPC = logdir_EPC + '/EPC_compile' + '_' + str(run) + '_.log' + logfile_compile_HSS = logdir_EPC + '/HSS_compile' + '_' + str(run) + '_.log' + logfile_exec_EPC = logdir_EPC + '/EPC_exec' + '_' + str(run) + '_.log' + logfile_pre_exec_EPC = logdir_EPC + '/EPC_pre_exec' + '_' + str(run) + '_.log' + logfile_exec_HSS = logdir_EPC + '/HSS_exec' + '_' + str(run) + '_.log' + logfile_traffic_EPC = logdir_EPC + '/EPC_traffic' + '_' + str(run) + '_.log' + logfile_task_EPC_out = logdir_EPC + '/EPC_task_out' + '_' + str(run) + '_.log' + logfile_task_EPC = logdir_local_testcase + '/EPC_task' + '_' + str(run) + '_.log' + logfile_task_EPC_compile_out = logdir_EPC + '/EPC_task_compile_out' + '_' + str(run) + '_.log' + logfile_task_EPC_compile = logdir_local_testcase + '/EPC_task_compile' + '_' + str(run) + '_.log' + logfile_local_traffic_EPC_out = logdir_local_testcase + '/EPC_traffic' + '_' + str(run) + '_.log' + +# task_EPC_compile = ' ( uname -a ; date \n' +# task_EPC_compile = task_EPC_compile + 'array_exec_pid=()' + '\n' +# task_EPC_compile = task_EPC_compile + 'cd ' + logdirOpenaircnRepo + ' ; source oaienv \n' +# task_EPC_compile = task_EPC_compile + update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo, logdirOpenaircnRepo+'/TEST/autotests/tools/search_repl.py') + '\n' +# task_EPC_compile = task_EPC_compile + 'source BUILD/TOOLS/build_helper \n' +# if EPC_compile_prog != "": +# task_EPC_compile = task_EPC_compile + '(' + EPC_compile_prog + ' ' + EPC_compile_prog_args + ' ) > ' + logfile_compile_EPC + ' 2>&1 \n' +# if HSS_compile_prog != "": +# task_EPC_compile = task_EPC_compile + '(' + HSS_compile_prog + ' ' + HSS_compile_prog_args + ' ) > ' + logfile_compile_HSS + ' 2>&1 \n' +# task_EPC_compile = task_EPC_compile + ' ) > ' + logfile_task_EPC_compile_out + ' 2>&1 ' +# write_file(logfile_task_EPC_compile, task_EPC_compile, mode="w") + + task_EPC = ' ( uname -a ; date \n' + task_EPC = task_EPC + ' export OPENAIRCN_TESTDIR=' + logdir_EPC + '\n' + task_EPC = task_EPC + 'array_exec_pid=()' + '\n' + task_EPC = task_EPC + 'cd ' + logdirOpenaircnRepo + '; source oaienv\n' + task_EPC = task_EPC + 'source BUILD/TOOLS/build_helper \n' + if EPC_pre_exec != "": + task_EPC = task_EPC + ' ( date; ' + EPC_pre_exec + ' '+ EPC_pre_exec_args + ' ) > ' + logfile_pre_exec_EPC + ' 2>&1 \n' + if HSS_main_exec != "": + task_EPC = task_EPC + '( date; ' + addsudo (HSS_main_exec + ' ' + HSS_main_exec_args, mypassword) + ' ) > ' + logfile_exec_HSS + ' 2>&1 & \n' + task_EPC = task_EPC + 'array_exec_pid+=($!) \n' + task_EPC = task_EPC + 'echo HSS_main_exec PID = $! \n' + if EPC_main_exec != "": + task_EPC = task_EPC + '( date; ' + addsudo (EPC_main_exec + ' ' + EPC_main_exec_args, mypassword) + ' ) > ' + logfile_exec_EPC + ' 2>&1 & \n' + task_EPC = task_EPC + 'array_exec_pid+=($!) \n' + task_EPC = task_EPC + 'echo EPC_main_exec PID = $! \n' + if EPC_traffic_exec != "": + cmd_traffic = EPC_traffic_exec + ' ' + EPC_traffic_exec_args + if cmd_traffic.find('-c') >= 0: + cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60) + task_EPC = task_EPC + '( date; ' + cmd_traffic + ' ) > ' + logfile_traffic_EPC + ' 2>&1 & \n' + task_EPC = task_EPC + 'array_exec_pid+=($!) \n' + task_EPC = task_EPC + 'echo EPC_traffic_exec PID = $! \n' + #terminate the EPC test case after timeout_cmd seconds + task_EPC = task_EPC + finalize_deploy_script (timeout_cmd, EPC_terminate_missing_procs) + '\n' + #task_EPC = task_EPC + 'sleep ' + str(timeout_cmd) + '\n' + task_EPC = task_EPC + 'handle_ctrl_c' '\n' + task_EPC = task_EPC + ' ) > ' + logfile_task_EPC_out + ' 2>&1 ' + write_file(logfile_task_EPC, task_EPC, mode="w") + + #first we compile all the programs +# thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC_compile, False, timeout_thread) + thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB_compile, False, timeout_thread) + thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE_compile, False, timeout_thread) + if RRHMachine != '': + thread_RRH = oaiThread(4, "RRH_thread", RRHMachine, user, password , task_RRH_compile, False, timeout_thread) + threads=[] + threads.append(thread_eNB) + threads.append(thread_UE) +# threads.append(thread_EPC) + if RRHMachine != '': + threads.append(thread_RRH) + # Start new Threads + thread_eNB.start() + thread_UE.start() +# thread_EPC.start() + if RRHMachine != '': + thread_RRH.start() + #Wait for all the compile threads to complete + for t in threads: + t.join() + + #Now we execute all the threads +# thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC, False, timeout_thread) + thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB, False, timeout_thread) + thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE, False, timeout_thread) + if RRHMachine != '': + thread_RRH = oaiThread(4, "RRH_thread", RRHMachine, user, password , task_RRH, False, timeout_thread) + threads=[] + threads.append(thread_eNB) + threads.append(thread_UE) +# threads.append(thread_EPC) + if RRHMachine != '': + threads.append(thread_RRH) + # Start new Threads + + thread_eNB.start() + thread_UE.start() +# thread_EPC.start() + if RRHMachine != '': + thread_RRH.start() + #Wait for all the compile threads to complete + for t in threads: + t.join() + #Now we get the log files from remote machines on the local machine + if RRHMachine != '': + cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC, oai_RRH] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC, logdir_RRH], logdirOAI5GRepo) + else: + cleanOldProgramsAllMachines([oai_eNB, oai_UE] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC], logdirOAI5GRepo) +# cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC], logdirOAI5GRepo) + logfile_UE_stop_script_out = logdir_UE + '/UE_stop_script_out' + '_' + str(run) + '_.log' + logfile_UE_stop_script = logdir_local_testcase + '/UE_stop_script' + '_' + str(run) + '_.log' + + if UE_stop_script != "": + cmd = ' ( uname -a ; date \n' + cmd = cmd + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + cmd = cmd + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' + cmd = cmd + UE_stop_script + '\n' + cmd = cmd + ') > ' + logfile_UE_stop_script_out + ' 2>&1 ' + write_file(logfile_UE_stop_script , cmd, mode="w") +# thread_UE = oaiThread(4, "UE_thread", UEMachine, user, password , cmd, False, timeout_thread) +# thread_UE.start() +# thread_UE.join() + + #Now we change the permissions of the logfiles to avoid some of them being with root permissions + cmd = 'sudo -E chown -R ' + user + ' ' + logdir_eNB + res= oai_eNB.send_recv(cmd) +# print "Changing permissions of logdir <" + logdir_eNB + "> in eNB machine..." + res + + cmd = 'sudo -E chown -R ' + user + ' ' + logdir_UE +# print cmd + res= oai_UE.send_recv(cmd) +# print res +# print "Changing permissions of logdir <" + logdir_UE + "> in UE machine..." + res + + cmd = 'sudo -E chown -R ' + user + ' ' + logdir_EPC +# res= oai_EPC.send_recv(cmd) +# print "Changing permissions of logdir <" + logdir_EPC + "> in EPC machine..." + res + + if RRHMachine != '': + cmd = 'sudo -E chown -R ' + user + ' ' + logdir_RRH + res= oai_RRH.send_recv(cmd) +# print "Changing permissions of logdir <" + logdir_RRH + "> in RRH machine..." + res + + print "Copying files from EPCMachine : " + EPCMachine + "logdir_EPC = " + logdir_EPC +# SSHSessionWrapper(EPCMachine, user, None, password, logdir_EPC, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all") + + print "Copying files from eNBMachine " + eNBMachine + "logdir_eNB = " + logdir_eNB + SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all") + + print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE + SSHSessionWrapper(UEMachine, user, None, password, logdir_UE, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all") + + if RRHMachine != '': + print "Copying files from RRHMachine : " + RRHMachine + "logdir_RRH = " + logdir_RRH + SSHSessionWrapper(RRHMachine, user, None, password, logdir_RRH, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all") + + + #Currently we only perform throughput tests + tput_run_string='' + result, tput_string = tput_test_search_expr(eNB_search_expr_true, logfile_local_traffic_eNB_out) + tput_run_string = tput_run_string + tput_string + run_result=run_result&result + result, tput_string = tput_test_search_expr(EPC_search_expr_true, logfile_local_traffic_EPC_out) + run_result=run_result&result + tput_run_string = tput_run_string + tput_string + result, tput_string = tput_test_search_expr(UE_search_expr_true, logfile_local_traffic_UE_out) + run_result=run_result&result + tput_run_string = tput_run_string + tput_string + + if run_result == 1: + run_result_string = ' RUN_'+str(run) + ' = PASS' + else: + run_result_string = ' RUN_'+str(run) + ' = FAIL' + + #If there is assertion, we mark the test case as failure as most likely eNB crashed + cmd = "grep -ilr \"assertion\" " + logdir_local_testcase + " | cat " + cmd_out = subprocess.check_output ([cmd], shell=True) + if len(cmd_out) !=0 : + run_result=0 + run_result_string = ' RUN_'+str(run) + ' = FAIL(Assert)' + + #If there is thread busy error, we mark the test case as failure as most likely eNB crashed + cmd = "grep -ilr \"thread busy\" " + logdir_local_testcase + " | cat " + cmd_out = subprocess.check_output ([cmd], shell=True) + if len(cmd_out) !=0: + run_result=0 + run_result_string = ' RUN_'+str(run) + ' = FAIL(Thread_Busy)' + + run_result_string = run_result_string + tput_run_string + + test_result=test_result & run_result + test_result_string=test_result_string + run_result_string + + oai_eNB.disconnect() + oai_UE.disconnect() +# oai_EPC.disconnect() + #We need to close the new ssh session that was created + #if index_eNBMachine == index_EPCMachine: + # oai_EPC.disconnect() + #Now we finalize the xml file of the test case + end_time=time.time() + duration= end_time - start_time + xmlFile = logdir_local + '/cmake_targets/autotests/log/'+ testcasename + '/test.' + testcasename + '.xml' + if test_result ==0: + result='FAIL' + else: + result = 'PASS' + xml="\n \n" + write_file(xmlFile, xml, mode="w") + + + +# \brief handler for executing test cases (lte-softmodem-noS1) +# \param testcase name of testcase +# \param oldprogramList list of programs which must be terminated before running a test case +# \param logdirOAI5GRepo directory on remote machine which has openairinterface5g repo installed +# \param logdirOpenaircnRepo directory on remote machine which has openair-cn repo installed +# \param MachineList list of all machines on which test cases can be run +# \param user username with which to login +# \param password password with which to login +# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) +# \param ExmimoRfStop command to stop EXMIMO Card +# \param nruns_lte-softmodem global parameter to override number of runs (nruns) within the test case +def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, user, password, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, timeout_cmd): + #We ignore the password sent to this function for secuirity reasons for password present in log files + #It is recommended to add a line in /etc/sudoers that looks something like below. The line below will run sudo without password prompt + # your_user_name ALL=(ALL:ALL) NOPASSWD: ALL + + indent="\t" + threads=[] + + # + # Test case parameters + # ----------------------------------------------------------------------------- + testcase_verdict = 'PASS' + testcase_time_start = datetime.datetime.now() + testcase_name = testcase.get('id') + testcase_class = testcase.findtext('class',default='') + testcase_desc = testcase.findtext('desc',default='') + if timeout_cmd == '': + timeout_cmd = testcase.findtext('TimeOut_cmd',default='') + timeout_cmd = int(float(timeout_cmd)) + timeout_thread = timeout_cmd + 60 #Timeout_thread is more than that of cmd to have room for compilation time, etc + if nruns_lte_softmodem == '': + nruns = testcase.findtext('nruns',default='') + else: + nruns = nruns_lte_softmodem + nruns = int(float(nruns)) + tags = testcase.findtext('tags',default='') + + max_ntries = testcase.findtext('max_ntries',default='') + if max_ntries : + max_ntries = int(float(max_ntries)) + else : + max_ntries = nruns + + print( indent + "> testcase time start : " + str(testcase_time_start) ) + print( indent + "> testcase class : " + testcase_class ) + print( indent + "> testcase description : " + testcase_desc ) + print( indent + "> testcase timeout : " + str(timeout_cmd) ) + print( indent + "> testcase thread timeout : " + str(timeout_thread) ) + print( indent + "> number of runs : " + str(nruns) ) + print( indent + "> number of max tries : " + str(max_ntries) ) + print( indent + "> testcase tags : " + tags ) + + logdir_local_testcase = openairdir_local + '/cmake_targets/autotests/log/'+ testcasename + logdir_eNB_testcase = logdirOAI5GRepo +'/cmake_targets/autotests/log/'+ testcasename + logdir_UE_testcase = logdirOAI5GRepo +'/cmake_targets/autotests/log/'+ testcasename + + # + # Local checks for test cases + # ----------------------------------------------- + + # Logging directory + if (not os.path.exists(logdir_local_testcase)): + os.system('mkdir -p ' + logdir_local_testcase) + + # + # REMOTE MACHINE COMPILATION + # ------------------------------------------------ + + eNBMachine = testcase.findtext('eNB',default='') + eNB_config_file = testcase.findtext('eNB_config_file',default='') + eNB_compile_prog = testcase.findtext('eNB_compile_prog',default='') + eNB_compile_prog_args = testcase.findtext('eNB_compile_prog_args',default='') + + logfile_compile_eNB = logdir_eNB_testcase + '/eNB_compile.log' + logfile_task_eNB_compile_out = logdir_eNB_testcase + '/eNB_task_compile_out.log' + logfile_task_eNB_compile = logdir_local_testcase + '/eNB_task_compile.log' + + # Check that machine is in test setup machine list + print( Fore.WHITE + indent + "> testcase eNB machine :"), + if (eNBMachine not in MachineList): + print( Fore.RED + eNBMachine + " not in test setup machine list") + testcase_verdict = 'INCON' + else : + print eNBMachine, + # get machine description + eNBMachineDesc = MachineDescDic[eNBMachine] + index_eNBMachine = MachineList.index(eNBMachine) + # check that openairinterface is installed on machine + oai_eNB = openair('localdomain', eNBMachine) + oai_eNB.connect(user, password) + cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep --color=never OPENAIR' + res= oai_eNB.send_recv(cmd) + m = re.search('OPENAIR_HOME', res, re.DOTALL) + if m: + print + # Create testcase directory on remote eNB + cmd = 'rm -fr ' + logdir_eNB_testcase + ' ; mkdir -p ' + logdir_eNB_testcase + result = oai_eNB.send_recv(cmd) + + # Check if we need to compile lte-softmodem-noS1 on remote machine + eNB_compile_cmd = eNB_compile_prog + ' '+ eNB_compile_prog_args + if ('last_compile_prog' in eNBMachineDesc) and eNBMachineDesc['last_compile_prog'] == eNB_compile_cmd: + print( Fore.WHITE + indent + "> eNB machine compilation : skipped -> "+eNB_compile_cmd ) + else: + print( Fore.WHITE + indent + "> eNB machine compilation : triggered -> "+eNB_compile_cmd ) + eNBMachineDesc['last_compile_prog'] = eNB_compile_prog + ' '+ eNB_compile_prog_args # if last compilation is the same do not compile again + task_eNB_compile = ' ( uname -a ; date \n' + task_eNB_compile = task_eNB_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_eNB_compile = task_eNB_compile + 'env |grep OPENAIR \n' + task_eNB_compile = task_eNB_compile + update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' + if eNB_compile_cmd != "": + task_eNB_compile = task_eNB_compile + ' ( ' + eNB_compile_cmd + ' ) > ' + logfile_compile_eNB + ' 2>&1 \n' + task_eNB_compile = task_eNB_compile + ' date ) > ' + logfile_task_eNB_compile_out + ' 2>&1 ' + write_file(logfile_task_eNB_compile, task_eNB_compile, mode="w") + + + thread_eNB = oaiThread(1, "eNB_thread_compile", eNBMachine, user, password , task_eNB_compile, False, timeout_thread) + threads.append(thread_eNB) + thread_eNB.start() + + else: + print( Fore.RED + " -> OAI5G not properly setup ! please check REMOTE MACHINE PREPARATION step") + testcase_verdict = 'INCON' + + + UEMachine = testcase.findtext('UE',default='') + UE_config_file = testcase.findtext('UE_config_file',default='') + UE_compile_prog = testcase.findtext('UE_compile_prog',default='') + UE_compile_prog_args = testcase.findtext('UE_compile_prog_args',default='') + + logfile_compile_UE = logdir_UE_testcase + '/UE_compile.log' + logfile_task_UE_compile_out = logdir_UE_testcase + '/UE_task_compile_out.log' + logfile_task_UE_compile = logdir_local_testcase + '/UE_task_compile.log' + + # Check that machine is in test setup machine list + print( Fore.WHITE + indent + "> testcase UE machine :"), + if (UEMachine not in MachineList): + print( Fore.RED + UEMachine + " not in test setup machine list") + testcase_verdict = 'INCON' + else : + print UEMachine, + # get machine description + UEMachineDesc = MachineDescDic[UEMachine] + index_UEMachine = MachineList.index(UEMachine) + # check that openairinterface is installed on machine + oai_UE = openair('localdomain', UEMachine) + oai_UE.connect(user, password) + cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep --color=never OPENAIR' + res= oai_UE.send_recv(cmd) + m = re.search('OPENAIR_HOME', res, re.DOTALL) + if m: + print + # Create testcase directory on remote UE + cmd = 'rm -fr ' + logdir_UE_testcase + ' ; mkdir -p ' + logdir_UE_testcase + result = oai_UE.send_recv(cmd) + + # Check if we need to compile lte-softmodem-noS1 on remote machine + UE_compile_cmd = UE_compile_prog + ' '+ UE_compile_prog_args + if ('last_compile_prog' in UEMachineDesc) and UEMachineDesc['last_compile_prog'] == UE_compile_cmd: + print( Fore.WHITE + indent + "> UE machine compilation : skipped -> "+UE_compile_cmd ) + else: + print( Fore.WHITE + indent + "> UE machine compilation : triggered -> "+UE_compile_cmd ) + UEMachineDesc['last_compile_prog'] = UE_compile_prog + ' '+ UE_compile_prog_args + task_UE_compile = ' ( uname -a ; date \n' + task_UE_compile = task_UE_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_UE_compile = task_UE_compile + 'env |grep OPENAIR \n' + task_UE_compile = task_UE_compile + update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' + if UE_compile_cmd != "": + task_UE_compile = task_UE_compile + ' ( ' + UE_compile_cmd + ' ) > ' + logfile_compile_UE + ' 2>&1 \n' + task_UE_compile = task_UE_compile + ' date ) > ' + logfile_task_UE_compile_out + ' 2>&1 ' + write_file(logfile_task_UE_compile, task_UE_compile, mode="w") + + thread_UE = oaiThread(2, "UE_thread_compile", UEMachine, user, password , task_UE_compile, False, timeout_thread) + threads.append(thread_UE) + thread_UE.start() + + else: + print( Fore.RED + " -> OAI5G not properly setup ! please check REMOTE MACHINE PREPARATION step") + testcase_verdict = 'INCON' + + + + + + + # Wait for Compilation thread to terminate + #----------------------------------------- + for t in threads: + t.join() + + # TODO check that compilation is succeed + + #first we compile all the programs +# thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE_compile, False, timeout_thread) +# threads.append(thread_UE) +# thread_UE.start() + + + + + +# index_UEMachine = MachineList.index(UEMachine) +# oai_UE = openair('localdomain', UEMachine) +# oai_UE.connect(user, password) +# res = oai_UE.send_recv(cmd) +# res = oai_eNB.send_recv(cmd) + + + + # + # RUN LOOP + # ------------------------------------------------ + if testcase_verdict != 'PASS': # if something went wrong to not run test cases + max_ntries=0 + + runs_results = [] + nb_runs = 0 + nb_run_pass = 0 + nb_run_failed = 0 + nb_run_inc = 0 + nb_run_skip = 0 + + nb_seg_fault = 0 + + for run in range(0,max_ntries): + + if nruns == nb_run_pass + nb_run_failed: + break + + nb_runs += 1 + + # + # RUN initialization + # ---------------------------------------------------- + print (Fore.WHITE + indent + "> RUN_"+str(run).zfill(2)+" : " ), + + sys.stdout.flush() + + run_start_time=datetime.datetime.now() + + logdir_local_run = openairdir_local + '/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) + logdir_eNB_run = logdirOAI5GRepo +'/cmake_targets/autotests/log/' + testcasename + '/run_' + str(run) + logdir_UE_run = logdirOAI5GRepo +'/cmake_targets/autotests/log/' + testcasename + '/run_' + str(run) + + cmd = 'rm -fr ' + logdir_eNB_run + ' ; mkdir -p ' + logdir_eNB_run + result = oai_eNB.send_recv(cmd) + cmd = 'rm -fr ' + logdir_UE_run + ' ; mkdir -p ' + logdir_UE_run + result = oai_UE.send_recv(cmd) + cmd = ' rm -fr ' + logdir_local_run + ' ; mkdir -p ' + logdir_local_run + result = os.system(cmd) + + + # + # RUN parametrization + # ---------------------------------------------------- + eNB_pre_exec = testcase.findtext('eNB_pre_exec',default='') + eNB_pre_exec_args = testcase.findtext('eNB_pre_exec_args',default='') + eNB_main_exec = testcase.findtext('eNB_main_exec',default='') + eNB_main_exec_args = testcase.findtext('eNB_main_exec_args',default='') + eNB_traffic_exec = testcase.findtext('eNB_traffic_exec',default='') + eNB_traffic_exec_args = testcase.findtext('eNB_traffic_exec_args',default='') + eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='True') + + logfile_exec_eNB = logdir_eNB_run + '/eNB_exec' + '_' + str(run) + '_.log' + logfile_pre_exec_eNB = logdir_eNB_run + '/eNB_pre_exec' + '_' + str(run) + '_.log' + logfile_task_eNB_out = logdir_eNB_run + '/eNB_task_out' + '_' + str(run) + '_.log' + logfile_traffic_eNB = logdir_eNB_run + '/eNB_traffic' + '_' + str(run) + '_.log' + logfile_task_eNB = logdir_local_run + '/eNB_task' + '_' + str(run) + '_.log' + + task_eNB = ' ( uname -a ; date \n' + task_eNB = task_eNB + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' + task_eNB = task_eNB + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' + if eNB_pre_exec != "": + task_eNB = task_eNB + ' ( date; ' + eNB_pre_exec + ' '+ eNB_pre_exec_args + ' ) > ' + logfile_pre_exec_eNB + ' 2>&1 \n' + if eNB_main_exec != "": + task_eNB = task_eNB + ' ( date; ' + addsudo(eNB_main_exec + ' ' + eNB_main_exec_args, '') + ' ) > ' + logfile_exec_eNB + ' 2>&1 & \n' + task_eNB = task_eNB + 'array_exec_pid+=($!) \n' + task_eNB = task_eNB + 'echo eNB_main_exec PID = $! \n' + if eNB_traffic_exec != "": + cmd_traffic = eNB_traffic_exec + ' ' + eNB_traffic_exec_args + if cmd_traffic.find('-c') >= 0: + cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 80) + task_eNB = task_eNB + ' (date; ' + cmd_traffic + ' ) > ' + logfile_traffic_eNB + ' 2>&1 & \n' + task_eNB = task_eNB + 'array_exec_pid+=($!) \n' + task_eNB = task_eNB + 'echo eNB_traffic_exec PID = $! \n' + #terminate the eNB test case after timeout_cmd seconds + task_eNB = task_eNB + finalize_deploy_script (timeout_cmd, eNB_terminate_missing_procs) + ' \n' + #task_eNB = task_eNB + 'sleep ' + str(timeout_cmd) + ' \n' + task_eNB = task_eNB + 'handle_ctrl_c' + '\n' + task_eNB = task_eNB + ' ) > ' + logfile_task_eNB_out + ' 2>&1 ' + write_file(logfile_task_eNB, task_eNB, mode="w") + + + UE_pre_exec = testcase.findtext('UE_pre_exec',default='') + UE_pre_exec_args = testcase.findtext('UE_pre_exec_args',default='') + UE_main_exec = testcase.findtext('UE_main_exec',default='') + UE_main_exec_args = testcase.findtext('UE_main_exec_args',default='') + UE_traffic_exec = testcase.findtext('UE_traffic_exec',default='') + UE_traffic_exec_args = testcase.findtext('UE_traffic_exec_args',default='') + UE_terminate_missing_procs = testcase.findtext('UE_terminate_missing_procs',default='True') + UE_search_expr_true = testcase.findtext('UE_search_expr_true','') + + logfile_exec_UE = logdir_UE_run + '/UE_exec' + '_' + str(run) + '_.log' + logfile_pre_exec_UE = logdir_UE_run + '/UE_pre_exec' + '_' + str(run) + '_.log' + logfile_task_UE_out = logdir_UE_run + '/UE_task_out' + '_' + str(run) + '_.log' + logfile_traffic_UE = logdir_UE_run + '/UE_traffic' + '_' + str(run) + '_.log' + logfile_task_UE = logdir_local_run + '/UE_task' + '_' + str(run) + '_.log' + + + task_UE = ' ( uname -a ; date \n' + task_UE = task_UE + 'array_exec_pid=()' + '\n' + task_UE = task_UE + 'cd ' + logdirOAI5GRepo + '\n' + task_UE = task_UE + 'source oaienv \n' + task_UE = task_UE + 'source cmake_targets/tools/build_helper \n' + task_UE = task_UE + 'env |grep OPENAIR \n' + if UE_pre_exec != "": + task_UE = task_UE + ' ( date; ' + UE_pre_exec + ' '+ UE_pre_exec_args + ' ) > ' + logfile_pre_exec_UE + ' 2>&1 \n' + if UE_main_exec != "": + task_UE = task_UE + ' ( date; ' + addsudo(UE_main_exec + ' ' + UE_main_exec_args, '') + ' ) > ' + logfile_exec_UE + ' 2>&1 & \n' + task_UE = task_UE + 'array_exec_pid+=($!) \n' + task_UE = task_UE + 'echo UE_main_exec PID = $! \n' + if UE_traffic_exec != "": + cmd_traffic = UE_traffic_exec + ' ' + UE_traffic_exec_args + if cmd_traffic.find('-c') >= 0: + cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60) + task_UE = task_UE + ' ( date; ' + cmd_traffic + ' ) >' + logfile_traffic_UE + ' 2>&1 & \n' + task_UE = task_UE + 'array_exec_pid+=($!) \n' + task_UE = task_UE + 'echo UE_traffic_exec PID = $! \n' + #terminate the UE test case after timeout_cmd seconds + task_UE = task_UE + finalize_deploy_script (timeout_cmd, UE_terminate_missing_procs) + ' \n' + #task_UE = task_UE + 'sleep ' + str(timeout_cmd) + ' \n' + task_UE = task_UE + 'handle_ctrl_c' + '\n' + task_UE = task_UE + ' ) > ' + logfile_task_UE_out + ' 2>&1 ' + write_file(logfile_task_UE, task_UE, mode="w") + #task_UE = 'echo \" ' + task_UE + '\" > ' + logfile_script_UE + ' 2>&1 ; ' + task_UE + + + + + + + + # + # RUN work + # ---------------------------------------------------- + thread_eNB = oaiThread(1, "eNB_thread", eNBMachine, user, password , task_eNB, False, timeout_thread) + thread_UE = oaiThread(2, "UE_thread", UEMachine, user, password , task_UE, False, timeout_thread) + threads=[] + threads.append(thread_eNB) + threads.append(thread_UE) + thread_eNB.start() + thread_UE.start() + for t in threads: + t.join() + + # + # + #----------------------------------------------------- + cleanOldProgramsAllMachines([oai_eNB, oai_UE] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB_run, logdir_UE_run], logdirOAI5GRepo) + + SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB_run, logdir_local_testcase, "get_all") + #print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE + SSHSessionWrapper(UEMachine, user, None, password, logdir_UE_run, logdir_local_testcase, "get_all") + + metric_checks_flag = 1 + + fname = logdir_local_run+ '/UE_exec' + '_' + str(run) + '_.log' + cell_synch_status = analyser.check_cell_synchro(fname) + if cell_synch_status == 'CELL_SYNCH': + print '!!!!!!!!!!!!!! Cell synchronized !!!!!!!!!!!' + else : + print '!!!!!!!!!!!!!! Cell NOT NOT synchronized !!!!!!!!!!!' + metric_checks_flag = 0 + + ue_seg_fault_status = analyser.check_exec_seg_fault(fname) + if ue_seg_fault_status == 'SEG_FAULT' : + nb_seg_fault += 1 + + # + # Check metrics + #---------------------------------------------------- + runs_metrics = [] + run_traffic = [] + + if metric_checks_flag : + verdict = 'PASS' + + # UE side metrics + metricList=testcase.findall('UE_metric') + for metric in metricList: + metric_def = {} + metric_def['id'] = metric.get('id') + metric_def['description'] = metric.get('description') + metric_def['regex'] = metric.get('regex') + metric_def['unit_of_meas'] = metric.get('unit_of_meas') + metric_def['pass_fail_stat']= metric.get('pass_fail_stat') + metric_min_lim = metric.get('min_limit') + if metric_min_lim: + metric_def['min_limit'] = float(metric_min_lim) + metric_max_lim = metric.get('max_limit') + if metric_max_lim: + metric_def['max_limit'] = float(metric_max_lim) + + fname = logdir_local_run+ '/UE_exec' + '_' + str(run) + '_.log' + + args = {'metric' : metric_def, + 'file' : fname } + + metric_extracted = analyser.do_extract_metrics(args) + + print "\t > Metric "+metric_def['id']+" :" + print "\t\t> min = "+ str( metric_extracted['metric_min'] ) + print "\t\t> min_index = "+ str( metric_extracted['metric_min_index'] ) + print "\t\t> max = "+ str( metric_extracted['metric_max'] ) + print "\t\t> max_index = "+ str( metric_extracted['metric_max_index'] ) + print "\t\t> mean = "+ str( metric_extracted['metric_mean'] ) + print "\t\t> median = "+ str( metric_extracted['metric_median'] ) + + verdict = analyser.do_check_verdict(metric_def, metric_extracted) + + metric_fig = logdir_local_run+ '/UE_metric_'+ metric_def['id']+'_' + str(run) + '_.png' + analyser.do_img_metrics(metric_def, metric_extracted, metric_fig) + + + metric_fig_report = '../log/'+ testcasename + '/run_' + str(run) + '/UE_metric_'+ metric_def['id']+'_' + str(run) + '_.png' + + run_metrics = dict( metric_id = metric_def['id'], + metric_desc = metric_def['description'], + metric_uom = metric_def['unit_of_meas'], + metric_min = metric_extracted['metric_min'], + metric_min_index= metric_extracted['metric_min_index'], + metric_max = metric_extracted['metric_max'], + metric_max_index= metric_extracted['metric_max_index'], + metric_mean = metric_extracted['metric_mean'], + metric_median = metric_extracted['metric_median'], + metric_fig = metric_fig_report) + + if metric_def['pass_fail_stat'] : + run_metrics['pass_fail_stat'] = metric_def['pass_fail_stat'] + if metric_min_lim : + run_metrics['pass_fail_min_limit'] = metric_def['min_limit'] + if metric_max_lim : + run_metrics['pass_fail_max_limit'] = metric_def['max_limit'] + + runs_metrics.append(run_metrics) + + # Traffic analysis + if UE_traffic_exec != "": + + fname = logdir_local_run+ '/UE_traffic' + '_' + str(run) + '_.log' + args = {'file' : fname } + traffic_metrics = analyser.do_extract_traffic_metrics(args) + traffic_fig = logdir_local_run+ '/UE_traffic'+'_' + str(run) + '_.png' + analyser.do_img_traffic(traffic_metrics, traffic_fig) + + traffic_fig_report= '../log/'+ testcasename + '/run_' + str(run) + '/UE_traffic'+'_' + str(run) + '_.png' + + dur_pass_fail_crit = 'none' + if traffic_metrics['traffic_count'] == 0 : + verdict = 'FAIL' + elif UE_search_expr_true != "": + traffic_duration_limit = float(UE_search_expr_true) + dur_pass_fail_crit = str(traffic_duration_limit) + # print 'traffic_duration_limit = '+str(traffic_duration_limit) + # print 'traffic_metrics[interval_stop_max] = '+str(traffic_metrics['interval_stop_max']) + if traffic_metrics['interval_stop_max'] < traffic_duration_limit : + verdict = 'FAIL' + + + run_traffic = dict( traffic_count = traffic_metrics['traffic_count'], + bw_min = traffic_metrics['bw_min'], + bw_max = traffic_metrics['bw_max'], + bw_mean = traffic_metrics['bw_mean'], + bw_median = traffic_metrics['bw_median'], + jitter_min = traffic_metrics['jitter_min'], + jitter_max = traffic_metrics['jitter_max'], + jitter_mean = traffic_metrics['jitter_mean'], + jitter_median = traffic_metrics['jitter_median'], + rl_min = traffic_metrics['rl_min'], + rl_max = traffic_metrics['rl_max'], + rl_mean = traffic_metrics['rl_mean'], + rl_median = traffic_metrics['rl_median'], + iperf_duration = traffic_metrics['interval_stop_max'], + dur_pass_fail_crit = dur_pass_fail_crit, + traffic_fig = traffic_fig_report ) + else: + run_traffic = dict( traffic_count = 0) + + else : + verdict = 'SKIP' + + + + # + # RUN verdict and finalization + # ---------------------------------------------------- + run_stop_time=datetime.datetime.now() + run_duration = run_stop_time-run_start_time +# print (Fore.WHITE + ("duration=" :"), + print (Fore.WHITE + indent + "> RUN duration : "+ str(run_duration) +"s" ) + + print (Fore.WHITE + indent + "> RUN verdict :"), + + if verdict == 'PASS': + nb_run_pass += 1 + print ( Fore.GREEN + verdict) + elif verdict == 'FAIL': + nb_run_failed += 1 + testcase_verdict = 'FAIL' + print ( Fore.RED + verdict) + elif verdict == 'SKIP': + nb_run_skip += 1 + print ( Fore.YELLOW + verdict) + else: + nb_run_inc += 1 + if testcase_verdict == 'PASS' : testcase_verdict = 'INCON' + print (Fore.YELLOW+'INCONCLUSIVE') + + run_results = dict( run_id=str(run), + run_start_time = run_start_time, + run_stop_time = run_stop_time , + run_verdict = verdict, + ue_seg_fault_status = ue_seg_fault_status, + run_duration = run_duration, + runs_metrics = runs_metrics, + run_traffic = run_traffic) + runs_results.append(run_results) + + # END RUN LOOP + #---------------------------------------------------- + + # Test case duration + # ---------------------------------- + testcase_time_stop = datetime.datetime.now() + print(Fore.WHITE + indent + "> testcase time stop : " + str(testcase_time_start) ), + print " -> TestCase duration = "+str(testcase_time_stop - testcase_time_start) + + # Save remote log files + # ----------------------------------- + #Now we change the permissions of the logfiles to avoid some of them being with root permissions + cmd = 'sudo -E chown -R ' + user + ' ' + logdir_eNB_testcase + res= oai_eNB.send_recv(cmd) + cmd = 'sudo -E chown -R ' + user + ' ' + logdir_UE_testcase + res= oai_UE.send_recv(cmd) + + # Save remote log files on MTC + #print "Copying files from eNBMachine " + eNBMachine + "logdir_eNB = " + logdir_eNB + SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB_testcase, openairdir_local + '/cmake_targets/autotests/log/', "get_all") + #print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE + SSHSessionWrapper(UEMachine, user, None, password, logdir_UE_testcase, openairdir_local + '/cmake_targets/autotests/log/', "get_all") + + oai_eNB.disconnect() + oai_UE.disconnect() + + # Set test case final verdict + # ----------------------------------- + test_result_string = 'do be completed' + + if testcase_verdict == 'PASS': + if nb_run_pass == 0 : + testcase_verdict = 'INCON' + + print(Fore.WHITE + indent + "> testcase final verdict :"), + if testcase_verdict == 'PASS': + print ( Fore.GREEN + testcase_verdict) + elif testcase_verdict == 'FAIL': + print ( Fore.RED + testcase_verdict) + else: + print (Fore.YELLOW+'INCONCLUSIVE') + + duration= testcase_time_stop - testcase_time_start + xmlFile = logdir_local_testcase + '/test.' + testcasename + '.xml' + xml="\n \n" + write_file(xmlFile, xml, mode="w") + + + test_result = dict(testcase_name=testcasename, + testcaseclass=testcaseclass, + testcase_verdict = testcase_verdict, + testcase_time_start=testcase_time_start, + testcase_time_stop=testcase_time_stop, + tags=tags, + nruns=nb_runs, + nb_run_pass = nb_run_pass, + nb_run_skip = nb_run_skip, + nb_run_failed = nb_run_failed, + nb_run_inc=nb_run_inc, + nb_seg_fault = nb_seg_fault, + testcase_timeout=timeout_cmd, + testcase_duration = duration, + testcase_eNBMachine =eNBMachine, + testcase_UEMachine =UEMachine, + runs_results = runs_results) + test_results.append(test_result) + + return testcase_verdict + + + +# mypassword='' +# #addsudo = 'echo \'' + mypassword + '\' | sudo -S -E ' +# addpass = 'echo \'' + mypassword + '\' | ' +# #user = getpass.getuser() + + + + + + + +# eNB_traffic_exec = testcase.findtext('eNB_traffic_exec',default='') +# eNB_traffic_exec_args = testcase.findtext('eNB_traffic_exec_args',default='') +# eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='True') +# eNB_search_expr_true = testcase.findtext('eNB_search_expr_true','') +# if re.compile('\w+').match(eNB_search_expr_true) != None: +# eNB_search_expr_true = eNB_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' + + + +# UE_traffic_exec = testcase.findtext('UE_traffic_exec',default='') +# UE_traffic_exec_args = testcase.findtext('UE_traffic_exec_args',default='') +# +# UE_search_expr_true = testcase.findtext('UE_search_expr_true','') +# UE_stop_script = testcase.findtext('UE_stop_script','') +# if re.compile('\w+').match(UE_search_expr_true) != None: +# UE_search_expr_true = UE_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' + + + +# #cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) +# #cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) +# #cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) +# logdir_local = os.environ.get('OPENAIR_DIR') +# if logdir_local is None: +# print "Environment variable OPENAIR_DIR not set correctly" +# sys.exit() + + +# print "Updating the config files for ENB/UE/EPC..." +# #updating the eNB/UE/EPC configuration file from the test case +# #update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo) +# #update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo) +# #update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo) + +# test_result=1 +# test_result_string='' +# start_time=time.time() + +# for run in range(0,nruns): +# run_result=1 +# run_result_string='' +# logdir_eNB = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) +# logdir_UE = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + + + + + +# logfile_traffic_eNB = logdir_eNB + '/eNB_traffic' + '_' + str(run) + '_.log' + + +# logfile_local_traffic_eNB_out = logdir_local_testcase + '/eNB_traffic' + '_' + str(run) + '_.log' +# logfile_tshark_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.log' +# logfile_pcap_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.pcap' +# logfile_pcap_zip_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.pcap.zip' +# logfile_pcap_tmp_eNB = '/tmp/' + '/eNB_tshark' + '_' + str(run) + '_.pcap' + +# task_eNB_compile = ' ( uname -a ; date \n' +# task_eNB_compile = task_eNB_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' +# task_eNB_compile = task_eNB_compile + 'env |grep OPENAIR \n' +# task_eNB_compile = task_eNB_compile + update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' +# if eNB_compile_prog != "": +# task_eNB_compile = task_eNB_compile + ' ( ' + eNB_compile_prog + ' '+ eNB_compile_prog_args + ' ) > ' + logfile_compile_eNB + ' 2>&1 \n' +# task_eNB_compile = task_eNB_compile + ' date ) > ' + logfile_task_eNB_compile_out + ' 2>&1 ' +# write_file(logfile_task_eNB_compile, task_eNB_compile, mode="w") + + + +# #task_eNB = 'echo \" ' + task_eNB + '\" > ' + logfile_script_eNB + ' 2>&1 ; ' + task_eNB +# logfile_compile_UE = logdir_UE + '/UE_compile' + '_' + str(run) + '_.log' +# logfile_exec_UE = logdir_UE + '/UE_exec' + '_' + str(run) + '_.log' + + + + +# #Now we execute all the threads + + +# #Now we get the log files from remote machines on the local machine +# cleanOldProgramsAllMachines([oai_eNB, oai_UE] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC], logdirOAI5GRepo) + +# logfile_UE_stop_script_out = logdir_UE + '/UE_stop_script_out' + '_' + str(run) + '_.log' +# logfile_UE_stop_script = logdir_local_testcase + '/UE_stop_script' + '_' + str(run) + '_.log' + +# if UE_stop_script != "": +# cmd = ' ( uname -a ; date \n' +# cmd = cmd + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' +# cmd = cmd + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' +# cmd = cmd + UE_stop_script + '\n' +# cmd = cmd + ') > ' + logfile_UE_stop_script_out + ' 2>&1 ' +# write_file(logfile_UE_stop_script , cmd, mode="w") +# # thread_UE = oaiThread(4, "UE_thread", UEMachine, user, password , cmd, False, timeout_thread) +# # thread_UE.start() +# # thread_UE.join() + + + + +# #Currently we only perform throughput tests +# tput_run_string='' +# result, tput_string = tput_test_search_expr(eNB_search_expr_true, logfile_local_traffic_eNB_out) +# tput_run_string = tput_run_string + tput_string +# run_result=run_result&result +# result, tput_string = tput_test_search_expr(EPC_search_expr_true, logfile_local_traffic_EPC_out) +# run_result=run_result&result +# tput_run_string = tput_run_string + tput_string +# result, tput_string = tput_test_search_expr(UE_search_expr_true, logfile_local_traffic_UE_out) +# run_result=run_result&result +# tput_run_string = tput_run_string + tput_string + +# if run_result == 1: +# run_result_string = ' RUN_'+str(run) + ' = PASS' +# else: +# run_result_string = ' RUN_'+str(run) + ' = FAIL' + +# #If there is assertion, we mark the test case as failure as most likely eNB crashed +# cmd = "grep -ilr \"assertion\" " + logdir_local_testcase + " | cat " +# cmd_out = subprocess.check_output ([cmd], shell=True) +# if len(cmd_out) !=0 : +# run_result=0 +# run_result_string = ' RUN_'+str(run) + ' = FAIL(Assert)' + +# #If there is thread busy error, we mark the test case as failure as most likely eNB crashed +# cmd = "grep -ilr \"thread busy\" " + logdir_local_testcase + " | cat " +# cmd_out = subprocess.check_output ([cmd], shell=True) +# if len(cmd_out) !=0: +# run_result=0 +# run_result_string = ' RUN_'+str(run) + ' = FAIL(Thread_Busy)' + +# run_result_string = run_result_string + tput_run_string + +# test_result=test_result & run_result +# test_result_string=test_result_string + run_result_string + + + + + + + + + +# \brief This function searches if test case is present in list of test cases that need to be executed by user +# \param testcasename the test case to search for +# \param testcasegroup list that is passed from the arguments +# \param test_case_exclude list of test cases excluded from execution (specified in test_case_list.xml) +def search_test_case_group(testcasename, testcasegroup, test_case_exclude): + + if test_case_exclude != "": + testcase_exclusion_list=test_case_exclude.split() + for entry in testcase_exclusion_list: + if entry.find('+') >=0: + match = re.search(entry, testcasename) + if match: + #print "\nSkipping test case as it is found in black list: " + testcasename + return False + else: + match = entry.find(testcasename) + if match >=0: + #print "\nSkipping test case as it is found in black list: " + testcasename + return False + if testcasegroup == '': + return True + else: + testcaselist = testcasegroup.split() + for entry in testcaselist: + if entry.find('+') >=0: + match = re.search(entry, testcasename) + if match: + return True + else: + match = testcasename.find(entry) + if match >=0: + return True + return False + +# \brief thread that cleans up remote machines from pre-existing test case executions +# \param threadID number of thread (for book keeping) +# \param threadname name of thread (for book keeping) +# \param oai handler that can be used to execute programs on remote machines +# \param CleanUpOldProgs list of programs which must be terminated before running a test case (specified in test_case_list.xml) +# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) +# \param ExmimoRfStop command to stop EXMIMO Card +class oaiCleanOldProgramThread (threading.Thread): + def __init__(self, threadID, threadname, oai, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, logdir, logdirOAI5GRepo): + threading.Thread.__init__(self) + self.threadID = threadID + self.threadname = threadname + self.oai = oai + self.CleanUpOldProgs = CleanUpOldProgs + self.CleanUpAluLteBox = CleanUpAluLteBox + self.ExmimoRfStop = ExmimoRfStop + self.logdir = logdir + self.logdirOAI5GRepo = logdirOAI5GRepo + def run(self): + try: + cleanOldPrograms(self.oai, self.CleanUpOldProgs, self.CleanUpAluLteBox, self.ExmimoRfStop, self.logdir, self.logdirOAI5GRepo) + except Exception, e: + error='' + error = error + ' In class oaiCleanOldProgramThread, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n threadID = ' + str(self.threadID) + '\n threadname = ' + self.threadname + '\n CleanUpOldProgs = ' + self.CleanUpOldProgs + '\n CleanUpAluLteBox = ' + self.CleanUpAluLteBox + '\n ExmimoRfStop = ' + self.ExmimoRfStop + '\n' + error = error + traceback.format_exc() + print error + print "There is error in cleaning up old programs....." + #sys.exit(1) + +# \brief Run parallel threads in all machines for clean up old execution of test cases +# \param oai_list list of handlers that can be used to execute programs on remote machines +# \param CleanUpOldProgs list of programs which must be terminated before running a test case (specified in test_case_list.xml) +# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) +# \param ExmimoRfStop command to stop EXMIMO Card +def cleanOldProgramsAllMachines(oai_list, CleanOldProgs, CleanUpAluLteBox, ExmimoRfStop, logdir_list, logdirOAI5GRepo): + threadId=0 + threadList=[] + index=0 + if len(oai_list)!=len(logdir_list) : + logdir_list=[logdir[0]]*len(oai_list) + + for oai in oai_list: + threadName="cleanup_thread_"+str(threadId) + thread=oaiCleanOldProgramThread(threadId, threadName, oai, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, logdir_list[index],logdirOAI5GRepo) + threadList.append(thread) + thread.start() + threadId = threadId + 1 + index = index+1 + for t in threadList: + t.join() + + +debug = 0 +pw ='' +i = 0 +dlsim=0 +localshell=0 +GitOAI5GRepo='' +GitOAI5GRepoBranch='' +GitOAI5GHeadVersion='' +user='' +pw='' +testcasegroup='' +NFSResultsShare='' +cleanUpRemoteMachines=False +openairdir_local = os.environ.get('OPENAIR_DIR') +if openairdir_local is None: + print "Environment variable OPENAIR_DIR not set correctly" + sys.exit() +locallogdir = openairdir_local + '/cmake_targets/autotests/log' +reportdir = openairdir_local + '/cmake_targets/autotests/report' +MachineList = '' +MachineListGeneric='' +MachineDescDic={} +flag_remove_logdir=False +flag_start_testcase=False +nruns_lte_softmodem='' +flag_skip_git_head_check=False +flag_skip_oai_install=False +flag_skip_machine_preparation=False +flag_skip_sanity_check=False +Timeout_cmd='' +xmlInputFile=os.environ.get('OPENAIR_DIR')+"/cmake_targets/autotests/testsuite_ue_noS1.xml" + +#print "Number of arguments argc = " + str(len(sys.argv)) +#for index in range(1,len(sys.argv) ): +# print "argv_" + str(index) + " : " + sys.argv[index] + +oai_list = [] + + +i=1 +while i < len (sys.argv): + arg=sys.argv[i] + if arg == '-r': + flag_remove_logdir=True + elif arg == '-s' : + flag_start_testcase=True + elif arg == '-g' : + testcasegroup = sys.argv[i+1].replace("\"","") + i = i +1 + elif arg == '-c': + cleanUpRemoteMachines=True + elif arg == '-5GRepo': + GitOAI5GRepo = sys.argv[i+1] + i = i +1 + elif arg == '-5GRepoBranch': + GitOAI5GRepoBranch = sys.argv[i+1] + i = i +1 + elif arg == '-5GRepoHeadVersion': + GitOAI5GHeadVersion = sys.argv[i+1] + #We now find the branch that corresponds to this Git Head Commit + cmd = "git show-ref --head " + " | grep " + GitOAI5GHeadVersion + cmd_out = subprocess.check_output ([cmd], shell=True) + cmd_out=cmd_out.replace("\n","") + cmd_out = cmd_out.split('/') + GitOAI5GRepoBranch = cmd_out[-1] + if GitOAI5GRepoBranch == '': + print "Error extracting GitBranch from head commit. Exiting now..." + sys.exit(1) + i = i +1 + elif arg == '-u': + user = sys.argv[i+1] + i = i +1 + elif arg == '-p': + pw = sys.argv[i+1] + i = i +1 + elif arg == '-n': + NFSResultsShare = sys.argv[i+1] + i = i +1 + elif arg == '--nrun_lte_softmodem': + nruns_lte_softmodem = sys.argv[i+1] + i = i +1 + elif arg == '-MachineList': + MachineList = sys.argv[i+1] + MachineList = MachineList.replace("\"","") + MachineList = MachineList.replace("\'","") + i = i +1 + elif arg == '-MachineListGeneric': + MachineListGeneric = sys.argv[i+1] + MachineListGeneric = MachineListGeneric.replace("\"","") + MachineListGeneric = MachineListGeneric.replace("\'","") + i = i +1 + elif arg == '--skip-git-head-check': + flag_skip_git_head_check=True + elif arg == '--timeout_cmd': + Timeout_cmd = sys.argv[i+1] + i = i +1 + elif arg == '--skip-oai-install': + flag_skip_oai_install=True + elif arg == '--skip-machine-preparation': + flag_skip_machine_preparation=True + elif arg == '--skip-sanity-check': + flag_skip_sanity_check=True + elif arg == '-h' : + print "-s: This flag *MUST* be set to start the test cases" + print "-r: Remove the log directory in autotests" + print "-g: Run test cases in a group" + print "-c: Run cleanup scripts on remote machines and exit" + print "-5GRepo: Repository for OAI 5G to use to run tests (overrides GitOAI5GRepo in test_case_list.xml)" + print "-5GRepoBranch: Branch for OAI 5G Repository to run tests (overrides the branch in test_case_list.xml)" + print "-5GRepoHeadVersion: Head commit on which to run tests (overrides the branch in test_case_list.xml)" + print "-u: use the user name passed as argument" + print "-p: use the password passed as an argument" + print "-n: Set the NFS share passed as an argument" + print "--nrun_lte_softmodem: Set the number of runs for lte-softmodem test case class" + print "-MachineList : overrides the MachineList parameter in test_case_list.xml" + print "-MachineListGeneric : overrides the MachineListGeneric parameter in test_case_list.xml" + print "--skip-git-head-check: skip checking of GitHead remote/local branch (only for debugging)" + print "--timeout_cmd: Override the default parameter (timeout_cmd) in test_case_list.xml. This parameter is in seconds and should be > 120" + print "--skip-oai-install: Skips the openairinterface5g installer" + print "--skip-machine-preparation: skipp the whole system preparation -> direct to test cases" + print "--skip-sanity-check: skipp the machine sanity checks" + sys.exit() + else : + print "Unrecongnized Option: <" + arg + ">. Use -h to see valid options" + sys.exit() + i= i + 1 + +logdir = '/tmp/' + 'OAITestFrameWork-' + user + '/' +logdirOAI5GRepo = logdir + 'openairinterface5g/' +logdirOpenaircnRepo = logdir + 'openair-cn/' +patchdir = logdirOAI5GRepo + 'cmake_targets/autotests/patches/' +NFSResultsDir = '/mnt/sradio' +cleanupOldProgramsScript = '$OPENAIR_DIR/cmake_targets/autotests/tools/remove_old_programs.bash' + +#Now we parse the xml file for basic configuration +xmlTree = ET.parse(xmlInputFile) +xmlRoot = xmlTree.getroot() + +# +# Read test session configuration +# --------------------------------------------------------------------------------- +print (Fore.YELLOW + '\nStep 0.1 - Read test session configuration') +print (Fore.YELLOW + '-------------------------------------------------') + +test_session_start_time = datetime.datetime.now() +print (Fore.WHITE + ' - start time : '+ str(test_session_start_time)) + +host = os.uname()[1] +print (Fore.WHITE + ' - MTC host : '+host) + + +if user=='': + user = getpass.getuser() +print (Fore.WHITE + ' - user : '+user) + +if pw=='': + pw = getpass.getpass() +print (Fore.WHITE + ' - password : '+pw) + +print (Fore.WHITE + ' - cmd line flags : ') +print (Fore.WHITE + ' + -s : '+str(flag_start_testcase)) +print (Fore.WHITE + ' + -r : '+str(flag_remove_logdir)) +print (Fore.WHITE + ' + -c : '+str(cleanUpRemoteMachines)) +print (Fore.WHITE + ' + --skip-git-head-check : '+str(flag_skip_git_head_check)) +print (Fore.WHITE + ' + --skip-oai-install : '+str(flag_skip_oai_install)) +print (Fore.WHITE + ' + --skip-machine-preparation : '+str(flag_skip_machine_preparation)) +print (Fore.WHITE + ' + --skip-sanity-check : '+str(flag_skip_sanity_check)) + + +print (Fore.WHITE + ' - Test setup basic config : (* -> overwrite by cmd line parameter)') +print (Fore.WHITE + ' + test setup config file : '+str(xmlInputFile)) +print (Fore.WHITE + ' + remote setup dir : '+str(logdir)) +print (Fore.WHITE + ' + remote OAI5G repo : '+str(logdirOAI5GRepo)) +print (Fore.WHITE + ' + remote OpenAirCN repo : '+str(logdirOpenaircnRepo)) + + +if MachineList =='': + MachineList = xmlRoot.findtext('MachineList',default='') +NFSResultsShare = xmlRoot.findtext('NFSResultsShare',default='') +GitOpenaircnRepo = xmlRoot.findtext('GitOpenair-cnRepo',default='') + +if GitOAI5GRepo == '': + GitOAI5GRepo = xmlRoot.findtext('GitOAI5GRepo',default='') + +if GitOAI5GRepoBranch == '': + GitOAI5GRepoBranch = xmlRoot.findtext('GitOAI5GRepoBranch',default='') +if GitOAI5GHeadVersion == '': + GitOAI5GHeadVersion = xmlRoot.findtext('GitOAI5GHeadVersion',default='') + +GitOpenaircnRepoBranch = xmlRoot.findtext('GitOpenair-cnRepoBranch',default='') +CleanUpOldProgs = xmlRoot.findtext('CleanUpOldProgs',default='') +CleanUpAluLteBox = xmlRoot.findtext('CleanUpAluLteBox',default='') +Timeout_execution = int (xmlRoot.findtext('Timeout_execution')) +if MachineListGeneric == '': + MachineListGeneric = xmlRoot.findtext('MachineListGeneric',default='') +TestCaseExclusionList = xmlRoot.findtext('TestCaseExclusionList',default='') +ExmimoRfStop = xmlRoot.findtext('ExmimoRfStop',default='') +if nruns_lte_softmodem == '': + nruns_lte_softmodem = xmlRoot.findtext('nruns_lte-softmodem',default='') + +print (Fore.WHITE + ' + MachineList : '+ MachineList) +print (Fore.WHITE + ' + GitOpenair-cnRepo : '+ GitOpenaircnRepo) +print (Fore.WHITE + ' + GitOAI5GRepo : '+ GitOAI5GRepo) +print (Fore.WHITE + ' + GitOAI5GBranch : '+ GitOAI5GRepoBranch) +print (Fore.WHITE + ' + GitOpenaircnRepoBranch : '+ GitOpenaircnRepoBranch) +print (Fore.WHITE + ' + NFSResultsShare : '+ NFSResultsShare) +print (Fore.WHITE + ' + nruns_lte_softmodem : '+ nruns_lte_softmodem) +print (Fore.WHITE + ' + Timeout_cmd : '+ Timeout_cmd) + + +if GitOAI5GHeadVersion == '': + cmd = "git log --pretty=format:\'%H\' -n 1 origin/"+ GitOAI5GRepoBranch +# cmd = "git show-ref --heads -s "+ GitOAI5GRepoBranch + GitOAI5GHeadVersion = subprocess.check_output ([cmd], shell=True) + GitOAI5GHeadVersion=GitOAI5GHeadVersion.replace("\n","") + + # Print commiter and date : git log -1 --pretty=format:"%an %ad" + +print (Fore.WHITE + ' + GitOAI5GHeadVersion : '+ GitOAI5GHeadVersion) +#print "CleanUpOldProgs = " + CleanUpOldProgs +print (Fore.WHITE + ' + Timeout_execution (s) : '+ str(Timeout_execution)) + +if GitOAI5GHeadVersion == '': + print "Error getting the OAI5GBranch Head version...Exiting" + sys.exit() + +NFSTestsResultsDir = NFSResultsShare + '/'+ GitOAI5GRepoBranch + '/' + GitOAI5GHeadVersion + +#print "NFSTestsResultsDir = " + NFSTestsResultsDir + +OAI5GpatchFileList=xmlRoot.findall('OAI5GPatchFile') + + + +MachineList = MachineList.split() +MachineListGeneric = MachineListGeneric.split() + + +MachineDescDic + + +# +# 'Check Mater Test Controller sanity (MTC)' +# --------------------------------------------------------------------------------- +print (Fore.YELLOW + '\nStep 0.2 - Check Mater Test Controller sanity (MTC)') +print (Fore.YELLOW + '-------------------------------------------------') + +try: + print (Fore.WHITE + ' - check OpenAirInterface environment variable OPENAIR1_DIR... '), + os.environ["OPENAIR1_DIR"] +except KeyError: + print (Fore.RED + 'FAILED') + print "Please set the environment variable OPENAIR1_DIR in the .bashrc or run 'source oaienv' " + exit_prog(1) +print (Fore.GREEN + 'OK') + +try: + print (Fore.WHITE + ' - check OpenAirInterface environment variable OPENAIR2_DIR... '), + os.environ["OPENAIR2_DIR"] +except KeyError: + print (Fore.RED + 'FAILED') + print "Please set the environment variable OPENAIR2_DIR in the .bashrc or run 'source oaienv' " + exit_prog(1) +print (Fore.GREEN + 'OK') + +try: + os.environ["OPENAIR_TARGETS"] +except KeyError: + print "Please set the environment variable OPENAIR_TARGETS in the .bashrc or run 'source oaienv' " + sexit_prog(1) + +print (Fore.WHITE + ' - kill zombie ssh sessions from earlier sessions... '), +cmd='ps aux |grep \"/usr/bin/ssh -q -l ' + user + '\"| tr -s \" \" :| cut -f 2 -d :| xargs kill -9 ' +os.system(cmd) +print (Fore.GREEN + 'DONE') + +if flag_start_testcase == False: + print "You need to start the testcase by passing option -s. Use -h to see all options. Aborting now..." + exit_prog(1) + + +#print "Killing zombie ssh sessions from earlier sessions..." +#cmd='ps aux |grep \"/usr/bin/ssh -q -l guptar\"|tr -s \" \" :|cut -f 2 -d :|xargs kill -9 ' +#cmd = cmd + '; ps aux |grep \"/usr/bin/ssh -q -l ' + user + '\"| tr -s \" \" :| cut -f 2 -d :| xargs kill -9 ' +#os.system(cmd) +#print cmd + +try: + analyser = __import__("lib_autotest_analyser") +except ImportError as err: + print('Import error: ' + str(err)) + exit(0) + +if flag_remove_logdir == True: + print "Removing directory: " + locallogdir + os.system(' rm -fr ' + locallogdir + '; mkdir -p ' + locallogdir ) + +if not os.path.exists(locallogdir): + os.system('mkdir -p ' + locallogdir ) + + +paramiko_logfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/log/paramiko.log') +res=os.system(' echo > ' + paramiko_logfile) +paramiko.util.log_to_file(paramiko_logfile) + + +# +# 'REMOTE MACHINE SANITY CHEKS' +# --------------------------------------------------------------------------------- +print (Fore.YELLOW + '\nStep 0.3 - REMOTE MACHINE SANITY CHEKS') +print (Fore.YELLOW + '-------------------------------------------------') + + +for machine in MachineList: + oai_list.append( openair('localdomain',machine)) + MachineDescDic[machine]={} + + +if not flag_skip_sanity_check: + + if localshell == 0: + try: + index=0 + for machine in MachineList: + print (Fore.WHITE + " - Check sanity for remote machine "+machine) + + oai_list[index].connect(user,pw) + print (Fore.WHITE + " > Checking for sudo permissions for user "+user+ " : "), + result = oai_list[index].send_expect_false('sudo -S -v','may not run sudo',True) + if (result == 'OK'): + print (Fore.GREEN + result ) + else: + print (Fore.RED + result ) + + print (Fore.WHITE + " > Cleaning Older running programs : "), + cleanOldPrograms(oai_list[index], CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, '$HOME', '/tmp') + print (Fore.WHITE + " Done") + + #result = oai_list[index].send('mount ' + NFSResultsDir, True) + #print "Mounting NFS Share " + NFSResultsDir + "..." + result + + # Check if NFS share is mounted correctly. + #print 'Checking if NFS Share<' + NFSResultsDir + '> is mounted correctly...' + #cmd = 'if grep -qs '+NFSResultsDir+ ' /proc/mounts; then echo \'' + NFSResultsDir + ' is mounted\' ; fi' + #search_expr = NFSResultsDir + ' is mounted' + #print "cmd = " + cmd + #print "search_expr = " + search_expr + #result = oai_list[index].send_expect(cmd, search_expr) + #print "Mount NFS_Results_Dir..." + result + index = index + 1 + + #oai.connect2(user,pw) + #oai.get_shell() + except : + print 'Fail to connect to the machine: '+ machine + sys.exit(1) + else: + pw = '' + oai_list[0].connect_localshell() +else: + print (Fore.RED + " Skipping Machine sanity check...") + + +# +# 'REMOTE MACHINE TEST SETUP CONFIGURATION' +# --------------------------------------------------------------------------------- +print (Fore.YELLOW + '\nStep 0.4 - REMOTE MACHINE PREPARATION') +print (Fore.YELLOW + '-------------------------------------------------') + +if not flag_skip_machine_preparation: + index=0 + threads_init_setup=[] + for oai in oai_list: + try: + print "setting up machine: " + MachineList[index] + #print oai_list[oai].send_recv('echo \''+pw+'\' |sudo -S -v') + #print oai_list[oai].send_recv('sudo su') + #print oai_list[oai].send_recv('who am i') + #cleanUpPrograms(oai_list[oai] + cmd = 'sudo -S -E rm -fr ' + logdir + ' ; mkdir -p ' + logdir + result = oai.send_recv(cmd) + print cmd + + setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' + cmd = ' ( \n' + #cmd = cmd + 'rm -fR ' + logdir + '\n' + #cmd = cmd + 'mkdir -p ' + logdir + '\n' + cmd = cmd + 'cd '+ logdir + '\n' + cmd = cmd + 'git config --global http.sslVerify false \n' + cmd = cmd + 'git clone '+ GitOAI5GRepo +' \n' + cmd = cmd + 'git clone '+ GitOpenaircnRepo + ' \n' + cmd = cmd + 'cd ' + logdirOAI5GRepo + '\n' + cmd = cmd + 'git checkout ' + GitOAI5GRepoBranch + '\n' + if GitOAI5GHeadVersion : + cmd = cmd + 'git checkout ' + GitOAI5GHeadVersion + '\n' + cmd = cmd + 'git_head=`git ls-remote |grep \'' + GitOAI5GRepoBranch + '\'` \n' + cmd = cmd + 'git_head=($git_head) \n' + cmd = cmd + 'git_head=${git_head[0]} \n' + cmd = cmd + 'echo \"GitOAI5GHeadVersion_remote = $git_head\" \n' + cmd = cmd + 'echo \"GitOAI5GHeadVersion_local = ' + GitOAI5GHeadVersion + '\" \n' + if flag_skip_git_head_check==True: + cmd = cmd + 'echo \"skipping GitHead check...\" \n ' + else: + cmd = cmd + 'if [ \"$git_head\" != \"'+ GitOAI5GHeadVersion + '\" ]; then echo \"error: Git openairinterface5g head version does not match\" ; fi \n' + cmd = cmd + 'source oaienv' + '\n' + if flag_skip_oai_install == False: + cmd = cmd + 'source $OPENAIR_DIR/cmake_targets/tools/build_helper \n' + cmd = cmd + 'echo \"Installing core OAI dependencies...Start\" \n' + cmd = cmd + '$OPENAIR_DIR/cmake_targets/build_oai -I --install-optional-packages \n' + cmd = cmd + 'echo \"Installing core OAI dependencies...Finished\" \n' + #cmd = cmd + 'echo \"Installing BLADERF OAI dependencies...Start\" \n' + #cmd = cmd + 'check_install_bladerf_driver \n' + #cmd = cmd + 'echo \"Installing BLADERF OAI dependencies...Finished\" \n' + #cmd = cmd + 'echo \"Installing USRP OAI dependencies...Start\" \n' + #cmd = cmd + 'check_install_usrp_uhd_driver \n' + #cmd = cmd + 'echo \"Installing USRP OAI dependencies...Finished\" \n' + cmd = cmd + 'cd ' + logdirOpenaircnRepo + '\n' + cmd = cmd + 'git checkout ' + GitOpenaircnRepoBranch + '\n' + cmd = cmd + 'env |grep OPENAIR' + '\n' + cmd = cmd + ' cd ' + logdir + '\n' + cmd = cmd + 'mkdir -p ' + patchdir + '\n' + cmd = cmd + ' ) > ' + setuplogfile + ' 2>&1 \n' + #cmd = cmd + 'echo \' ' + cmd + '\' > ' + setup_script + ' 2>&1 \n ' + #result = oai_list[index].send_recv(cmd, False, 300 ) + write_file(setup_script, cmd, mode="w") + tempThread = oaiThread(index, 'thread_setup_'+str(index)+'_' + MachineList[index] , MachineList[index] , user, pw, cmd, False, 3000) + threads_init_setup.append(tempThread ) + tempThread.start() + index = index + 1 + except Exception, e: + print 'There is error in one of the commands to setup the machine '+ MachineList[index] + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error + sys.exit(1) + + #Now we wait for all the threads to complete + index = 0 + for t in threads_init_setup: + t.join() + + port = 22 + paramList=[] + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + + #Now we copy patch files for u + print( Fore.WHITE + " - Installating patch files on machine " + MachineList[index]) + #Now we copy patch files for u + for patchFile in OAI5GpatchFileList: + localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/patches/')+patchFile.get('name') + remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/patches/'+patchFile.get('name') + if patchFile.get('machine') == MachineList[index] or patchFile.get('machine') == None: + if os.path.isfile(localfile): + print( Fore.WHITE + "\t> PATCH FILE :"+localfile) + paramList=[] + paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) + sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) + cmd = ' cd ' + logdirOAI5GRepo + ' ;git apply cmake_targets/autotests/patches/'+patchFile.get('name') + res = oai_list[index].send_recv(cmd) + #print res + + paramList=[] + + #Now we copy test_case_list.xml on the remote machines + localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml') + remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/test_case_list.xml' + # paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) + # sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) + + setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' + localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' + remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) + + + cmd = ' cd ' + logdirOAI5GRepo + ' ; source oaienv ; env|grep OPENAIR \n' + res = oai_list[index].send_recv(cmd) + index = index +1 + if os.path.exists(localfile) == 0: + print "Setup log file <" + localfile + "> missing for machine <" + MachineList[index] + ">. Please check the setup log files. Exiting now" + sys.exit(1) + + #Now we process all the test cases + #Now we check if there was error in setup files + + status, out = commands.getstatusoutput('grep ' + ' -il \'error\' ' + locallogdir + '/setup_log*') + if (out != '') : + print "There is error in setup of machines" + print "status = " + str(status) + "\n Check files for error = " + out + print "Exiting now..." + sys.exit(1) + + cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, '$HOME' , logdirOAI5GRepo) + if cleanUpRemoteMachines == True: + print "Error while cleaning Remote machines" + print "Exiting now..." + sys.exit(0) + +else: + print (Fore.RED + " Skipping Machine preparation...") + +# ************************************************************************** +# ************************************************************************** +# STEP 2 - TEST SELECTION AND PARAMETRIZATION +# ************************************************************************** +# ************************************************************************** + +print (Fore.YELLOW + '\nStep 2 - TEST SELECTION') +print (Fore.YELLOW + '-------------------------------------------------') + +print (Fore.WHITE + " Parsing test case list for test selection...") +print (Fore.WHITE + " - TestCaseExclusionList : "+TestCaseExclusionList) +print (Fore.WHITE + " - testcasegroup : "+testcasegroup) + + + + +testcaseList=xmlRoot.findall('testCase') + +nb_total_testcases = 0 +nb_total_testcases_softmodem = 0 +nb_total_testcases_softmodem_noS1 = 0 +nb_total_testcases_compilation = 0 +nb_total_testcases_execution = 0 + +nb_run_testcases = 0 +nb_run_testcases_softmodem = 0 +nb_run_testcases_softmodem_noS1 = 0 +nb_run_testcases_compilation = 0 +nb_run_testcases_execution = 0 + + +for testcase in testcaseList: + try: + testcasename = testcase.get('id') + testcaseclass = testcase.findtext('class',default='') + desc = testcase.findtext('desc',default='') + nb_total_testcases+=1 + + run_flag = search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList) + if (run_flag): + nb_run_testcases+=1 + + if testcaseclass == 'lte-softmodem' : + nb_total_testcases_softmodem+=1 + if (run_flag): nb_run_testcases_softmodem+=1 + elif testcaseclass == 'lte-softmodem-noS1': + nb_total_testcases_softmodem_noS1+=1 + if (run_flag): nb_run_testcases_softmodem_noS1+=1 + elif testcaseclass == 'compilation': + nb_total_testcases_compilation+=1 + if (run_flag): nb_run_testcases_compilation+=1 + elif testcaseclass == 'execution': + nb_total_testcases_execution+=1 + if (run_flag): nb_run_testcases_execution+=1 + else : + print "Unknown test case class: " + testcaseclass + sys.exit() + + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n testcasename = ' + testcasename + '\n testcaseclass = ' + testcaseclass + '\n desc = ' + 'desc' + '\n' + error = error + traceback.format_exc() + print error + print "Continuing to next test case..." + +print (Fore.WHITE + " Parsing done...") + +print (Fore.WHITE + " - Total number of test cases : "+str(nb_total_testcases)) +print (Fore.WHITE + " - Total number class softmodem : "+str(nb_total_testcases_softmodem)) +print (Fore.WHITE + " - Total number class softmodem-noS1 : "+str(nb_total_testcases_softmodem_noS1)) +print (Fore.WHITE + " - Total number class compilation : "+str(nb_total_testcases_compilation)) +print (Fore.WHITE + " - Total number class execution : "+str(nb_total_testcases_execution)) +print +print (Fore.WHITE + " - Selected number of test cases : "+str(nb_run_testcases)) +print (Fore.WHITE + " - Selected class softmodem : "+str(nb_run_testcases_softmodem)) +print (Fore.WHITE + " - Selected class softmodem_noS1 : "+str(nb_run_testcases_softmodem_noS1)) +print (Fore.WHITE + " - Selected class compilation : "+str(nb_run_testcases_compilation)) +print (Fore.WHITE + " - Selected class execution : "+str(nb_run_testcases_execution)) + +# ************************************************************************** +# ************************************************************************** +# STEP 3 - TEST CAMPAIGNS +# ************************************************************************** +# ************************************************************************** + +test_results = [] + + +print (Fore.YELLOW + '\nStep 3 - TEST CAMPAIGNS') +print (Fore.YELLOW + '-------------------------------------------------') + +print (Fore.WHITE + " Start test campaign...") + +run_count = 0 +for testcase in testcaseList: + try: + testcasename = testcase.get('id') + testcaseclass = testcase.findtext('class',default='') + + if (search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList)): + run_count+=1 + print (Fore.WHITE + " ("+str(run_count).zfill(3)+"/"+str(nb_run_testcases).zfill(3)+") - test case "+testcasename+" : "), + if testcaseclass == 'lte-softmodem' : + print (Fore.RED + "skipped - lte-softmodem class not supported") + elif testcaseclass == 'lte-softmodem-noS1': + print + handle_testcaseclass_softmodem_noS1 (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, user, pw, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, Timeout_cmd ) + elif testcaseclass == 'compilation': + print (Fore.RED + "skipped - compilation class not supported") + elif testcaseclass == 'execution': + print (Fore.RED + "skipped - execution class not supported") + else : + print (Fore.RED + "Unknown test case class: " + testcaseclass) + sys.exit() + + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n testcasename = ' + testcasename + '\n testcaseclass = ' + testcaseclass + '\n desc = ' + 'desc' + '\n' + error = error + traceback.format_exc() + print error + print "Continuing to next test case..." + +threadListGlobal=[] + + +# ************************************************************************** +# ************************************************************************** +# STEP 4 - TEST REPORT PRODUCTION +# ************************************************************************** +# ************************************************************************** + + + +test_session_stop_time = datetime.datetime.now() + +print (Fore.YELLOW + '\nStep 4 - TEST REPORT PRODUCTION') +print (Fore.YELLOW + '-------------------------------------------------') + +report_dir = reportdir + '/'+ test_session_start_time.strftime("%Y-%m-%d_%H-%M")+"_"+host + +cmd = 'mkdir -p ' + report_dir +result = os.system(cmd) + +cmd = 'cp -r '+locallogdir+' '+report_dir +result = os.system(cmd) + +context = { + 'report_path' : report_dir, + 'test_session_start_time' : test_session_start_time, + 'test_session_stop_time' : test_session_stop_time, + 'test_session_duration' : test_session_stop_time-test_session_start_time, + 'mtc_host' : host, + 'user' : user, + 'password' : pw, + 'test_results' : test_results, +} + +for test_result in test_results: + cmd = 'mkdir -p ' + report_dir + '/'+ test_result['testcase_name'] + result = os.system(cmd) + + report_file = report_dir + '/'+ test_result['testcase_name'] + '/'+ test_result['testcase_name']+ '_report.html' + + analyser.create_test_report_detailed_html(test_result, report_file ) + + print test_result + + +analyser.create_report_html(context) + +exit_prog(0) + +#print testcaseList +for testcase in testcaseList: + try: + testcasename = testcase.get('id') + testcaseclass = testcase.findtext('class',default='') + desc = testcase.findtext('desc',default='') + #print "Machine list top level = " + ','.join(MachineList) + if search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList) == True: + if testcaseclass == 'lte-softmodem' : + eNBMachine = testcase.findtext('eNB',default='') + UEMachine = testcase.findtext('UE',default='') + EPCMachine = testcase.findtext('EPC',default='') + #index_eNBMachine = MachineList.index(eNBMachine) + #index_UEMachine = MachineList.index(UEMachine) + #index_EPCMachine = MachineList.index(EPCMachine) + if (eNBMachine not in MachineList)|(UEMachine not in MachineList)|(UEMachine not in MachineList): + print "One of the machines is not in the machine list" + print "eNBMachine : " + eNBMachine + "UEMachine : " + UEMachine + "EPCMachine : " + EPCMachine + "MachineList : " + ','.join(MachineList) + print "testcasename = " + testcasename + " class = " + testcaseclass + threadListGlobal = wait_testcaseclass_generic_threads(threadListGlobal, Timeout_execution) + #cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop) + #handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, user, pw, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, Timeout_cmd ) + + #The lines below are copied from below to trace the failure of some of the machines in test setup. These lines below need to be removed in long term +# print "Creating xml file for overall results..." +# cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " +# res=os.system(cmd) +# os.system('sync') +# print "Now copying files to NFS Share" +# oai_localhost = openair('localdomain','localhost') +# oai_localhost.connect(user,pw) +# cmd = ' mkdir -p ' + NFSTestsResultsDir +# print cmd +# res = oai_localhost.send_recv(cmd) +# print res + + # print "Copying files from GilabCI Runner Machine : " + host + " .locallogdir = " + locallogdir + ", NFSTestsResultsDir = " + NFSTestsResultsDir + # SSHSessionWrapper('localhost', user, None, pw , NFSTestsResultsDir , locallogdir, "put_all") + # oai_localhost.disconnect() + + elif (testcaseclass == 'compilation'): + threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox,Timeout_execution, ExmimoRfStop) + elif (testcaseclass == 'execution'): + threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox, Timeout_execution, ExmimoRfStop) + else : + print "Unknown test case class: " + testcaseclass + sys.exit() + + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n testcasename = ' + testcasename + '\n testcaseclass = ' + testcaseclass + '\n desc = ' + 'desc' + '\n' + error = error + traceback.format_exc() + print error + print "Continuing to next test case..." + #sys.exit(1) + + +print "Exiting the test cases execution now. Waiting for existing threads to complete..." + +for param in threadListGlobal: + thread_id = param["thread_id"] + thread_id.join() + +print "Creating xml file for overall results..." +cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " +res=os.system(cmd) + +print "Now copying files to NFS Share" +oai_localhost = openair('localdomain','localhost') +oai_localhost.connect(user,pw) +cmd = 'mkdir -p ' + NFSTestsResultsDir +print cmd +res = oai_localhost.send_recv(cmd) +print res + +print "Copying files from GilabCI Runner Machine : " + host + " .locallogdir = " + locallogdir + ", NFSTestsResultsDir = " + NFSTestsResultsDir +SSHSessionWrapper('localhost', user, None, pw , NFSTestsResultsDir , locallogdir, "put_all") + +cmd = "cat " + NFSTestsResultsDir + "/log/*/*.xml > " + NFSTestsResultsDir + "/log/results_autotests.xml" +res = oai_localhost.send_recv(cmd) + +oai_localhost.disconnect() + +sys.exit() + + + + + + + +run_count = 0 +for testcase in testcaseList: + try: + testcasename = testcase.get('id') + testcaseclass = testcase.findtext('class',default='') + + if (search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList)): + run_count+=1 + print (Fore.WHITE + " ("+str(run_count).zfill(3)+"/"+str(nb_run_testcases).zfill(3)+") - test case "+testcasename+" : "), + if testcaseclass == 'lte-softmodem' : + print (Fore.RED + "skipped - lte-softmodem class not supported") + elif testcaseclass == 'lte-softmodem-noS1': + print + + testcase_verdict = 'PASS' + testcase_time_start = datetime.datetime.now() + testcase_name = testcase.get('id') + testcase_desc = testcase.findtext('desc',default='') + timeout_cmd = testcase.findtext('TimeOut_cmd',default='') + timeout_cmd = int(float(timeout_cmd)) + timeout_thread = timeout_cmd + 300 #Timeout_thread is more than that of cmd to have room for compilation time, etc + if nruns_lte_softmodem == '': + nruns = testcase.findtext('nruns',default='') + else: + nruns = nruns_lte_softmodem + nruns = int(float(nruns)) + tags = testcase.findtext('tags',default='') + testcase_time_stop = datetime.datetime.now() + + test_result = dict(testcase_name=testcase_name, + testcaseclass=testcaseclass, + testcase_verdict = testcase_verdict, + testcase_time_start=testcase_time_start, + testcase_time_stop=testcase_time_stop, + tags=tags, + nruns=nruns, + testcase_timeout=timeout_cmd, + testcase_duration = testcase_time_stop-testcase_time_start, + testcase_eNBMachine ="TOTO", + testcase_UEMachine ="TITI") + test_results.append(test_result) + + + elif testcaseclass == 'compilation': + print (Fore.RED + "skipped - compilation class not supported") + elif testcaseclass == 'execution': + print (Fore.RED + "skipped - execution class not supported") + else : + print (Fore.RED + "Unknown test case class: " + testcaseclass) + sys.exit() + + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n testcasename = ' + testcasename + '\n testcaseclass = ' + testcaseclass + '\n desc = ' + 'desc' + '\n' + error = error + traceback.format_exc() + print error + print "Continuing to next test case..." diff --git a/cmake_targets/autotests/testsuite_ue_noS1_eurecom.xml b/cmake_targets/autotests/testsuite_ue_noS1_eurecom.xml new file mode 100644 index 0000000000..25a4a652e5 --- /dev/null +++ b/cmake_targets/autotests/testsuite_ue_noS1_eurecom.xml @@ -0,0 +1,3214 @@ + + +imb182-desktop yanbo-M4HM87P-00 + /mnt/sradio/TEST_RESULTS/ + https://gitlab.eurecom.fr/oai/openairinterface5g.git + https://gitlab.eurecom.fr/oai/openair-cn.git --> + develop + + + + + + + + + develop + oaisim oaisim_nos1 lte-softmodem lte-softmodem-nos1 mme_gw run_epc auth_request run_hss oai_hss mme spgw hss hss_sim configure_cots* wvdial iperf iperf_script iperf_script_phone ping tshark rrh_gw iperf3 iperf3_script iperf3_script_phone pppd + sudo -S -E /opt/ltebox/tools/stop_ltebox +$OPENAIR_DIR/cmake_targets/build_oai -w EXMIMO -c; sudo -S -E $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue; uname -a; sudo -E dmesg + 36000 + + + yanbo-M4HM87P-00 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS00 + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS00 + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 1 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS01 + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 1 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS01 + 36 + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS09 + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS09 + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS16 + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS16 + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS10 + + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS10 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS17 + + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS17 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 18 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS18 + + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 18 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS18 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS19 + + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS19 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 20 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS20 + + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 20 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS20 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 21 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS21 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 21 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS21 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 22 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS22 + + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 22 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS22 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 23 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS23 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 23 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS23 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 24 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS24 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 24 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS24 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 25 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS25 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 25 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS25 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 26 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS26 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 26 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS26 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS27 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS27 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS28 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS28 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 18000 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_STAB.BAND7.5MHZ.MCS27 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_STAB.BAND7.5MHZ.MCS27 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r50 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS27 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r50 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS27 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r50 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS28 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r50 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS19 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 512K + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS00 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 512K + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS00 + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS09 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS09 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS10 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS10 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS16 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS16 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS17 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS17 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS19 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS19 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS27 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 3600 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 + + iperf -s -i 1 -u + + 2800 + + False + UE_USRP.NOS1.DATA_IPERF_STAB.BAND7.5MHZ.MCS27 + 16 + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 + source ./targets/bin/init_nas_nos1 UE + + sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS27 + 36 + + + From 5bbdefeee84373eab2215fb40454cbce9d0cfdc5 Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Thu, 3 Nov 2016 21:32:12 +0100 Subject: [PATCH 084/132] add installation of colorama --- cmake_targets/tools/build_helper | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index ac9739e589..388fcfeba9 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -229,7 +229,7 @@ check_install_additional_tools (){ ntp $SUDO pip install paramiko - $SUDO pip install pyroute2 + $SUDO pip install pyroute2 colorama $SUDO rm -fr /opt/ssh $SUDO GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/ssh.git /opt/ssh From 65f047094cd996ef09c809318b3557a93614a01f Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Thu, 3 Nov 2016 21:40:04 +0100 Subject: [PATCH 085/132] [Gitlab CI]: additional packages for pylab support for autotest --- cmake_targets/tools/build_helper | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 388fcfeba9..c5f2b87704 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -223,10 +223,12 @@ check_install_additional_tools (){ android-tools-adb \ wvdial \ python-numpy \ - sshpass \ - nscd \ - bc \ - ntp + sshpass \ + nscd \ + bc \ + ntp \ + python-scipy \ + python-matplotlib $SUDO pip install paramiko $SUDO pip install pyroute2 colorama From eff2887d9289c6e863a0c89326560bdd3403aadb Mon Sep 17 00:00:00 2001 From: Rohit Gupta Date: Thu, 3 Nov 2016 23:27:08 +0100 Subject: [PATCH 086/132] [Gitlab CI]: Move autotest library to tools --- cmake_targets/autotests/{ => tools}/autotest_analyser.py | 0 cmake_targets/autotests/{ => tools}/lib_autotest_analyser.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename cmake_targets/autotests/{ => tools}/autotest_analyser.py (100%) rename cmake_targets/autotests/{ => tools}/lib_autotest_analyser.py (100%) diff --git a/cmake_targets/autotests/autotest_analyser.py b/cmake_targets/autotests/tools/autotest_analyser.py similarity index 100% rename from cmake_targets/autotests/autotest_analyser.py rename to cmake_targets/autotests/tools/autotest_analyser.py diff --git a/cmake_targets/autotests/lib_autotest_analyser.py b/cmake_targets/autotests/tools/lib_autotest_analyser.py similarity index 100% rename from cmake_targets/autotests/lib_autotest_analyser.py rename to cmake_targets/autotests/tools/lib_autotest_analyser.py From 12f1cb9c7ceb53c9b4f2a9c50427a9d2a66b7a04 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Fri, 18 Nov 2016 16:23:01 +0100 Subject: [PATCH 087/132] fixing original dlsim from develop --- cmake_targets/CMakeLists.txt | 3 ++- openair1/PHY/MODULATION/defs.h | 2 +- openair1/PHY/MODULATION/ofdm_mod.c | 2 +- openair1/SIMULATION/LTE_PHY/dlsim.c | 32 ++++++++++++++++--------- openair1/SIMULATION/LTE_PHY/dlsim_tm7.c | 4 ++-- targets/RT/USER/lte-enb.c | 4 ++-- 6 files changed, 29 insertions(+), 18 deletions(-) diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 0619d4af7f..3f3b4f2fbe 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -1840,7 +1840,7 @@ target_link_libraries (oaisim_nos1 ${T_LIB}) # Unitary tests for each piece of L1: example, mbmssim is MBMS L1 simulator ##################################### -foreach(myExe dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim) +foreach(myExe dlsim dlsim_tm7 ulsim pbchsim scansim mbmssim pdcchsim pucchsim prachsim syncsim) add_executable(${myExe} ${OPENAIR_BIN_DIR}/messages_xml.h ${OPENAIR1_DIR}/SIMULATION/LTE_PHY/${myExe}.c @@ -1920,6 +1920,7 @@ if (${T_TRACER}) add_dependencies(rrh_gw generate_T) add_dependencies(oaisim generate_T) add_dependencies(oaisim_nos1 generate_T) + add_dependencies(dlsim generate_T) add_dependencies(dlsim_tm7 generate_T) add_dependencies(ulsim generate_T) add_dependencies(pbchsim generate_T) diff --git a/openair1/PHY/MODULATION/defs.h b/openair1/PHY/MODULATION/defs.h index ce73d0461d..289b1edd43 100644 --- a/openair1/PHY/MODULATION/defs.h +++ b/openair1/PHY/MODULATION/defs.h @@ -82,7 +82,7 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA void do_OFDM_mod(int32_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms); -void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms); +void do_OFDM_mod_symbol(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms); void remove_7_5_kHz(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe); diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 6a4e72180b..2fd7fd88a3 100644 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -285,7 +285,7 @@ void do_OFDM_mod(int32_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t ne } // OFDM modulation for each symbol -void do_OFDM_mod_l(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms) +void do_OFDM_mod_symbol(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms) { int aa, l, slot_offset; diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 40faf1049f..2e9a04def3 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -403,7 +403,8 @@ void fill_DCI(PHY_VARS_eNB *eNB, SI_RNTI, 0, P_RNTI, - eNB->UE_stats[0].DL_pmi_single); + eNB->UE_stats[0].DL_pmi_single, + transmission_mode>=7?transmission_mode:0); *num_dci = *num_dci+1; *num_ue_spec_dci = *num_ue_spec_dci+1; @@ -543,7 +544,8 @@ void fill_DCI(PHY_VARS_eNB *eNB, SI_RNTI, 0, P_RNTI, - eNB->UE_stats[0].DL_pmi_single); + eNB->UE_stats[0].DL_pmi_single, + transmission_mode>=7?transmission_mode:0); *num_common_dci=*num_common_dci+1; *num_dci = *num_dci + 1; @@ -710,7 +712,8 @@ void fill_DCI(PHY_VARS_eNB *eNB, SI_RNTI, 0, P_RNTI, - eNB->UE_stats[0].DL_pmi_single); + eNB->UE_stats[0].DL_pmi_single, + transmission_mode>=7?transmission_mode:0); *num_dci = *num_dci + 1; *num_ue_spec_dci = *num_ue_spec_dci + 1; @@ -850,7 +853,8 @@ void fill_DCI(PHY_VARS_eNB *eNB, SI_RNTI, 0, P_RNTI, - eNB->UE_stats[0].DL_pmi_single); + eNB->UE_stats[0].DL_pmi_single, + transmission_mode>=7?transmission_mode:0); *num_common_dci = *num_common_dci + 1; *num_dci = *num_dci + 1; @@ -1018,7 +1022,8 @@ void fill_DCI(PHY_VARS_eNB *eNB, SI_RNTI, 0, P_RNTI, - eNB->UE_stats[0].DL_pmi_single); + eNB->UE_stats[0].DL_pmi_single, + transmission_mode>=7?transmission_mode:0); *num_dci = *num_dci + 1; *num_ue_spec_dci = *num_ue_spec_dci + 1; @@ -1158,7 +1163,8 @@ void fill_DCI(PHY_VARS_eNB *eNB, SI_RNTI, 0, P_RNTI, - eNB->UE_stats[0].DL_pmi_single); + eNB->UE_stats[0].DL_pmi_single, + transmission_mode>=7?transmission_mode:0); *num_common_dci = *num_common_dci + 1; *num_dci = *num_dci + 1; @@ -1187,7 +1193,8 @@ void fill_DCI(PHY_VARS_eNB *eNB, SI_RNTI, 0, P_RNTI, - eNB->UE_stats[k].DL_pmi_single); + eNB->UE_stats[k].DL_pmi_single, + transmission_mode>=7?transmission_mode:0); dump_dci(&eNB->frame_parms,&dci_alloc[*num_dci]); *num_ue_spec_dci = *num_ue_spec_dci + 1; @@ -1762,7 +1769,8 @@ int main(int argc, char **argv) printf("dual_stream_UE=%d\n", dual_stream_UE); } - lte_param_init(n_tx, + lte_param_init(transmission_mode==1?1:2, + n_tx, n_rx, transmission_mode, extended_prefix_flag, @@ -2042,7 +2050,7 @@ int main(int argc, char **argv) for (k=0; kdlsch[k][i] = new_eNB_dlsch(Kmimo,8,Nsoft,N_RB_DL,0); + eNB->dlsch[k][i] = new_eNB_dlsch(Kmimo,8,Nsoft,N_RB_DL,0,&eNB->frame_parms); if (!eNB->dlsch[k][i]) { printf("Can't get eNB dlsch structures\n"); @@ -2065,7 +2073,7 @@ int main(int argc, char **argv) } // structure for SIC at UE - UE->dlsch_eNB[0] = new_eNB_dlsch(Kmimo,8,Nsoft,N_RB_DL,0); + UE->dlsch_eNB[0] = new_eNB_dlsch(Kmimo,8,Nsoft,N_RB_DL,0,&eNB->frame_parms); if (DLSCH_alloc_pdu2_1E[0].tpmi == 5) { @@ -2159,7 +2167,9 @@ int main(int argc, char **argv) get_Qm(eNB->dlsch[0][0]->harq_processes[0]->mcs), eNB->dlsch[0][0]->harq_processes[0]->Nl, num_pdcch_symbols, - 0,subframe); + 0, + subframe, + transmission_mode>=7?transmission_mode:0); uncoded_ber_bit = (short*) malloc(sizeof(short)*coded_bits_per_codeword); printf("uncoded_ber_bit=%p\n",uncoded_ber_bit); diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c index 691287171f..0d5dcd63ce 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c @@ -2830,12 +2830,12 @@ PMI_FEEDBACK: } */ - do_OFDM_mod_l(&eNB->common_vars, + do_OFDM_mod_symbol(&eNB->common_vars, eNB_id, (subframe*2), &eNB->frame_parms); - do_OFDM_mod_l(&eNB->common_vars, + do_OFDM_mod_symbol(&eNB->common_vars, eNB_id, (subframe*2)+1, &eNB->frame_parms); diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index 7d50da5ddc..af06979efd 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -295,14 +295,14 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_OFDM_MODULATION,1); - do_OFDM_mod_l(&phy_vars_eNB->lte_eNB_common_vars, + do_OFDM_mod_symbol(&phy_vars_eNB->lte_eNB_common_vars, 0, subframe<<1, &phy_vars_eNB->lte_frame_parms); // if S-subframe generate first slot only if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_DL) { - do_OFDM_mod_l(&phy_vars_eNB->lte_eNB_common_vars, + do_OFDM_mod_symbol(&phy_vars_eNB->lte_eNB_common_vars, 0, 1+(subframe<<1), &phy_vars_eNB->lte_frame_parms); From 0b1050c14934a6a2fda7d95f2549ff1f44c951fb Mon Sep 17 00:00:00 2001 From: ROBERT Benoit Date: Fri, 18 Nov 2016 18:31:57 +0100 Subject: [PATCH 088/132] Add following functionnalities to OAI UE autotest framework - add progess bar report - reduce ssh max_tries to 10 - cleanOldPrograms -> change kill cmd line to be able to run autotest on same machine than lte-softmodem (thanks Rohit & Gabriel) - Cleanning output prints - add --skip-machine-preparation on cmd line - add --skip-sanity-check on cmd line - add HTML REPORT (no-S1 only) - add XML detailled report (no-S1 only) --- cmake_targets/CMakeLists.txt | 1 + cmake_targets/autotests/openair.py | 10 +- .../3gpplte_turbo_decoder_sse_8bit.patch | 25 - .../autotest_ue_cell_synch_event.patch | 16 +- .../patches/phy_test__target_dl_mcs.patch | 17 - .../autotests/run_exec_lte-softmodem_tests.py | 925 ++++-- .../autotests/run_lte-softmodem-nos1_tests.py | 754 ++--- cmake_targets/autotests/testsuite_ue_noS1.xml | 2898 +++++++++++++++++ .../autotests/tools/autotest_analyser.py | 125 +- .../autotests/tools/lib_autotest_analyser.py | 164 +- cmake_targets/build_oai | 8 + .../CODING/3gpplte_turbo_decoder_sse_8bit.c | 7 +- openair1/PHY/LTE_TRANSPORT/initial_sync.c | 9 + openair1/SCHED/phy_procedures_lte_ue.c | 7 + targets/RT/USER/lte-softmodem.c | 5 + 15 files changed, 4082 insertions(+), 889 deletions(-) delete mode 100644 cmake_targets/autotests/patches/3gpplte_turbo_decoder_sse_8bit.patch delete mode 100644 cmake_targets/autotests/patches/phy_test__target_dl_mcs.patch create mode 100644 cmake_targets/autotests/testsuite_ue_noS1.xml diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 3169c6cc98..eaf541713f 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -235,6 +235,7 @@ add_boolean_option(DEBUG_OMG False "???") add_boolean_option(XFORMS False "This adds the possibility to see the signal oscilloscope") add_boolean_option(PRINT_STATS False "This adds the possibility to see the status") add_boolean_option(T_TRACER False "Activate the T tracer, a debugging/monitoring framework" ) +add_boolean_option(UE_AUTOTEST_TRACE False "Activate UE autotest specific logs") add_boolean_option(DEBUG_CONSOLE False "makes debugging easier, disables stdout/stderr buffering") diff --git a/cmake_targets/autotests/openair.py b/cmake_targets/autotests/openair.py index 5cea3aa121..7ad118ef1b 100644 --- a/cmake_targets/autotests/openair.py +++ b/cmake_targets/autotests/openair.py @@ -75,7 +75,7 @@ class openair(core): return (stdout, stderr) def connect(self, username, password, prompt='PEXPECT_OAI'): - max_retries=100 + max_retries=10 i=0 while i <= max_retries: self.prompt1 = prompt @@ -97,9 +97,9 @@ class openair(core): # need to look for twice the string of the prompt self.oai.prompt() self.oai.prompt() - self.oai.sendline('uptime') - self.oai.prompt() - print self.oai.before +# self.oai.sendline('uptime') +# self.oai.prompt() +# print self.oai.before break except Exception, e: error='' @@ -171,7 +171,7 @@ class openair(core): sys.exit(1) def disconnect(self): - print 'disconnecting the ssh connection to ' + self.address + '\n' +# print 'disconnecting the ssh connection to ' + self.address + '\n' self.oai.send('exit') # self.cancel() diff --git a/cmake_targets/autotests/patches/3gpplte_turbo_decoder_sse_8bit.patch b/cmake_targets/autotests/patches/3gpplte_turbo_decoder_sse_8bit.patch deleted file mode 100644 index 957778f332..0000000000 --- a/cmake_targets/autotests/patches/3gpplte_turbo_decoder_sse_8bit.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c -index d2c7ac6..0853373 100644 ---- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c -+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c -@@ -493,7 +493,7 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho - - #endif - -- if (frame_length > 6143) { -+ if (frame_length > 6144) { - LOG_E(PHY,"compute_beta: frame_length %d\n",frame_length); - return; - } -@@ -979,6 +979,11 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, - } else - n2 = n; - -+ if(n2<256) -+ { -+ printf("phy_threegpplte_turbo_decoder8 : frame length < 256\n"); -+ return 255; -+ } - - for (iind=0; iind < 188 && f1f2mat[iind].nb_bits != n; iind++); - diff --git a/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch b/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch index 8c80d55871..33f5ac339f 100644 --- a/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch +++ b/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch @@ -1,17 +1,19 @@ diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c -index 71372d9..763397b 100644 +index 661fe96..782305d 100644 --- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c +++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c -@@ -477,6 +477,13 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) +@@ -469,6 +469,15 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) //#endif if (ue->UE_scan_carrier == 0) { + -+ /* SYRTEM */ -+ printf("AUTOTEST Cell Sync : frame = %d, rx_offset %d, freq_offset %d \n", -+ ue->proc.proc_rxtx[0].frame_rx, -+ ue->rx_offset, -+ ue->common_vars.freq_offset ); ++ #if UE_AUTOTEST_TRACE ++ LOG_I(PHY,"[UE %d] AUTOTEST Cell Sync : frame = %d, rx_offset %d, freq_offset %d \n", ++ ue->Mod_id, ++ ue->proc.proc_rxtx[0].frame_rx, ++ ue->rx_offset, ++ ue->common_vars.freq_offset ); ++ #endif + if (ue->mac_enabled==1) { LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id); diff --git a/cmake_targets/autotests/patches/phy_test__target_dl_mcs.patch b/cmake_targets/autotests/patches/phy_test__target_dl_mcs.patch deleted file mode 100644 index ec8c43cb72..0000000000 --- a/cmake_targets/autotests/patches/phy_test__target_dl_mcs.patch +++ /dev/null @@ -1,17 +0,0 @@ - -diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c -index 96645f8..a7f1dfb 100644 ---- a/targets/RT/USER/lte-softmodem.c -+++ b/targets/RT/USER/lte-softmodem.c -@@ -1602,6 +1602,11 @@ int main( int argc, char **argv ) - PHY_vars_eNB_g[0][CC_id] = init_lte_eNB(frame_parms[CC_id],0,frame_parms[CC_id]->Nid_cell,abstraction_flag); - PHY_vars_eNB_g[0][CC_id]->CC_id = CC_id; - -+ PHY_vars_eNB_g[0][CC_id]->ue_dl_rb_alloc=0x1fff; -+ PHY_vars_eNB_g[0][CC_id]->target_ue_dl_mcs=target_dl_mcs; -+ PHY_vars_eNB_g[0][CC_id]->ue_ul_nb_rb=6; -+ PHY_vars_eNB_g[0][CC_id]->target_ue_ul_mcs=target_ul_mcs; -+ - if (phy_test==1) PHY_vars_eNB_g[0][CC_id]->mac_enabled = 0; - else PHY_vars_eNB_g[0][CC_id]->mac_enabled = 1; - diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py index 796235a77f..69a3eab7c5 100755 --- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py +++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py @@ -20,10 +20,14 @@ # * contact@openairinterface.org # */ -# \author Rohit Gupta +# \author Rohit Gupta - Benoit ROBERT (benoit.robert@syrtem.com) # \version 0.1 # @ingroup _test +# \Changelog +# 2016-11-18 : +# - Add progess bar during test execution update_progress() + import tempfile import threading import sys @@ -37,6 +41,8 @@ import math #from time import clock import xml.etree.ElementTree as ET import re +#from dict2xml import dict2xml as xmlify + from colorama import Fore, Back, Style import numpy as np @@ -57,6 +63,36 @@ import ssh from ssh import SSHSession import argparse + +# update_progress() : Displays or updates a console progress bar +## Accepts a float between 0 and 1. Any int will be converted to a float. +## A value under 0 represents a 'halt'. +## A value at 1 or bigger represents 100% +def update_progress(progress, prefix_string): + barLength = 20 # Modify this to change the length of the progress bar + status = "" + #print "progress = "+ str(progress) + if isinstance(progress, int): + progress = float(progress) + if not isinstance(progress, float): + progress = 0 + status = "error: progress var must be float\r\n" + if progress < 0: + progress = 0 + status = "Halt...\r\n" + if progress >= 1: + progress = 1 + status = "Done...\r\n" + block = int(round(barLength*progress)) + text = "\r"+prefix_string+" [{0}] {1}% {2}".format( "="*block + " "*(barLength-block), progress*100, status) + sys.stdout.write(text) + sys.stdout.flush() + + +def exit_prog(exit_val): + print(Style.RESET_ALL), + sys.exit(exit_val) + # \brief write a string to a file # \param filename name of file # \param string string to write @@ -271,7 +307,7 @@ def update_config_file(oai, config_string, logdirRepo, python_script): # \param logdir_local_base local directory # \param operation operation to perform (get_all, put_all) transfers recursively for directories def SSHSessionWrapper(machine, username, key_file, password, logdir_remote, logdir_local_base, operation): - max_tries = 100 + max_tries = 10 i=0 while i <= max_tries: i = i +1 @@ -306,30 +342,50 @@ def SSHSessionWrapper(machine, username, key_file, password, logdir_remote, logd # \param CleanUpAluLteBox program to terminate AlU Bell Labs LTE Box # \param ExmimoRfStop String to stop EXMIMO card (specified in test_case_list.xml) def cleanOldPrograms(oai, programList, CleanUpAluLteBox, ExmimoRfStop, logdir, logdirOAI5GRepo): - cmd = 'sudo -E killall -s INT -q -r ' + programList + ' ; sleep 5 ; sudo -E killall -9 -q -r ' + programList + cmd = 'killall -9 ' + programList result = oai.send(cmd, True) - print "Killing old programs..." + result +# print "\t\t > "+cmd +# print "\t\t < "+result + +# print "Killing old programs on ..." + result programArray = programList.split() programListJoin = '|'.join(programArray) cmd = " ( date ;echo \"Starting cleaning old programs.. \" ; dmesg|tail ; echo \"Current disk space.. \" ; df -h )>& " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync" result=oai.send_recv(cmd) +# print "\t\t > "+cmd +# print "\t\t < "+result + cmd = cleanupOldProgramsScript + ' ' + '\''+programListJoin+'\'' #result = oai.send_recv(cmd) #print result result = oai.send_expect_false(cmd, 'Match found', False) - print "Looking for old programs..." + result +# print "\t\t > "+cmd +# print "\t\t < "+result + +# print "Looking for old programs..." + result res=oai.send_recv(CleanUpAluLteBox, True) +# print "\t\t > "+CleanUpAluLteBox +# print "\t\t < "+res cmd= " echo \"Starting EXmimoRF Stop... \" >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync "; - oai.send_recv(cmd) + result = oai.send_recv(cmd) +# print "\t\t > "+cmd +# print "\t\t < "+result cmd = "( " + "cd " + logdirOAI5GRepo + " ; source oaienv ; " + ExmimoRfStop + " ) >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync " - print "cleanoldprograms cmd = " + cmd +# print "cleanoldprograms cmd = " + cmd res=oai.send_recv(cmd, False, timeout=600) +# print "\t\t > "+cmd +# print "\t\t < "+res + cmd= " echo \"Stopping EXmimoRF Stop... \" >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync "; - oai.send_recv(cmd) + result = oai.send_recv(cmd) +# print "\t\t > "+cmd +# print "\t\t < "+result #res = oai.send_recv(ExmimoRfStop, False) cmd = " ( date ;echo \"Finished cleaning old programs.. \" ; dmesg | tail)>> $HOME/.oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync" res=oai.send_recv(cmd) +# print "\t\t > "+cmd +# print "\t\t < "+res # \brief Class thread to launch a generic command on remote machine # \param threadID number of thread (for book keeping) @@ -355,10 +411,10 @@ class oaiThread (threading.Thread): try: oai = openair('localdomain',self.machine) oai.connect(self.username, self.password) - print "Starting " + self.threadname + " on machine " + self.machine + # print "Starting " + self.threadname + " on machine " + self.machine result = oai.send_recv(self.cmd, self.sudo, self.timeout) - print "result = " + result - print "Exiting " + self.threadname + #print "result = " + result + #print "Exiting " + self.threadname oai.disconnect() except Exception, e: error='' @@ -1262,6 +1318,8 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe if testcase_verdict != 'PASS': # if something went wrong to not run test cases max_ntries=0 + indent="\t\t" + runs_results = [] nb_runs = 0 nb_run_pass = 0 @@ -1281,9 +1339,11 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe # # RUN initialization # ---------------------------------------------------- - print (Fore.WHITE + indent + "> RUN_"+str(run).zfill(2)+" : " ), - - sys.stdout.flush() + + prefix_string = Fore.WHITE + indent + "> RUN_"+str(run).zfill(2)+" :" + +# print (Fore.WHITE + indent + "> RUN_"+str(run).zfill(2)+" : " ), +# sys.stdout.flush() run_start_time=datetime.datetime.now() @@ -1399,8 +1459,34 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe threads.append(thread_UE) thread_eNB.start() thread_UE.start() + + run_work_inprogress_flag = True + progress_step = timeout_thread/20 + progress_count = 0 + + while (run_work_inprogress_flag): + + + update_progress(float(progress_count)/float(timeout_thread),prefix_string) + + time.sleep(progress_step) + + progress_count += progress_step + +# sys.stdout.write ('#') +# sys.stdout.flush() + + run_work_inprogress_flag = False + for t in threads: + if t.isAlive(): + run_work_inprogress_flag = True + + + update_progress(1,prefix_string) + for t in threads: - t.join() + t.join() + # # @@ -1415,10 +1501,12 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe fname = logdir_local_run+ '/UE_exec' + '_' + str(run) + '_.log' cell_synch_status = analyser.check_cell_synchro(fname) + print (Fore.WHITE + indent + "> Check Cell synchro :"), + if cell_synch_status == 'CELL_SYNCH': - print '!!!!!!!!!!!!!! Cell synchronized !!!!!!!!!!!' + print ( Fore.GREEN + cell_synch_status) else : - print '!!!!!!!!!!!!!! Cell NOT NOT synchronized !!!!!!!!!!!' + print ( Fore.RED + cell_synch_status) metric_checks_flag = 0 ue_seg_fault_status = analyser.check_exec_seg_fault(fname) @@ -1437,6 +1525,9 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe # UE side metrics metricList=testcase.findall('UE_metric') for metric in metricList: + + metric_verdict = 'PASS' + metric_def = {} metric_def['id'] = metric.get('id') metric_def['description'] = metric.get('description') @@ -1457,15 +1548,19 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe metric_extracted = analyser.do_extract_metrics(args) - print "\t > Metric "+metric_def['id']+" :" - print "\t\t> min = "+ str( metric_extracted['metric_min'] ) - print "\t\t> min_index = "+ str( metric_extracted['metric_min_index'] ) - print "\t\t> max = "+ str( metric_extracted['metric_max'] ) - print "\t\t> max_index = "+ str( metric_extracted['metric_max_index'] ) - print "\t\t> mean = "+ str( metric_extracted['metric_mean'] ) - print "\t\t> median = "+ str( metric_extracted['metric_median'] ) + print (Fore.WHITE + indent + "> Metric : "+metric_def['id']), + print ("(min="+str( metric_extracted['metric_min'])+", max="+str( metric_extracted['metric_max'])+", mean="+str( metric_extracted['metric_mean'])+", median="+str( metric_extracted['metric_median'])+")") - verdict = analyser.do_check_verdict(metric_def, metric_extracted) +# print "\t > Metric "+metric_def['id']+" :" +# print "\t\t> min = "+ str( metric_extracted['metric_min'] ) +# print "\t\t> min_index = "+ str( metric_extracted['metric_min_index'] ) +# print "\t\t> max = "+ str( metric_extracted['metric_max'] ) +# print "\t\t> max_index = "+ str( metric_extracted['metric_max_index'] ) +# print "\t\t> mean = "+ str( metric_extracted['metric_mean'] ) +# print "\t\t> median = "+ str( metric_extracted['metric_median'] ) + + if metric_def['pass_fail_stat'] : + metric_verdict = analyser.do_check_verdict(metric_def, metric_extracted) metric_fig = logdir_local_run+ '/UE_metric_'+ metric_def['id']+'_' + str(run) + '_.png' analyser.do_img_metrics(metric_def, metric_extracted, metric_fig) @@ -1493,6 +1588,13 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe runs_metrics.append(run_metrics) + if metric_verdict != 'PASS': + verdict = metric_verdict + + # End Metrics LOOP + # --------------------- + + # Traffic analysis if UE_traffic_exec != "": @@ -1546,9 +1648,9 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe run_stop_time=datetime.datetime.now() run_duration = run_stop_time-run_start_time # print (Fore.WHITE + ("duration=" :"), - print (Fore.WHITE + indent + "> RUN duration : "+ str(run_duration) +"s" ) + print (Fore.WHITE + indent + "> RUN duration : "+ str(run_duration) +"s" ) - print (Fore.WHITE + indent + "> RUN verdict :"), + print (Fore.WHITE + indent + "> RUN verdict :"), if verdict == 'PASS': nb_run_pass += 1 @@ -1578,6 +1680,8 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe # END RUN LOOP #---------------------------------------------------- + indent="\t" + # Test case duration # ---------------------------------- testcase_time_stop = datetime.datetime.now() @@ -1617,11 +1721,9 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe else: print (Fore.YELLOW+'INCONCLUSIVE') - duration= testcase_time_stop - testcase_time_start - xmlFile = logdir_local_testcase + '/test.' + testcasename + '.xml' - xml="\n \n" - write_file(xmlFile, xml, mode="w") + print(Style.RESET_ALL) + duration= testcase_time_stop - testcase_time_start test_result = dict(testcase_name=testcasename, testcaseclass=testcaseclass, @@ -1640,7 +1742,17 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe testcase_eNBMachine =eNBMachine, testcase_UEMachine =UEMachine, runs_results = runs_results) - #test_results.append(test_result) + test_results.append(test_result) + + xmlFile = logdir_local_testcase + '/test.' + testcasename + '.xml' + xml="\n \n" + write_file(xmlFile, xml, mode="w") + +# xmlFile_ng = logdir_local_testcase + '/test.' + testcasename + '_ng.xml' +# xml_ng = xmlify(test_result, wrap=testcasename, indent=" ") +# write_file(xmlFile_ng, xml_ng, mode="w") + + return testcase_verdict @@ -1659,12 +1771,12 @@ def search_test_case_group(testcasename, testcasegroup, test_case_exclude): if entry.find('+') >=0: match = re.search(entry, testcasename) if match: - print "\nSkipping test case as it is found in black list: " + testcasename + #print "\nSkipping test case as it is found in black list: " + testcasename return False else: match = entry.find(testcasename) if match >=0: - print "\nSkipping test case as it is found in black list: " + testcasename + #print "\nSkipping test case as it is found in black list: " + testcasename return False if testcasegroup == '': return True @@ -1752,6 +1864,7 @@ if openairdir_local is None: print "Environment variable OPENAIR_DIR not set correctly" sys.exit() locallogdir = openairdir_local + '/cmake_targets/autotests/log' +reportdir = openairdir_local + '/cmake_targets/autotests/report' MachineList = '' MachineListGeneric='' MachineDescDic={} @@ -1760,12 +1873,19 @@ flag_start_testcase=False nruns_lte_softmodem='' flag_skip_git_head_check=False flag_skip_oai_install=False +flag_skip_machine_preparation=False +flag_skip_sanity_check=False +flag_generate_html_report = False Timeout_cmd='' xmlInputFile='' -print "Number of arguments argc = " + str(len(sys.argv)) + +#print "Number of arguments argc = " + str(len(sys.argv)) #for index in range(1,len(sys.argv) ): # print "argv_" + str(index) + " : " + sys.argv[index] +oai_list = [] + + i=1 while i < len (sys.argv): arg=sys.argv[i] @@ -1825,9 +1945,15 @@ while i < len (sys.argv): i = i +1 elif arg == '--skip-oai-install': flag_skip_oai_install=True + elif arg == '--skip-machine-preparation': + flag_skip_machine_preparation=True + elif arg == '--skip-sanity-check': + flag_skip_sanity_check=True elif arg == '--test-suite' : xmlInputFile = sys.argv[i+1] i = i +1 + elif arg == '--generate-html-report': + flag_generate_html_report=True elif arg == '-h' : print "-s: This flag *MUST* be set to start the test cases" print "-r: Remove the log directory in autotests" @@ -1845,90 +1971,65 @@ while i < len (sys.argv): print "--skip-git-head-check: skip checking of GitHead remote/local branch (only for debugging)" print "--timeout_cmd: Override the default parameter (timeout_cmd) in test_case_list.xml. This parameter is in seconds and should be > 120" print "--skip-oai-install: Skips the openairinterface5g installer" + print "--skip-machine-preparation: skipp the whole system preparation -> direct to test cases" + print "--skip-sanity-check: skipp the machine sanity checks" print "--test-suite: Select a XML test-suite file" + print "--generate-html-report: Generate an HTML report of the test campaign (supported only for noS1 testsuite !!)" sys.exit() else : print "Unrecongnized Option: <" + arg + ">. Use -h to see valid options" sys.exit() i= i + 1 -try: - os.environ["OPENAIR1_DIR"] -except KeyError: - print "Please set the environment variable OPENAIR1_DIR in the .bashrc" - sys.exit(1) - -try: - os.environ["OPENAIR2_DIR"] -except KeyError: - print "Please set the environment variable OPENAIR2_DIR in the .bashrc" - sys.exit(1) - -try: - os.environ["OPENAIR_TARGETS"] -except KeyError: - print "Please set the environment variable OPENAIR_TARGETS in the .bashrc" - sys.exit(1) - -print "Killing zombie ssh sessions from earlier sessions..." -cmd='ps aux |grep \"/usr/bin/ssh -q -l guptar\"| awk \'{print $2}\' | sudo xargs kill -9 ' - -os.system(cmd) - -try: - analyser = __import__("lib_autotest_analyser") -except ImportError as err: - print('Import error: ' + str(err)) - exit(0) - - -if flag_start_testcase == False: - print "You need to start the testcase by passing option -s. Use -h to see all options. Aborting now..." - sys.exit(1) - -# get the oai object -host = os.uname()[1] -#oai = openair('localdomain','calisson') -oai_list = [] - -#start_time = time.time() # datetime.datetime.now() -if user=='': - user = getpass.getuser() -if pw=='': - pw = getpass.getpass() - -print "Killing zombie ssh sessions from earlier sessions..." -cmd='ps aux |grep \"/usr/bin/ssh -q -l guptar\"|tr -s \" \" :|cut -f 2 -d :|xargs kill -9 ' -cmd = cmd + '; ps aux |grep \"/usr/bin/ssh -q -l ' + user + '\"|tr -s \" \" :|cut -f 2 -d :|xargs kill -9 ' -os.system(cmd) - -print "host = " + host -print "user = " + user -if xmlInputFile == '': - xmlInputFile=os.environ.get('OPENAIR_DIR')+"/cmake_targets/autotests/test_case_list.xml" -NFSResultsDir = '/mnt/sradio' -cleanupOldProgramsScript = '$OPENAIR_DIR/cmake_targets/autotests/tools/remove_old_programs.bash' logdir = '/tmp/' + 'OAITestFrameWork-' + user + '/' logdirOAI5GRepo = logdir + 'openairinterface5g/' logdirOpenaircnRepo = logdir + 'openair-cn/' patchdir = logdirOAI5GRepo + 'cmake_targets/autotests/patches/' - -if flag_remove_logdir == True: - print "Removing directory: " + locallogdir - os.system(' rm -fr ' + locallogdir + '; mkdir -p ' + locallogdir ) -else: - os.system('mkdir -p ' + locallogdir) - -paramiko_logfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/log/paramiko.log') -res=os.system(' echo > ' + paramiko_logfile) -paramiko.util.log_to_file(paramiko_logfile) - -#pw=getpass.getpass() +NFSResultsDir = '/mnt/sradio' +cleanupOldProgramsScript = '$OPENAIR_DIR/cmake_targets/autotests/tools/remove_old_programs.bash' #Now we parse the xml file for basic configuration +if xmlInputFile == '': + xmlInputFile=os.environ.get('OPENAIR_DIR')+"/cmake_targets/autotests/test_case_list.xml" xmlTree = ET.parse(xmlInputFile) xmlRoot = xmlTree.getroot() +# +# Read test session configuration +# --------------------------------------------------------------------------------- +print (Fore.YELLOW + '\nStep 0.1 - Read test session configuration') +print (Fore.YELLOW + '-------------------------------------------------') + +test_session_start_time = datetime.datetime.now() +print (Fore.WHITE + ' - start time : '+ str(test_session_start_time)) + +host = os.uname()[1] +print (Fore.WHITE + ' - MTC host : '+host) + + +if user=='': + user = getpass.getuser() +print (Fore.WHITE + ' - user : '+user) + +if pw=='': + pw = getpass.getpass() +print (Fore.WHITE + ' - password : '+pw) + +print (Fore.WHITE + ' - cmd line flags : ') +print (Fore.WHITE + ' + -s : '+str(flag_start_testcase)) +print (Fore.WHITE + ' + -r : '+str(flag_remove_logdir)) +print (Fore.WHITE + ' + -c : '+str(cleanUpRemoteMachines)) +print (Fore.WHITE + ' + --skip-git-head-check : '+str(flag_skip_git_head_check)) +print (Fore.WHITE + ' + --skip-oai-install : '+str(flag_skip_oai_install)) +print (Fore.WHITE + ' + --skip-machine-preparation : '+str(flag_skip_machine_preparation)) +print (Fore.WHITE + ' + --skip-sanity-check : '+str(flag_skip_sanity_check)) + + +print (Fore.WHITE + ' - Test setup basic config : (* -> overwrite by cmd line parameter)') +print (Fore.WHITE + ' + test setup config file : '+str(xmlInputFile)) +print (Fore.WHITE + ' + remote setup dir : '+str(logdir)) +print (Fore.WHITE + ' + remote OAI5G repo : '+str(logdirOAI5GRepo)) +print (Fore.WHITE + ' + remote OpenAirCN repo : '+str(logdirOpenaircnRepo)) if MachineList =='': @@ -1941,6 +2042,8 @@ if GitOAI5GRepo == '': if GitOAI5GRepoBranch == '': GitOAI5GRepoBranch = xmlRoot.findtext('GitOAI5GRepoBranch',default='') +if GitOAI5GHeadVersion == '': + GitOAI5GHeadVersion = xmlRoot.findtext('GitOAI5GHeadVersion',default='') GitOpenaircnRepoBranch = xmlRoot.findtext('GitOpenair-cnRepoBranch',default='') CleanUpOldProgs = xmlRoot.findtext('CleanUpOldProgs',default='') @@ -1953,25 +2056,27 @@ ExmimoRfStop = xmlRoot.findtext('ExmimoRfStop',default='') if nruns_lte_softmodem == '': nruns_lte_softmodem = xmlRoot.findtext('nruns_lte-softmodem',default='') -OAI5GpatchFileList=xmlRoot.findall('OAI5GPatchFile') +print (Fore.WHITE + ' + MachineList : '+ MachineList) +print (Fore.WHITE + ' + GitOpenair-cnRepo : '+ GitOpenaircnRepo) +print (Fore.WHITE + ' + GitOAI5GRepo : '+ GitOAI5GRepo) +print (Fore.WHITE + ' + GitOAI5GBranch : '+ GitOAI5GRepoBranch) +print (Fore.WHITE + ' + GitOpenaircnRepoBranch : '+ GitOpenaircnRepoBranch) +print (Fore.WHITE + ' + NFSResultsShare : '+ NFSResultsShare) +print (Fore.WHITE + ' + nruns_lte_softmodem : '+ nruns_lte_softmodem) +print (Fore.WHITE + ' + Timeout_cmd : '+ Timeout_cmd) -print "MachineList = " + MachineList -print "GitOpenair-cnRepo = " + GitOpenaircnRepo -print "GitOAI5GRepo = " + GitOAI5GRepo -print "GitOAI5GBranch = " + GitOAI5GRepoBranch -print "GitOpenaircnRepoBranch = " + GitOpenaircnRepoBranch -print "NFSResultsShare = " + NFSResultsShare -print "nruns_lte_softmodem = " + nruns_lte_softmodem -print "Timeout_cmd = " + Timeout_cmd if GitOAI5GHeadVersion == '': - cmd = "git show-ref --heads -s "+ GitOAI5GRepoBranch + cmd = "git log --pretty=format:\'%H\' -n 1" # origin/"+ GitOAI5GRepoBranch +# cmd = "git show-ref --heads -s "+ GitOAI5GRepoBranch GitOAI5GHeadVersion = subprocess.check_output ([cmd], shell=True) GitOAI5GHeadVersion=GitOAI5GHeadVersion.replace("\n","") -print "GitOAI5GHeadVersion = " + GitOAI5GHeadVersion -print "CleanUpOldProgs = " + CleanUpOldProgs -print "Timeout_execution = " + str(Timeout_execution) + # Print commiter and date : git log -1 --pretty=format:"%an %ad" + +print (Fore.WHITE + ' + GitOAI5GHeadVersion : '+ GitOAI5GHeadVersion) +#print "CleanUpOldProgs = " + CleanUpOldProgs +print (Fore.WHITE + ' + Timeout_execution (s) : '+ str(Timeout_execution)) if GitOAI5GHeadVersion == '': print "Error getting the OAI5GBranch Head version...Exiting" @@ -1979,214 +2084,401 @@ if GitOAI5GHeadVersion == '': NFSTestsResultsDir = NFSResultsShare + '/'+ GitOAI5GRepoBranch + '/' + GitOAI5GHeadVersion -print "NFSTestsResultsDir = " + NFSTestsResultsDir +#print "NFSTestsResultsDir = " + NFSTestsResultsDir + +OAI5GpatchFileList=xmlRoot.findall('OAI5GPatchFile') + + MachineList = MachineList.split() MachineListGeneric = MachineListGeneric.split() -#index=0 + +MachineDescDic + + +# +# 'Check Mater Test Controller sanity (MTC)' +# --------------------------------------------------------------------------------- +print (Fore.YELLOW + '\nStep 0.2 - Check Mater Test Controller sanity (MTC)') +print (Fore.YELLOW + '-------------------------------------------------') + +try: + print (Fore.WHITE + ' - check OpenAirInterface environment variable OPENAIR1_DIR... '), + os.environ["OPENAIR1_DIR"] +except KeyError: + print (Fore.RED + 'FAILED') + print "Please set the environment variable OPENAIR1_DIR in the .bashrc or run 'source oaienv' " + exit_prog(1) +print (Fore.GREEN + 'OK') + +try: + print (Fore.WHITE + ' - check OpenAirInterface environment variable OPENAIR2_DIR... '), + os.environ["OPENAIR2_DIR"] +except KeyError: + print (Fore.RED + 'FAILED') + print "Please set the environment variable OPENAIR2_DIR in the .bashrc or run 'source oaienv' " + exit_prog(1) +print (Fore.GREEN + 'OK') + +try: + os.environ["OPENAIR_TARGETS"] +except KeyError: + print "Please set the environment variable OPENAIR_TARGETS in the .bashrc or run 'source oaienv' " + sexit_prog(1) + +print (Fore.WHITE + ' - kill zombie ssh sessions from earlier sessions... '), +cmd='ps aux |grep \"/usr/bin/ssh -q -l ' + user + '\"| tr -s \" \" :| cut -f 2 -d :| xargs kill -9 ' +os.system(cmd) +print (Fore.GREEN + 'DONE') + +if flag_start_testcase == False: + print "You need to start the testcase by passing option -s. Use -h to see all options. Aborting now..." + exit_prog(1) + + +#print "Killing zombie ssh sessions from earlier sessions..." +#cmd='ps aux |grep \"/usr/bin/ssh -q -l guptar\"|tr -s \" \" :|cut -f 2 -d :|xargs kill -9 ' +#cmd = cmd + '; ps aux |grep \"/usr/bin/ssh -q -l ' + user + '\"| tr -s \" \" :| cut -f 2 -d :| xargs kill -9 ' +#os.system(cmd) +#print cmd + +try: + analyser = __import__("lib_autotest_analyser") +except ImportError as err: + print('Import error: ' + str(err)) + exit(0) + +if flag_remove_logdir == True: + print "Removing directory: " + locallogdir + os.system(' rm -fr ' + locallogdir + '; mkdir -p ' + locallogdir ) + +if not os.path.exists(locallogdir): + os.system('mkdir -p ' + locallogdir ) + + +paramiko_logfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/log/paramiko.log') +res=os.system(' echo > ' + paramiko_logfile) +paramiko.util.log_to_file(paramiko_logfile) + + +# +# 'REMOTE MACHINE SANITY CHEKS' +# --------------------------------------------------------------------------------- +print (Fore.YELLOW + '\nStep 0.3 - REMOTE MACHINE SANITY CHEKS') +print (Fore.YELLOW + '-------------------------------------------------') + + for machine in MachineList: oai_list.append( openair('localdomain',machine)) MachineDescDic[machine]={} - #index = index + 1 -print "\nTesting the sanity of machines used for testing..." -if localshell == 0: +if not flag_skip_sanity_check: + + if localshell == 0: try: - index=0 - for machine in MachineList: - print '\n******* Note that the user <'+user+'> should be a sudoer *******\n' - print '******* Connecting to the machine <'+machine+'> to perform the test *******\n' - if not pw : - print "username: " + user - #pw = getpass.getpass() - #print "password: " + pw - else : - print "username: " + user - #print "password: " + pw - # issues in ubuntu 12.04 - oai_list[index].connect(user,pw) - print '\nChecking for sudo permissions on machine <'+machine+'>...' - result = oai_list[index].send_expect_false('sudo -S -v','may not run sudo',True) - print "Sudo permissions..." + result - - print '\nCleaning Older running programs : ' + CleanUpOldProgs - cleanOldPrograms(oai_list[index], CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, '$HOME', '/tmp') + index=0 + for machine in MachineList: + print (Fore.WHITE + " - Check sanity for remote machine "+machine) - #result = oai_list[index].send('mount ' + NFSResultsDir, True) - #print "Mounting NFS Share " + NFSResultsDir + "..." + result + oai_list[index].connect(user,pw) + print (Fore.WHITE + " > Checking for sudo permissions for user "+user+ " : "), + result = oai_list[index].send_expect_false('sudo -S -v','may not run sudo',True) + if (result == 'OK'): + print (Fore.GREEN + result ) + else: + print (Fore.RED + result ) + + print (Fore.WHITE + " > Cleaning Older running programs : "), + cleanOldPrograms(oai_list[index], CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, '$HOME', '/tmp') + print (Fore.WHITE + " Done") - # Check if NFS share is mounted correctly. - #print 'Checking if NFS Share<' + NFSResultsDir + '> is mounted correctly...' - #cmd = 'if grep -qs '+NFSResultsDir+ ' /proc/mounts; then echo \'' + NFSResultsDir + ' is mounted\' ; fi' - #search_expr = NFSResultsDir + ' is mounted' - #print "cmd = " + cmd - #print "search_expr = " + search_expr - #result = oai_list[index].send_expect(cmd, search_expr) - #print "Mount NFS_Results_Dir..." + result - index = index + 1 - - #oai.connect2(user,pw) - #oai.get_shell() + #result = oai_list[index].send('mount ' + NFSResultsDir, True) + #print "Mounting NFS Share " + NFSResultsDir + "..." + result + + # Check if NFS share is mounted correctly. + #print 'Checking if NFS Share<' + NFSResultsDir + '> is mounted correctly...' + #cmd = 'if grep -qs '+NFSResultsDir+ ' /proc/mounts; then echo \'' + NFSResultsDir + ' is mounted\' ; fi' + #search_expr = NFSResultsDir + ' is mounted' + #print "cmd = " + cmd + #print "search_expr = " + search_expr + #result = oai_list[index].send_expect(cmd, search_expr) + #print "Mount NFS_Results_Dir..." + result + index = index + 1 + + #oai.connect2(user,pw) + #oai.get_shell() except : print 'Fail to connect to the machine: '+ machine sys.exit(1) + else: + pw = '' + oai_list[0].connect_localshell() else: - pw = '' - oai_list[0].connect_localshell() + print (Fore.RED + " Skipping Machine sanity check...") -#We now prepare the machines for testing -index=0 -threads_init_setup=[] -for oai in oai_list: - try: - print "setting up machine: " + MachineList[index] - #print oai_list[oai].send_recv('echo \''+pw+'\' |sudo -S -v') - #print oai_list[oai].send_recv('sudo su') - #print oai_list[oai].send_recv('who am i') - #cleanUpPrograms(oai_list[oai] - cmd = 'sudo -S -E rm -fr ' + logdir + ' ; mkdir -p ' + logdir - result = oai.send_recv(cmd) +# +# 'REMOTE MACHINE TEST SETUP CONFIGURATION' +# --------------------------------------------------------------------------------- +print (Fore.YELLOW + '\nStep 0.4 - REMOTE MACHINE PREPARATION') +print (Fore.YELLOW + '-------------------------------------------------') + +if not flag_skip_machine_preparation: + index=0 + threads_init_setup=[] + for oai in oai_list: + try: + print "setting up machine: " + MachineList[index] + #print oai_list[oai].send_recv('echo \''+pw+'\' |sudo -S -v') + #print oai_list[oai].send_recv('sudo su') + #print oai_list[oai].send_recv('who am i') + #cleanUpPrograms(oai_list[oai] + cmd = 'sudo -S -E rm -fr ' + logdir + ' ; mkdir -p ' + logdir + result = oai.send_recv(cmd) + print cmd + + setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' + + #Sometimes git fails so the script below retries in that case + localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/git-retry.sh') + remotefile = logdir + '/git-retry.sh' + paramList=[] + port=22 + paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) + + cmd = ' ( \n' + #cmd = cmd + 'rm -fR ' + logdir + '\n' + #cmd = cmd + 'mkdir -p ' + logdir + '\n' + cmd = cmd + 'cd '+ logdir + '\n' + cmd = cmd + 'sudo apt-get install -y git \n' + cmd = cmd + 'chmod 700 ' + logdir + '/git-retry.sh \n' + cmd = cmd + logdir + '/git-retry.sh clone '+ GitOAI5GRepo +' \n' + cmd = cmd + logdir + '/git-retry.sh clone '+ GitOpenaircnRepo + ' \n' + cmd = cmd + 'cd ' + logdirOAI5GRepo + '\n' + cmd = cmd + 'git checkout ' + GitOAI5GRepoBranch + '\n' + if GitOAI5GHeadVersion : + cmd = cmd + 'git checkout ' + GitOAI5GHeadVersion + '\n' + cmd = cmd + 'git_head=`git ls-remote |grep \'' + GitOAI5GRepoBranch + '\'` \n' + cmd = cmd + 'git_head=($git_head) \n' + cmd = cmd + 'git_head=${git_head[0]} \n' + cmd = cmd + 'echo \"GitOAI5GHeadVersion_remote = $git_head\" \n' + cmd = cmd + 'echo \"GitOAI5GHeadVersion_local = ' + GitOAI5GHeadVersion + '\" \n' + if flag_skip_git_head_check==True: + cmd = cmd + 'echo \"skipping GitHead check...\" \n ' + else: + cmd = cmd + 'if [ \"$git_head\" != \"'+ GitOAI5GHeadVersion + '\" ]; then echo \"error: Git openairinterface5g head version does not match\" ; fi \n' + cmd = cmd + 'source oaienv' + '\n' + if flag_skip_oai_install == False: + cmd = cmd + 'source $OPENAIR_DIR/cmake_targets/tools/build_helper \n' + cmd = cmd + 'echo \"Installing core OAI dependencies...Start\" \n' + cmd = cmd + '$OPENAIR_DIR/cmake_targets/build_oai -I --install-optional-packages \n' + cmd = cmd + 'echo \"Installing core OAI dependencies...Finished\" \n' + #cmd = cmd + 'echo \"Installing BLADERF OAI dependencies...Start\" \n' + #cmd = cmd + 'check_install_bladerf_driver \n' + #cmd = cmd + 'echo \"Installing BLADERF OAI dependencies...Finished\" \n' + #cmd = cmd + 'echo \"Installing USRP OAI dependencies...Start\" \n' + #cmd = cmd + 'check_install_usrp_uhd_driver \n' + #cmd = cmd + 'echo \"Installing USRP OAI dependencies...Finished\" \n' + cmd = cmd + 'cd ' + logdirOpenaircnRepo + '\n' + cmd = cmd + 'git checkout ' + GitOpenaircnRepoBranch + '\n' + cmd = cmd + 'env |grep OPENAIR' + '\n' + cmd = cmd + ' cd ' + logdir + '\n' + cmd = cmd + 'mkdir -p ' + patchdir + '\n' + cmd = cmd + ' ) > ' + setuplogfile + ' 2>&1 \n' + #cmd = cmd + 'echo \' ' + cmd + '\' > ' + setup_script + ' 2>&1 \n ' + #result = oai_list[index].send_recv(cmd, False, 300 ) + write_file(setup_script, cmd, mode="w") + tempThread = oaiThread(index, 'thread_setup_'+str(index)+'_' + MachineList[index] , MachineList[index] , user, pw, cmd, False, 3000) + threads_init_setup.append(tempThread ) + tempThread.start() + index = index + 1 + except Exception, e: + print 'There is error in one of the commands to setup the machine '+ MachineList[index] + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + traceback.format_exc() + print error + sys.exit(1) + + #Now we wait for all the threads to complete + index = 0 + for t in threads_init_setup: + t.join() + + port = 22 + paramList=[] + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + + #Now we copy patch files and apply them + print( Fore.WHITE + " - Installating patch files on machine " + MachineList[index]) + for patchFile in OAI5GpatchFileList: + localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/patches/')+patchFile.get('name') + remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/patches/'+patchFile.get('name') + if patchFile.get('machine') == MachineList[index] or patchFile.get('machine') == None: + if os.path.isfile(localfile): + print( Fore.WHITE + "\t> PATCH FILE :"+localfile) + paramList=[] + paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) + sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) + cmd = ' cd ' + logdirOAI5GRepo + ' ;git apply cmake_targets/autotests/patches/'+patchFile.get('name') + res = oai_list[index].send_recv(cmd) + #print res - setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' - setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' + paramList=[] - #Sometimes git fails so the script below retries in that case - localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/git-retry.sh') - remotefile = logdir + '/git-retry.sh' - paramList=[] - port=22 - paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) - sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') - sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) + setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' + localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' + remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, pw, MachineList[index], port, localfile, remotefile, sftp_log, "get") + + #Now we copy test_case_list.xml on the remote machines + localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml') + remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/test_case_list.xml' + # paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) + # sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) + + sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) - cmd = ' ( \n' - #cmd = cmd + 'rm -fR ' + logdir + '\n' - #cmd = cmd + 'mkdir -p ' + logdir + '\n' - cmd = cmd + 'cd '+ logdir + '\n' - cmd = cmd + 'sudo apt-get install -y git \n' - cmd = cmd + 'chmod 700 ' + logdir + '/git-retry.sh \n' - cmd = cmd + logdir + '/git-retry.sh clone '+ GitOAI5GRepo +' \n' - cmd = cmd + logdir + '/git-retry.sh clone '+ GitOpenaircnRepo + ' \n' - cmd = cmd + 'cd ' + logdirOAI5GRepo + '\n' - cmd = cmd + 'git checkout ' + GitOAI5GRepoBranch + '\n' - #cmd = cmd + 'git checkout ' + GitOAI5GHeadVersion + '\n' - cmd = cmd + 'git_head=`git ls-remote |grep \'' + GitOAI5GRepoBranch + '\'` \n' - cmd = cmd + 'git_head=($git_head) \n' - cmd = cmd + 'git_head=${git_head[0]} \n' - cmd = cmd + 'echo \"GitOAI5GHeadVersion_remote = $git_head\" \n' - cmd = cmd + 'echo \"GitOAI5GHeadVersion_local = ' + GitOAI5GHeadVersion + '\" \n' - if flag_skip_git_head_check==True: - cmd = cmd + 'echo \"skipping GitHead check...\" \n ' - else: - cmd = cmd + 'if [ \"$git_head\" != \"'+ GitOAI5GHeadVersion + '\" ]; then echo \"error: Git openairinterface5g head version does not match\" ; fi \n' - cmd = cmd + 'source oaienv' + '\n' - if flag_skip_oai_install == False: - cmd = cmd + 'source $OPENAIR_DIR/cmake_targets/tools/build_helper \n' - cmd = cmd + 'echo \"Installing core OAI dependencies...Start\" \n' - cmd = cmd + '$OPENAIR_DIR/cmake_targets/build_oai -I --install-optional-packages \n' - cmd = cmd + 'echo \"Installing core OAI dependencies...Finished\" \n' - #cmd = cmd + 'echo \"Installing BLADERF OAI dependencies...Start\" \n' - #cmd = cmd + 'check_install_bladerf_driver \n' - #cmd = cmd + 'echo \"Installing BLADERF OAI dependencies...Finished\" \n' - #cmd = cmd + 'echo \"Installing USRP OAI dependencies...Start\" \n' - #cmd = cmd + 'check_install_usrp_uhd_driver \n' - #cmd = cmd + 'echo \"Installing USRP OAI dependencies...Finished\" \n' - cmd = cmd + 'cd ' + logdirOpenaircnRepo + '\n' - cmd = cmd + 'git checkout ' + GitOpenaircnRepoBranch + '\n' - cmd = cmd + 'env |grep OPENAIR' + '\n' - cmd = cmd + ' cd ' + logdir + '\n' - cmd = cmd + 'mkdir -p ' + patchdir + '\n' - cmd = cmd + ' ) > ' + setuplogfile + ' 2>&1 \n' - #cmd = cmd + 'echo \' ' + cmd + '\' > ' + setup_script + ' 2>&1 \n ' - #result = oai_list[index].send_recv(cmd, False, 300 ) - write_file(setup_script, cmd, mode="w") - tempThread = oaiThread(index, 'thread_setup_'+str(index)+'_' + MachineList[index] , MachineList[index] , user, pw, cmd, False, 3000) - threads_init_setup.append(tempThread ) - tempThread.start() - index = index + 1 - except Exception, e: - print 'There is error in one of the commands to setup the machine '+ MachineList[index] - error='' - error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + traceback.format_exc() - print error - sys.exit(1) - -#Now we wait for all the threads to complete -index = 0 -for t in threads_init_setup: - t.join() - setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' - setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' - localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' - remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' - port = 22 - - #Now we copy patch files and apply them - print "Installating patch files on machine " + MachineList[index] - for patchFile in OAI5GpatchFileList: - localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/patches/')+patchFile.get('name') - remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/patches/'+patchFile.get('name') - if patchFile.get('machine') == MachineList[index] or patchFile.get('machine') == None: - if os.path.isfile(localfile): - print "\t> PATCH FILE :"+localfile - paramList=[] - paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) - sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) - cmd = ' cd ' + logdirOAI5GRepo + ' ;git apply cmake_targets/autotests/patches/'+patchFile.get('name') - res = oai_list[index].send_recv(cmd) - - paramList=[] - - setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' - setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' - localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' - remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' - sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, pw, MachineList[index], port, localfile, remotefile, sftp_log, "get") - - #Now we copy test_case_list.xml on the remote machines - localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml') - remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/test_case_list.xml' - paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) - sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') - sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) - - cmd = ' cd ' + logdirOAI5GRepo + ' ; source oaienv ; env|grep OPENAIR \n' - res = oai_list[index].send_recv(cmd) - index = index +1 - if os.path.exists(localfile) == 0: + cmd = ' cd ' + logdirOAI5GRepo + ' ; source oaienv ; env|grep OPENAIR \n' + res = oai_list[index].send_recv(cmd) + index = index +1 + if os.path.exists(localfile) == 0: print "Setup log file <" + localfile + "> missing for machine <" + MachineList[index] + ">. Please check the setup log files. Exiting now" sys.exit(1) -#Now we process all the test cases -#Now we check if there was error in setup files + #Now we process all the test cases + #Now we check if there was error in setup files -status, out = commands.getstatusoutput('grep ' + ' -il \'error\' ' + locallogdir + '/setup_log*') -if (out != '') : - print "There is error in setup of machines" - print "status = " + str(status) + "\n Check files for error = " + out - print "Exiting now..." - sys.exit(1) + status, out = commands.getstatusoutput('grep ' + ' -il \'error\' ' + locallogdir + '/setup_log*') + if (out != '') : + print "There is error in setup of machines" + print "status = " + str(status) + "\n Check files for error = " + out + print "Exiting now..." + sys.exit(1) -cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, '$HOME' , logdirOAI5GRepo) -if cleanUpRemoteMachines == True: - sys.exit(0) + cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, '$HOME' , logdirOAI5GRepo) + if cleanUpRemoteMachines == True: + print "Error while cleaning Remote machines" + print "Exiting now..." + sys.exit(0) + + +else: + print (Fore.RED + " Skipping Machine preparation...") + +# ************************************************************************** +# ************************************************************************** +# STEP 2 - TEST SELECTION AND PARAMETRIZATION +# ************************************************************************** +# ************************************************************************** + +print (Fore.YELLOW + '\nStep 2 - TEST SELECTION') +print (Fore.YELLOW + '-------------------------------------------------') + +print (Fore.WHITE + " Parsing test case list for test selection...") +print (Fore.WHITE + " - TestCaseExclusionList : "+TestCaseExclusionList) +print (Fore.WHITE + " - testcasegroup : "+testcasegroup) + + +testcaseList=xmlRoot.findall('testCase') + +nb_total_testcases = 0 +nb_total_testcases_softmodem = 0 +nb_total_testcases_softmodem_noS1 = 0 +nb_total_testcases_compilation = 0 +nb_total_testcases_execution = 0 + +nb_run_testcases = 0 +nb_run_testcases_softmodem = 0 +nb_run_testcases_softmodem_noS1 = 0 +nb_run_testcases_compilation = 0 +nb_run_testcases_execution = 0 + + +for testcase in testcaseList: + try: + testcasename = testcase.get('id') + testcaseclass = testcase.findtext('class',default='') + desc = testcase.findtext('desc',default='') + nb_total_testcases+=1 + + run_flag = search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList) + if (run_flag): + nb_run_testcases+=1 + + if testcaseclass == 'lte-softmodem' : + nb_total_testcases_softmodem+=1 + if (run_flag): nb_run_testcases_softmodem+=1 + elif testcaseclass == 'lte-softmodem-noS1': + nb_total_testcases_softmodem_noS1+=1 + if (run_flag): nb_run_testcases_softmodem_noS1+=1 + elif testcaseclass == 'compilation': + nb_total_testcases_compilation+=1 + if (run_flag): nb_run_testcases_compilation+=1 + elif testcaseclass == 'execution': + nb_total_testcases_execution+=1 + if (run_flag): nb_run_testcases_execution+=1 + else : + print "Unknown test case class: " + testcaseclass + sys.exit() + + except Exception, e: + error='' + error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) + error = error + '\n testcasename = ' + testcasename + '\n testcaseclass = ' + testcaseclass + '\n desc = ' + 'desc' + '\n' + error = error + traceback.format_exc() + print error + print "Continuing to next test case..." + +print (Fore.WHITE + " Parsing done...") + +print (Fore.WHITE + " - Total number of test cases : "+str(nb_total_testcases)) +print (Fore.WHITE + " - Total number class softmodem : "+str(nb_total_testcases_softmodem)) +print (Fore.WHITE + " - Total number class softmodem-noS1 : "+str(nb_total_testcases_softmodem_noS1)) +print (Fore.WHITE + " - Total number class compilation : "+str(nb_total_testcases_compilation)) +print (Fore.WHITE + " - Total number class execution : "+str(nb_total_testcases_execution)) +print +print (Fore.WHITE + " - Selected number of test cases : "+str(nb_run_testcases)) +print (Fore.WHITE + " - Selected class softmodem : "+str(nb_run_testcases_softmodem)) +print (Fore.WHITE + " - Selected class softmodem_noS1 : "+str(nb_run_testcases_softmodem_noS1)) +print (Fore.WHITE + " - Selected class compilation : "+str(nb_run_testcases_compilation)) +print (Fore.WHITE + " - Selected class execution : "+str(nb_run_testcases_execution)) + + +# ************************************************************************** +# ************************************************************************** +# STEP 3 - TEST CAMPAIGNS +# ************************************************************************** +# ************************************************************************** + +test_results = [] + + +print (Fore.YELLOW + '\nStep 3 - TEST CAMPAIGNS') +print (Fore.YELLOW + '-------------------------------------------------') + +print (Fore.WHITE + " Start test campaign...") threadListGlobal=[] -testcaseList=xmlRoot.findall('testCase') -#print testcaseList +run_count = 0 for testcase in testcaseList: try: testcasename = testcase.get('id') testcaseclass = testcase.findtext('class',default='') desc = testcase.findtext('desc',default='') #print "Machine list top level = " + ','.join(MachineList) + if search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList) == True: + run_count+=1 + print (Fore.WHITE + " ("+str(run_count).zfill(3)+"/"+str(nb_run_testcases).zfill(3)+") - test case "+testcasename+" : "), if testcaseclass == 'lte-softmodem' : eNBMachine = testcase.findtext('eNB',default='') UEMachine = testcase.findtext('UE',default='') @@ -2258,6 +2550,22 @@ for param in threadListGlobal: thread_id = param["thread_id"] thread_id.join() + +# ************************************************************************** +# ************************************************************************** +# STEP 4 - TEST REPORT PRODUCTION +# ************************************************************************** +# ************************************************************************** + + + +test_session_stop_time = datetime.datetime.now() + +print (Fore.YELLOW + '\nStep 4 - TEST REPORT PRODUCTION') +print (Fore.YELLOW + '-------------------------------------------------') + +# XML test report +# -------------------------------------------------------------------- print "Creating xml file for overall results..." cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " res=os.system(cmd) @@ -2276,4 +2584,43 @@ res = oai_localhost.send_recv(cmd) oai_localhost.disconnect() + +# HTML test report +# -------------------------------------------------------------------- +if flag_generate_html_report: + + print "Creating html test report..." + + report_dir = reportdir + '/'+ test_session_start_time.strftime("%Y-%m-%d_%H-%M")+"_"+host + + cmd = 'mkdir -p ' + report_dir + result = os.system(cmd) + + cmd = 'cp -r '+locallogdir+' '+report_dir + result = os.system(cmd) + + context = { + 'report_path' : report_dir, + 'test_session_start_time' : test_session_start_time, + 'test_session_stop_time' : test_session_stop_time, + 'test_session_duration' : test_session_stop_time-test_session_start_time, + 'mtc_host' : host, + 'user' : user, + 'password' : pw, + 'test_results' : test_results, + } + + for test_result in test_results: + cmd = 'mkdir -p ' + report_dir + '/'+ test_result['testcase_name'] + result = os.system(cmd) + + report_file = report_dir + '/'+ test_result['testcase_name'] + '/'+ test_result['testcase_name']+ '_report.html' + + analyser.create_test_report_detailed_html(test_result, report_file ) + + # print test_result + + analyser.create_report_html(context) + + sys.exit() diff --git a/cmake_targets/autotests/run_lte-softmodem-nos1_tests.py b/cmake_targets/autotests/run_lte-softmodem-nos1_tests.py index 19939f0d5c..2ece62ae16 100755 --- a/cmake_targets/autotests/run_lte-softmodem-nos1_tests.py +++ b/cmake_targets/autotests/run_lte-softmodem-nos1_tests.py @@ -1,70 +1,32 @@ #! /usr/bin/python -#****************************************************************************** +#/* +# * 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.0 (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 +# */ -# OpenAirInterface -# Copyright(c) 1999 - 2014 Eurecom - -# OpenAirInterface is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - - -# OpenAirInterface is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with OpenAirInterface.The full GNU General Public License is -# included in this distribution in the file called "COPYING". If not, -# see . - -# Contact Information -# OpenAirInterface Admin: openair_admin@eurecom.fr -# OpenAirInterface Tech : openair_tech@eurecom.fr -# OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr - -# Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE - -# *******************************************************************************/ -# \author Rohit Gupta +# \author Rohit Gupta - Benoit ROBERT (benoit.robert@syrtem.com) # \version 0.1 # @ingroup _test - -#****************************************************************************** -# -# \file run_lte-softmodem-nos1_tests.py -# -# \par Informations -# - \b Project : UED Autotest Framework -# - \b Software : -# -# \date 16 september 2016 -# -# \version 0.1 -# -# \brief master test script to run test class 'handle_testcaseclass_softmodem_noS1' -# This script is largely inspired by 'run_exec_lte-softmodem_tests.py', and -# reused parts of it. -# -# \author Benoit ROBERT (benoit.robert@syrtem.com) -# -# \par Statement of Ownership -# COPYRIGHT (c) 2016 BY SYRTEM S.A.R.L -# This software is furnished under license and may be used and copied -# only in accordance with the terms of such license and with the inclusion -# of the above COPYRIGHT notice. This SOFTWARE or any other copies thereof -# may not be provided or otherwise made available to any other person. -# No title to and ownership of the SOFTWARE is hereby transferred. -# -# The information in this SOFTWARE is subject to change without notice -# and should not be constructed as a commitment by SYRTEM. -# SYRTEM assumes no responsibility for the use or reliability of its -# SOFTWARE on equipment or platform not explicitly validated by SYRTEM. -# -# ******************************************************************************* +# \Changelog +# 2016-11-18 : +# - Add progess bar during test execution update_progress() import tempfile import threading @@ -79,6 +41,8 @@ import math #from time import clock import xml.etree.ElementTree as ET import re +#from dict2xml import dict2xml as xmlify + from colorama import Fore, Back, Style import numpy as np @@ -100,6 +64,31 @@ from ssh import SSHSession import argparse +# update_progress() : Displays or updates a console progress bar +## Accepts a float between 0 and 1. Any int will be converted to a float. +## A value under 0 represents a 'halt'. +## A value at 1 or bigger represents 100% +def update_progress(progress, prefix_string): + barLength = 20 # Modify this to change the length of the progress bar + status = "" + #print "progress = "+ str(progress) + if isinstance(progress, int): + progress = float(progress) + if not isinstance(progress, float): + progress = 0 + status = "error: progress var must be float\r\n" + if progress < 0: + progress = 0 + status = "Halt...\r\n" + if progress >= 1: + progress = 1 + status = "Done...\r\n" + block = int(round(barLength*progress)) + text = "\r"+prefix_string+" [{0}] {1}% {2}".format( "="*block + " "*(barLength-block), progress*100, status) + sys.stdout.write(text) + sys.stdout.flush() + + def exit_prog(exit_val): print(Style.RESET_ALL), sys.exit(exit_val) @@ -318,7 +307,7 @@ def update_config_file(oai, config_string, logdirRepo, python_script): # \param logdir_local_base local directory # \param operation operation to perform (get_all, put_all) transfers recursively for directories def SSHSessionWrapper(machine, username, key_file, password, logdir_remote, logdir_local_base, operation): - max_tries = 100 + max_tries = 10 i=0 while i <= max_tries: i = i +1 @@ -648,7 +637,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , RRH_pre_exec_args = testcase.findtext('RRH_pre_exec_args',default='') RRH_main_exec = testcase.findtext('RRH_main_exec',default='') RRH_main_exec_args = testcase.findtext('RRH_main_exec_args',default='') - RRH_terminate_missing_procs = testcase.findtext('RRH_terminate_missing_procs',default='True') + RRH_terminate_missing_procs = testcase.findtext('RRH_terminate_missing_procs',default='False') eNBMachine = testcase.findtext('eNB',default='') @@ -661,7 +650,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , eNB_main_exec_args = testcase.findtext('eNB_main_exec_args',default='') eNB_traffic_exec = testcase.findtext('eNB_traffic_exec',default='') eNB_traffic_exec_args = testcase.findtext('eNB_traffic_exec_args',default='') - eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='True') + eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='False') eNB_search_expr_true = testcase.findtext('eNB_search_expr_true','') if re.compile('\w+').match(eNB_search_expr_true) != None: eNB_search_expr_true = eNB_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' @@ -676,7 +665,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , UE_main_exec_args = testcase.findtext('UE_main_exec_args',default='') UE_traffic_exec = testcase.findtext('UE_traffic_exec',default='') UE_traffic_exec_args = testcase.findtext('UE_traffic_exec_args',default='') - UE_terminate_missing_procs = testcase.findtext('UE_terminate_missing_procs',default='True') + UE_terminate_missing_procs = testcase.findtext('UE_terminate_missing_procs',default='False') UE_search_expr_true = testcase.findtext('UE_search_expr_true','') UE_stop_script = testcase.findtext('UE_stop_script','') if re.compile('\w+').match(UE_search_expr_true) != None: @@ -697,25 +686,23 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , HSS_main_exec_args = testcase.findtext('HSS_main_exec_args',default='') EPC_traffic_exec = testcase.findtext('EPC_traffic_exec',default='') EPC_traffic_exec_args = testcase.findtext('EPC_traffic_exec_args',default='') - EPC_terminate_missing_procs = testcase.findtext('EPC_terminate_missing_procs',default='True') + EPC_terminate_missing_procs = testcase.findtext('EPC_terminate_missing_procs',default='False') EPC_search_expr_true = testcase.findtext('EPC_search_expr_true','') if re.compile('\w+').match(EPC_search_expr_true) != None: EPC_search_expr_true = EPC_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' index_eNBMachine = MachineList.index(eNBMachine) index_UEMachine = MachineList.index(UEMachine) -# index_EPCMachine = MachineList.index(EPCMachine) + index_EPCMachine = MachineList.index(EPCMachine) cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep OPENAIR' oai_eNB = openair('localdomain', eNBMachine) oai_eNB.connect(user, password) res= oai_eNB.send_recv(cmd) oai_UE = openair('localdomain', UEMachine) oai_UE.connect(user, password) -# print cmd - res = oai_UE.send_recv(cmd) -# print res -# oai_EPC = openair('localdomain', EPCMfachine) -# oai_EPC.connect(user, password) + res = oai_eNB.send_recv(cmd) + oai_EPC = openair('localdomain', EPCMachine) + oai_EPC.connect(user, password) res = oai_eNB.send_recv(cmd) if RRHMachine != '': cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep OPENAIR' @@ -735,9 +722,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , #cmd = 'mkdir -p ' + logdir_eNB #result = oai_eNB.send_recv(cmd) #cmd = 'mkdir -p ' + logdir_UE - #print cmd #result = oai_UE.send_recv(cmd) - #print result #cmd = 'mkdir -p ' + logdir_EPC #result = oai_EPC.send_recv(cmd) @@ -764,11 +749,9 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , cmd = 'rm -fr ' + logdir_eNB + ' ; mkdir -p ' + logdir_eNB result = oai_eNB.send_recv(cmd) cmd = 'rm -fr ' + logdir_UE + ' ; mkdir -p ' + logdir_UE -# print cmd result = oai_UE.send_recv(cmd) - # print result cmd = 'rm -fr ' + logdir_EPC + '; mkdir -p ' + logdir_EPC -# result = oai_EPC.send_recv(cmd) + result = oai_EPC.send_recv(cmd) cmd = ' rm -fr ' + logdir_local_testcase + ' ; mkdir -p ' + logdir_local_testcase result = os.system(cmd) @@ -919,17 +902,17 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , logfile_task_EPC_compile = logdir_local_testcase + '/EPC_task_compile' + '_' + str(run) + '_.log' logfile_local_traffic_EPC_out = logdir_local_testcase + '/EPC_traffic' + '_' + str(run) + '_.log' -# task_EPC_compile = ' ( uname -a ; date \n' -# task_EPC_compile = task_EPC_compile + 'array_exec_pid=()' + '\n' -# task_EPC_compile = task_EPC_compile + 'cd ' + logdirOpenaircnRepo + ' ; source oaienv \n' -# task_EPC_compile = task_EPC_compile + update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo, logdirOpenaircnRepo+'/TEST/autotests/tools/search_repl.py') + '\n' -# task_EPC_compile = task_EPC_compile + 'source BUILD/TOOLS/build_helper \n' -# if EPC_compile_prog != "": -# task_EPC_compile = task_EPC_compile + '(' + EPC_compile_prog + ' ' + EPC_compile_prog_args + ' ) > ' + logfile_compile_EPC + ' 2>&1 \n' -# if HSS_compile_prog != "": -# task_EPC_compile = task_EPC_compile + '(' + HSS_compile_prog + ' ' + HSS_compile_prog_args + ' ) > ' + logfile_compile_HSS + ' 2>&1 \n' -# task_EPC_compile = task_EPC_compile + ' ) > ' + logfile_task_EPC_compile_out + ' 2>&1 ' -# write_file(logfile_task_EPC_compile, task_EPC_compile, mode="w") + task_EPC_compile = ' ( uname -a ; date \n' + task_EPC_compile = task_EPC_compile + 'array_exec_pid=()' + '\n' + task_EPC_compile = task_EPC_compile + 'cd ' + logdirOpenaircnRepo + ' ; source oaienv \n' + task_EPC_compile = task_EPC_compile + update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo, logdirOpenaircnRepo+'/TEST/autotests/tools/search_repl.py') + '\n' + task_EPC_compile = task_EPC_compile + 'source BUILD/TOOLS/build_helper \n' + if EPC_compile_prog != "": + task_EPC_compile = task_EPC_compile + '(' + EPC_compile_prog + ' ' + EPC_compile_prog_args + ' ) > ' + logfile_compile_EPC + ' 2>&1 \n' + if HSS_compile_prog != "": + task_EPC_compile = task_EPC_compile + '(' + HSS_compile_prog + ' ' + HSS_compile_prog_args + ' ) > ' + logfile_compile_HSS + ' 2>&1 \n' + task_EPC_compile = task_EPC_compile + ' ) > ' + logfile_task_EPC_compile_out + ' 2>&1 ' + write_file(logfile_task_EPC_compile, task_EPC_compile, mode="w") task_EPC = ' ( uname -a ; date \n' task_EPC = task_EPC + ' export OPENAIRCN_TESTDIR=' + logdir_EPC + '\n' @@ -960,30 +943,31 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , task_EPC = task_EPC + ' ) > ' + logfile_task_EPC_out + ' 2>&1 ' write_file(logfile_task_EPC, task_EPC, mode="w") - #first we compile all the programs -# thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC_compile, False, timeout_thread) - thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB_compile, False, timeout_thread) - thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE_compile, False, timeout_thread) - if RRHMachine != '': - thread_RRH = oaiThread(4, "RRH_thread", RRHMachine, user, password , task_RRH_compile, False, timeout_thread) - threads=[] - threads.append(thread_eNB) - threads.append(thread_UE) -# threads.append(thread_EPC) - if RRHMachine != '': - threads.append(thread_RRH) - # Start new Threads - thread_eNB.start() - thread_UE.start() -# thread_EPC.start() - if RRHMachine != '': - thread_RRH.start() - #Wait for all the compile threads to complete - for t in threads: - t.join() + #first we compile all the programs but only for run_0 + if run == 0: + thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC_compile, False, timeout_thread) + thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB_compile, False, timeout_thread) + thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE_compile, False, timeout_thread) + if RRHMachine != '': + thread_RRH = oaiThread(4, "RRH_thread", RRHMachine, user, password , task_RRH_compile, False, timeout_thread) + threads=[] + threads.append(thread_eNB) + threads.append(thread_UE) + threads.append(thread_EPC) + if RRHMachine != '': + threads.append(thread_RRH) + # Start new Threads + thread_eNB.start() + thread_UE.start() + thread_EPC.start() + if RRHMachine != '': + thread_RRH.start() + #Wait for all the compile threads to complete + for t in threads: + t.join() #Now we execute all the threads -# thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC, False, timeout_thread) + thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC, False, timeout_thread) thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB, False, timeout_thread) thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE, False, timeout_thread) if RRHMachine != '': @@ -991,14 +975,14 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , threads=[] threads.append(thread_eNB) threads.append(thread_UE) -# threads.append(thread_EPC) + threads.append(thread_EPC) if RRHMachine != '': threads.append(thread_RRH) # Start new Threads thread_eNB.start() thread_UE.start() -# thread_EPC.start() + thread_EPC.start() if RRHMachine != '': thread_RRH.start() #Wait for all the compile threads to complete @@ -1008,8 +992,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , if RRHMachine != '': cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC, oai_RRH] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC, logdir_RRH], logdirOAI5GRepo) else: - cleanOldProgramsAllMachines([oai_eNB, oai_UE] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC], logdirOAI5GRepo) -# cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC], logdirOAI5GRepo) + cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC], logdirOAI5GRepo) logfile_UE_stop_script_out = logdir_UE + '/UE_stop_script_out' + '_' + str(run) + '_.log' logfile_UE_stop_script = logdir_local_testcase + '/UE_stop_script' + '_' + str(run) + '_.log' @@ -1020,32 +1003,30 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , cmd = cmd + UE_stop_script + '\n' cmd = cmd + ') > ' + logfile_UE_stop_script_out + ' 2>&1 ' write_file(logfile_UE_stop_script , cmd, mode="w") -# thread_UE = oaiThread(4, "UE_thread", UEMachine, user, password , cmd, False, timeout_thread) -# thread_UE.start() -# thread_UE.join() + thread_UE = oaiThread(4, "UE_thread", UEMachine, user, password , cmd, False, timeout_thread) + thread_UE.start() + thread_UE.join() #Now we change the permissions of the logfiles to avoid some of them being with root permissions cmd = 'sudo -E chown -R ' + user + ' ' + logdir_eNB res= oai_eNB.send_recv(cmd) -# print "Changing permissions of logdir <" + logdir_eNB + "> in eNB machine..." + res + print "Changing permissions of logdir <" + logdir_eNB + "> in eNB machine..." + res cmd = 'sudo -E chown -R ' + user + ' ' + logdir_UE -# print cmd res= oai_UE.send_recv(cmd) -# print res -# print "Changing permissions of logdir <" + logdir_UE + "> in UE machine..." + res + print "Changing permissions of logdir <" + logdir_UE + "> in UE machine..." + res cmd = 'sudo -E chown -R ' + user + ' ' + logdir_EPC -# res= oai_EPC.send_recv(cmd) -# print "Changing permissions of logdir <" + logdir_EPC + "> in EPC machine..." + res + res= oai_EPC.send_recv(cmd) + print "Changing permissions of logdir <" + logdir_EPC + "> in EPC machine..." + res if RRHMachine != '': cmd = 'sudo -E chown -R ' + user + ' ' + logdir_RRH res= oai_RRH.send_recv(cmd) -# print "Changing permissions of logdir <" + logdir_RRH + "> in RRH machine..." + res + print "Changing permissions of logdir <" + logdir_RRH + "> in RRH machine..." + res print "Copying files from EPCMachine : " + EPCMachine + "logdir_EPC = " + logdir_EPC -# SSHSessionWrapper(EPCMachine, user, None, password, logdir_EPC, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all") + SSHSessionWrapper(EPCMachine, user, None, password, logdir_EPC, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all") print "Copying files from eNBMachine " + eNBMachine + "logdir_eNB = " + logdir_eNB SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all") @@ -1089,6 +1070,13 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , run_result=0 run_result_string = ' RUN_'+str(run) + ' = FAIL(Thread_Busy)' + #If there is Segmentation fault, we mark the test case as failure as most likely eNB crashed + cmd = "grep -ilr \"segmentation fault\" " + logdir_local_testcase + " | cat " + cmd_out = subprocess.check_output ([cmd], shell=True) + if len(cmd_out) !=0: + run_result=0 + run_result_string = ' RUN_'+str(run) + ' = FAIL(SEGFAULT)' + run_result_string = run_result_string + tput_run_string test_result=test_result & run_result @@ -1096,7 +1084,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , oai_eNB.disconnect() oai_UE.disconnect() -# oai_EPC.disconnect() + oai_EPC.disconnect() #We need to close the new ssh session that was created #if index_eNBMachine == index_EPCMachine: # oai_EPC.disconnect() @@ -1113,6 +1101,7 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , + # \brief handler for executing test cases (lte-softmodem-noS1) # \param testcase name of testcase # \param oldprogramList list of programs which must be terminated before running a test case @@ -1329,6 +1318,8 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe if testcase_verdict != 'PASS': # if something went wrong to not run test cases max_ntries=0 + indent="\t\t" + runs_results = [] nb_runs = 0 nb_run_pass = 0 @@ -1348,9 +1339,11 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe # # RUN initialization # ---------------------------------------------------- - print (Fore.WHITE + indent + "> RUN_"+str(run).zfill(2)+" : " ), - - sys.stdout.flush() + + prefix_string = Fore.WHITE + indent + "> RUN_"+str(run).zfill(2)+" :" + +# print (Fore.WHITE + indent + "> RUN_"+str(run).zfill(2)+" : " ), +# sys.stdout.flush() run_start_time=datetime.datetime.now() @@ -1466,8 +1459,34 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe threads.append(thread_UE) thread_eNB.start() thread_UE.start() + + run_work_inprogress_flag = True + progress_step = timeout_thread/20 + progress_count = 0 + + while (run_work_inprogress_flag): + + + update_progress(float(progress_count)/float(timeout_thread),prefix_string) + + time.sleep(progress_step) + + progress_count += progress_step + +# sys.stdout.write ('#') +# sys.stdout.flush() + + run_work_inprogress_flag = False + for t in threads: + if t.isAlive(): + run_work_inprogress_flag = True + + + update_progress(1,prefix_string) + for t in threads: - t.join() + t.join() + # # @@ -1482,10 +1501,12 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe fname = logdir_local_run+ '/UE_exec' + '_' + str(run) + '_.log' cell_synch_status = analyser.check_cell_synchro(fname) + print (Fore.WHITE + indent + "> Check Cell synchro :"), + if cell_synch_status == 'CELL_SYNCH': - print '!!!!!!!!!!!!!! Cell synchronized !!!!!!!!!!!' + print ( Fore.GREEN + cell_synch_status) else : - print '!!!!!!!!!!!!!! Cell NOT NOT synchronized !!!!!!!!!!!' + print ( Fore.RED + cell_synch_status) metric_checks_flag = 0 ue_seg_fault_status = analyser.check_exec_seg_fault(fname) @@ -1504,6 +1525,9 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe # UE side metrics metricList=testcase.findall('UE_metric') for metric in metricList: + + metric_verdict = 'PASS' + metric_def = {} metric_def['id'] = metric.get('id') metric_def['description'] = metric.get('description') @@ -1524,15 +1548,19 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe metric_extracted = analyser.do_extract_metrics(args) - print "\t > Metric "+metric_def['id']+" :" - print "\t\t> min = "+ str( metric_extracted['metric_min'] ) - print "\t\t> min_index = "+ str( metric_extracted['metric_min_index'] ) - print "\t\t> max = "+ str( metric_extracted['metric_max'] ) - print "\t\t> max_index = "+ str( metric_extracted['metric_max_index'] ) - print "\t\t> mean = "+ str( metric_extracted['metric_mean'] ) - print "\t\t> median = "+ str( metric_extracted['metric_median'] ) + print (Fore.WHITE + indent + "> Metric : "+metric_def['id']), + print ("(min="+str( metric_extracted['metric_min'])+", max="+str( metric_extracted['metric_max'])+", mean="+str( metric_extracted['metric_mean'])+", median="+str( metric_extracted['metric_median'])+")") - verdict = analyser.do_check_verdict(metric_def, metric_extracted) +# print "\t > Metric "+metric_def['id']+" :" +# print "\t\t> min = "+ str( metric_extracted['metric_min'] ) +# print "\t\t> min_index = "+ str( metric_extracted['metric_min_index'] ) +# print "\t\t> max = "+ str( metric_extracted['metric_max'] ) +# print "\t\t> max_index = "+ str( metric_extracted['metric_max_index'] ) +# print "\t\t> mean = "+ str( metric_extracted['metric_mean'] ) +# print "\t\t> median = "+ str( metric_extracted['metric_median'] ) + + if metric_def['pass_fail_stat'] : + metric_verdict = analyser.do_check_verdict(metric_def, metric_extracted) metric_fig = logdir_local_run+ '/UE_metric_'+ metric_def['id']+'_' + str(run) + '_.png' analyser.do_img_metrics(metric_def, metric_extracted, metric_fig) @@ -1560,6 +1588,13 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe runs_metrics.append(run_metrics) + if metric_verdict != 'PASS': + verdict = metric_verdict + + # End Metrics LOOP + # --------------------- + + # Traffic analysis if UE_traffic_exec != "": @@ -1613,9 +1648,9 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe run_stop_time=datetime.datetime.now() run_duration = run_stop_time-run_start_time # print (Fore.WHITE + ("duration=" :"), - print (Fore.WHITE + indent + "> RUN duration : "+ str(run_duration) +"s" ) + print (Fore.WHITE + indent + "> RUN duration : "+ str(run_duration) +"s" ) - print (Fore.WHITE + indent + "> RUN verdict :"), + print (Fore.WHITE + indent + "> RUN verdict :"), if verdict == 'PASS': nb_run_pass += 1 @@ -1645,6 +1680,8 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe # END RUN LOOP #---------------------------------------------------- + indent="\t" + # Test case duration # ---------------------------------- testcase_time_stop = datetime.datetime.now() @@ -1684,11 +1721,9 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe else: print (Fore.YELLOW+'INCONCLUSIVE') - duration= testcase_time_stop - testcase_time_start - xmlFile = logdir_local_testcase + '/test.' + testcasename + '.xml' - xml="\n \n" - write_file(xmlFile, xml, mode="w") + print(Style.RESET_ALL) + duration= testcase_time_stop - testcase_time_start test_result = dict(testcase_name=testcasename, testcaseclass=testcaseclass, @@ -1709,161 +1744,20 @@ def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRe runs_results = runs_results) test_results.append(test_result) + xmlFile = logdir_local_testcase + '/test.' + testcasename + '.xml' + xml="\n \n" + write_file(xmlFile, xml, mode="w") + + xmlFile_ng = logdir_local_testcase + '/test.' + testcasename + '_ng.xml' + xml_ng = xmlify(test_result, wrap=testcasename, indent=" ") + write_file(xmlFile_ng, xml_ng, mode="w") + + + return testcase_verdict -# mypassword='' -# #addsudo = 'echo \'' + mypassword + '\' | sudo -S -E ' -# addpass = 'echo \'' + mypassword + '\' | ' -# #user = getpass.getuser() - - - - - - - -# eNB_traffic_exec = testcase.findtext('eNB_traffic_exec',default='') -# eNB_traffic_exec_args = testcase.findtext('eNB_traffic_exec_args',default='') -# eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='True') -# eNB_search_expr_true = testcase.findtext('eNB_search_expr_true','') -# if re.compile('\w+').match(eNB_search_expr_true) != None: -# eNB_search_expr_true = eNB_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' - - - -# UE_traffic_exec = testcase.findtext('UE_traffic_exec',default='') -# UE_traffic_exec_args = testcase.findtext('UE_traffic_exec_args',default='') -# -# UE_search_expr_true = testcase.findtext('UE_search_expr_true','') -# UE_stop_script = testcase.findtext('UE_stop_script','') -# if re.compile('\w+').match(UE_search_expr_true) != None: -# UE_search_expr_true = UE_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' - - - -# #cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) -# #cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) -# #cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) -# logdir_local = os.environ.get('OPENAIR_DIR') -# if logdir_local is None: -# print "Environment variable OPENAIR_DIR not set correctly" -# sys.exit() - - -# print "Updating the config files for ENB/UE/EPC..." -# #updating the eNB/UE/EPC configuration file from the test case -# #update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo) -# #update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo) -# #update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo) - -# test_result=1 -# test_result_string='' -# start_time=time.time() - -# for run in range(0,nruns): -# run_result=1 -# run_result_string='' -# logdir_eNB = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) -# logdir_UE = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + - - - - -# logfile_traffic_eNB = logdir_eNB + '/eNB_traffic' + '_' + str(run) + '_.log' - - -# logfile_local_traffic_eNB_out = logdir_local_testcase + '/eNB_traffic' + '_' + str(run) + '_.log' -# logfile_tshark_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.log' -# logfile_pcap_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.pcap' -# logfile_pcap_zip_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.pcap.zip' -# logfile_pcap_tmp_eNB = '/tmp/' + '/eNB_tshark' + '_' + str(run) + '_.pcap' - -# task_eNB_compile = ' ( uname -a ; date \n' -# task_eNB_compile = task_eNB_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' -# task_eNB_compile = task_eNB_compile + 'env |grep OPENAIR \n' -# task_eNB_compile = task_eNB_compile + update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' -# if eNB_compile_prog != "": -# task_eNB_compile = task_eNB_compile + ' ( ' + eNB_compile_prog + ' '+ eNB_compile_prog_args + ' ) > ' + logfile_compile_eNB + ' 2>&1 \n' -# task_eNB_compile = task_eNB_compile + ' date ) > ' + logfile_task_eNB_compile_out + ' 2>&1 ' -# write_file(logfile_task_eNB_compile, task_eNB_compile, mode="w") - - - -# #task_eNB = 'echo \" ' + task_eNB + '\" > ' + logfile_script_eNB + ' 2>&1 ; ' + task_eNB -# logfile_compile_UE = logdir_UE + '/UE_compile' + '_' + str(run) + '_.log' -# logfile_exec_UE = logdir_UE + '/UE_exec' + '_' + str(run) + '_.log' - - - - -# #Now we execute all the threads - - -# #Now we get the log files from remote machines on the local machine -# cleanOldProgramsAllMachines([oai_eNB, oai_UE] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC], logdirOAI5GRepo) - -# logfile_UE_stop_script_out = logdir_UE + '/UE_stop_script_out' + '_' + str(run) + '_.log' -# logfile_UE_stop_script = logdir_local_testcase + '/UE_stop_script' + '_' + str(run) + '_.log' - -# if UE_stop_script != "": -# cmd = ' ( uname -a ; date \n' -# cmd = cmd + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' -# cmd = cmd + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' -# cmd = cmd + UE_stop_script + '\n' -# cmd = cmd + ') > ' + logfile_UE_stop_script_out + ' 2>&1 ' -# write_file(logfile_UE_stop_script , cmd, mode="w") -# # thread_UE = oaiThread(4, "UE_thread", UEMachine, user, password , cmd, False, timeout_thread) -# # thread_UE.start() -# # thread_UE.join() - - - - -# #Currently we only perform throughput tests -# tput_run_string='' -# result, tput_string = tput_test_search_expr(eNB_search_expr_true, logfile_local_traffic_eNB_out) -# tput_run_string = tput_run_string + tput_string -# run_result=run_result&result -# result, tput_string = tput_test_search_expr(EPC_search_expr_true, logfile_local_traffic_EPC_out) -# run_result=run_result&result -# tput_run_string = tput_run_string + tput_string -# result, tput_string = tput_test_search_expr(UE_search_expr_true, logfile_local_traffic_UE_out) -# run_result=run_result&result -# tput_run_string = tput_run_string + tput_string - -# if run_result == 1: -# run_result_string = ' RUN_'+str(run) + ' = PASS' -# else: -# run_result_string = ' RUN_'+str(run) + ' = FAIL' - -# #If there is assertion, we mark the test case as failure as most likely eNB crashed -# cmd = "grep -ilr \"assertion\" " + logdir_local_testcase + " | cat " -# cmd_out = subprocess.check_output ([cmd], shell=True) -# if len(cmd_out) !=0 : -# run_result=0 -# run_result_string = ' RUN_'+str(run) + ' = FAIL(Assert)' - -# #If there is thread busy error, we mark the test case as failure as most likely eNB crashed -# cmd = "grep -ilr \"thread busy\" " + logdir_local_testcase + " | cat " -# cmd_out = subprocess.check_output ([cmd], shell=True) -# if len(cmd_out) !=0: -# run_result=0 -# run_result_string = ' RUN_'+str(run) + ' = FAIL(Thread_Busy)' - -# run_result_string = run_result_string + tput_run_string - -# test_result=test_result & run_result -# test_result_string=test_result_string + run_result_string - - - - - - - - # \brief This function searches if test case is present in list of test cases that need to be executed by user # \param testcasename the test case to search for @@ -1982,7 +1876,7 @@ flag_skip_oai_install=False flag_skip_machine_preparation=False flag_skip_sanity_check=False Timeout_cmd='' -xmlInputFile=os.environ.get('OPENAIR_DIR')+"/cmake_targets/autotests/testsuite_ue_noS1.xml" +xmlInputFile='' #print "Number of arguments argc = " + str(len(sys.argv)) #for index in range(1,len(sys.argv) ): @@ -2054,6 +1948,9 @@ while i < len (sys.argv): flag_skip_machine_preparation=True elif arg == '--skip-sanity-check': flag_skip_sanity_check=True + elif arg == '--test-suite' : + xmlInputFile = sys.argv[i+1] + i = i +1 elif arg == '-h' : print "-s: This flag *MUST* be set to start the test cases" print "-r: Remove the log directory in autotests" @@ -2073,6 +1970,7 @@ while i < len (sys.argv): print "--skip-oai-install: Skips the openairinterface5g installer" print "--skip-machine-preparation: skipp the whole system preparation -> direct to test cases" print "--skip-sanity-check: skipp the machine sanity checks" + print "--test-suite: Select a XML test-suite file" sys.exit() else : print "Unrecongnized Option: <" + arg + ">. Use -h to see valid options" @@ -2163,7 +2061,7 @@ print (Fore.WHITE + ' + Timeout_cmd : '+ Timeout_cmd) if GitOAI5GHeadVersion == '': - cmd = "git log --pretty=format:\'%H\' -n 1 origin/"+ GitOAI5GRepoBranch + cmd = "git log --pretty=format:\'%H\' -n 1" # origin/"+ GitOAI5GRepoBranch # cmd = "git show-ref --heads -s "+ GitOAI5GRepoBranch GitOAI5GHeadVersion = subprocess.check_output ([cmd], shell=True) GitOAI5GHeadVersion=GitOAI5GHeadVersion.replace("\n","") @@ -2337,13 +2235,24 @@ if not flag_skip_machine_preparation: setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' + + #Sometimes git fails so the script below retries in that case + localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/git-retry.sh') + remotefile = logdir + '/git-retry.sh' + paramList=[] + port=22 + paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) + cmd = ' ( \n' #cmd = cmd + 'rm -fR ' + logdir + '\n' #cmd = cmd + 'mkdir -p ' + logdir + '\n' cmd = cmd + 'cd '+ logdir + '\n' - cmd = cmd + 'git config --global http.sslVerify false \n' - cmd = cmd + 'git clone '+ GitOAI5GRepo +' \n' - cmd = cmd + 'git clone '+ GitOpenaircnRepo + ' \n' + cmd = cmd + 'sudo apt-get install -y git \n' + cmd = cmd + 'chmod 700 ' + logdir + '/git-retry.sh \n' + cmd = cmd + logdir + '/git-retry.sh clone '+ GitOAI5GRepo +' \n' + cmd = cmd + logdir + '/git-retry.sh clone '+ GitOpenaircnRepo + ' \n' cmd = cmd + 'cd ' + logdirOAI5GRepo + '\n' cmd = cmd + 'git checkout ' + GitOAI5GRepoBranch + '\n' if GitOAI5GHeadVersion : @@ -2399,9 +2308,8 @@ if not flag_skip_machine_preparation: paramList=[] sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') - #Now we copy patch files for u + #Now we copy patch files and apply them print( Fore.WHITE + " - Installating patch files on machine " + MachineList[index]) - #Now we copy patch files for u for patchFile in OAI5GpatchFileList: localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/patches/')+patchFile.get('name') remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/patches/'+patchFile.get('name') @@ -2417,19 +2325,20 @@ if not flag_skip_machine_preparation: paramList=[] + setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' + localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' + remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) + #sftp_module (user, pw, MachineList[index], port, localfile, remotefile, sftp_log, "get") + #Now we copy test_case_list.xml on the remote machines localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml') remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/test_case_list.xml' # paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) # sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) - setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' - setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' - localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' - remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' - - sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) @@ -2456,6 +2365,7 @@ if not flag_skip_machine_preparation: print "Exiting now..." sys.exit(0) + else: print (Fore.RED + " Skipping Machine preparation...") @@ -2558,21 +2468,65 @@ for testcase in testcaseList: try: testcasename = testcase.get('id') testcaseclass = testcase.findtext('class',default='') + desc = testcase.findtext('desc',default='') + #print "Machine list top level = " + ','.join(MachineList) - if (search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList)): + if search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList) == True: run_count+=1 print (Fore.WHITE + " ("+str(run_count).zfill(3)+"/"+str(nb_run_testcases).zfill(3)+") - test case "+testcasename+" : "), if testcaseclass == 'lte-softmodem' : - print (Fore.RED + "skipped - lte-softmodem class not supported") - elif testcaseclass == 'lte-softmodem-noS1': - print + eNBMachine = testcase.findtext('eNB',default='') + UEMachine = testcase.findtext('UE',default='') + EPCMachine = testcase.findtext('EPC',default='') + #index_eNBMachine = MachineList.index(eNBMachine) + #index_UEMachine = MachineList.index(UEMachine) + #index_EPCMachine = MachineList.index(EPCMachine) + if (eNBMachine not in MachineList)|(UEMachine not in MachineList)|(UEMachine not in MachineList): + print "One of the machines is not in the machine list" + print "eNBMachine : " + eNBMachine + "UEMachine : " + UEMachine + "EPCMachine : " + EPCMachine + "MachineList : " + ','.join(MachineList) + print "testcasename = " + testcasename + " class = " + testcaseclass + threadListGlobal = wait_testcaseclass_generic_threads(threadListGlobal, Timeout_execution) + #cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop) + handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, user, pw, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, Timeout_cmd ) + + #The lines below are copied from below to trace the failure of some of the machines in test setup. These lines below need to be removed in long term + print "Creating xml file for overall results..." + cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " + res=os.system(cmd) + os.system('sync') + print "Now copying files to NFS Share" + oai_localhost = openair('localdomain','localhost') + oai_localhost.connect(user,pw) + cmd = ' mkdir -p ' + NFSTestsResultsDir + res = oai_localhost.send_recv(cmd) + + print "Copying files from GilabCI Runner Machine : " + host + " .locallogdir = " + locallogdir + ", NFSTestsResultsDir = " + NFSTestsResultsDir + SSHSessionWrapper('localhost', user, None, pw , NFSTestsResultsDir , locallogdir, "put_all") + oai_localhost.disconnect() + + elif testcaseclass == 'lte-softmodem-noS1' : + eNBMachine = testcase.findtext('eNB',default='') + UEMachine = testcase.findtext('UE',default='') + if (eNBMachine not in MachineList)|(UEMachine not in MachineList): + print "One of the machines is not in the machine list" + print "eNBMachine : " + eNBMachine + "UEMachine : " + UEMachine + "MachineList : " + ','.join(MachineList) + print "testcasename = " + testcasename + " class = " + testcaseclass + threadListGlobal = wait_testcaseclass_generic_threads(threadListGlobal, Timeout_execution) + handle_testcaseclass_softmodem_noS1 (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, user, pw, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, Timeout_cmd ) - elif testcaseclass == 'compilation': - print (Fore.RED + "skipped - compilation class not supported") - elif testcaseclass == 'execution': - print (Fore.RED + "skipped - execution class not supported") + + #The lines below are copied from below to trace the failure of some of the machines in test setup. These lines below need to be removed in long term + print "Creating xml file for overall results..." + cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " + res=os.system(cmd) + os.system('sync') + + elif (testcaseclass == 'compilation'): + threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox,Timeout_execution, ExmimoRfStop) + elif (testcaseclass == 'execution'): + threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox, Timeout_execution, ExmimoRfStop) else : - print (Fore.RED + "Unknown test case class: " + testcaseclass) + print "Unknown test case class: " + testcaseclass sys.exit() except Exception, e: @@ -2582,8 +2536,14 @@ for testcase in testcaseList: error = error + traceback.format_exc() print error print "Continuing to next test case..." + #sys.exit(1) -threadListGlobal=[] + +print "Exiting the test cases execution now. Waiting for existing threads to complete..." + +for param in threadListGlobal: + thread_id = param["thread_id"] + thread_id.join() # ************************************************************************** @@ -2633,153 +2593,3 @@ analyser.create_report_html(context) exit_prog(0) -#print testcaseList -for testcase in testcaseList: - try: - testcasename = testcase.get('id') - testcaseclass = testcase.findtext('class',default='') - desc = testcase.findtext('desc',default='') - #print "Machine list top level = " + ','.join(MachineList) - if search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList) == True: - if testcaseclass == 'lte-softmodem' : - eNBMachine = testcase.findtext('eNB',default='') - UEMachine = testcase.findtext('UE',default='') - EPCMachine = testcase.findtext('EPC',default='') - #index_eNBMachine = MachineList.index(eNBMachine) - #index_UEMachine = MachineList.index(UEMachine) - #index_EPCMachine = MachineList.index(EPCMachine) - if (eNBMachine not in MachineList)|(UEMachine not in MachineList)|(UEMachine not in MachineList): - print "One of the machines is not in the machine list" - print "eNBMachine : " + eNBMachine + "UEMachine : " + UEMachine + "EPCMachine : " + EPCMachine + "MachineList : " + ','.join(MachineList) - print "testcasename = " + testcasename + " class = " + testcaseclass - threadListGlobal = wait_testcaseclass_generic_threads(threadListGlobal, Timeout_execution) - #cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop) - #handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, user, pw, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, Timeout_cmd ) - - #The lines below are copied from below to trace the failure of some of the machines in test setup. These lines below need to be removed in long term -# print "Creating xml file for overall results..." -# cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " -# res=os.system(cmd) -# os.system('sync') -# print "Now copying files to NFS Share" -# oai_localhost = openair('localdomain','localhost') -# oai_localhost.connect(user,pw) -# cmd = ' mkdir -p ' + NFSTestsResultsDir -# print cmd -# res = oai_localhost.send_recv(cmd) -# print res - - # print "Copying files from GilabCI Runner Machine : " + host + " .locallogdir = " + locallogdir + ", NFSTestsResultsDir = " + NFSTestsResultsDir - # SSHSessionWrapper('localhost', user, None, pw , NFSTestsResultsDir , locallogdir, "put_all") - # oai_localhost.disconnect() - - elif (testcaseclass == 'compilation'): - threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox,Timeout_execution, ExmimoRfStop) - elif (testcaseclass == 'execution'): - threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox, Timeout_execution, ExmimoRfStop) - else : - print "Unknown test case class: " + testcaseclass - sys.exit() - - except Exception, e: - error='' - error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n testcasename = ' + testcasename + '\n testcaseclass = ' + testcaseclass + '\n desc = ' + 'desc' + '\n' - error = error + traceback.format_exc() - print error - print "Continuing to next test case..." - #sys.exit(1) - - -print "Exiting the test cases execution now. Waiting for existing threads to complete..." - -for param in threadListGlobal: - thread_id = param["thread_id"] - thread_id.join() - -print "Creating xml file for overall results..." -cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " -res=os.system(cmd) - -print "Now copying files to NFS Share" -oai_localhost = openair('localdomain','localhost') -oai_localhost.connect(user,pw) -cmd = 'mkdir -p ' + NFSTestsResultsDir -print cmd -res = oai_localhost.send_recv(cmd) -print res - -print "Copying files from GilabCI Runner Machine : " + host + " .locallogdir = " + locallogdir + ", NFSTestsResultsDir = " + NFSTestsResultsDir -SSHSessionWrapper('localhost', user, None, pw , NFSTestsResultsDir , locallogdir, "put_all") - -cmd = "cat " + NFSTestsResultsDir + "/log/*/*.xml > " + NFSTestsResultsDir + "/log/results_autotests.xml" -res = oai_localhost.send_recv(cmd) - -oai_localhost.disconnect() - -sys.exit() - - - - - - - -run_count = 0 -for testcase in testcaseList: - try: - testcasename = testcase.get('id') - testcaseclass = testcase.findtext('class',default='') - - if (search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList)): - run_count+=1 - print (Fore.WHITE + " ("+str(run_count).zfill(3)+"/"+str(nb_run_testcases).zfill(3)+") - test case "+testcasename+" : "), - if testcaseclass == 'lte-softmodem' : - print (Fore.RED + "skipped - lte-softmodem class not supported") - elif testcaseclass == 'lte-softmodem-noS1': - print - - testcase_verdict = 'PASS' - testcase_time_start = datetime.datetime.now() - testcase_name = testcase.get('id') - testcase_desc = testcase.findtext('desc',default='') - timeout_cmd = testcase.findtext('TimeOut_cmd',default='') - timeout_cmd = int(float(timeout_cmd)) - timeout_thread = timeout_cmd + 300 #Timeout_thread is more than that of cmd to have room for compilation time, etc - if nruns_lte_softmodem == '': - nruns = testcase.findtext('nruns',default='') - else: - nruns = nruns_lte_softmodem - nruns = int(float(nruns)) - tags = testcase.findtext('tags',default='') - testcase_time_stop = datetime.datetime.now() - - test_result = dict(testcase_name=testcase_name, - testcaseclass=testcaseclass, - testcase_verdict = testcase_verdict, - testcase_time_start=testcase_time_start, - testcase_time_stop=testcase_time_stop, - tags=tags, - nruns=nruns, - testcase_timeout=timeout_cmd, - testcase_duration = testcase_time_stop-testcase_time_start, - testcase_eNBMachine ="TOTO", - testcase_UEMachine ="TITI") - test_results.append(test_result) - - - elif testcaseclass == 'compilation': - print (Fore.RED + "skipped - compilation class not supported") - elif testcaseclass == 'execution': - print (Fore.RED + "skipped - execution class not supported") - else : - print (Fore.RED + "Unknown test case class: " + testcaseclass) - sys.exit() - - except Exception, e: - error='' - error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n testcasename = ' + testcasename + '\n testcaseclass = ' + testcaseclass + '\n desc = ' + 'desc' + '\n' - error = error + traceback.format_exc() - print error - print "Continuing to next test case..." diff --git a/cmake_targets/autotests/testsuite_ue_noS1.xml b/cmake_targets/autotests/testsuite_ue_noS1.xml new file mode 100644 index 0000000000..c2f87b881f --- /dev/null +++ b/cmake_targets/autotests/testsuite_ue_noS1.xml @@ -0,0 +1,2898 @@ + + +imb182-desktop yanbo-M4HM87P-00 + /mnt/sradio/TEST_RESULTS/ + https://gitlab.eurecom.fr/oai1B/openairinterface5g.git + + + https://gitlab.eurecom.fr/oai/openair-cn.git --> + develop1B + + + + + + + + develop + oaisim oaisim_nos1 lte-softmodem lte-softmodem-nos1 mme_gw run_epc auth_request run_hss oai_hss mme spgw hss hss_sim configure_cots* wvdial iperf iperf_script iperf_script_phone ping tshark rrh_gw iperf3 iperf3_script iperf3_script_phone pppd + sudo -S -E /opt/ltebox/tools/stop_ltebox +$OPENAIR_DIR/cmake_targets/build_oai -w EXMIMO -c; sudo -S -E $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue; uname -a; sudo -E dmesg + 36000 + + + yanbo-M4HM87P-00 + + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS00 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS00 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 1 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS01 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 1 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS01 + 36 + + + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS09 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS09 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS16 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS16 + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS10 + + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS10 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS17 + + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS17 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 18 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS18 + + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 18 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS18 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS19 + + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS19 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 20 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS20 + + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 20 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS20 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 21 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS21 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 21 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS21 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 22 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS22 + + 36 + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 22 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS22 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 23 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS23 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 23 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS23 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 24 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS24 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 24 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS24 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 25 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS25 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 25 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS25 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 26 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS26 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 26 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS26 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS27 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS27 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS28 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS28 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 3600 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_STAB.BAND7.5MHZ.MCS27 + 16 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_STAB.BAND7.5MHZ.MCS27 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf -W -m 27 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS27 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf -W -m 27 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r50 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS27 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf -W -m 28 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + UE_USRP.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS28 + 36 + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf -W -m 19 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r50 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test + + + + + + False + UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS19 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 512K + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS00 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf -W -m 28 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 6M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.10MHZ.MCS28 + 36 + + + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 512K + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS00 + 36 + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS09 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS09 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS10 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS10 + 36 + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS16 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS16 + 36 + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS17 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS17 + 36 + + + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS19 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 10M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS19 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 + sleep 30;iperf -c 10.0.1.9 -i 1 -u -b 10M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 5; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS27 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 3600 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 2800 + + False + UE_USRP.NOS1.DATA_IPERF_STAB.BAND7.5MHZ.MCS27 + 16 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + ued-PRM-130 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w EXMIMO --noS1 --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2660000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 + + iperf -s -i 1 -u + + 200 + + False + UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS27 + 36 + + + + + + + diff --git a/cmake_targets/autotests/tools/autotest_analyser.py b/cmake_targets/autotests/tools/autotest_analyser.py index a75727ad65..61759a1545 100755 --- a/cmake_targets/autotests/tools/autotest_analyser.py +++ b/cmake_targets/autotests/tools/autotest_analyser.py @@ -35,12 +35,15 @@ import getopt import sys from subprocess import call +import encoder + +sys.path.append(os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/')) #test_cases = ('030001', '030901', '031001', '031601', '031701', '031801', '031901', '032001', '032101', '032201', '032301', '032501', '032601', '032801') -test_cases = ('030030' , '030030' ) +test_cases = ('032800' , '032730' ) -nb_run = 3 +nb_run = 2 def error_opt(msg): print("Option error: " + msg) @@ -58,14 +61,27 @@ def main(args): + # metric = {} + # metric['id'] = 'UE_DLSCH_BITRATE' + # metric['description'] = 'UE downlink physical throughput' + # metric['regex'] = '(UE_DLSCH_BITRATE) =\s+(\d+\.\d+) kbps.+frame = (\d+)\)' + # metric['unit_of_meas'] = 'kbps' + # metric['min_limit'] = 14668.8 + + +#AUTOTEST Metric : RRC Measurments RSRP[0]=-97.60 dBm/RE, RSSI=-72.83 dBm, RSRQ[0] 9.03 dB, N0 -125 dBm/RE, NF 7.2 dB (frame = 4490) + metric = {} - metric['id'] = 'UE_DLSCH_BITRATE' - metric['description'] = 'UE downlink physical throughput' - metric['regex'] = '(UE_DLSCH_BITRATE) =\s+(\d+\.\d+) kbps.+frame = (\d+)\)' + metric['id'] = 'UE_DL_RRC_MEAS' + metric['description'] = 'UE downlink RRC Measurments' + metric['nb_metric'] = 5 +# metric['regex'] = 'AUTOTEST Metric : RRC Measurments (RSRP\[0\])=(-?\d+\.?\d*)\s+(.+),\s+(RSRQ\[0\])=(-?\d+\.?\d*)\s+(.+),,\s+(N0)=(-?\d+\.?\d*)\s+(.+),,\s+(NF)=(-?\d+\.?\d*)\s+(.+)\s+\(frame = (\d+)\) ' + metric['regex'] = 'AUTOTEST Metric : RRC Measurments (RSRP\[0\])=(-?\d+\.?\d*)\s+(.+)\,\s+(RSSI)=(-?\d+\.?\d*)\s+(.+)\,\s+(RSRQ\[0\])=(-?\d+\.?\d*)\s+(.+)\,\s+(N0)=(-?\d+\.?\d*)\s+(.+)\,\s+(NF)=(-?\d+\.?\d*)\s+(.+)\s+\(frame = (\d+)\)' metric['unit_of_meas'] = 'kbps' metric['min_limit'] = 14668.8 + #report_path = log_path+'/report/' #os.system(' mkdir -p ' + report_path) @@ -74,58 +90,44 @@ def main(args): #return(0) + test_results = [] + for test_case in test_cases: -# print test_case - if test_case == '030001': - metric['min_limit'] = 500.0 - if test_case == '030901': - metric['min_limit'] = 640.0 - if test_case == '031001': - metric['min_limit'] = 3200.0 - if test_case == '031601': - metric['min_limit'] = 5920.0 - if test_case == '031701': - metric['min_limit'] = 6000.0 - if test_case == '031801': - metric['min_limit'] = 6200.0 - if test_case == '031901': - metric['min_limit'] = 7000.0 - if test_case == '032001': - metric['min_limit'] = 7800.0 - if test_case == '032101': - metric['min_limit'] = 8000.0 - if test_case == '032201': - metric['min_limit'] = 9000.0 - if test_case == '032301': - metric['min_limit'] = 10000.0 - if test_case == '032501': - metric['min_limit'] = 11000.0 - if test_case == '032601': - metric['min_limit'] = 12000.0 - if test_case == '032801': - metric['min_limit'] = 12500.0 - - if test_case == '035201': - metric['min_limit'] = 14668.8 - if test_case == '036001': - metric['min_limit'] = 25363.2 - - - for i in range(0, nb_run): - fname = 'log//'+test_case+'/run_'+str(i)+'/UE_exec_'+str(i)+'_.log' + fname = '..//log//'+test_case+'/run_'+str(i)+'/UE_exec_'+str(i)+'_.log' args = {'metric' : metric, 'file' : fname } - cell_synch_status = analyser.check_cell_synchro(fname) - if cell_synch_status == 'CELL_SYNCH': - print '!!!!!!!!!!!!!! Cell synchronized !!!!!!!!!!!' - metric_checks_flag = 0 - else : - print '!!!!!!!!!!!!!! Cell NOT NOT synchronized !!!!!!!!!!!' + # cell_synch_status = analyser.check_cell_synchro(fname) + # if cell_synch_status == 'CELL_SYNCH': + # print '!!!!!!!!!!!!!! Cell synchronized !!!!!!!!!!!' + # metric_checks_flag = 0 + # else : + # print '!!!!!!!!!!!!!! Cell NOT NOT synchronized !!!!!!!!!!!' -# metric_extracted = analyser.do_extract_metrics(args) +# metrics_extracted = analyser.do_extract_metrics_new(args) + + + # de-xmlfy test report + xml_file = '..//log//'+test_case+'/test.'+test_case+'_ng.xml' + print xml_file + + # test_result = + + + # test_results.append(test_result) + + # xmlFile = logdir_local_testcase + '/test.' + testcasename + '.xml' + # xml="\n \n" + # write_file(xmlFile, xml, mode="w") + + # xmlFile_ng = logdir_local_testcase + '/test.' + testcasename + '_ng.xml' + # xml_ng = xmlify(test_result, wrap=testcasename, indent=" ") + # write_file(xmlFile_ng, xml_ng, mode="w") + + + # print "min = "+ str( metric_extracted['metric_min'] ) # print "min_index = "+ str( metric_extracted['metric_min_index'] ) @@ -143,16 +145,27 @@ def main(args): # print fname # analyser.do_img_metrics(metric, metric_extracted, fname) -# fname = 'log//'+test_case+'/run_'+str(i)+'/UE_traffic_'+str(i)+'_.log' + # fname = 'log//'+test_case+'/run_'+str(i)+'/UE_traffic_'+str(i)+'_.log' -# args = {'file' : fname } + # args = {'file' : fname } -# traffic_metrics = analyser.do_extract_traffic_metrics(args) + # traffic_metrics = analyser.do_extract_traffic_metrics(args) -# fname= 'report/iperf_'+test_case+'_'+str(i)+'.png' + # fname= 'report/iperf_'+test_case+'_'+str(i)+'.png' -# print fname -# analyser.do_img_traffic(traffic_metrics, fname) + # print fname + # analyser.do_img_traffic(traffic_metrics, fname) + + + for test_result in test_results: + cmd = 'mkdir -p ' + report_dir + '/'+ test_result['testcase_name'] + result = os.system(cmd) + + report_file = report_dir + '/'+ test_result['testcase_name'] + '/'+ test_result['testcase_name']+ '_report.html' + + analyser.create_test_report_detailed_html(test_result, report_file ) + + print test_result diff --git a/cmake_targets/autotests/tools/lib_autotest_analyser.py b/cmake_targets/autotests/tools/lib_autotest_analyser.py index 92dcc31e48..333bbd656e 100644 --- a/cmake_targets/autotests/tools/lib_autotest_analyser.py +++ b/cmake_targets/autotests/tools/lib_autotest_analyser.py @@ -41,7 +41,7 @@ from jinja2 import Environment, FileSystemLoader PATH = os.path.dirname(os.path.abspath(__file__)) TEMPLATE_ENVIRONMENT = Environment( autoescape=False, - loader=FileSystemLoader(os.path.join(PATH, 'templates')), + loader=FileSystemLoader(os.path.join(PATH, '../templates')), trim_blocks=False) @@ -103,6 +103,129 @@ def do_extract_metrics(args): } return(ret) + +def do_extract_metrics_new(args): + +# print "" +# print "do_extract_metrics ... " + + fname = args['file'] + metric = args['metric'] + print(fname) + print 'metric id = ' + metric['id'] + print 'metric regex = ' + metric['regex'] + + + + count = 0 + mmin = 0 + mmin_index = 0 + mmax = 0 + mmax_index = 0 + mean = 0 + median = 0 + + toto = [('id', 'S20'), ('metric', np.float), ('frame', np.int)] + print toto + + + np_format = [] + + for x in range(0, metric['nb_metric']): + np_format.append( ('id'+str(x), 'S20') ) + np_format.append( ('metric'+str(x), np.float) ) + np_format.append( ('uom'+str(x), 'S20') ) + np_format.append( ('frame', np.int)) + + print np_format + + output = np.fromregex(fname,metric['regex'], np_format) + print output + count = output['frame'].size + print count + if count > 0: + + + fontP = FontProperties() + fontP.set_size('small') + + fig = plt.figure(1) + plt.figure(figsize=(10,10)) + + plot_xmax = np.amax(output['frame'])+np.amin(output['frame']) + + for x in range(0, metric['nb_metric']): + + metric_name = output['id'+str(x)][0] + metric_uom = output['uom'+str(x)][0] + + mmin = np.amin(output['metric'+str(x)]) + mmax = np.amax(output['metric'+str(x)]) + mmean = np.mean(output['metric'+str(x)]) + mmedian = np.median(output['metric'+str(x)]) + + plot_loc = 100*metric['nb_metric']+10+x+1 + + sbplt = plt.subplot(plot_loc) + sbplt.plot(output['frame'], output['metric'+str(x)], color='b' ) + sbplt.set_title( metric_name+' ('+metric_uom+')') + if mmin < 0: + sbplot_ymin=mmin+mmin/10 + else: + sbplot_ymin=0 + sbplt.set_ylim(ymin=sbplot_ymin) + if mmax > 0: + sbplot_ymax=mmax+mmax/10 + else: + sbplot_ymax=0 + sbplt.set_ylim(ymax=sbplot_ymax) + + sbplt.set_xlim(xmax=plot_xmax) + sbplt.set_xlim(xmin=0) + text='min: '+str(mmin)+'\nmax: '+str(mmax)+'\nmean: '+str(mmean)+'\nmedian: '+str(mmedian) + sbplt.text( plot_xmax+10,sbplot_ymin,text) + sbplt.set_xlabel('frame') + sbplt.set_ylabel(metric_name) + + plt.tight_layout() + + fname = "toto.png" + +# lgd = plt.legend(prop=fontP, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) + mng = plt.get_current_fig_manager() + plt.savefig(fname, bbox_inches='tight') + plt.close() + + + + + + + + + + mmin = np.amin(output['metric']); + mmin_index = np.argmin(output['metric']); + mmax = np.amax(output['metric']); + mmax_index = np.argmax(output['metric']); + mean = np.mean(output['metric']); + median = np.median(output['metric']); + +# print ( ( (metric['min_limit'] > output['metric']).sum() / float(output['metric'].size) ) * 100 ) + + ret = { 'metric_count' : count, + 'metric_buf' : output, + + + 'metric_min' : mmin, + 'metric_min_index' : mmin_index, + 'metric_max' : mmax, + 'metric_max_index' : mmax_index, + 'metric_mean' : mean, + 'metric_median' : median, + } + return(ret) + # # # @@ -182,24 +305,30 @@ def do_img_metrics(metric_def, metric_data, fname): # print output['metric'].size plt.scatter(output['frame'], output['metric'], color='b', alpha=0.33, s = 1 , label=metric_def['id']) - plt.plot([0, output['frame'][metric_data['metric_count']-1]],[ metric_def['min_limit'],metric_def['min_limit']], 'r-', lw=2, label='min limit') # Red straight line + + if 'min_limit' in metric_def: + plt.plot([0, output['frame'][metric_data['metric_count']-1]],[ metric_def['min_limit'],metric_def['min_limit']], 'r-', lw=2, label='min limit') # Red straight line - plt.title('Physical throughput ('+metric_def['unit_of_meas']+')') + plt.title(metric_def['id'] +' ('+metric_def['unit_of_meas']+')') plt.xlabel('frame') plt.ylabel(metric_def['id']) # Set graphic minimum Y axis # ------------------------- - if metric_data['metric_min'] == 0 : - plt.ylim(ymin=-metric_def['min_limit']/10) + if metric_data['metric_min'] < 0: + plt.ylim(ymin=metric_data['metric_min']+metric_data['metric_min']/10) else : plt.ylim(ymin=0) y_axis_max = 0 - if metric_data['metric_max'] > metric_def['min_limit']: - y_axis_max =metric_data['metric_max']+metric_data['metric_max']/10 + if 'min_limit' in metric_def: + if metric_data['metric_max'] > metric_def['min_limit']: + y_axis_max =metric_data['metric_max']+metric_data['metric_max']/10 + else: + y_axis_max =metric_def['min_limit']+metric_def['min_limit']/10 else: - y_axis_max =metric_def['min_limit']+metric_def['min_limit']/10 + y_axis_max =metric_data['metric_max']+metric_data['metric_max']/10 + plt.ylim(ymax=y_axis_max) @@ -219,9 +348,6 @@ def do_img_metrics(metric_def, metric_data, fname): def do_extract_traffic_metrics(args): - print "" - print "do_extract_traffic_metrics ... " - fname = args['file'] # print(fname) @@ -325,7 +451,8 @@ def do_img_traffic(traffic_data, fname): ax1.set_xlim(xmax=np.amax(output['interval_stop'])) text='min: '+str(traffic_data['bw_min'])+'\nmax: '+str(traffic_data['bw_max'])+'\nmean: '+str(traffic_data['bw_mean'])+'\nmedian: '+str(traffic_data['bw_median']) ax1.text( np.amax(output['interval_stop'])+10,0,text) - + ax1.set_xlabel('time (s)') + ax1.set_ylabel(' ') ax2=plt.subplot(312) plt.plot(output['interval_stop'], output['jitter'], color='b' ) @@ -334,6 +461,8 @@ def do_img_traffic(traffic_data, fname): ax2.set_ylim(ymin=-1) text='min: '+str(traffic_data['jitter_min'])+'\nmax: '+str(traffic_data['jitter_max'])+'\nmean: '+str(traffic_data['jitter_mean'])+'\nmedian: '+str(traffic_data['jitter_median']) ax2.text( np.amax(output['interval_stop'])+10,0,text) + ax2.set_xlabel('time (s)') + ax2.set_ylabel(' ') ax3=plt.subplot(313) plt.plot(output['interval_stop'], output['rate_lost'], color='b') @@ -342,10 +471,11 @@ def do_img_traffic(traffic_data, fname): ax3.set_ylim(ymin=-1) text='min: '+str(traffic_data['rl_min'])+'\nmax: '+str(traffic_data['rl_max'])+'\nmean: '+str(traffic_data['rl_mean'])+'\nmedian: '+str(traffic_data['rl_median']) ax3.text( np.amax(output['interval_stop'])+10,0,text) - + ax3.set_xlabel('time (s)') + ax3.set_ylabel(' ') # plt.title('Physical throughput ('+metric_def['unit_of_meas']+')') - plt.xlabel('time (s)') +# plt.xlabel('time (s)') # plt.ylabel(metric_def['id']) # Set graphic minimum Y axis @@ -365,7 +495,7 @@ def do_img_traffic(traffic_data, fname): plt.tight_layout() - lgd = plt.legend(prop=fontP, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) +# lgd = plt.legend(prop=fontP, bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.) mng = plt.get_current_fig_manager() plt.savefig(fname, bbox_inches='tight') plt.close() @@ -395,7 +525,7 @@ def check_cell_synchro(fname): m = re.search('AUTOTEST Cell Sync \:', line) if m : - print line + #print line return 'CELL_SYNCH' return 'CELL_NOT_SYNCH' @@ -407,7 +537,7 @@ def check_exec_seg_fault(fname): for line in f: m = re.search('Segmentation fault', line) if m : - print line + #print line return 'SEG_FAULT' return 'NO_SEG_FAULT' diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index b77a9baa56..8e3021d0b0 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -53,6 +53,7 @@ BUILD_DOXYGEN=0 T_TRACER="False" DISABLE_HARDWARE_DEPENDENCY="False" CMAKE_BUILD_TYPE="" +UE_AUTOTEST_TRACE="False" trap handle_ctrl_c INT function print_help() { @@ -127,6 +128,8 @@ Options Enables the T tracer. --disable-hardware-dependency Disable HW dependency during installation +--ue-autotest-trace + Enable specific traces for UE autotest framework Usage (first build): oaisim (eNB + UE): ./build_oai -I --oaisim -x --install-system-files Eurecom EXMIMO + COTS UE : ./build_oai -I --eNB -x --install-system-files @@ -278,6 +281,10 @@ function main() { echo_info "Disabling hardware dependency for compiling software" DISABLE_HARDWARE_DEPENDENCY="True" shift 1;; + --ue-autotest-trace) + UE_AUTOTEST_TRACE="True" + echo_info "Enabling autotest specific trace for UE" + shift 1;; -h | --help) print_help exit 1;; @@ -447,6 +454,7 @@ function main() { echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file echo "set ( T_TRACER $T_TRACER )" >> $cmake_file + echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file cd $DIR/$lte_build_dir/build cmake .. diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c index 4cdfb4f794..5ae2ec2ecd 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c @@ -486,7 +486,7 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho #endif - if (frame_length > 6143) { + if (frame_length > 6144) { LOG_E(PHY,"compute_beta: frame_length %d\n",frame_length); return; } @@ -972,6 +972,11 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, } else n2 = n; + if(n2<256) + { + printf("phy_threegpplte_turbo_decoder8 : frame length < 256\n"); + return 255; + } for (iind=0; iind < 188 && f1f2mat[iind].nb_bits != n; iind++); diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c index 661fe96be8..782305d2fd 100644 --- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c +++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c @@ -469,6 +469,15 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) //#endif if (ue->UE_scan_carrier == 0) { + + #if UE_AUTOTEST_TRACE + LOG_I(PHY,"[UE %d] AUTOTEST Cell Sync : frame = %d, rx_offset %d, freq_offset %d \n", + ue->Mod_id, + ue->proc.proc_rxtx[0].frame_rx, + ue->rx_offset, + ue->common_vars.freq_offset ); + #endif + if (ue->mac_enabled==1) { LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id); //mac_resynch(); diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 3ed4c79ea3..6023886315 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -2944,6 +2944,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n", ue->Mod_id,frame_rx,ue->total_TBS[eNB_id], ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0); + + #if UE_AUTOTEST_TRACE + if ((frame_rx % 100 == 0)) { + LOG_I(PHY,"[UE %d] AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", ue->Mod_id, (float) ue->bitrate[eNB_id]/1000.0, frame_rx); + } + #endif + } diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 40b9255936..de5be6913c 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -1601,6 +1601,11 @@ int main( int argc, char **argv ) PHY_vars_eNB_g[0][CC_id] = init_lte_eNB(frame_parms[CC_id],0,frame_parms[CC_id]->Nid_cell,abstraction_flag); PHY_vars_eNB_g[0][CC_id]->CC_id = CC_id; + PHY_vars_eNB_g[0][CC_id]->ue_dl_rb_alloc=0x1fff; + PHY_vars_eNB_g[0][CC_id]->target_ue_dl_mcs=target_dl_mcs; + PHY_vars_eNB_g[0][CC_id]->ue_ul_nb_rb=6; + PHY_vars_eNB_g[0][CC_id]->target_ue_ul_mcs=target_ul_mcs; + if (phy_test==1) PHY_vars_eNB_g[0][CC_id]->mac_enabled = 0; else PHY_vars_eNB_g[0][CC_id]->mac_enabled = 1; From e86b3e31c79bcc489b67f55e3cbadd035e706fbf Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Mon, 26 Sep 2016 14:51:52 +0200 Subject: [PATCH 089/132] changing some config files --- .../CONF/enb.band4.exmimo2.conf | 147 ++++++++++++++++++ .../CONF/enb.band7.usrpb210.conf | 2 +- 2 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band4.exmimo2.conf diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band4.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band4.exmimo2.conf new file mode 100644 index 0000000000..bf7861f66d --- /dev/null +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band4.exmimo2.conf @@ -0,0 +1,147 @@ +Active_eNBs = ( "eNB_Eurecom_LTEBox"); +# Asn1_verbosity, choice in: none, info, annoying +Asn1_verbosity = "none"; + +eNBs = +( + { + # real_time choice in {hard, rt-preempt, no} + real_time = "no"; + ////////// Identification parameters: + eNB_ID = 0xe00; + + cell_type = "CELL_MACRO_ENB"; + + eNB_name = "eNB_Eurecom_LTEBox"; + + // Tracking area code, 0x0000 and 0xfffe are reserved values + tracking_area_code = "1"; + + mobile_country_code = "208"; + + mobile_network_code = "94"; + + ////////// Physical parameters: + + component_carriers = ( + { + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 4; + downlink_frequency = 2112500000L; + uplink_frequency_offset = -400000000; + + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antennas_tx = 1; + nb_antennas_rx = 1; + nb_antenna_ports = 1; + tx_gain = 20; + rx_gain = 20; + prach_root = 22; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -25; + pdsch_p_b = 0; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 1; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 0; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ + + pusch_p0_Nominal = -85; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -96; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; + + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; +/* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; +*/ + rach_powerRampingStep = 2; + rach_preambleInitialReceivedTargetPower = -100; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; + + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 20000; //10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + + ue_TransmissionMode = 1; + + } + ); + + ////////// MME parameters: + mme_ip_address = ( { ipv4 = "192.168.12.70"; + ipv6 = "192:168:30::17"; + active = "yes"; + preference = "ipv4"; + } + ); + + NETWORK_INTERFACES : + { + ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.212/24"; + + ENB_INTERFACE_NAME_FOR_S1U = "eth0"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.212/24"; + ENB_PORT_FOR_S1U = 2152; # Spec 2152 + }; + + log_config : + { + global_log_level ="info"; + global_log_verbosity ="high"; + hw_log_level ="info"; + hw_log_verbosity ="high"; + phy_log_level ="info"; + phy_log_verbosity ="high"; + mac_log_level ="debug"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="high"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="high"; + rrc_log_level ="info"; + rrc_log_verbosity ="high"; + }; + + } +); diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf index 7941441d1d..1fe3beae0e 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf @@ -135,7 +135,7 @@ eNBs = }; ////////// MME parameters: - mme_ip_address = ( { ipv4 = "192.168.12.171"; + mme_ip_address = ( { ipv4 = "192.168.12.70"; ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; From 5c5c336300924ed66beb6b4946117314ee8a4b64 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Mon, 21 Nov 2016 11:55:36 +0100 Subject: [PATCH 090/132] fixes to make lte-softmodem compile again --- targets/ARCH/EXMIMO/DEFS/openair_device.h | 6 +- .../ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c | 8 +- targets/RT/USER/lte-enb.c | 98 +++++++++---------- targets/RT/USER/lte-softmodem.c | 8 +- 4 files changed, 59 insertions(+), 61 deletions(-) diff --git a/targets/ARCH/EXMIMO/DEFS/openair_device.h b/targets/ARCH/EXMIMO/DEFS/openair_device.h index 6c1c8708db..b4916490e2 100644 --- a/targets/ARCH/EXMIMO/DEFS/openair_device.h +++ b/targets/ARCH/EXMIMO/DEFS/openair_device.h @@ -24,9 +24,9 @@ // Maximum number of concurrently supported cards -// -#define MAX_CARDS 16 -#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +// defined in openair_common_lib.h +//#define MAX_CARDS 16 +//#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /** PCIe subsystem configuration Space diff --git a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c index 2d0146b3f1..4db108b3c8 100644 --- a/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c +++ b/targets/ARCH/EXMIMO/USERSPACE/LIB/openair0_lib.c @@ -63,7 +63,7 @@ exmimo_pci_interface_bot_virtual_t openair0_exmimo_pci[MAX_CARDS]; // contains userspace pointers for each card -char *bigshm_top[MAX_CARDS] = INIT_ZEROS; +char *bigshm_top[MAX_CARDS]; int openair0_fd; int openair0_num_antennas[MAX_CARDS]; @@ -126,7 +126,8 @@ int openair0_open(void) //printf("bigshm_top_kvirtptr (MAX_CARDS %d): %p %p %p %p\n", MAX_CARDS,bigshm_top_kvirtptr[0], bigshm_top_kvirtptr[1], bigshm_top_kvirtptr[2], bigshm_top_kvirtptr[3]); - + for( card=0; card < MAX_CARDS; card++) + bigshm_top[card] = NULL; for( card=0; card < openair0_num_detected_cards; card++) { bigshm_top[card] = (char *)mmap( NULL, @@ -530,6 +531,7 @@ int trx_exmimo_read(openair0_device *device, openair0_timestamp *ptimestamp, voi return(0); } + ret = pthread_mutex_lock(&exm->watchdog_mutex); switch (ret) { case EINVAL: @@ -558,8 +560,6 @@ int trx_exmimo_read(openair0_device *device, openair0_timestamp *ptimestamp, voi break; } - ret = pthread_mutex_lock(&exm->watchdog_mutex); - ts = exm->ts; if (exm->wait_first_read==1) { exm->wait_first_read=0; diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index af06979efd..965894cac0 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -277,75 +277,73 @@ static inline void wait_sync(char *thread_name) { void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB) { - unsigned int aa,slot_offset, slot_offset_F; - int dummy_tx_b[7680*4] __attribute__((aligned(32))); + unsigned int aa,slot_offset; + //int dummy_tx_b[7680*4] __attribute__((aligned(32))); int i, tx_offset; - int slot_sizeF = (phy_vars_eNB->lte_frame_parms.ofdm_symbol_size)* - ((phy_vars_eNB->lte_frame_parms.Ncp==1) ? 6 : 7); + //int slot_sizeF = (phy_vars_eNB->frame_parms.ofdm_symbol_size)* ((phy_vars_eNB->frame_parms.Ncp==1) ? 6 : 7); int len; + //int slot_offset_F = (subframe<<1)*slot_sizeF; - slot_offset_F = (subframe<<1)*slot_sizeF; - - slot_offset = subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti; + slot_offset = subframe*phy_vars_eNB->frame_parms.samples_per_tti; - if ((subframe_select(&phy_vars_eNB->lte_frame_parms,subframe)==SF_DL)|| - ((subframe_select(&phy_vars_eNB->lte_frame_parms,subframe)==SF_S))) { + if ((subframe_select(&phy_vars_eNB->frame_parms,subframe)==SF_DL)|| + ((subframe_select(&phy_vars_eNB->frame_parms,subframe)==SF_S))) { // LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_OFDM_MODULATION,1); - do_OFDM_mod_symbol(&phy_vars_eNB->lte_eNB_common_vars, + do_OFDM_mod_symbol(&phy_vars_eNB->common_vars, 0, subframe<<1, - &phy_vars_eNB->lte_frame_parms); + &phy_vars_eNB->frame_parms); // if S-subframe generate first slot only - if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_DL) { - do_OFDM_mod_symbol(&phy_vars_eNB->lte_eNB_common_vars, + if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_DL) { + do_OFDM_mod_symbol(&phy_vars_eNB->common_vars, 0, 1+(subframe<<1), - &phy_vars_eNB->lte_frame_parms); + &phy_vars_eNB->frame_parms); } VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_OFDM_MODULATION,0); /* - for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { - if (phy_vars_eNB->lte_frame_parms.Ncp == EXTENDED) { - PHY_ofdm_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F], + for (aa=0; aaframe_parms.nb_antennas_tx; aa++) { + if (phy_vars_eNB->frame_parms.Ncp == EXTENDED) { + PHY_ofdm_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F], dummy_tx_b, - phy_vars_eNB->lte_frame_parms.ofdm_symbol_size, + phy_vars_eNB->frame_parms.ofdm_symbol_size, 6, - phy_vars_eNB->lte_frame_parms.nb_prefix_samples, + phy_vars_eNB->frame_parms.nb_prefix_samples, CYCLIC_PREFIX); - PHY_ofdm_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF], - dummy_tx_b+(phy_vars_eNB->lte_frame_parms.samples_per_tti>>1), - phy_vars_eNB->lte_frame_parms.ofdm_symbol_size, + PHY_ofdm_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF], + dummy_tx_b+(phy_vars_eNB->frame_parms.samples_per_tti>>1), + phy_vars_eNB->frame_parms.ofdm_symbol_size, 6, - phy_vars_eNB->lte_frame_parms.nb_prefix_samples, + phy_vars_eNB->frame_parms.nb_prefix_samples, CYCLIC_PREFIX); } else { - normal_prefix_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F], + normal_prefix_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F], dummy_tx_b, 7, - &(phy_vars_eNB->lte_frame_parms)); + &(phy_vars_eNB->frame_parms)); // if S-subframe generate first slot only - if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_DL) - normal_prefix_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF], - dummy_tx_b+(phy_vars_eNB->lte_frame_parms.samples_per_tti>>1), + if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_DL) + normal_prefix_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF], + dummy_tx_b+(phy_vars_eNB->frame_parms.samples_per_tti>>1), 7, - &(phy_vars_eNB->lte_frame_parms)); + &(phy_vars_eNB->frame_parms)); } } */ - for (aa=0; aalte_frame_parms.nb_antennas_tx; aa++) { + for (aa=0; aaframe_parms.nb_antennas_tx; aa++) { // if S-subframe generate first slot only - if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_S) - len = phy_vars_eNB->lte_frame_parms.samples_per_tti>>1; + if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_S) + len = phy_vars_eNB->frame_parms.samples_per_tti>>1; else - len = phy_vars_eNB->lte_frame_parms.samples_per_tti; + len = phy_vars_eNB->frame_parms.samples_per_tti; /* for (i=0;ilte_frame_parms.samples_per_tti; + tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti; - if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti)) - tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti; + if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti)) + tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti; -/* ((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0] = ((short*)dummy_tx_b)[2*i]<common_vars.txdata[0][aa][tx_offset])[0] = ((short*)dummy_tx_b)[2*i]<lte_eNB_common_vars.txdata[0][aa][tx_offset])[1] = ((short*)dummy_tx_b)[2*i+1]<common_vars.txdata[0][aa][tx_offset])[1] = ((short*)dummy_tx_b)[2*i+1]<lte_eNB_common_vars.txdata[0][aa][tx_offset])[0] = ((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0]<common_vars.txdata[0][aa][tx_offset])[0] = ((short*)&phy_vars_eNB->common_vars.txdata[0][aa][tx_offset])[0]<lte_eNB_common_vars.txdata[0][aa][tx_offset])[1] = ((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1]<common_vars.txdata[0][aa][tx_offset])[1] = ((short*)&phy_vars_eNB->common_vars.txdata[0][aa][tx_offset])[1]<lte_frame_parms,subframe) == SF_S) { + if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_S) { for (i=0; ilte_eNB_common_vars.txdata[0][aa][tx_offset++] = 0x00010001; + phy_vars_eNB->common_vars.txdata[0][aa][tx_offset++] = 0x00010001; } } - if ((((phy_vars_eNB->lte_frame_parms.tdd_config==0) || - (phy_vars_eNB->lte_frame_parms.tdd_config==1) || - (phy_vars_eNB->lte_frame_parms.tdd_config==2) || - (phy_vars_eNB->lte_frame_parms.tdd_config==6)) && + if ((((phy_vars_eNB->frame_parms.tdd_config==0) || + (phy_vars_eNB->frame_parms.tdd_config==1) || + (phy_vars_eNB->frame_parms.tdd_config==2) || + (phy_vars_eNB->frame_parms.tdd_config==6)) && (subframe==0)) || (subframe==5)) { // turn on tx switch N_TA_offset before //LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,phy_vars_eNB->N_TA_offset,slot_offset); for (i=0; iN_TA_offset; i++) { tx_offset = (int)slot_offset+time_offset[aa]+i-phy_vars_eNB->N_TA_offset/2; if (tx_offset<0) - tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti; + tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti; - if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti)) - tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti; + if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti)) + tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti; - phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset] = 0x00000000; + phy_vars_eNB->common_vars.txdata[0][aa][tx_offset] = 0x00000000; } } } diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 40b9255936..0cca7b6379 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -1121,13 +1121,13 @@ static void get_options (int argc, char **argv) frame_parms[CC_id]->N_RB_DL = enb_properties->properties[i]->N_RB_DL[CC_id]; frame_parms[CC_id]->N_RB_UL = enb_properties->properties[i]->N_RB_DL[CC_id]; frame_parms[CC_id]->nb_antennas_tx = enb_properties->properties[i]->nb_antennas_tx[CC_id]; - frame_parms[CC_id]->nb_antennas_tx_eNB = enb_properties->properties[i]->nb_antenna_ports[CC_id]; + frame_parms[CC_id]->nb_antenna_ports_eNB = enb_properties->properties[i]->nb_antenna_ports[CC_id]; frame_parms[CC_id]->nb_antennas_rx = enb_properties->properties[i]->nb_antennas_rx[CC_id]; frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_ConfigIndex = enb_properties->properties[i]->prach_config_index[CC_id]; frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_FreqOffset = enb_properties->properties[i]->prach_freq_offset[CC_id]; - frame_parms[CC_id]->mode1_flag = (frame_parms[CC_id]->nb_antennas_tx_eNB == 1) ? 1 : 0; + frame_parms[CC_id]->mode1_flag = (frame_parms[CC_id]->nb_antenna_ports_eNB == 1) ? 1 : 0; frame_parms[CC_id]->threequarter_fs = threequarter_fs; //} // j @@ -1225,7 +1225,7 @@ void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) { frame_parms[CC_id]->Ncp_UL = NORMAL; frame_parms[CC_id]->Nid_cell = 0; frame_parms[CC_id]->num_MBSFN_config = 0; - frame_parms[CC_id]->nb_antennas_tx_eNB = 1; + frame_parms[CC_id]->nb_antenna_ports_eNB = 1; frame_parms[CC_id]->nb_antennas_tx = 1; frame_parms[CC_id]->nb_antennas_rx = 1; @@ -1524,7 +1524,7 @@ int main( int argc, char **argv ) if (UE_flag==1) { frame_parms[CC_id]->nb_antennas_tx = 1; frame_parms[CC_id]->nb_antennas_rx = 1; - frame_parms[CC_id]->nb_antennas_tx_eNB = 1; //initial value overwritten by initial sync later + frame_parms[CC_id]->nb_antenna_ports_eNB = 1; //initial value overwritten by initial sync later } init_ul_hopping(frame_parms[CC_id]); From 040afd4800c4e0e401ab9743a1c5612c65c5bf46 Mon Sep 17 00:00:00 2001 From: ROBERT Benoit Date: Mon, 21 Nov 2016 16:02:00 +0100 Subject: [PATCH 091/132] Add missing template files for HTML report generation --- cmake_targets/autotests/templates/index.html | 87 +++++++++++ .../autotests/templates/testcase_report.html | 142 ++++++++++++++++++ 2 files changed, 229 insertions(+) create mode 100644 cmake_targets/autotests/templates/index.html create mode 100644 cmake_targets/autotests/templates/testcase_report.html diff --git a/cmake_targets/autotests/templates/index.html b/cmake_targets/autotests/templates/index.html new file mode 100644 index 0000000000..10a15fb53d --- /dev/null +++ b/cmake_targets/autotests/templates/index.html @@ -0,0 +1,87 @@ + + + + + OAI5G UE Autotest Report + + + + +
+

OAI5G UE Autotest Report

+
+ +

+ + + + + + + + +
Test session configuration
Start time{{test_session_start_time}}
Stop time{{test_session_stop_time}}
Duration{{test_session_duration}}
MTC host{{mtc_host}}
User{{user}}
Password{{password}}
+

+ + +

Test Setup

+To be complete + +

+

UE phy-test performances tests results

+

Objectives

+

Checks that OAI UE can achieve at least 75 percent of the theoretical throughput.

+

Tests are done for all MCS (0 to 28) for 5MHz and 10MHz bandwidth.

+

Results

+ + + +{% for result in test_results|sort(attribute='testcase_name') %} + + + + {% if result.testcase_verdict == "PASS" %} + + {% elif result.testcase_verdict == "FAIL" %} + + {% else %} + + {% endif %} + + + + + + + + + + + + +{% endfor %} +
IDTAGVERDICTNB RUNSPASSFAILEDINCONSKIPPEDSEG FAULTTC TimeoutStartStopDurationDetails
{{result.testcase_name}}{{result.tags}}{{result.testcase_verdict}}{{result.testcase_verdict}}{{result.testcase_verdict}}{{result.nruns}}{{result.nb_run_pass}}{{result.nb_run_failed}}{{result.nb_run_inc}}{{result.nb_run_skip}}{{result.nb_seg_fault}}{{result.testcase_timeout}}{{result.testcase_time_start.strftime('%Y-%m-%d %H:%M:%S')}}{{result.testcase_time_stop.strftime('%Y-%m-%d %H:%M:%S')}}{{result.testcase_duration}}{{ result.testcase_name }}_report.html
+ + +

+

UE phy-test stability tests results

+

Objectives

+

To be complete

+

Results

+To be complete + + + + + diff --git a/cmake_targets/autotests/templates/testcase_report.html b/cmake_targets/autotests/templates/testcase_report.html new file mode 100644 index 0000000000..007ab56909 --- /dev/null +++ b/cmake_targets/autotests/templates/testcase_report.html @@ -0,0 +1,142 @@ + + + + + OAI5G UE test case report + + + + +
+

OAI5G UE test case report details

+
+ +

Test Case description

+

+ + + + + + + + + + + +
ID{{testcase_name}}
TAG{{tags}}
class{{testcaseclass}}
description
timeout{{testcase_timeout}}
number of runs{{nruns}}
eNB machine{{testcase_eNBMachine}}
UE machine{{testcase_UEMachine}}
+

+ + +

Test Case execution

+

+ + + + + + + + + + + + {% if testcase_verdict == "PASS" %} + + {% elif testcase_verdict == "FAIL" %} + + {% else %} + + {% endif %} + + + +
testcase_time_start{{testcase_time_start}}
testcase_time_stop{{testcase_time_stop}}
testcase_duration{{testcase_duration}}
Nb runs{{nruns}}
Nb PASS{{nb_run_pass}}
Nb FAILED{{nb_run_failed}}
Nb INCONCLUSIVE{{nb_run_inc}}
testcase_verdict{{testcase_verdict}}{{testcase_verdict}}{{testcase_verdict}}
Nb Seg Fault{{nb_seg_fault}}
+

+ + + +

Test Case runs results

+ +{% for run_results in runs_results|sort(attribute='run_id') %} +

RUN {{run_results.run_id}}

+ + + + + + + {% if run_results.run_verdict == "PASS" %} + + {% elif run_results.run_verdict == "FAIL" %} + + {% else %} + + {% endif %} + + + {% if run_results.ue_seg_fault_status == "NO_SEG_FAULT" %} + + {% elif run_results.ue_seg_fault_status == "SEG_FAULT" %} + + {% else %} + + {% endif %} + +
run_start_time {{run_results.run_start_time}}
run_stop_time{{run_results.run_stop_time}}
run_duration{{run_results.run_duration}}
run_verdict{{run_results.run_verdict}}{{run_results.run_verdict}}{{run_results.run_verdict}}
Seg Fault Satus{{run_results.ue_seg_fault_status}}{{run_results.ue_seg_fault_status}}unknown
+ + {% for run_metrics in run_results.runs_metrics %} +

+ + + + + + + + + + {% if run_metrics.pass_fail_stat is defined %} + + {% endif %} + {% if run_metrics.pass_fail_min_limit is defined %} + + {% endif %} + {% if run_metrics.pass_fail_max_limit is defined %} + + {% endif %} + + +
metric_id{{run_metrics.metric_id}}
Description{{run_metrics.metric_desc}}
Unit of measure{{run_metrics.metric_uom}}
metric_min{{run_metrics.metric_min}}
metric_max{{run_metrics.metric_max}}
metric_mean{{run_metrics.metric_mean}}
metric_median{{run_metrics.metric_median}}
Pass/fail stat{{run_metrics.pass_fail_stat}}
Pass/fail min limit{{run_metrics.pass_fail_min_limit}}
Pass/fail max limit{{run_metrics.pass_fail_max_limit}}
metric_fig
+ + {% endfor %} + + {% if run_results.run_traffic.traffic_count != 0 %} +

+ + + + + + + + + +
Iperf metricminmaxmeanmedian
Bandwidth {{run_results.run_traffic.bw_min}}{{run_results.run_traffic.bw_max}}{{run_results.run_traffic.bw_mean}}{{run_results.run_traffic.bw_median}}
Jitter{{run_results.run_traffic.jitter_min}}{{run_results.run_traffic.jitter_max}}{{run_results.run_traffic.jitter_mean}}{{run_results.run_traffic.jitter_median}}
Loss rate{{run_results.run_traffic.rl_min}}{{run_results.run_traffic.rl_max}}{{run_results.run_traffic.rl_mean}}{{run_results.run_traffic.rl_median}}
Iperf duration{{run_results.run_traffic.iperf_duration}}Pass/Fail criteria (min duration){{run_results.run_traffic.dur_pass_fail_crit}}
traffic_fig
+ {% endif %} + +{% endfor %} + + + From 1a8069b9243f90b02031933a2e0e5de1b7fd614e Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 22 Nov 2016 11:19:23 +0100 Subject: [PATCH 092/132] bug fixed for DEBUG_PHY in lte_init.c --- openair1/PHY/INIT/lte_init.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 0009dbfefe..7e6cc39ac7 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -1226,23 +1226,23 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB, common_vars->txdataF_BF[eNB_id] = (int32_t **)malloc16(fp->nb_antennas_tx*sizeof(int32_t*)); for (i=0; i<14; i++) { - common_vars->txdataF[eNB_id][i] = (int32_t*)malloc16_clear( fp->ofdm_symbol_size*fp->symbols_per_tti*10*sizeof(int32_t) ); + common_vars->txdataF[eNB_id][i] = (int32_t*)malloc16_clear(fp->ofdm_symbol_size*fp->symbols_per_tti*10*sizeof(int32_t) ); #ifdef DEBUG_PHY msg("[openair][LTE_PHY][INIT] lte_common_vars->txdataF[%d][%d] = %p (%d bytes)\n", eNB_id,i,common_vars->txdataF[eNB_id][i], - FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t)); + fp->ofdm_symbol_size*fp->symbols_per_tti*10*sizeof(int32_t)); #endif } for (i=0; inb_antennas_tx; i++) { - common_vars->txdataF_BF[eNB_id][i] = (int32_t*)malloc16_clear( fp->ofdm_symbol_size*sizeof(int32_t) ); + common_vars->txdataF_BF[eNB_id][i] = (int32_t*)malloc16_clear(fp->ofdm_symbol_size*sizeof(int32_t) ); if (eNB->node_function != NGFI_RCC_IF4p5) - common_vars->txdata[eNB_id][i] = (int32_t*)malloc16_clear( fp->samples_per_tti*10*sizeof(int32_t) ); + common_vars->txdata[eNB_id][i] = (int32_t*)malloc16_clear(fp->samples_per_tti*10*sizeof(int32_t) ); #ifdef DEBUG_PHY msg("[openair][LTE_PHY][INIT] lte_common_vars->txdataF_BF[%d][%d][%d] = %p (%d bytes)\n", eNB_id,i,j,common_vars->txdataF_BF[eNB_id][i][j], - OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); + fp->ofdm_symbol_size*sizeof(int32_t)); msg("[openair][LTE_PHY][INIT] lte_common_vars->txdata[%d][%d] = %p\n",eNB_id,i,common_vars->txdata[eNB_id][i]); #endif } @@ -1256,7 +1256,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB, #ifdef DEBUG_PUY msg("[openair][LTE_PHY][INIT] lte_common_vars->beam_weights[%d][%d][%d] = %p (%d bytes)\n", eNB_id,i,j,common_vars->beam_weights[eNB_id][i][j], - OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); + fp->ofdm_symbol_size*sizeof(int32_t)); #endif } } From 60a1f34a5aa8831363edbd8e98a00a3dfeee620d Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 22 Nov 2016 12:29:18 +0100 Subject: [PATCH 093/132] cosmetic changes --- openair1/PHY/INIT/lte_init.c | 6 +++--- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 7e6cc39ac7..44d9e65dc8 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -29,7 +29,7 @@ #include "LAYER2/MAC/extern.h" #include "MBSFN-SubframeConfigList.h" #include "UTIL/LOG/vcd_signal_dumper.h" -//#define DEBUG_PHY +#define DEBUG_PHY #include "assertions.h" #include @@ -1240,8 +1240,8 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB, common_vars->txdata[eNB_id][i] = (int32_t*)malloc16_clear(fp->samples_per_tti*10*sizeof(int32_t) ); #ifdef DEBUG_PHY - msg("[openair][LTE_PHY][INIT] lte_common_vars->txdataF_BF[%d][%d][%d] = %p (%d bytes)\n", - eNB_id,i,j,common_vars->txdataF_BF[eNB_id][i][j], + msg("[openair][LTE_PHY][INIT] lte_common_vars->txdataF_BF[%d][%d] = %p (%d bytes)\n", + eNB_id,i,common_vars->txdataF_BF[eNB_id][i], fp->ofdm_symbol_size*sizeof(int32_t)); msg("[openair][LTE_PHY][INIT] lte_common_vars->txdata[%d][%d] = %p\n",eNB_id,i,common_vars->txdata[eNB_id][i]); #endif diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 9bf01400e3..7914437a53 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -2039,8 +2039,8 @@ int dlsch_modulation(PHY_VARS_eNB* phy_vars_eNB, P1_SHIFT, P2_SHIFT); - if ((mimo_mode == TM7) && (lprime>=0)) - mprime +=3+frame_parms->Ncp; + if ((mimo_mode == TM7) && (lprime>=0)) + mprime +=3+frame_parms->Ncp; } else { From eab744f6f990c417e2f5041dccdaeeb524267a69 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 22 Nov 2016 14:57:11 +0100 Subject: [PATCH 094/132] add in allocate_REs_in_RB the TM7 case --- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 116 +++++++++++++++++- 1 file changed, 115 insertions(+), 1 deletion(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 7914437a53..84e4bddec2 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -619,10 +619,21 @@ int allocate_REs_in_RB(PHY_VARS_eNB* phy_vars_eNB, int32_t tmp_sample1,tmp_sample2; int16_t tmp_amp=amp; int s=1; + int mprime2 = mprime,ind,ind_dword,ind_qpsk_symb; gain_lin_QPSK = (int16_t)((amp*ONE_OVER_SQRT2_Q15)>>15); // if (mimo_mode == LARGE_CDD) gain_lin_QPSK>>=1; + int32_t qpsk[4]; + ((int16_t *)&qpsk[0])[0] = gain_lin_QPSK; + ((int16_t *)&qpsk[0])[1] = gain_lin_QPSK; + ((int16_t *)&qpsk[1])[0] = -gain_lin_QPSK; + ((int16_t *)&qpsk[1])[1] = gain_lin_QPSK;; + ((int16_t *)&qpsk[2])[0] = gain_lin_QPSK;; + ((int16_t *)&qpsk[2])[1] = -gain_lin_QPSK;; + ((int16_t *)&qpsk[3])[0] = -gain_lin_QPSK;; + ((int16_t *)&qpsk[3])[1] = -gain_lin_QPSK; + if (dlsch1_harq) { x1 = dlsch1_harq->e; // Fill these in later for TM8-10 @@ -1285,8 +1296,111 @@ x0[1+*jj]); *re_allocated = *re_allocated + 1; } } + + if (mimo_mode == TM7) { + *re_allocated = *re_allocated + 1; - if (mimo_mode >= TM8) { //TM8,TM9,TM10 + if (is_not_UEspecRS(lprime,re,frame_parms->Nid_cell%3,frame_parms->Ncp,7)) { + + switch (mod_order0){ + case 2: //QPSK + + ((int16_t*)&txdataF[5][tti_offset])[0] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj = *jj + 1; + ((int16_t*)&txdataF[5][tti_offset])[1] = (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; + *jj = *jj + 1; + + //printf("%d(%d) : %d,%d => + //",tti_offset,*jj,((int16_t*)&tmp_sample1)[0],((int16_t*)&tmp_sample1)[1]); + break; + + case 4: //16QAM + + qam16_table_offset_re = 0; + qam16_table_offset_im = 0; + + if (x0[*jj] == 1) + qam16_table_offset_re+=2; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam16_table_offset_im+=2; + + *jj=*jj+1; + + + if (x0[*jj] == 1) + qam16_table_offset_re+=1; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam16_table_offset_im+=1; + + *jj=*jj+1; + + ((int16_t*)&txdataF[5][tti_offset])[0] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + ((int16_t*)&txdataF[5][tti_offset])[1] = (int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); + + break; + + case 6: //64QAM + + + qam64_table_offset_re = 0; + qam64_table_offset_im = 0; + + if (x0[*jj] == 1) + qam64_table_offset_re+=4; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam64_table_offset_im+=4; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam64_table_offset_re+=2; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam64_table_offset_im+=2; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam64_table_offset_re+=1; + + *jj=*jj+1; + + if (x0[*jj] == 1) + qam64_table_offset_im+=1; + + *jj=*jj+1; + + ((int16_t*)&txdataF[5][tti_offset])[0] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_re])>>15); + ((int16_t*)&txdataF[5][tti_offset])[1] = (int16_t)(((int32_t)amp*qam64_table[qam64_table_offset_im])>>15); + + break; + + } + } else { + //precoding UE spec RS + //printf("precoding UE spec RS\n"); + + ind = 3*lprime*dlsch0_harq->nb_rb+mprime2; + ind_dword = ind>>4; + ind_qpsk_symb = ind&0xf; + + txdataF[5][tti_offset] = qpsk[(phy_vars_eNB->lte_gold_uespec_port5_table[0][Ns][ind_dword]>>(2*ind_qpsk_symb))&3]; + mprime2++; + + } + + } else if (mimo_mode >= TM8) { //TM8,TM9,TM10 //uint8_t is_not_UEspecRS(int8_t lprime, uint8_t re, uint8_t nushift, uint8_t Ncp, uint8_t beamforming_mode) if (is_not_UEspecRS(lprime,re,frame_parms->nushift,frame_parms->Ncp,8)) { From 7dbc59c830ae9521ff1bad8ff0ae479e7cdd2b3b Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Tue, 22 Nov 2016 18:34:57 +0100 Subject: [PATCH 095/132] adapt dlsim to TM7 --- openair1/SIMULATION/LTE_PHY/dlsim.c | 95 ++++++++++++++++++++++------- 1 file changed, 73 insertions(+), 22 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 2e9a04def3..1ba2196eb6 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -275,6 +275,8 @@ void fill_DCI(PHY_VARS_eNB *eNB, case 1: case 2: + + case 7: if (common_flag == 0) { if (eNB->frame_parms.frame_type == TDD) { @@ -1259,6 +1261,7 @@ int main(int argc, char **argv) int c; int k,i,aa; + int re; int s,Kr,Kr_bytes; @@ -1275,9 +1278,12 @@ int main(int argc, char **argv) double forgetting_factor=0.0; //in [0,1] 0 means a new channel every time, 1 means keep the same channel - uint8_t extended_prefix_flag=0,transmission_mode=1,n_tx=1,n_rx=2; + uint8_t extended_prefix_flag=0,transmission_mode=1,n_tx_port=1,n_tx_phy=1,n_rx=2; uint16_t Nid_cell=0; + int32_t **cell_spec_bf_weights; + int32_t *ue_spec_bf_weights; + int eNB_id = 0; unsigned char mcs1=0,mcs2=0,mcs_i=0,dual_stream_UE = 0,awgn_flag=0,round; unsigned char i_mod = 2; @@ -1416,7 +1422,7 @@ int main(int argc, char **argv) // num_layers = 1; perfect_ce = 0; - while ((c = getopt (argc, argv, "ahdpZDe:Em:n:o:s:f:t:c:g:r:F:x:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:Pl:WXY")) != -1) { + while ((c = getopt (argc, argv, "ahdpZDe:Em:n:o:s:f:t:c:g:r:F:x:q:y:z:AM:N:I:i:O:R:S:C:T:b:u:v:w:B:Pl:WXY")) != -1) { switch (c) { case 'a': awgn_flag = 1; @@ -1617,7 +1623,7 @@ int main(int argc, char **argv) dual_stream_UE=1; UE->use_ia_receiver = 1; - if ((n_tx!=2) || (transmission_mode!=5)) { + if ((n_tx_port!=2) || (transmission_mode!=5)) { msg("IA receiver only supported for TM5!"); exit(-1); } @@ -1638,6 +1644,17 @@ int main(int argc, char **argv) print_perf=1; break; + case 'q': + n_tx_port=atoi(optarg); + + if ((n_tx_port==0) || ((n_tx_port>2))) { + msg("Unsupported number of cell specific antennas ports %d\n",n_tx_port); + exit(-1); + } + + break; + + case 'x': transmission_mode=atoi(optarg); @@ -1646,25 +1663,37 @@ int main(int argc, char **argv) (transmission_mode!=3) && (transmission_mode!=4) && (transmission_mode!=5) && - (transmission_mode!=6)) { + (transmission_mode!=6) && + (transmission_mode!=7)) { msg("Unsupported transmission mode %d\n",transmission_mode); exit(-1); } - if (transmission_mode>1) { - n_tx = 2; + if (transmission_mode>1 && transmission_mode<7) { + n_tx_port = 2; } break; case 'y': - n_tx=atoi(optarg); + n_tx_phy=atoi(optarg); - if ((n_tx==0) || (n_tx>2)) { - msg("Unsupported number of tx antennas %d\n",n_tx); + if (n_tx_phy < n_tx_port) { + msg("n_tx_phy mush not be smaller than n_tx_port"); exit(-1); } + if ((transmission_mode>1 && transmission_mode<7) && n_tx_port<2) { + msg("n_tx_port must be >1 for transmission_mode %d\n",transmission_mode); + exit(-1); + } + + if (transmission_mode==7 && (n_tx_phy!=1 && n_tx_phy!=2 && n_tx_phy!=4 && n_tx_phy!=8 && n_tx_phy!=16 && n_tx_phy!=64 && n_tx_phy!=128)) { + msg("Physical number of antennas not supported for TM7.\n"); + exit(-1); + } + + break; break; case 'X': @@ -1693,7 +1722,7 @@ int main(int argc, char **argv) case 'h': default: - printf("%s -h(elp) -a(wgn on) -d(ci decoding on) -p(extended prefix on) -m mcs1 -M mcs2 -n n_frames -s snr0 -x transmission mode (1,2,5,6) -y TXant -z RXant -I trch_file\n",argv[0]); + printf("%s -h(elp) -a(wgn on) -d(ci decoding on) -p(extended prefix on) -m mcs1 -M mcs2 -n n_frames -s snr0 -x transmission mode (1,2,5,6,7) -y TXant -z RXant -I trch_file\n",argv[0]); printf("-h This message\n"); printf("-a Use AWGN channel and not multipath\n"); printf("-c Number of PDCCH symbols\n"); @@ -1708,7 +1737,8 @@ int main(int argc, char **argv) printf("-r ressource block allocation (see section 7.1.6.3 in 36.213\n"); printf("-g [A:M] Use 3GPP 25.814 SCM-A/B/C/D('A','B','C','D') or 36-101 EPA('E'), EVA ('F'),ETU('G') models (ignores delay spread and Ricean factor), Rayghleigh8 ('H'), Rayleigh1('I'), Rayleigh1_corr('J'), Rayleigh1_anticorr ('K'), Rice8('L'), Rice1('M')\n"); printf("-F forgetting factor (0 new channel every trial, 1 channel constant\n"); - printf("-x Transmission mode (1,2,6 for the moment)\n"); + printf("-x Transmission mode (1,2,6,7 for the moment)\n"); + printf("-q Number of TX antennas ports used in eNB\n"); printf("-y Number of TX antennas used in eNB\n"); printf("-z Number of RX antennas used in UE\n"); printf("-t MCS of interfering UE\n"); @@ -1747,9 +1777,6 @@ int main(int argc, char **argv) } else NB_RB = 4; - if ((transmission_mode > 1) && (n_tx != 2)) - printf("n_tx must be >1 for transmission_mode %d\n",transmission_mode); - if (xforms==1) { fl_initialize (&argc, argv, NULL, 0, 0); form_ue = create_lte_phy_scope_ue(); @@ -1769,8 +1796,8 @@ int main(int argc, char **argv) printf("dual_stream_UE=%d\n", dual_stream_UE); } - lte_param_init(transmission_mode==1?1:2, - n_tx, + lte_param_init(n_tx_port, + n_tx_phy, n_rx, transmission_mode, extended_prefix_flag, @@ -1782,6 +1809,26 @@ int main(int argc, char **argv) osf, perfect_ce); + /* Check if really needed */ + /*cell_spec_bf_weights = eNB->common_vars.beam_weights[0][0]; + for(aa=0;aaofdm_symbol_size;re++) { + if (n_tx_phy==1 || n_tx_phy==2) + cell_spec_bf_weights[aa][re] = 0x00007fff; + else if (n_tx_phy==4 || n_tx_phy==8) + cell_spec_bf_weights[aa][re] = 0x00007fff>>1; + else if (n_tx_phy==16) + cell_spec_bf_weights[aa][re] = 0x00007fff>>2; + else if (n_tx_phy==64) + cell_spec_bf_weights[aa][re] = 0x00007fff>>4; + } + } + + if (transmission_mode==7) { + lte_gold_ue_spec_port5(eNB->lte_gold_uespec_port5_table[0],Nid_cell,n_rnti); + lte_gold_ue_spec_port5(UE->lte_gold_uespec_port5_table,Nid_cell,n_rnti); + }*/ + eNB->mac_enabled=1; if (two_thread_flag == 0) { eNB->te = dlsch_encoding; @@ -1803,7 +1850,7 @@ int main(int argc, char **argv) printf("Setting mcs2 = %d\n",mcs2); printf("NPRB = %d\n",NB_RB); printf("n_frames = %d\n",n_frames); - printf("Transmission mode %d with %dx%d antenna configuration, Extended Prefix %d\n",transmission_mode,n_tx,n_rx,extended_prefix_flag); + printf("Transmission mode %d with %dx%d antenna configuration, Extended Prefix %d\n",transmission_mode,n_tx_phy,n_rx,extended_prefix_flag); snr1 = snr0+snr_int; printf("SNR0 %f, SNR1 %f\n",snr0,snr1); @@ -1838,7 +1885,7 @@ int main(int argc, char **argv) //char dirname[FILENAME_MAX]; //sprintf(dirname, "%s/SIMU/USER/pre-ci-logs-%s", getenv("OPENAIR_TARGETS"),hostname ); sprintf(time_meas_fname,"time_meas_prb%d_mcs%d_anttx%d_antrx%d_pdcch%d_channel%s_tx%d.csv", - N_RB_DL,mcs1,n_tx,n_rx,num_pdcch_symbols,channel_model_input,transmission_mode); + N_RB_DL,mcs1,n_tx_phy,n_rx,num_pdcch_symbols,channel_model_input,transmission_mode); //mkdir(dirname,0777); time_meas_fd = fopen(time_meas_fname,"w"); if (time_meas_fd==NULL) { @@ -2403,11 +2450,15 @@ int main(int argc, char **argv) if (n_frames==1) { printf("tx_lev = %d (%d dB)\n",tx_lev,tx_lev_dB); - write_output("txsig0.m","txs0", &eNB->common_vars.txdata[eNB_id][0][subframe* eNB->frame_parms.samples_per_tti], - eNB->frame_parms.samples_per_tti,1,1); - write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size], - nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); + write_output("txsig0.m","txs0", &eNB->common_vars.txdata[eNB_id][0][subframe* eNB->frame_parms.samples_per_tti], eNB->frame_parms.samples_per_tti,1,1); + + if (transmission_mode<7) { + write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][0][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); + } else if (transmission_mode == 7) { + write_output("txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB_id][5][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size],nsymb*eNB->frame_parms.ofdm_symbol_size,1,1); + write_output("txsigF0_BF.m","txsF0_BF", &eNB->common_vars.txdataF_BF[eNB_id][0][0],eNB->frame_parms.ofdm_symbol_size,1,1); + } } } From 263254408df04af4babd86cbdc10f0e8f21fa172 Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Wed, 23 Nov 2016 10:41:00 +0100 Subject: [PATCH 096/132] use symbol based OFDM modulation in dlsim --- openair1/SIMULATION/LTE_PHY/dlsim.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index 1ba2196eb6..b94b757adf 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -1282,7 +1282,6 @@ int main(int argc, char **argv) uint16_t Nid_cell=0; int32_t **cell_spec_bf_weights; - int32_t *ue_spec_bf_weights; int eNB_id = 0; unsigned char mcs1=0,mcs2=0,mcs_i=0,dual_stream_UE = 0,awgn_flag=0,round; @@ -2411,6 +2410,7 @@ int main(int argc, char **argv) start_meas(&eNB->ofdm_mod_stats); + /* do_OFDM_mod_l(eNB->common_vars.txdataF[eNB_id], eNB->common_vars.txdata[eNB_id], (subframe*2), @@ -2420,7 +2420,19 @@ int main(int argc, char **argv) eNB->common_vars.txdata[eNB_id], (subframe*2)+1, &eNB->frame_parms); - + */ + + do_OFDM_mod_symbol(&eNB->common_vars, + eNB_id, + (subframe*2), + &eNB->frame_parms); + + do_OFDM_mod_symbol(&eNB->common_vars, + eNB_id, + (subframe*2)+1, + &eNB->frame_parms); + + stop_meas(&eNB->ofdm_mod_stats); // generate next subframe for channel estimation From b4a6e0305349f8c4b08ee18b4acefa406f1fa2ec Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Wed, 23 Nov 2016 11:48:18 +0100 Subject: [PATCH 097/132] error message disply fixed in dl bf ch est --- .../LTE_ESTIMATION/lte_dl_bf_channel_estimation.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c index 7f4a14f197..0b220c2c39 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_dl_bf_channel_estimation.c @@ -205,7 +205,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, } //estimation and interpolation - if ((frame_parms->N_RB_DL&1) == 0) // even number of RBs + if ((frame_parms->N_RB_DL&1) == 0) { // even number of RBs for (rb=0; rbN_RB_DL; rb++) { if (rb < 32) @@ -240,14 +240,13 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, ch[0] = (short)(((int)pil[0]*rxF[16] - (int)pil[1]*rxF[17])>>15); ch[1] = (short)(((int)pil[0]*rxF[17] + (int)pil[1]*rxF[16])>>15); multadd_real_vector_complex_scalar(fr,ch,dl_bf_ch,16); + } else { + msg("lte_dl_bf_channel_estimation(lte_dl_bf_channel_estimation.c):TM7 beamgforming channel estimation not supported for extented CP\n"); + exit(-1); } } else { - msg("lte_dl_bf_channel_estimation(lte_dl_bf_channel_estimation.c):TM7 beamgforming channel estimation not supported for extented CP\n"); - exit(-1); + msg("lte_dl_bf_channel_estimation(lte_dl_bf_channel_estimation.c): transmission mode not supported.\n"); } - - } else { - msg("lte_dl_bf_channel_estimation(lte_dl_bf_channel_estimation.c): transmission mode not supported.\n"); } nb_rb++; } @@ -255,7 +254,7 @@ int lte_dl_bf_channel_estimation(PHY_VARS_UE *phy_vars_ue, rxF+=24; dl_bf_ch+=24; } - else { // Odd number of RBs + } else { // Odd number of RBs for (rb=0; rbN_RB_DL>>1; rb++) { skip_half=0; From 441b062e3affb72d78f75dd02d70ceb22f401121 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Wed, 23 Nov 2016 15:15:56 +0100 Subject: [PATCH 098/132] changing config files --- .../CONF/enb.band7.tm1.usrpb210.conf | 14 +- .../CONF/enb.band7.usrpb210.conf | 232 +++++++++--------- 2 files changed, 123 insertions(+), 123 deletions(-) diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf index 01cd014afc..5ef5a4f50b 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf @@ -68,9 +68,9 @@ eNBs = srs_ackNackST =; srs_MaxUpPts =;*/ - pusch_p0_Nominal = -96; + pusch_p0_Nominal = -90; pusch_alpha = "AL1"; - pucch_p0_Nominal = -103; + pucch_p0_Nominal = -96; msg3_delta_Preamble = 6; pucch_deltaF_Format1 = "deltaF2"; pucch_deltaF_Format1b = "deltaF3"; @@ -137,7 +137,7 @@ eNBs = ////////// MME parameters: - mme_ip_address = ( { ipv4 = "127.0.0.3"; + mme_ip_address = ( { ipv4 = "192.168.12.70"; ipv6 = "192:168:30::17"; active = "yes"; preference = "ipv4"; @@ -147,10 +147,10 @@ eNBs = NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "lo"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "127.0.0.2/24"; - ENB_INTERFACE_NAME_FOR_S1U = "lo"; - ENB_IPV4_ADDRESS_FOR_S1U = "127.0.0.4/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth1"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.147/24"; + ENB_INTERFACE_NAME_FOR_S1U = "eth1"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.147/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf index 1fe3beae0e..540edcd5b9 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.usrpb210.conf @@ -7,125 +7,126 @@ eNBs = { ////////// Identification parameters: eNB_ID = 0xe00; - + cell_type = "CELL_MACRO_ENB"; - + eNB_name = "eNB_Eurecom_LTEBox"; - + // Tracking area code, 0x0000 and 0xfffe are reserved values tracking_area_code = "1"; - + mobile_country_code = "208"; - + mobile_network_code = "94"; - + ////////// Physical parameters: - + component_carriers = ( - { - frame_type = "FDD"; - tdd_config = 3; - tdd_config_s = 0; - prefix_type = "NORMAL"; - eutra_band = 7; - downlink_frequency = 2680000000L; - uplink_frequency_offset = -120000000; - Nid_cell = 0; - N_RB_DL = 25; - Nid_cell_mbsfn = 0; - nb_antenna_ports = 2; - nb_antennas_tx = 2; - nb_antennas_rx = 2; - tx_gain = 90; - rx_gain = 125; - prach_root = 0; - prach_config_index = 0; - prach_high_speed = "DISABLE"; - prach_zero_correlation = 1; - prach_freq_offset = 2; - pucch_delta_shift = 1; - pucch_nRB_CQI = 1; - pucch_nCS_AN = 0; - pucch_n1_AN = 32; - pdsch_referenceSignalPower = -26; - pdsch_p_b = 0; - pusch_n_SB = 1; - pusch_enable64QAM = "DISABLE"; - pusch_hoppingMode = "interSubFrame"; - pusch_hoppingOffset = 0; - pusch_groupHoppingEnabled = "ENABLE"; - pusch_groupAssignment = 0; - pusch_sequenceHoppingEnabled = "DISABLE"; - pusch_nDMRS1 = 1; - phich_duration = "NORMAL"; - phich_resource = "ONESIXTH"; - srs_enable = "DISABLE"; - /* srs_BandwidthConfig =; - srs_SubframeConfig =; - srs_ackNackST =; - srs_MaxUpPts =;*/ + { + node_function = "eNodeB_3GPP"; + node_timing = "synch_to_ext_device"; + node_synch_ref = 0; + frame_type = "FDD"; + tdd_config = 3; + tdd_config_s = 0; + prefix_type = "NORMAL"; + eutra_band = 7; + downlink_frequency = 2660000000L; + uplink_frequency_offset = -120000000; + Nid_cell = 0; + N_RB_DL = 25; + Nid_cell_mbsfn = 0; + nb_antenna_ports = 2; + nb_antennas_tx = 2; + nb_antennas_rx = 2; + tx_gain = 90; + rx_gain = 125; + prach_root = 0; + prach_config_index = 0; + prach_high_speed = "DISABLE"; + prach_zero_correlation = 1; + prach_freq_offset = 2; + pucch_delta_shift = 1; + pucch_nRB_CQI = 1; + pucch_nCS_AN = 0; + pucch_n1_AN = 32; + pdsch_referenceSignalPower = -24; + pdsch_p_b = 1; + pusch_n_SB = 1; + pusch_enable64QAM = "DISABLE"; + pusch_hoppingMode = "interSubFrame"; + pusch_hoppingOffset = 0; + pusch_groupHoppingEnabled = "ENABLE"; + pusch_groupAssignment = 0; + pusch_sequenceHoppingEnabled = "DISABLE"; + pusch_nDMRS1 = 1; + phich_duration = "NORMAL"; + phich_resource = "ONESIXTH"; + srs_enable = "DISABLE"; + /* srs_BandwidthConfig =; + srs_SubframeConfig =; + srs_ackNackST =; + srs_MaxUpPts =;*/ - pusch_p0_Nominal = -90; - pusch_alpha = "AL1"; - pucch_p0_Nominal = -96; - msg3_delta_Preamble = 6; - pucch_deltaF_Format1 = "deltaF2"; - pucch_deltaF_Format1b = "deltaF3"; - pucch_deltaF_Format2 = "deltaF0"; - pucch_deltaF_Format2a = "deltaF0"; - pucch_deltaF_Format2b = "deltaF0"; - - rach_numberOfRA_Preambles = 64; - rach_preamblesGroupAConfig = "DISABLE"; -/* - rach_sizeOfRA_PreamblesGroupA = ; - rach_messageSizeGroupA = ; - rach_messagePowerOffsetGroupB = ; -*/ - rach_powerRampingStep = 4; - rach_preambleInitialReceivedTargetPower = -108; - rach_preambleTransMax = 10; - rach_raResponseWindowSize = 10; - rach_macContentionResolutionTimer = 48; - rach_maxHARQ_Msg3Tx = 4; + pusch_p0_Nominal = -90; + pusch_alpha = "AL1"; + pucch_p0_Nominal = -96; + msg3_delta_Preamble = 6; + pucch_deltaF_Format1 = "deltaF2"; + pucch_deltaF_Format1b = "deltaF3"; + pucch_deltaF_Format2 = "deltaF0"; + pucch_deltaF_Format2a = "deltaF0"; + pucch_deltaF_Format2b = "deltaF0"; - pcch_default_PagingCycle = 128; - pcch_nB = "oneT"; - bcch_modificationPeriodCoeff = 2; - ue_TimersAndConstants_t300 = 1000; - ue_TimersAndConstants_t301 = 1000; - ue_TimersAndConstants_t310 = 1000; - ue_TimersAndConstants_t311 = 10000; - ue_TimersAndConstants_n310 = 20; - ue_TimersAndConstants_n311 = 1; + rach_numberOfRA_Preambles = 64; + rach_preamblesGroupAConfig = "DISABLE"; + /* + rach_sizeOfRA_PreamblesGroupA = ; + rach_messageSizeGroupA = ; + rach_messagePowerOffsetGroupB = ; + */ + rach_powerRampingStep = 4; + rach_preambleInitialReceivedTargetPower = -104; + rach_preambleTransMax = 10; + rach_raResponseWindowSize = 10; + rach_macContentionResolutionTimer = 48; + rach_maxHARQ_Msg3Tx = 4; - ue_TransmissionMode = 2; - - } - ); + pcch_default_PagingCycle = 128; + pcch_nB = "oneT"; + bcch_modificationPeriodCoeff = 2; + ue_TimersAndConstants_t300 = 1000; + ue_TimersAndConstants_t301 = 1000; + ue_TimersAndConstants_t310 = 1000; + ue_TimersAndConstants_t311 = 10000; + ue_TimersAndConstants_n310 = 20; + ue_TimersAndConstants_n311 = 1; + ue_TransmissionMode = 2; + } + ); srb1_parameters : { - # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] + # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500] timer_poll_retransmit = 80; - + # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200] timer_reordering = 35; - + # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500] timer_status_prohibit = 0; - + # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)] poll_pdu = 4; - + # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)] poll_byte = 99999; - + # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32] max_retx_threshold = 4; } - + # ------- SCTP definitions SCTP : { @@ -133,7 +134,7 @@ eNBs = SCTP_INSTREAMS = 2; SCTP_OUTSTREAMS = 2; }; - + ////////// MME parameters: mme_ip_address = ( { ipv4 = "192.168.12.70"; ipv6 = "192:168:30::17"; @@ -142,33 +143,32 @@ eNBs = } ); - NETWORK_INTERFACES : + NETWORK_INTERFACES : { - ENB_INTERFACE_NAME_FOR_S1_MME = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.150/24"; - ENB_INTERFACE_NAME_FOR_S1U = "eth0"; - ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.150/24"; + ENB_INTERFACE_NAME_FOR_S1_MME = "eth1"; + ENB_IPV4_ADDRESS_FOR_S1_MME = "192.168.12.147/24"; + ENB_INTERFACE_NAME_FOR_S1U = "eth1"; + ENB_IPV4_ADDRESS_FOR_S1U = "192.168.12.147/24"; ENB_PORT_FOR_S1U = 2152; # Spec 2152 }; - - log_config : + + log_config : { - global_log_level ="info"; - global_log_verbosity ="medium"; - hw_log_level ="info"; - hw_log_verbosity ="medium"; - phy_log_level ="info"; - phy_log_verbosity ="medium"; - mac_log_level ="info"; - mac_log_verbosity ="high"; - rlc_log_level ="info"; - rlc_log_verbosity ="medium"; - pdcp_log_level ="info"; - pdcp_log_verbosity ="medium"; - rrc_log_level ="info"; - rrc_log_verbosity ="medium"; - }; - + global_log_level ="info"; + global_log_verbosity ="medium"; + hw_log_level ="info"; + hw_log_verbosity ="medium"; + phy_log_level ="debug"; + phy_log_verbosity ="medium"; + mac_log_level ="info"; + mac_log_verbosity ="high"; + rlc_log_level ="info"; + rlc_log_verbosity ="medium"; + pdcp_log_level ="info"; + pdcp_log_verbosity ="medium"; + rrc_log_level ="info"; + rrc_log_verbosity ="medium"; + }; } ); From 7133633997f39d048121d4104794e53158c3f813 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Wed, 23 Nov 2016 15:17:01 +0100 Subject: [PATCH 099/132] bugfixes in precoder --- openair1/PHY/INIT/lte_init.c | 13 +++++++------ openair1/PHY/MODULATION/beamforming.c | 14 ++++++++------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 0009dbfefe..1c0ed16e0f 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -1251,12 +1251,13 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB, common_vars->beam_weights[eNB_id][i] = (int32_t **)malloc16_clear(fp->nb_antennas_tx*sizeof(int32_t*)); for (j=0; jnb_antennas_tx; j++) { common_vars->beam_weights[eNB_id][i][j] = (int32_t *)malloc16_clear(fp->ofdm_symbol_size*sizeof(int32_t)); - for (re=0; reofdm_symbol_size; re++) - common_vars->beam_weights[eNB_id][i][j][re] = 0x00007fff; -#ifdef DEBUG_PUY - msg("[openair][LTE_PHY][INIT] lte_common_vars->beam_weights[%d][%d][%d] = %p (%d bytes)\n", - eNB_id,i,j,common_vars->beam_weights[eNB_id][i][j], - OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); + if (i==j) + for (re=0; reofdm_symbol_size; re++) + common_vars->beam_weights[eNB_id][i][j][re] = 0x00007fff; +#ifdef DEBUG_PHY + msg("[openair][LTE_PHY][INIT] lte_common_vars->beam_weights[%d][%d][%d] = %p (%d bytes)\n", + eNB_id,i,j,common_vars->beam_weights[eNB_id][i][j], + OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); #endif } } diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c index 3aa7810aec..5e4660f034 100644 --- a/openair1/PHY/MODULATION/beamforming.c +++ b/openair1/PHY/MODULATION/beamforming.c @@ -61,18 +61,19 @@ int beam_precoding(int32_t **txdataF, // clear txdata_BF[aa][re] for each call of ue_spec_beamforming for(aa=0;aanb_antennas_tx;aa++) - memset(txdataF_BF[aa],0,4*(frame_parms->ofdm_symbol_size)); + memset(txdataF_BF[aa],0,sizeof(int32_t)*(frame_parms->ofdm_symbol_size)); for (re=0;reofdm_symbol_size;re++) { for (p=0; p<2; p++) { if (txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { for (aa=0;aanb_antennas_tx;aa++) { - ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[0][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); - /*printf("beamforming.c:txdata[%d][%d]=%d+j%d, beam_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", + /* + printf("beamforming.c:txdataF[%d][%d]=%d+j%d, beam_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", p,slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], ((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], @@ -80,7 +81,8 @@ int beam_precoding(int32_t **txdataF, ((int16_t*)&beam_weights[p][aa][re])[0],((int16_t*)&beam_weights[p][aa][re])[1], aa,re, ((int16_t*)&txdataF_BF[aa][re])[0], - ((int16_t*)&txdataF_BF[aa][re])[1]); */ + ((int16_t*)&txdataF_BF[aa][re])[1]); + */ } } From f216bacb1142dccda5a6df7b1340958c6895ca6c Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Wed, 23 Nov 2016 17:01:22 +0100 Subject: [PATCH 100/132] fix the dlsim for TM7 --- openair1/PHY/INIT/lte_init.c | 2 +- openair1/SCHED/phy_procedures_lte_ue.c | 2 +- openair1/SIMULATION/LTE_PHY/dlsim.c | 20 -------------------- openair1/SIMULATION/LTE_PHY/dlsim_tm7.c | 3 ++- 4 files changed, 4 insertions(+), 23 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 0a212db27b..16a608f4e9 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -1251,7 +1251,7 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB, common_vars->beam_weights[eNB_id][i] = (int32_t **)malloc16_clear(fp->nb_antennas_tx*sizeof(int32_t*)); for (j=0; jnb_antennas_tx; j++) { common_vars->beam_weights[eNB_id][i][j] = (int32_t *)malloc16_clear(fp->ofdm_symbol_size*sizeof(int32_t)); - if (i==j) + if (((i<=4) && (i==j)) || (i>=5)) for (re=0; reofdm_symbol_size; re++) common_vars->beam_weights[eNB_id][i][j][re] = 0x00007fff; #ifdef DEBUG_PHY diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 6dfdc7297d..bcf6507e20 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -2354,7 +2354,7 @@ void ue_pdsch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, PDSC //TM7 UE specific channel estimation here!!! if (ue->transmission_mode[eNB_id]==7) { if (ue->frame_parms.Ncp==0) { - if ((m==3) || (m==6) || (m==8) || (m==11)) + if ((m==3) || (m==6) || (m==9) || (m==12)) //LOG_D(PHY,"[UE %d] dlsch->active in subframe %d => %d, l=%d\n",phy_vars_ue->Mod_id,subframe_rx,phy_vars_ue->dlsch_ue[eNB_id][0]->active, l); lte_dl_bf_channel_estimation(ue,eNB_id,0,subframe_rx*2+(m>6?1:0),5,m); } else { diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index b94b757adf..c657069e46 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -1808,26 +1808,6 @@ int main(int argc, char **argv) osf, perfect_ce); - /* Check if really needed */ - /*cell_spec_bf_weights = eNB->common_vars.beam_weights[0][0]; - for(aa=0;aaofdm_symbol_size;re++) { - if (n_tx_phy==1 || n_tx_phy==2) - cell_spec_bf_weights[aa][re] = 0x00007fff; - else if (n_tx_phy==4 || n_tx_phy==8) - cell_spec_bf_weights[aa][re] = 0x00007fff>>1; - else if (n_tx_phy==16) - cell_spec_bf_weights[aa][re] = 0x00007fff>>2; - else if (n_tx_phy==64) - cell_spec_bf_weights[aa][re] = 0x00007fff>>4; - } - } - - if (transmission_mode==7) { - lte_gold_ue_spec_port5(eNB->lte_gold_uespec_port5_table[0],Nid_cell,n_rnti); - lte_gold_ue_spec_port5(UE->lte_gold_uespec_port5_table,Nid_cell,n_rnti); - }*/ - eNB->mac_enabled=1; if (two_thread_flag == 0) { eNB->te = dlsch_encoding; diff --git a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c index 0d5dcd63ce..66dea185de 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim_tm7.c @@ -636,6 +636,7 @@ int main(int argc, char **argv) frame_parms = &eNB->frame_parms; + /* cell_spec_bf_weights = eNB->common_vars.beam_weights[0][0]; for(aa=0;aaofdm_symbol_size;re++) { @@ -653,7 +654,7 @@ int main(int argc, char **argv) if (transmission_mode==7){ lte_gold_ue_spec_port5(eNB->lte_gold_uespec_port5_table[0],Nid_cell,n_rnti); lte_gold_ue_spec_port5(UE->lte_gold_uespec_port5_table,Nid_cell,n_rnti); - } + }*/ eNB_id_i = UE->n_connected_eNB; From 953de398a31f0ee1b57b80b51541c5263dcf441b Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 24 Nov 2016 10:46:20 +0100 Subject: [PATCH 101/132] adapt the tm7 configuration file --- .../GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf index d26ebbe735..52a8d8ee50 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm7.exmimo2.conf @@ -23,6 +23,9 @@ eNBs = component_carriers = ( { + node_function = "eNodeB_3GPP"; + node_timing = "synch_to_ext_device"; + node_synch_ref = 0; frame_type = "FDD"; tdd_config = 3; tdd_config_s = 0; @@ -34,8 +37,8 @@ eNBs = N_RB_DL = 25; Nid_cell_mbsfn = 0; nb_antenna_ports = 1; - nb_antennas_tx = 2; - nb_antennas_rx = 2; + nb_antennas_tx = 1; + nb_antennas_rx = 1; tx_gain = 25; rx_gain = 20; prach_root = 0; From 7715900222394b7c98f772913748e0346bd1a793 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Thu, 24 Nov 2016 14:42:06 +0100 Subject: [PATCH 102/132] some more bugfixes (old and introcuded by merge) plus ability too use phy-test for tm7 --- openair1/PHY/INIT/lte_init.c | 10 +++++- openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c | 34 +++++++------------ openair1/PHY/MODULATION/beamforming.c | 9 +++-- openair1/SCHED/phy_mac_stub.c | 2 ++ .../CONF/enb.band7.tm1.usrpb210.conf | 4 +-- targets/RT/USER/lte-enb.c | 15 ++++++-- targets/RT/USER/lte-softmodem.c | 20 +++++++++-- 7 files changed, 61 insertions(+), 33 deletions(-) diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 16a608f4e9..5dd747de92 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -1251,9 +1251,17 @@ int phy_init_lte_eNB(PHY_VARS_eNB *eNB, common_vars->beam_weights[eNB_id][i] = (int32_t **)malloc16_clear(fp->nb_antennas_tx*sizeof(int32_t*)); for (j=0; jnb_antennas_tx; j++) { common_vars->beam_weights[eNB_id][i][j] = (int32_t *)malloc16_clear(fp->ofdm_symbol_size*sizeof(int32_t)); - if (((i<=4) && (i==j)) || (i>=5)) + // antenna ports 0-3 are mapped on antennas 0-3 + // antenna port 4 is mapped on antenna 0 + // antenna ports 5-14 are mapped on all antennas + if (((i<4) && (i==j)) || ((i==4) && (j==0))) { for (re=0; reofdm_symbol_size; re++) common_vars->beam_weights[eNB_id][i][j][re] = 0x00007fff; + } + else if (i>4) { + for (re=0; reofdm_symbol_size; re++) + common_vars->beam_weights[eNB_id][i][j][re] = 0x00007fff/fp->nb_antennas_tx; + } #ifdef DEBUG_PHY msg("[openair][LTE_PHY][INIT] lte_common_vars->beam_weights[%d][%d][%d] = %p (%d bytes)\n", eNB_id,i,j,common_vars->beam_weights[eNB_id][i][j], diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 84e4bddec2..d6e680344b 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -678,15 +678,11 @@ x0[1+*jj]); case 2: //QPSK // printf("re %d %d(%d) : %d,%d => ",re,tti_offset,*jj,((int16_t*)&txdataF[0][tti_offset])[0],((int16_t*)&txdataF[0][tti_offset])[1]); - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i - } + ((int16_t*)&txdataF[0][tti_offset])[0] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //I //b_i *jj = *jj + 1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t*)&txdataF[aa][tti_offset])[1] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} - } + ((int16_t*)&txdataF[0][tti_offset])[1] += (x0[*jj]==1) ? (-gain_lin_QPSK) : gain_lin_QPSK; //Q //b_{i+1} *jj = *jj + 1; @@ -719,12 +715,10 @@ x0[1+*jj]); *jj=*jj+1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s0[qam16_table_offset_re]; - ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s0[qam16_table_offset_im]; - // ((int16_t *)&txdataF[aa][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); - // ((int16_t *)&txdataF[aa][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); - } + ((int16_t *)&txdataF[0][tti_offset])[0]+=qam_table_s0[qam16_table_offset_re]; + ((int16_t *)&txdataF[0][tti_offset])[1]+=qam_table_s0[qam16_table_offset_im]; + // ((int16_t *)&txdataF[aa][tti_offset])[0]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_re])>>15); + // ((int16_t *)&txdataF[aa][tti_offset])[1]+=(int16_t)(((int32_t)amp*qam16_table[qam16_table_offset_im])>>15); break; @@ -764,10 +758,8 @@ x0[1+*jj]); *jj=*jj+1; - for (aa=0; aanb_antennas_tx; aa++) { - ((int16_t *)&txdataF[aa][tti_offset])[0]+=qam_table_s0[qam64_table_offset_re]; - ((int16_t *)&txdataF[aa][tti_offset])[1]+=qam_table_s0[qam64_table_offset_im]; - } + ((int16_t *)&txdataF[0][tti_offset])[0]+=qam_table_s0[qam64_table_offset_re]; + ((int16_t *)&txdataF[0][tti_offset])[1]+=qam_table_s0[qam64_table_offset_im]; break; @@ -970,7 +962,7 @@ x0[1+*jj]); *re_allocated = *re_allocated + 1; - if (frame_parms->nb_antennas_tx == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { switch (mod_order0) { default: LOG_E(PHY,"Unknown mod_order0 %d\n",mod_order0); @@ -1186,7 +1178,7 @@ x0[1+*jj]); ((int16_t*)&txdataF[0][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample1)[0]*ONE_OVER_SQRT2_Q15)>>15); ((int16_t*)&txdataF[0][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample1)[1]*ONE_OVER_SQRT2_Q15)>>15); - if (frame_parms->nb_antennas_tx == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); ((int16_t*)&txdataF[1][tti_offset])[0] += (int16_t)((((int16_t*)&tmp_sample2)[0]*ONE_OVER_SQRT2_Q15)>>15); ((int16_t*)&txdataF[1][tti_offset])[1] += (int16_t)((((int16_t*)&tmp_sample2)[1]*ONE_OVER_SQRT2_Q15)>>15); @@ -1226,7 +1218,7 @@ x0[1+*jj]); ((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0]; ((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1]; - if (frame_parms->nb_antennas_tx == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); ((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0]; ((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1]; @@ -1276,7 +1268,7 @@ x0[1+*jj]); ((int16_t *)&txdataF[0][tti_offset])[0] += ((int16_t*)&tmp_sample1)[0]; ((int16_t *)&txdataF[0][tti_offset])[1] += ((int16_t*)&tmp_sample1)[1]; - if (frame_parms->nb_antennas_tx == 2) { + if (frame_parms->nb_antenna_ports_eNB == 2) { layer1prec2A(&tmp_sample1,&tmp_sample2,precoder_index); ((int16_t*)&txdataF[1][tti_offset])[0] += ((int16_t*)&tmp_sample2)[0]; ((int16_t*)&txdataF[1][tti_offset])[1] += ((int16_t*)&tmp_sample2)[1]; @@ -1284,7 +1276,7 @@ x0[1+*jj]); break; - } + } } if (mimo_mode == ALAMOUTI) { diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c index 5e4660f034..75321daee0 100644 --- a/openair1/PHY/MODULATION/beamforming.c +++ b/openair1/PHY/MODULATION/beamforming.c @@ -84,14 +84,13 @@ int beam_precoding(int32_t **txdataF, ((int16_t*)&txdataF_BF[aa][re])[1]); */ } - } } if (txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually using TM7 for (aa=0;aanb_antennas_tx;aa++) { - ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[5][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[5][aa][re])[0])>>15); ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[5][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[5][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[5][aa][re])[1])>>15); ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[5][aa][re])[0])>>15); /* printf("beamforming.c:txdata[5][%d]=%d+j%d, beam_weights[5][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", @@ -112,9 +111,9 @@ int beam_precoding(int32_t **txdataF, for (p=7;p<15;p++) { if (txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually allocated for (aa=0;aanb_antennas_tx;aa++) { - ((int16_t*)&txdataF_BF[aa][re])[0] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] = (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); } } diff --git a/openair1/SCHED/phy_mac_stub.c b/openair1/SCHED/phy_mac_stub.c index cae8b8c82e..9051127dbf 100644 --- a/openair1/SCHED/phy_mac_stub.c +++ b/openair1/SCHED/phy_mac_stub.c @@ -63,6 +63,8 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) uint32_t bcch_pdu; uint64_t dlsch_pdu; + LOG_I(PHY,"frame %d, subframe %d, transmission_mode %d\n",proc->frame_tx,proc->subframe_tx,transmission_mode); + DCI_pdu->Num_common_dci = 0; DCI_pdu->Num_ue_spec_dci=0; diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf index 5ef5a4f50b..2942832d94 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf @@ -37,8 +37,8 @@ eNBs = N_RB_DL = 25; Nid_cell_mbsfn = 0; nb_antenna_ports = 1; - nb_antennas_tx = 1; - nb_antennas_rx = 1; + nb_antennas_tx = 2; + nb_antennas_rx = 2; tx_gain = 90; rx_gain = 125; prach_root = 0; diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index 965894cac0..3eef00ef29 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -128,6 +128,8 @@ extern pthread_cond_t sync_cond; extern pthread_mutex_t sync_mutex; extern int sync_var; +extern transmission_mode; + //pthread_t main_eNB_thread; time_stats_t softmodem_stats_mt; // main thread @@ -467,8 +469,17 @@ void proc_tx_full(PHY_VARS_eNB *eNB, // if TX fronthaul go ahead if (eNB->tx_fh) eNB->tx_fh(eNB,proc); - - + /* + if (proc->frame_tx>1000) { + write_output("/tmp/txsig0.m","txs0", &eNB->common_vars.txdata[eNB->Mod_id][0][0], eNB->frame_parms.samples_per_tti*10,1,1); + write_output("/tmp/txsigF0.m","txsF0", &eNB->common_vars.txdataF[eNB->Mod_id][0][0],eNB->frame_parms.symbols_per_tti*eNB->frame_parms.ofdm_symbol_size*10,1,1); + write_output("/tmp/txsig1.m","txs1", &eNB->common_vars.txdata[eNB->Mod_id][1][0], eNB->frame_parms.samples_per_tti*10,1,1); + write_output("/tmp/txsigF1.m","txsF1", &eNB->common_vars.txdataF[eNB->Mod_id][1][0],eNB->frame_parms.symbols_per_tti*eNB->frame_parms.ofdm_symbol_size*10,1,1); + if (transmission_mode == 7) + write_output("/tmp/txsigF5.m","txsF5", &eNB->common_vars.txdataF[eNB->Mod_id][5][0],eNB->frame_parms.symbols_per_tti*eNB->frame_parms.ofdm_symbol_size*10,1,1); + exit_fun(""); + } + */ } void proc_tx_rru_if4p5(PHY_VARS_eNB *eNB, diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index d2362081de..3cb01c876a 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -234,7 +234,7 @@ uint64_t num_missed_slots=0; // counter for the number of missed slots extern void reset_opp_meas(void); extern void print_opp_meas(void); -//int transmission_mode=1; +int transmission_mode=1; int16_t glog_level = LOG_INFO; int16_t glog_verbosity = LOG_MED; @@ -1189,8 +1189,13 @@ static void get_options (int argc, char **argv) printf("Downlink frequency/ uplink offset of CC_id %d set to %ju/%d\n", CC_id, enb_properties->properties[i]->downlink_frequency[CC_id], enb_properties->properties[i]->uplink_frequency_offset[CC_id]); + } // CC_id }// i + + //this is needed for phy-test option + transmission_mode = enb_properties->properties[0]->ue_TransmissionMode[0]+1; + } else if (UE_flag == 1) { if (conf_config_file_name != NULL) { @@ -1363,7 +1368,7 @@ void init_openair0() { int main( int argc, char **argv ) { - int i,aa; + int i,j,k,aa,re; #if defined (XFORMS) void *status; #endif @@ -1606,6 +1611,17 @@ int main( int argc, char **argv ) PHY_vars_eNB_g[0][CC_id]->ue_ul_nb_rb=6; PHY_vars_eNB_g[0][CC_id]->target_ue_ul_mcs=target_ul_mcs; + // initialization for phy-test + for (k=0;ktransmission_mode[k] = transmission_mode; + if (transmission_mode==7) + lte_gold_ue_spec_port5(PHY_vars_eNB_g[0][CC_id]->lte_gold_uespec_port5_table[k],frame_parms[CC_id]->Nid_cell,0x1235+k); + } + if ((transmission_mode==1) || (transmission_mode==7)) { + for (j=0; jnb_antennas_tx; j++) + for (re=0; reofdm_symbol_size; re++) + PHY_vars_eNB_g[0][CC_id]->common_vars.beam_weights[0][0][j][re] = 0x00007fff/frame_parms[CC_id]->nb_antennas_tx; + } if (phy_test==1) PHY_vars_eNB_g[0][CC_id]->mac_enabled = 0; else PHY_vars_eNB_g[0][CC_id]->mac_enabled = 1; From 41fd001b3181a8ddaf362bb6ab4901b9123f386e Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Thu, 24 Nov 2016 17:57:52 +0100 Subject: [PATCH 103/132] delete redundant code in beamforming.c --- openair1/PHY/MODULATION/beamforming.c | 63 ++++++--------------------- openair1/PHY/MODULATION/defs.h | 6 ++- openair1/PHY/MODULATION/ofdm_mod.c | 11 +++-- openair1/SIMULATION/LTE_PHY/dlsim.c | 8 +++- 4 files changed, 29 insertions(+), 59 deletions(-) diff --git a/openair1/PHY/MODULATION/beamforming.c b/openair1/PHY/MODULATION/beamforming.c index 75321daee0..6557a47ee7 100644 --- a/openair1/PHY/MODULATION/beamforming.c +++ b/openair1/PHY/MODULATION/beamforming.c @@ -51,26 +51,27 @@ int beam_precoding(int32_t **txdataF, LTE_DL_FRAME_PARMS *frame_parms, int32_t ***beam_weights, int slot, - int symbol) + int symbol, + int aa) { - uint8_t p,aa; + uint8_t p; uint16_t re=0; int slot_offset_F; slot_offset_F = slot*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7); // clear txdata_BF[aa][re] for each call of ue_spec_beamforming - for(aa=0;aanb_antennas_tx;aa++) - memset(txdataF_BF[aa],0,sizeof(int32_t)*(frame_parms->ofdm_symbol_size)); + memset(txdataF_BF[aa],0,sizeof(int32_t)*(frame_parms->ofdm_symbol_size)); - for (re=0;reofdm_symbol_size;re++) { - for (p=0; p<2; p++) { - if (txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { - for (aa=0;aanb_antennas_tx;aa++) { - ((int16_t*)&txdataF_BF[aa][re])[0] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); - ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); + for (p=0; p<14; p++) { + //if (p==0 || p==1 || p==5 || p>7) + // mult_cpx_conj_vector((int16_t*)txdataF[p], (int16_t*)beam_weights[p][aa], (int16_t*)txdataF_BF[aa], frame_parms->ofdm_symbol_size, 15); + for (re=0;reofdm_symbol_size;re++) { + if ((p==0 || p==1 || p==5 || p>=7) && txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { + ((int16_t*)&txdataF_BF[aa][re])[0] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); + ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); + ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); /* printf("beamforming.c:txdataF[%d][%d]=%d+j%d, beam_weights[%d][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", @@ -83,44 +84,8 @@ int beam_precoding(int32_t **txdataF, ((int16_t*)&txdataF_BF[aa][re])[0], ((int16_t*)&txdataF_BF[aa][re])[1]); */ - } } } - if (txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually using TM7 - for (aa=0;aanb_antennas_tx;aa++) { - ((int16_t*)&txdataF_BF[aa][re])[0] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[5][aa][re])[0])>>15); - ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[5][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[5][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[5][aa][re])[0])>>15); - - /* printf("beamforming.c:txdata[5][%d]=%d+j%d, beam_weights[5][%d][%d]=%d+j%d,txdata_BF[%d][%d]=%d+j%d\n", - slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re, - ((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0], - ((int16_t*)&txdataF[5][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1], - aa,re, - ((int16_t*)&beam_weights[5][aa][re])[0], - ((int16_t*)&beam_weights[5][aa][re])[1], - aa,re, - ((int16_t*)&txdataF_BF[aa][re])[0], - ((int16_t*)&txdataF_BF[aa][re])[1]); */ - - } - } - - if (txdataF[7][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually using TM8-10 - for (p=7;p<15;p++) { - if (txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re]!=0) { //that means this RE is actually allocated - for (aa=0;aanb_antennas_tx;aa++) { - ((int16_t*)&txdataF_BF[aa][re])[0] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); - ((int16_t*)&txdataF_BF[aa][re])[0] -= (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[0]*((int16_t*)&beam_weights[p][aa][re])[1])>>15); - ((int16_t*)&txdataF_BF[aa][re])[1] += (int16_t)((((int16_t*)&txdataF[p][slot_offset_F+symbol*frame_parms->ofdm_symbol_size+re])[1]*((int16_t*)&beam_weights[p][aa][re])[0])>>15); - } - } - } - } } - -return 0; - + return 0; } diff --git a/openair1/PHY/MODULATION/defs.h b/openair1/PHY/MODULATION/defs.h index 289b1edd43..6937db6d9b 100644 --- a/openair1/PHY/MODULATION/defs.h +++ b/openair1/PHY/MODULATION/defs.h @@ -103,13 +103,15 @@ after beamforming @param beam_weights Beamforming weights applied on each antenna element and each carrier @param slot Slot number - @param symbol Symbol index on which to act*/ + @param symbol Symbol index on which to act + @param aa physical antenna index*/ int beam_precoding(int32_t **txdataF, int32_t **txdataF_BF, LTE_DL_FRAME_PARMS *frame_parms, int32_t ***beam_weights, int slot, - int symbol); + int symbol, + int aa); int f_read(char *calibF_fname, int nb_ant, int nb_freq, int32_t **tdd_calib_coeffs); diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 2fd7fd88a3..74037b4a6e 100644 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -298,14 +298,13 @@ void do_OFDM_mod_symbol(LTE_eNB_COMMON *eNB_common_vars, int eNB_id, uint16_t ne //printf("Thread %d starting ... aa %d (%llu)\n",omp_get_thread_num(),aa,rdtsc()); for (l=0; lsymbols_per_tti>>1; l++) { - //printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); - - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_BEAM_PRECODING,1); - beam_precoding(txdataF,txdataF_BF,frame_parms,eNB_common_vars->beam_weights[eNB_id],next_slot,l); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_BEAM_PRECODING,0); - for (aa=0; aanb_antennas_tx; aa++) { + //printf("do_OFDM_mod_l, slot=%d, l=%d, NUMBER_OF_OFDM_CARRIERS=%d,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES=%d\n",next_slot, l,NUMBER_OF_OFDM_CARRIERS,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_BEAM_PRECODING,1); + beam_precoding(txdataF,txdataF_BF,frame_parms,eNB_common_vars->beam_weights[eNB_id],next_slot,l,aa); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_BEAM_PRECODING,0); + //PMCH case not implemented... if (frame_parms->Ncp == 1) diff --git a/openair1/SIMULATION/LTE_PHY/dlsim.c b/openair1/SIMULATION/LTE_PHY/dlsim.c index c657069e46..f3804f0f70 100644 --- a/openair1/SIMULATION/LTE_PHY/dlsim.c +++ b/openair1/SIMULATION/LTE_PHY/dlsim.c @@ -1281,8 +1281,6 @@ int main(int argc, char **argv) uint8_t extended_prefix_flag=0,transmission_mode=1,n_tx_port=1,n_tx_phy=1,n_rx=2; uint16_t Nid_cell=0; - int32_t **cell_spec_bf_weights; - int eNB_id = 0; unsigned char mcs1=0,mcs2=0,mcs_i=0,dual_stream_UE = 0,awgn_flag=0,round; unsigned char i_mod = 2; @@ -1808,6 +1806,12 @@ int main(int argc, char **argv) osf, perfect_ce); + if ((transmission_mode==1) || (transmission_mode==7)) { + for (aa=0; aaframe_parms.nb_antennas_tx; aa++) + for (re=0; reframe_parms.ofdm_symbol_size; re++) + eNB->common_vars.beam_weights[0][0][aa][re] = 0x00007fff/eNB->frame_parms.nb_antennas_tx; + } + eNB->mac_enabled=1; if (two_thread_flag == 0) { eNB->te = dlsch_encoding; From 0579d471546a4d9667b989492bedfb3262d01893 Mon Sep 17 00:00:00 2001 From: ROBERT Benoit Date: Fri, 25 Nov 2016 14:43:28 +0100 Subject: [PATCH 104/132] Complete autotest patch files set for OAI1B autotest setup --- .../autotests/patches/CmakeLists.patch | 12 ++++++ .../autotest_ue_dlsch_bitrate_metric.patch | 11 +++-- .../patches/autotest_ue_offsets_metric.patch | 31 ++++++++++++++ .../autotests/patches/build_oai.patch | 40 +++++++++++++++++++ cmake_targets/autotests/testsuite_ue_noS1.xml | 6 +-- 5 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 cmake_targets/autotests/patches/CmakeLists.patch create mode 100644 cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch create mode 100644 cmake_targets/autotests/patches/build_oai.patch diff --git a/cmake_targets/autotests/patches/CmakeLists.patch b/cmake_targets/autotests/patches/CmakeLists.patch new file mode 100644 index 0000000000..9f2731ca73 --- /dev/null +++ b/cmake_targets/autotests/patches/CmakeLists.patch @@ -0,0 +1,12 @@ +diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt +index 3169c6c..eaf5417 100644 +--- a/cmake_targets/CMakeLists.txt ++++ b/cmake_targets/CMakeLists.txt +@@ -235,6 +235,7 @@ add_boolean_option(DEBUG_OMG False "???") + add_boolean_option(XFORMS False "This adds the possibility to see the signal oscilloscope") + add_boolean_option(PRINT_STATS False "This adds the possibility to see the status") + add_boolean_option(T_TRACER False "Activate the T tracer, a debugging/monitoring framework" ) ++add_boolean_option(UE_AUTOTEST_TRACE False "Activate UE autotest specific logs") + + add_boolean_option(DEBUG_CONSOLE False "makes debugging easier, disables stdout/stderr buffering") + diff --git a/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch b/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch index e8213960e1..b7a7dbfa02 100644 --- a/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch +++ b/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch @@ -1,18 +1,17 @@ diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c -index 3ed4c79..da88000 100644 +index 3ed4c79..6023886 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c -@@ -2944,6 +2944,14 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin +@@ -2944,6 +2944,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n", ue->Mod_id,frame_rx,ue->total_TBS[eNB_id], ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0); + -+ /* SYRTEM */ ++ #if UE_AUTOTEST_TRACE + if ((frame_rx % 100 == 0)) { -+ printf("AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", (float) ue->bitrate[eNB_id]/1000.0, frame_rx); -+ /* End of SYRTEM */ ++ LOG_I(PHY,"[UE %d] AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", ue->Mod_id, (float) ue->bitrate[eNB_id]/1000.0, frame_rx); + } -+ ++ #endif + } diff --git a/cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch b/cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch new file mode 100644 index 0000000000..3fca1a70fd --- /dev/null +++ b/cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch @@ -0,0 +1,31 @@ +diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c +index 3ed4c79..7185e5a 100644 +--- a/openair1/SCHED/phy_procedures_lte_ue.c ++++ b/openair1/SCHED/phy_procedures_lte_ue.c +@@ -2748,7 +2748,25 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin + 0); + + // first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH) +- ++ ++ /* SYRTEM */ ++ if ( (frame_rx % 10 == 0) && (subframe_rx == 0)) { ++ printf("AUTOTEST Metric : UE_FREQ_OFFSET = %d Hz (frame = %d) \n", ue->common_vars.freq_offset, frame_rx); ++ printf("AUTOTEST Metric : UE_RX_OFFSET = %d (frame = %d) \n", ue->rx_offset, frame_rx); ++ ++ printf("AUTOTEST Metric : RRC Measurments RSRP[0] %.2f dBm/RE, RSSI %.2f dBm, RSRQ[0] %.2f dB, N0 %d dBm/RE, NF %.1f dB (frame = %d)\n", ++ 10*log10(ue->measurements.rsrp[0])-ue->rx_total_gain_dB, ++ 10*log10(ue->measurements.rssi)-ue->rx_total_gain_dB, ++ 10*log10(ue->measurements.rsrq[0]), ++ ue->measurements.n0_power_tot_dBm, ++ (double)ue->measurements.n0_power_tot_dBm+132.24, ++ frame_rx); ++ } ++ ++ ++ ++ ++ + // do procedures for C-RNTI + if (ue->dlsch[eNB_id][0]->active == 1) { + ue_pdsch_procedures(ue, diff --git a/cmake_targets/autotests/patches/build_oai.patch b/cmake_targets/autotests/patches/build_oai.patch new file mode 100644 index 0000000000..d6cecda6e5 --- /dev/null +++ b/cmake_targets/autotests/patches/build_oai.patch @@ -0,0 +1,40 @@ +diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai +index b77a9ba..8e3021d 100755 +--- a/cmake_targets/build_oai ++++ b/cmake_targets/build_oai +@@ -53,6 +53,7 @@ BUILD_DOXYGEN=0 + T_TRACER="False" + DISABLE_HARDWARE_DEPENDENCY="False" + CMAKE_BUILD_TYPE="" ++UE_AUTOTEST_TRACE="False" + trap handle_ctrl_c INT + + function print_help() { +@@ -127,6 +128,8 @@ Options + Enables the T tracer. + --disable-hardware-dependency + Disable HW dependency during installation ++--ue-autotest-trace ++ Enable specific traces for UE autotest framework + Usage (first build): + oaisim (eNB + UE): ./build_oai -I --oaisim -x --install-system-files + Eurecom EXMIMO + COTS UE : ./build_oai -I --eNB -x --install-system-files +@@ -278,6 +281,10 @@ function main() { + echo_info "Disabling hardware dependency for compiling software" + DISABLE_HARDWARE_DEPENDENCY="True" + shift 1;; ++ --ue-autotest-trace) ++ UE_AUTOTEST_TRACE="True" ++ echo_info "Enabling autotest specific trace for UE" ++ shift 1;; + -h | --help) + print_help + exit 1;; +@@ -447,6 +454,7 @@ function main() { + echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file + echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file + echo "set ( T_TRACER $T_TRACER )" >> $cmake_file ++ echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file + echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file + cd $DIR/$lte_build_dir/build + cmake .. diff --git a/cmake_targets/autotests/testsuite_ue_noS1.xml b/cmake_targets/autotests/testsuite_ue_noS1.xml index c2f87b881f..19b945dc28 100644 --- a/cmake_targets/autotests/testsuite_ue_noS1.xml +++ b/cmake_targets/autotests/testsuite_ue_noS1.xml @@ -2,11 +2,11 @@ imb182-desktop yanbo-M4HM87P-00 /mnt/sradio/TEST_RESULTS/ - https://gitlab.eurecom.fr/oai1B/openairinterface5g.git - + + https://gitlab.eurecom.fr/oai/openairinterface5g.git --> https://gitlab.eurecom.fr/oai/openair-cn.git --> - develop1B + Enhancement-142-OAI_UE_autotest_framework From 28923dc8e27d15839cde227786f896a3ec94bd82 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Mon, 28 Nov 2016 13:58:41 +0100 Subject: [PATCH 105/132] fixing bug introduced in 5c5c336300924ed66beb6b4946117314ee8a4b64 --- targets/ARCH/COMMON/common_lib.h | 3 ++- targets/ARCH/EXMIMO/DEFS/openair_device.h | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h index a6c8e43483..a366b54023 100644 --- a/targets/ARCH/COMMON/common_lib.h +++ b/targets/ARCH/COMMON/common_lib.h @@ -44,8 +44,9 @@ #define BBU_LOCAL_RADIO_HEAD 0 #define BBU_REMOTE_RADIO_HEAD 1 +#ifndef MAX_CARDS #define MAX_CARDS 8 - +#endif typedef int64_t openair0_timestamp; typedef volatile int64_t openair0_vtimestamp; diff --git a/targets/ARCH/EXMIMO/DEFS/openair_device.h b/targets/ARCH/EXMIMO/DEFS/openair_device.h index b4916490e2..b22cf1879b 100644 --- a/targets/ARCH/EXMIMO/DEFS/openair_device.h +++ b/targets/ARCH/EXMIMO/DEFS/openair_device.h @@ -24,9 +24,8 @@ // Maximum number of concurrently supported cards -// defined in openair_common_lib.h -//#define MAX_CARDS 16 -//#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +#define MAX_CARDS 16 +#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /** PCIe subsystem configuration Space From f22e56ee6d5c2b2b6ee641dfa4c2bd0057ab5439 Mon Sep 17 00:00:00 2001 From: ROBERT Benoit Date: Thu, 1 Dec 2016 16:31:05 +0100 Subject: [PATCH 106/132] - Problem in DCI NDI : the implementation use 5 HARQ processes, but process 0 NDI never toggled because it was reused on subframe 5 that is not carrying format 1 DCI. Fix -> use 8 harq processes instead of 5. - SI scheduled on every subframe 5 (even and odd frames) instead of only on even frames - Add DLSCH scheduling on subframe 5 for odd frames - change default rballoc from 0x7FFF to 0x1FFFF to support maximum 10MHz throughput --- openair1/SCHED/phy_mac_stub.c | 79 ++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 34 deletions(-) diff --git a/openair1/SCHED/phy_mac_stub.c b/openair1/SCHED/phy_mac_stub.c index 0ac194d051..7753e9c2e3 100644 --- a/openair1/SCHED/phy_mac_stub.c +++ b/openair1/SCHED/phy_mac_stub.c @@ -40,14 +40,21 @@ #include "SCHED/phy_procedures_emos.h" #endif +/* SYRTEM */ +uint8_t dci_ndi_toggle_even[8] = {0, 0, 0, 0, 0, 0, 0, 0}; +uint8_t dci_ndi_toggle_odd[8] = {0, 0, 0, 0, 0, 0, 0, 0}; + void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) { - +/* SYRTEM */ + uint8_t *dci_ndi_toggle_tmp = NULL; + uint8_t harq_pid_value = 0; +/* End of SYRTEM */ //uint8_t cooperation_flag = eNB->cooperation_flag; uint8_t transmission_mode = eNB->transmission_mode[0]; - uint32_t rballoc = 0x7FFF; + uint32_t rballoc = 0x1FFFF; //uint32_t rballoc2 = 0x000F; int subframe = proc->subframe_tx; @@ -68,12 +75,14 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) switch (subframe) { case 5: - DCI_pdu->Num_common_dci = 1; - DCI_pdu->dci_alloc[0].L = 2; - DCI_pdu->dci_alloc[0].firstCCE = 0; - DCI_pdu->dci_alloc[0].rnti = SI_RNTI; - DCI_pdu->dci_alloc[0].format = format1A; - DCI_pdu->dci_alloc[0].ra_flag = 0; + if ( !(proc->frame_tx&1) ) // SI message on even frame only (SFN mod 2 == 0) + { + DCI_pdu->Num_common_dci = 1; + DCI_pdu->dci_alloc[0].L = 2; + DCI_pdu->dci_alloc[0].firstCCE = 0; + DCI_pdu->dci_alloc[0].rnti = SI_RNTI; + DCI_pdu->dci_alloc[0].format = format1A; + DCI_pdu->dci_alloc[0].ra_flag = 0; switch (eNB->frame_parms.N_RB_DL) { case 6: @@ -187,6 +196,12 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) } break; //subframe switch + } // if ( !(proc->frame_tx&1) ) + else // No SI message on odd frame (SFN mod 2 == 1) + { + /* warning: work around to send dlsch on subframe 5 odd frame !!! */ + /* todo: clean up, espacially if subframe cases are added next !!! */ + } /* case 6: DCI_pdu->Num_ue_spec_dci = 1; @@ -225,15 +240,23 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) if (eNB->frame_parms.frame_type == FDD) { DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t; + harq_pid_value = ( ((proc->frame_tx * 10) + subframe) % 8 ); + + if (!(subframe&1)) // even subframe + dci_ndi_toggle_tmp = &(dci_ndi_toggle_even[harq_pid_value]); + else // odd subframe + dci_ndi_toggle_tmp = &(dci_ndi_toggle_odd[harq_pid_value]); + ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc; //computeRIV(25,10,3); ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0; - ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = subframe % 5; + ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = harq_pid_value; ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; - //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28); - ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = subframe / 5; + ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = (*dci_ndi_toggle_tmp); ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0; ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rah = 0; + (*dci_ndi_toggle_tmp) = ((*dci_ndi_toggle_tmp) + 1) & 1; + memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_FDD_t)); /* @@ -296,36 +319,24 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) if (eNB->frame_parms.frame_type == FDD) { DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_10MHz_FDD_t; + harq_pid_value = ( ((proc->frame_tx * 10) + subframe) % 8 ); + + if (!(subframe&1)) // even subframe + dci_ndi_toggle_tmp = &(dci_ndi_toggle_even[harq_pid_value]); + else // odd subframe + dci_ndi_toggle_tmp = &(dci_ndi_toggle_odd[harq_pid_value]); + ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc; //computeRIV(50,10,3); ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC = 0; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = subframe % 5; + ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = harq_pid_value; ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; - //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28); - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = subframe / 5; + ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = (*dci_ndi_toggle_tmp); ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0; ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rah = 0; + (*dci_ndi_toggle_tmp) = ((*dci_ndi_toggle_tmp) + 1) & 1; + memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_10MHz_FDD_t)); - - /* - //user2 - DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_10MHz_TDD_t; - DCI_pdu->dci_alloc[1].L = 2; - DCI_pdu->dci_alloc[1].rnti = 0x1236; - DCI_pdu->dci_alloc[1].format = format1; - DCI_pdu->dci_alloc[1].ra_flag = 0; - - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC = 0; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->dai = 0; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1; - //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->proc[subframe].frame%1024)%28); - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = 1; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rah = 0; - memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_10MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_10MHz_TDD_t)); - */ } else { DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_10MHz_TDD_t; From f52a2c958360179e57b59d2c4fabd0ae4fb601a4 Mon Sep 17 00:00:00 2001 From: ROBERT Benoit Date: Mon, 5 Dec 2016 15:41:47 +0100 Subject: [PATCH 107/132] correct issue 147 : --phy-test mode : error msg " DL Received HarqReTx round=1 mcs=28 rballoc=8191 rv=0 " --- openair1/SCHED/phy_procedures_lte_eNb.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 7286154c65..3069afa763 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1105,7 +1105,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, int frame=proc->frame_tx; int subframe=proc->subframe_tx; // uint16_t input_buffer_length; - uint32_t i,aa; + uint32_t i,j,aa; uint8_t harq_pid; DCI_PDU *DCI_pdu; DCI_PDU DCI_pdu_tmp; @@ -1203,6 +1203,14 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, fill_dci_emos(DCI_pdu,eNB); #else fill_dci(DCI_pdu,eNB,proc); + // clear previous allocation information for all UEs + for (i=0; idlsch[i][0]){ + for (j=0; j<8; j++) + eNB->dlsch[i][0]->harq_processes[j]->round = 0; + } + } + #endif } From 41582eb340f0cdd8ac4d03e8f99ba2ca02752d8e Mon Sep 17 00:00:00 2001 From: Xiwen JIANG Date: Mon, 5 Dec 2016 17:56:58 +0100 Subject: [PATCH 108/132] fix compliation problems for unitary tests --- openair1/SIMULATION/LTE_PHY/mbmssim.c | 3 ++- openair1/SIMULATION/LTE_PHY/pbchsim.c | 2 +- openair1/SIMULATION/LTE_PHY/pdcchsim.c | 7 ++++--- openair1/SIMULATION/LTE_PHY/prachsim.c | 1 + openair1/SIMULATION/LTE_PHY/pucchsim.c | 1 + openair1/SIMULATION/LTE_PHY/ulsim.c | 2 +- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/openair1/SIMULATION/LTE_PHY/mbmssim.c b/openair1/SIMULATION/LTE_PHY/mbmssim.c index 65d9112c9d..7849dec1ab 100644 --- a/openair1/SIMULATION/LTE_PHY/mbmssim.c +++ b/openair1/SIMULATION/LTE_PHY/mbmssim.c @@ -238,6 +238,7 @@ int main(int argc, char **argv) n_tx=2; lte_param_init(n_tx, + n_tx, n_rx, transmission_mode, extended_prefix_flag, @@ -301,7 +302,7 @@ int main(int argc, char **argv) 0); // Create transport channel structures for 2 transport blocks (MIMO) - eNB->dlsch_MCH = new_eNB_dlsch(1,8,Nsoft,N_RB_DL,0,&eNB->lte_frame_parms); + eNB->dlsch_MCH = new_eNB_dlsch(1,8,Nsoft,N_RB_DL,0,&eNB->frame_parms); if (!eNB->dlsch_MCH) { printf("Can't get eNB dlsch structures\n"); diff --git a/openair1/SIMULATION/LTE_PHY/pbchsim.c b/openair1/SIMULATION/LTE_PHY/pbchsim.c index f696cc8da4..83906d7322 100644 --- a/openair1/SIMULATION/LTE_PHY/pbchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pbchsim.c @@ -325,7 +325,7 @@ int main(int argc, char **argv) if (transmission_mode>=2) n_tx=2; - lte_param_init(n_tx,n_rx,transmission_mode,extended_prefix_flag,frame_type,Nid_cell,3,N_RB_DL,0,osf,0); + lte_param_init(n_tx, n_tx,n_rx,transmission_mode,extended_prefix_flag,frame_type,Nid_cell,3,N_RB_DL,0,osf,0); eNB1 = malloc(sizeof(PHY_VARS_eNB)); eNB2 = malloc(sizeof(PHY_VARS_eNB)); diff --git a/openair1/SIMULATION/LTE_PHY/pdcchsim.c b/openair1/SIMULATION/LTE_PHY/pdcchsim.c index d8b096a8cd..04b9d304b3 100644 --- a/openair1/SIMULATION/LTE_PHY/pdcchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pdcchsim.c @@ -694,6 +694,7 @@ int main(int argc, char **argv) n_tx=2; lte_param_init(n_tx, + n_tx, n_rx, transmission_mode, extended_prefix_flag, @@ -737,7 +738,7 @@ int main(int argc, char **argv) subframe,NUMBER_OF_OFDM_CARRIERS, eNB->frame_parms.Ncp,eNB->frame_parms.samples_per_tti,nsymb); - eNB2UE = new_channel_desc_scm(eNB->frame_parms.nb_antennas_tx_eNB, + eNB2UE = new_channel_desc_scm(eNB->frame_parms.nb_antennas_tx, UE->frame_parms.nb_antennas_rx, channel_model, N_RB2sampling_rate(eNB->frame_parms.N_RB_DL), @@ -812,7 +813,7 @@ int main(int argc, char **argv) for (trial=0; trialcommon_vars.txdataF[eNb_id][aa][512*14*subframe],&eNB->common_vars.txdataF[eNb_id][aa][0]); - for (aa=0; aaframe_parms.nb_antennas_tx_eNB; aa++) { + for (aa=0; aaframe_parms.nb_antennas_tx; aa++) { memset(&eNB->common_vars.txdataF[eNb_id][aa][0],0,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX*sizeof(int32_t)); } @@ -958,7 +959,7 @@ int main(int argc, char **argv) tx_lev = 0; - for (aa=0; aalte_frame_parms.nb_antenna_ports_eNB; aa++) { + for (aa=0; aaframe_parms.nb_antenna_ports_eNB; aa++) { if (eNB->frame_parms.Ncp == 1) PHY_ofdm_mod(&eNB->common_vars.txdataF[eNb_id][aa][subframe*nsymb*eNB->frame_parms.ofdm_symbol_size], // input, &txdata[aa][subframe*eNB->frame_parms.samples_per_tti], // output diff --git a/openair1/SIMULATION/LTE_PHY/prachsim.c b/openair1/SIMULATION/LTE_PHY/prachsim.c index ad57d17507..7acc07528c 100644 --- a/openair1/SIMULATION/LTE_PHY/prachsim.c +++ b/openair1/SIMULATION/LTE_PHY/prachsim.c @@ -308,6 +308,7 @@ int main(int argc, char **argv) n_tx=2; lte_param_init(n_tx, + n_tx, n_rx, transmission_mode, extended_prefix_flag, diff --git a/openair1/SIMULATION/LTE_PHY/pucchsim.c b/openair1/SIMULATION/LTE_PHY/pucchsim.c index 843cd27a54..77bfcb18cf 100644 --- a/openair1/SIMULATION/LTE_PHY/pucchsim.c +++ b/openair1/SIMULATION/LTE_PHY/pucchsim.c @@ -296,6 +296,7 @@ int main(int argc, char **argv) n_tx=2; lte_param_init(n_tx, + n_tx, n_rx, transmission_mode, extended_prefix_flag, diff --git a/openair1/SIMULATION/LTE_PHY/ulsim.c b/openair1/SIMULATION/LTE_PHY/ulsim.c index 52d6b6b347..cf9e5aaa30 100644 --- a/openair1/SIMULATION/LTE_PHY/ulsim.c +++ b/openair1/SIMULATION/LTE_PHY/ulsim.c @@ -680,7 +680,7 @@ int main(int argc, char **argv) } // Create transport channel structures for 2 transport blocks (MIMO) for (i=0; i<2; i++) { - eNB->dlsch[0][i] = new_eNB_dlsch(1,8,1827072,N_RB_DL,0,eNB->frame_parms); + eNB->dlsch[0][i] = new_eNB_dlsch(1,8,1827072,N_RB_DL,0,&eNB->frame_parms); UE->dlsch[0][i] = new_ue_dlsch(1,8,1827072,MAX_TURBO_ITERATIONS,N_RB_DL,0); if (!eNB->dlsch[0][i]) { From 726a543abf90b99e5fd54ca30e9b39f61c406019 Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Thu, 24 Nov 2016 20:07:55 +0800 Subject: [PATCH 109/132] fixed missing a slot_fep() processing on the 1st OFDM symbol of the first DL subframe after UL, causing no SI-RNTI DCI detected --- openair1/SCHED/phy_procedures_lte_ue.c | 41 +++++++++++++++++++------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 5dc629b90b..91d5fefb66 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -3299,11 +3299,23 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin l2 = (ue->frame_parms.symbols_per_tti/2)-1; } - //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - // RX processing of symbols l=1...l2 (l=0 is done in last scheduling epoch) - //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - +#if 1 // 2016-11-24 wilson fixed missing slot_fep on 1st ofdm symbol of the first DL subframe after UL + int prev_subframe_rx = (subframe_rx - 1)<0? 9: (subframe_rx - 1); + if (subframe_select(&ue->frame_parms,prev_subframe_rx) != SF_DL) { + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // RX processing of symbols l=0...l2 + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + l=0; + } else { + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // RX processing of symbols l=1...l2 (l=0 is done in last scheduling epoch) + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + l=1; + } + for (; l<=l2; l++) { +#else for (l=1; l<=l2; l++) { +#endif if (abstraction_flag == 0) { start_meas(&ue->ofdm_demod_stats); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN); @@ -3424,13 +3436,20 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ue_measurement_procedures(l-1,ue,proc,eNB_id,abstraction_flag,mode); } // for l=1..l2 - // do first symbol of next subframe for channel estimation - slot_fep(ue, - 0, - (2+(subframe_rx<<1))%20, - ue->rx_offset, - 0, - 0); + +#if 1 // 2016-11-24 wilson fixed missing slot_fep on 1st ofdm symbol of the first DL subframe after UL + // do first symbol of next downlink subframe for channel estimation + int next_subframe_rx = (1+subframe_rx)%10; + if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL) +#endif + { + slot_fep(ue, + 0, + (next_subframe_rx<<1), + ue->rx_offset, + 0, + 0); + } } // not an S-subframe // run pbch procedures if subframe is 0 From ae253f45b25cf246cfdca085531c472e30537a3c Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Fri, 25 Nov 2016 18:49:02 +0800 Subject: [PATCH 110/132] added more logs to debug missing SI-RNTI DCIs --- openair1/PHY/LTE_TRANSPORT/dci.c | 11 ++++++-- targets/RT/USER/lte-ue.c | 46 ++++++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index 38cfc2c8c9..c27d156ad2 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -1126,6 +1126,9 @@ void pdcch_extract_rbs_dual(int32_t **rxdataF, int nushiftmod3 = frame_parms->nushift%3; symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol; +#ifdef DEBUG_DCI_DECODING + LOG_I(PHY, "extract_rbs_dual: symbol_mod %d\n",symbol_mod); +#endif for (aarx=0; aarxnb_antennas_rx; aarx++) { @@ -2679,11 +2682,15 @@ void dci_decoding_procedure0(LTE_UE_PDCCH **pdcch_vars, nCCE = get_nCCE(pdcch_vars[eNB_id]->num_pdcch_symbols,frame_parms,mi); - if (nCCE > get_nCCE(3,frame_parms,1)) + if (nCCE > get_nCCE(3,frame_parms,1)) { + LOG_D(PHY,"skip DCI decoding: nCCE=%d > get_nCCE(3,frame_parms,1)=%d\n", nCCE, get_nCCE(3,frame_parms,1)); return; + } - if (nCCEmode ) == 0) { hw_slot_offset = (UE->rx_offset<<1) / UE->frame_parms.samples_per_tti; - LOG_I( HW, "Got synch: hw_slot_offset %d\n", hw_slot_offset ); + LOG_I( HW, "Got synch: hw_slot_offset %d, carrier off %d Hz, rxgain %d (DL %u, UL %u), UE_scan_carrier %d\n", + hw_slot_offset, + freq_offset, + UE->rx_total_gain_dB, + downlink_frequency[0][0]+freq_offset, + downlink_frequency[0][0]+uplink_frequency_offset[0][0]+freq_offset, + UE->UE_scan_carrier ); + if (UE->UE_scan_carrier == 1) { UE->UE_scan_carrier = 0; @@ -710,10 +717,21 @@ static void *UE_thread_rxn_txnp4(void *arg) while (sync_var<0) pthread_cond_wait(&sync_cond, &sync_mutex); +#if 1 // 2016-11-23 wilson add pthread name to the logging +#define THREAD_NAME_LEN 16 + char threadname[THREAD_NAME_LEN]; + ret = pthread_getname_np(proc->pthread_rxtx, threadname, THREAD_NAME_LEN); + if (ret != 0) + { + perror("pthread_getname_np : "); + exit_fun("Error getting thread name"); + } +#endif + pthread_mutex_unlock(&sync_mutex); printf("unlocked sync_mutex, waiting (UE_thread_rxtx)\n"); - printf("Starting UE RXN_TXNP4 thread\n"); + printf("Starting UE RXN_TXNP4 thread (%s)\n", threadname); while (!oai_exit) { if (pthread_mutex_lock(&proc->mutex_rxtx) != 0) { @@ -739,10 +757,27 @@ static void *UE_thread_rxn_txnp4(void *arg) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_UE+(proc->subframe_rx&1), proc->frame_rx ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_UE+(proc->subframe_tx&1), proc->frame_tx ); - if ((subframe_select( &UE->frame_parms, proc->subframe_rx) == SF_DL) || - (UE->frame_parms.frame_type == FDD) || - (subframe_select( &UE->frame_parms, proc->subframe_rx ) == SF_S)) { + lte_subframe_t sf_type = subframe_select( &UE->frame_parms, proc->subframe_rx); + if ((sf_type == SF_DL) || + (UE->frame_parms.frame_type == FDD) || + (sf_type == SF_S)) { + if (UE->frame_parms.frame_type == TDD) { + LOG_D(PHY, "%s,TDD%d,%s: calling UE_RX\n", + threadname, + UE->frame_parms.tdd_config, + (sf_type==SF_DL? "SF_DL" : + (sf_type==SF_UL? "SF_UL" : + (sf_type==SF_S ? "SF_S" : "UNKNOWN_SF_TYPE")))); + } else { + LOG_D(PHY, "%s,%s,%s: calling UE_RX\n", + threadname, + (UE->frame_parms.frame_type==FDD? "FDD": + (UE->frame_parms.frame_type==TDD? "TDD":"UNKNOWN_DUPLEX_MODE")), + (sf_type==SF_DL? "SF_DL" : + (sf_type==SF_UL? "SF_UL" : + (sf_type==SF_S ? "SF_S" : "UNKNOWN_SF_TYPE")))); + } phy_procedures_UE_RX( UE, proc, 0, 0, UE->mode, no_relay, NULL ); } @@ -1122,6 +1157,7 @@ void *UE_thread(void *arg) { exit_fun("nothing to add"); return &UE_thread_retval; } + LOG_D(PHY, "firing up rxtx_thread[%d] at subframe %d\n", sf&1, sf); } else { LOG_E( PHY, "[SCHED][UE] UE RX thread busy (IC %d)!!\n", instance_cnt_rxtx); if (instance_cnt_rxtx > 2) { From e1b95332007859fb720d7ae9b0924962db85d3df Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Fri, 25 Nov 2016 18:56:08 +0800 Subject: [PATCH 111/132] enabled extra logs --- openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c | 4 ++-- openair1/PHY/LTE_TRANSPORT/dci.c | 10 +++++----- openair1/PHY/LTE_TRANSPORT/initial_sync.c | 2 +- openair1/PHY/LTE_TRANSPORT/pcfich.c | 6 +++--- openair1/SCHED/phy_procedures_lte_ue.c | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c index b7b36efa0b..c7fc5c4e7d 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c @@ -32,7 +32,7 @@ #define k1 ((long long int) 1000) #define k2 ((long long int) (1024-k1)) -//#define DEBUG_MEAS +#define DEBUG_MEAS #ifdef USER_MODE void print_shorts(char *s,short *x) @@ -287,7 +287,7 @@ void ue_rrc_measurements(PHY_VARS_UE *ue, for (l=0,nu=0; l<=(4-ue->frame_parms.Ncp); l+=(4-ue->frame_parms.Ncp),nu=3) { k = (nu + nushift)%6; #ifdef DEBUG_MEAS - LOG_I(PHY,"[UE %d] Frame %d subframe %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, nushift %d, eNB_offset %d, k %d, l %d)\n",ue->Mod_id,ue->proc.proc_rxtx[subframe&1].frame_rx,subframe,Nid_cell,nushift, + LOG_D(PHY,"[UE %d] Frame %d subframe %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, nushift %d, eNB_offset %d, k %d, l %d)\n",ue->Mod_id,ue->proc.proc_rxtx[subframe&1].frame_rx,subframe,Nid_cell,nushift, eNB_offset,k,l); #endif diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index c27d156ad2..9554da33db 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -403,7 +403,7 @@ void pdcch_demapping(uint16_t *llr,uint16_t *wbar,LTE_DL_FRAME_PARMS *frame_parm for (i=0; i<4; i++) { wbar[mprime] = llr[tti_offset0+i]; #ifdef DEBUG_DCI_DECODING - LOG_I(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset0+i,symbol_offset,re_offset0,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); + LOG_D(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset0+i,symbol_offset,re_offset0,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); #endif mprime++; re_offset0++; @@ -419,7 +419,7 @@ void pdcch_demapping(uint16_t *llr,uint16_t *wbar,LTE_DL_FRAME_PARMS *frame_parm for (i=0; i<4; i++) { wbar[mprime] = llr[tti_offset+i]; #ifdef DEBUG_DCI_DECODING - LOG_I(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset+i,symbol_offset,re_offset+i,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); + LOG_D(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset+i,symbol_offset,re_offset+i,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); #endif mprime++; } @@ -2473,16 +2473,16 @@ void dci_decoding(uint8_t DCI_LENGTH, #ifdef DEBUG_DCI_DECODING for (i=0; i<16+DCI_LENGTH; i++) - LOG_I(PHY," DCI %d : (%d,%d,%d)\n",i,*(d_rx+96+(3*i)),*(d_rx+97+(3*i)),*(d_rx+98+(3*i))); + LOG_D(PHY," DCI %d : (%d,%d,%d)\n",i,*(d_rx+96+(3*i)),*(d_rx+97+(3*i)),*(d_rx+98+(3*i))); #endif memset(decoded_output,0,2+((16+DCI_LENGTH)>>3)); #ifdef DEBUG_DCI_DECODING - printf("Before Viterbi\n"); + LOG_D(PHY, "Before Viterbi\n"); for (i=0; i<16+DCI_LENGTH; i++) - printf("%d : (%d,%d,%d)\n",i,*(d_rx+96+(3*i)),*(d_rx+97+(3*i)),*(d_rx+98+(3*i))); + LOG_D(PHY, "%d : (%d,%d,%d)\n",i,*(d_rx+96+(3*i)),*(d_rx+97+(3*i)),*(d_rx+98+(3*i))); #endif //debug_printf("Doing DCI Viterbi \n"); diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c index 663978e92c..7df08a8382 100644 --- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c +++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c @@ -41,7 +41,7 @@ #include "common_lib.h" extern openair0_config_t openair0_cfg[]; -//#define DEBUG_INITIAL_SYNCH +#define DEBUG_INITIAL_SYNCH int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) { diff --git a/openair1/PHY/LTE_TRANSPORT/pcfich.c b/openair1/PHY/LTE_TRANSPORT/pcfich.c index 8af540eea1..1d73d020a0 100644 --- a/openair1/PHY/LTE_TRANSPORT/pcfich.c +++ b/openair1/PHY/LTE_TRANSPORT/pcfich.c @@ -34,7 +34,7 @@ //uint16_t pcfich_reg[4]; //uint8_t pcfich_first_reg_idx = 0; -//#define DEBUG_PCFICH +#define DEBUG_PCFICH void generate_pcfich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms) { @@ -301,7 +301,7 @@ uint8_t rx_pcfich(LTE_DL_FRAME_PARMS *frame_parms, } #ifdef DEBUG_PCFICH - msg("metric %d : %d\n",i,metric); + LOG_I(PHY, "metric %d : %d\n",i,metric); #endif if (metric > old_metric) { @@ -311,7 +311,7 @@ uint8_t rx_pcfich(LTE_DL_FRAME_PARMS *frame_parms, } #ifdef DEBUG_PCFICH - msg("[PHY] PCFICH detected for %d PDCCH symbols\n",num_pdcch_symbols); + LOG_I(PHY, "PCFICH detected for %d PDCCH symbols\n",num_pdcch_symbols); #endif return(num_pdcch_symbols); } diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 91d5fefb66..cc3f5e6e10 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -3279,7 +3279,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin #ifdef DEBUG_PHY_PROC - LOG_D(PHY,"[%s %d] Frame %d subframe %d: Doing phy_procedures_UE_RX (%d)\n", + LOG_I(PHY,"[%s %d] Frame %d subframe %d: Doing phy_procedures_UE_RX (-)\n", (r_type == multicast_relay) ? "RN/UE" : "UE", ue->Mod_id,frame_rx, subframe_rx); #endif From 81daba1931c308e254b65f4735a1c04bf115c599 Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Fri, 25 Nov 2016 18:57:33 +0800 Subject: [PATCH 112/132] Revert "enabled extra logs" This reverts commit 5466562b16d70f2729f6103e1c0d3ee619470191. --- openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c | 4 ++-- openair1/PHY/LTE_TRANSPORT/dci.c | 10 +++++----- openair1/PHY/LTE_TRANSPORT/initial_sync.c | 2 +- openair1/PHY/LTE_TRANSPORT/pcfich.c | 6 +++--- openair1/SCHED/phy_procedures_lte_ue.c | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c index c7fc5c4e7d..b7b36efa0b 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c @@ -32,7 +32,7 @@ #define k1 ((long long int) 1000) #define k2 ((long long int) (1024-k1)) -#define DEBUG_MEAS +//#define DEBUG_MEAS #ifdef USER_MODE void print_shorts(char *s,short *x) @@ -287,7 +287,7 @@ void ue_rrc_measurements(PHY_VARS_UE *ue, for (l=0,nu=0; l<=(4-ue->frame_parms.Ncp); l+=(4-ue->frame_parms.Ncp),nu=3) { k = (nu + nushift)%6; #ifdef DEBUG_MEAS - LOG_D(PHY,"[UE %d] Frame %d subframe %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, nushift %d, eNB_offset %d, k %d, l %d)\n",ue->Mod_id,ue->proc.proc_rxtx[subframe&1].frame_rx,subframe,Nid_cell,nushift, + LOG_I(PHY,"[UE %d] Frame %d subframe %d Doing ue_rrc_measurements rsrp/rssi (Nid_cell %d, nushift %d, eNB_offset %d, k %d, l %d)\n",ue->Mod_id,ue->proc.proc_rxtx[subframe&1].frame_rx,subframe,Nid_cell,nushift, eNB_offset,k,l); #endif diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index 9554da33db..c27d156ad2 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -403,7 +403,7 @@ void pdcch_demapping(uint16_t *llr,uint16_t *wbar,LTE_DL_FRAME_PARMS *frame_parm for (i=0; i<4; i++) { wbar[mprime] = llr[tti_offset0+i]; #ifdef DEBUG_DCI_DECODING - LOG_D(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset0+i,symbol_offset,re_offset0,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); + LOG_I(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset0+i,symbol_offset,re_offset0,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); #endif mprime++; re_offset0++; @@ -419,7 +419,7 @@ void pdcch_demapping(uint16_t *llr,uint16_t *wbar,LTE_DL_FRAME_PARMS *frame_parm for (i=0; i<4; i++) { wbar[mprime] = llr[tti_offset+i]; #ifdef DEBUG_DCI_DECODING - LOG_D(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset+i,symbol_offset,re_offset+i,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); + LOG_I(PHY,"PDCCH demapping mprime %d.%d <= llr %d (symbol %d re %d) -> (%d,%d)\n",mprime/4,i,tti_offset+i,symbol_offset,re_offset+i,*(char*)&wbar[mprime],*(1+(char*)&wbar[mprime])); #endif mprime++; } @@ -2473,16 +2473,16 @@ void dci_decoding(uint8_t DCI_LENGTH, #ifdef DEBUG_DCI_DECODING for (i=0; i<16+DCI_LENGTH; i++) - LOG_D(PHY," DCI %d : (%d,%d,%d)\n",i,*(d_rx+96+(3*i)),*(d_rx+97+(3*i)),*(d_rx+98+(3*i))); + LOG_I(PHY," DCI %d : (%d,%d,%d)\n",i,*(d_rx+96+(3*i)),*(d_rx+97+(3*i)),*(d_rx+98+(3*i))); #endif memset(decoded_output,0,2+((16+DCI_LENGTH)>>3)); #ifdef DEBUG_DCI_DECODING - LOG_D(PHY, "Before Viterbi\n"); + printf("Before Viterbi\n"); for (i=0; i<16+DCI_LENGTH; i++) - LOG_D(PHY, "%d : (%d,%d,%d)\n",i,*(d_rx+96+(3*i)),*(d_rx+97+(3*i)),*(d_rx+98+(3*i))); + printf("%d : (%d,%d,%d)\n",i,*(d_rx+96+(3*i)),*(d_rx+97+(3*i)),*(d_rx+98+(3*i))); #endif //debug_printf("Doing DCI Viterbi \n"); diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c index 7df08a8382..663978e92c 100644 --- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c +++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c @@ -41,7 +41,7 @@ #include "common_lib.h" extern openair0_config_t openair0_cfg[]; -#define DEBUG_INITIAL_SYNCH +//#define DEBUG_INITIAL_SYNCH int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) { diff --git a/openair1/PHY/LTE_TRANSPORT/pcfich.c b/openair1/PHY/LTE_TRANSPORT/pcfich.c index 1d73d020a0..8af540eea1 100644 --- a/openair1/PHY/LTE_TRANSPORT/pcfich.c +++ b/openair1/PHY/LTE_TRANSPORT/pcfich.c @@ -34,7 +34,7 @@ //uint16_t pcfich_reg[4]; //uint8_t pcfich_first_reg_idx = 0; -#define DEBUG_PCFICH +//#define DEBUG_PCFICH void generate_pcfich_reg_mapping(LTE_DL_FRAME_PARMS *frame_parms) { @@ -301,7 +301,7 @@ uint8_t rx_pcfich(LTE_DL_FRAME_PARMS *frame_parms, } #ifdef DEBUG_PCFICH - LOG_I(PHY, "metric %d : %d\n",i,metric); + msg("metric %d : %d\n",i,metric); #endif if (metric > old_metric) { @@ -311,7 +311,7 @@ uint8_t rx_pcfich(LTE_DL_FRAME_PARMS *frame_parms, } #ifdef DEBUG_PCFICH - LOG_I(PHY, "PCFICH detected for %d PDCCH symbols\n",num_pdcch_symbols); + msg("[PHY] PCFICH detected for %d PDCCH symbols\n",num_pdcch_symbols); #endif return(num_pdcch_symbols); } diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index cc3f5e6e10..91d5fefb66 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -3279,7 +3279,7 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin #ifdef DEBUG_PHY_PROC - LOG_I(PHY,"[%s %d] Frame %d subframe %d: Doing phy_procedures_UE_RX (-)\n", + LOG_D(PHY,"[%s %d] Frame %d subframe %d: Doing phy_procedures_UE_RX (%d)\n", (r_type == multicast_relay) ? "RN/UE" : "UE", ue->Mod_id,frame_rx, subframe_rx); #endif From 4a0e4b5e146bd882de0f1938734fb5ba91f8af57 Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Fri, 2 Dec 2016 18:35:19 +0800 Subject: [PATCH 113/132] fixing thread busy crash: add more VCD logs to debug timing issues --- openair1/PHY/LTE_TRANSPORT/rar_tools.c | 6 ++++ openair1/SCHED/phy_procedures_lte_ue.c | 17 +++++++++- openair2/UTIL/LOG/vcd_signal_dumper.c | 24 ++++++++++++++ openair2/UTIL/LOG/vcd_signal_dumper.h | 24 ++++++++++++++ targets/RT/USER/lte-ue.c | 43 +++++++++++++++++--------- 5 files changed, 98 insertions(+), 16 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/rar_tools.c b/openair1/PHY/LTE_TRANSPORT/rar_tools.c index f86c009543..60fa52df16 100644 --- a/openair1/PHY/LTE_TRANSPORT/rar_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/rar_tools.c @@ -34,6 +34,7 @@ #include "SCHED/extern.h" #include "LAYER2/MAC/defs.h" #include "SCHED/defs.h" +#include "UTIL/LOG/vcd_signal_dumper.h" #include "assertions.h" @@ -171,6 +172,8 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *ue, unsigned char eNB_id ) { + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_RAR,VCD_FUNCTION_IN); + // RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *)rar_pdu; uint8_t transmission_mode = ue->transmission_mode[eNB_id]; unsigned char *rar_pdu = ue->dlsch_ra[eNB_id]->harq_processes[0]->b; @@ -315,6 +318,9 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *ue, msg("ulsch ra (UE): TPC %d\n",ulsch->harq_processes[harq_pid]->TPC); msg("ulsch ra (UE): O %d\n",ulsch->O); msg("ulsch ra (UE): ORI %d\n",ulsch->O_RI); + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_RAR,VCD_FUNCTION_OUT); + //#endif return(0); } diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 5dc629b90b..a4ef075726 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -942,6 +942,8 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc) { int dummy_tx_buffer[3840*4] __attribute__((aligned(16))); #endif + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_IN); + start_meas(&ue->ofdm_mod_stats); nsymb = (frame_parms->Ncp == 0) ? 14 : 12; @@ -1043,7 +1045,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc) { stop_meas(&ue->ofdm_mod_stats); - + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON,VCD_FUNCTION_OUT); } @@ -1054,6 +1056,8 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin int prach_power; PRACH_RESOURCES_t prach_resources_local; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH, VCD_FUNCTION_IN); + ue->generate_prach=0; if (ue->mac_enabled==0){ @@ -1170,6 +1174,8 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin if (ue->prach_cnt==3) ue->generate_prach=0; + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH, VCD_FUNCTION_OUT); } void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag) { @@ -1189,6 +1195,8 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB uint8_t ulsch_input_buffer[5477] __attribute__ ((aligned(32))); uint8_t access_mode; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC,VCD_FUNCTION_IN); + // get harq_pid from subframe relationship harq_pid = subframe2harq_pid(&ue->frame_parms, frame_tx, @@ -1455,6 +1463,9 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB ue->sr[subframe_tx]=0; } } // subframe_scheduling_flag==1 + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC,VCD_FUNCTION_OUT); + } void ue_srs_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8_t abstraction_flag) @@ -1552,6 +1563,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin int tx_amp; int8_t Po_PUCCH; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH,VCD_FUNCTION_IN); + SOUNDINGRS_UL_CONFIG_DEDICATED *pSoundingrs_ul_config_dedicated=&ue->soundingrs_ul_config_dedicated[eNB_id]; // 36.213 8.2 @@ -1742,6 +1755,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin } } // SR_Payload==1 + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH,VCD_FUNCTION_OUT); + // PUCCH 2x if (ue->generate_ul_signal[eNB_id] == 0) { // we have not generated ACK/NAK/SR in this subframe diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c index d367ec7766..b65839cd90 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.c +++ b/openair2/UTIL/LOG/vcd_signal_dumper.c @@ -174,6 +174,10 @@ const char* eurecomVariablesNames[] = { "ue0_SFN5", "ue0_SFN6", "ue0_SFN7", +#if 1 // 2016-11-29 wilson debug thread busy crash + "ue0_trx_read_ns", + "ue0_trx_write_ns", +#endif }; const char* eurecomFunctionsNames[] = { @@ -188,6 +192,19 @@ const char* eurecomFunctionsNames[] = { "ue_thread_synch", "ue_thread_rxtx0", "ue_thread_rxtx1", +#if 1 // 2016-11-29 wilson debug thread busy crash + "trx_read_sf9", + "trx_write_sf9", + "ue_signal_cond_rxtx", + "ue_wait_cond_rxtx0", + "ue_wait_cond_rxtx1", + "ue_lock_mutex_rxtx_for_cond_wait0", + "ue_lock_mutex_rxtx_for_cond_wait1", + "ue_lock_mutex_rxtx_for_cnt_decrement0", + "ue_lock_mutex_rxtx_for_cnt_decrement1", + "ue_lock_mutex_rxtx_for_cnt_increment0", + "ue_lock_mutex_rxtx_for_cnt_increment1", +#endif /* RRH signals */ "eNB_tx", @@ -218,6 +235,13 @@ const char* eurecomFunctionsNames[] = { "phy_eNB_slot_fep", "phy_procedures_ue_tx", "phy_procedures_ue_rx", +#if 1 // 2016-12-01 wilson debug long TX runtime in special subframe + "phy_procedures_ue_tx_ulsch_uespec", + "phy_procedures_ue_tx_pucch", + "phy_procedures_ue_tx_ulsch_common", + "phy_procedures_ue_tx_prach", + "phy_procedures_ue_tx_ulsch_rar", +#endif "phy_procedures_eNB_lte", "phy_procedures_UE_lte", "pdsch_thread", diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h index 1e03e95002..f90775d824 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.h +++ b/openair2/UTIL/LOG/vcd_signal_dumper.h @@ -146,6 +146,10 @@ typedef enum { VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN5, VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN6, VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN7, +#if 1 // 2016-11-29 wilson debug thread busy crash + VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, + VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS, +#endif VCD_SIGNAL_DUMPER_VARIABLES_LAST, VCD_SIGNAL_DUMPER_VARIABLES_END = VCD_SIGNAL_DUMPER_VARIABLES_LAST, } vcd_signal_dump_variables; @@ -162,6 +166,19 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_SYNCH, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX1, +#if 1 // 2016-11-29 wilson debug thread busy crash + VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, + VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_SF9, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX0, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX1, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0, + VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1, +#endif /* RRH signals */ VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX, @@ -192,6 +209,13 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, +#if 1 // 2016-12-01 wilson debug long TX runtime in special subframe + VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC, + VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH, + VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON, + VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH, + VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_RAR, +#endif VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE, VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_THREAD, diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 8e11a82638..395d767ad8 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -716,6 +716,7 @@ static void *UE_thread_rxn_txnp4(void *arg) printf("Starting UE RXN_TXNP4 thread\n"); while (!oai_exit) { + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0+(proc->subframe_rx&1), 1 ); if (pthread_mutex_lock(&proc->mutex_rxtx) != 0) { LOG_E( PHY, "[SCHED][UE] error locking mutex for UE RXTX\n" ); exit_fun("nothing to add"); @@ -723,15 +724,18 @@ static void *UE_thread_rxn_txnp4(void *arg) } while (proc->instance_cnt_rxtx < 0) { + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX0+(proc->subframe_rx&1), 1 ); // most of the time, the thread is waiting here pthread_cond_wait( &proc->cond_rxtx, &proc->mutex_rxtx ); } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_WAIT_COND_RXTX0+(proc->subframe_rx&1), 0 ); if (pthread_mutex_unlock(&proc->mutex_rxtx) != 0) { LOG_E( PHY, "[SCHED][UE] error unlocking mutex for UE RXn_TXnp4\n" ); exit_fun("nothing to add"); return &UE_thread_rxtx_retval; } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0+(proc->subframe_rx&1), 0 ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0+(proc->subframe_rx&1), 1 ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_UE+(proc->subframe_rx&1), proc->subframe_rx ); @@ -782,6 +786,7 @@ static void *UE_thread_rxn_txnp4(void *arg) VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0+(proc->subframe_rx&1), 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0+(proc->subframe_rx&1), 1 ); if (pthread_mutex_lock(&proc->mutex_rxtx) != 0) { LOG_E( PHY, "[SCHED][UE] error locking mutex for UE RXTX\n" ); exit_fun("noting to add"); @@ -796,6 +801,7 @@ static void *UE_thread_rxn_txnp4(void *arg) exit_fun("noting to add"); return &UE_thread_rxtx_retval; } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0+(proc->subframe_rx&1), 0 ); } // thread finished @@ -1013,20 +1019,22 @@ void *UE_thread(void *arg) { for (i=0; iframe_parms.nb_antennas_rx; i++) rxp[i] = (void*)&rxdata[i][UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0+(sf*UE->frame_parms.samples_per_tti)]; // grab signal for subframe - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 1 ); if (UE->mode != loop_through_memory) { if (sf<9) { + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 1 ); rxs = UE->rfdevice.trx_read_func(&UE->rfdevice, ×tamp, rxp, UE->frame_parms.samples_per_tti, UE->frame_parms.nb_antennas_rx); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 ); - // prepare tx buffer pointers + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs ); + // prepare tx buffer pointers for (i=0; iframe_parms.nb_antennas_tx; i++) txp[i] = (void*)&UE->common_vars.txdata[i][((sf+2)%10)*UE->frame_parms.samples_per_tti]; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 ); txs = UE->rfdevice.trx_write_func(&UE->rfdevice, timestamp+ (2*UE->frame_parms.samples_per_tti) - @@ -1036,27 +1044,25 @@ void *UE_thread(void *arg) { UE->frame_parms.samples_per_tti, UE->frame_parms.nb_antennas_tx, 1); - if (txs != UE->frame_parms.samples_per_tti) { - LOG_E(PHY,"TX : Timeout (sent %d/%d)\n",txs, UE->frame_parms.samples_per_tti); - exit_fun( "problem transmitting samples" ); - } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 ); - + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS, rxs ); } else { + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 1 ); rxs = UE->rfdevice.trx_read_func(&UE->rfdevice, ×tamp, rxp, UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0, UE->frame_parms.nb_antennas_rx); - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 0 ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs ); + // prepare tx buffer pointers - for (i=0; iframe_parms.nb_antennas_tx; i++) txp[i] = (void*)&UE->common_vars.txdata[i][((sf+2)%10)*UE->frame_parms.samples_per_tti]; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_SF9, 1 ); txs = UE->rfdevice.trx_write_func(&UE->rfdevice, timestamp+ (2*UE->frame_parms.samples_per_tti) - @@ -1066,25 +1072,29 @@ void *UE_thread(void *arg) { UE->frame_parms.samples_per_tti - rx_off_diff, UE->frame_parms.nb_antennas_tx, 1); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_SF9, 0 ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS, rxs ); if (txs != UE->frame_parms.samples_per_tti - rx_off_diff) { LOG_E(PHY,"TX : Timeout (sent %d/%d)\n",txs, UE->frame_parms.samples_per_tti-rx_off_diff); exit_fun( "problem transmitting samples" ); } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 ); + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 1 ); // read in first symbol of next frame and adjust for timing drift rxs = UE->rfdevice.trx_read_func(&UE->rfdevice, ×tamp1, (void**)rxdata, - UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0 - rx_off_diff, + UE->frame_parms.ofdm_symbol_size + UE->frame_parms.nb_prefix_samples0 - rx_off_diff, UE->frame_parms.nb_antennas_rx); - rx_off_diff = 0; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 0 ); + VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs ); + rx_off_diff = 0; } } - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 ); // operate on thread sf mod 2 UE_rxtx_proc_t *proc = &UE->proc.proc_rxtx[sf&1]; + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0+(proc->subframe_rx&1), 1 ); // lock mutex if (pthread_mutex_lock(&proc->mutex_rxtx) != 0) { LOG_E( PHY, "[SCHED][UE] error locking mutex for UE RX\n" ); @@ -1114,14 +1124,17 @@ void *UE_thread(void *arg) { exit_fun("nothing to add"); return &UE_thread_retval; } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0+(proc->subframe_rx&1), 0 ); if (instance_cnt_rxtx == 0) { + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX, 1 ); if (pthread_cond_signal(&proc->cond_rxtx) != 0) { LOG_E( PHY, "[SCHED][UE] ERROR pthread_cond_signal for UE RX thread\n" ); exit_fun("nothing to add"); return &UE_thread_retval; } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX, 0 ); } else { LOG_E( PHY, "[SCHED][UE] UE RX thread busy (IC %d)!!\n", instance_cnt_rxtx); if (instance_cnt_rxtx > 2) { From 8daa6897e9a0d4fced1a62d3556ccec4932b1982 Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Fri, 2 Dec 2016 18:37:34 +0800 Subject: [PATCH 114/132] fixing thread busy crash: add more error checking to catch timing issues --- openair1/SCHED/phy_procedures_lte_ue.c | 4 +-- targets/RT/USER/lte-ue.c | 37 ++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index a4ef075726..98168926c2 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -1225,8 +1225,8 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB } else { if (harq_pid==255) { - LOG_E(PHY,"[UE%d] Frame %d ulsch_decoding.c: FATAL ERROR: illegal harq_pid, returning\n", - Mod_id,frame_tx); + LOG_E(PHY,"[UE%d] Frame %d subframe %d ulsch_decoding.c: FATAL ERROR: illegal harq_pid, returning\n", + Mod_id,frame_tx, subframe_tx); mac_xface->macphy_exit("Error in ulsch_decoding"); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT); stop_meas(&ue->phy_proc_tx); diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 395d767ad8..14f841df4b 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -924,10 +924,11 @@ void *UE_thread(void *arg) { rxp, UE->frame_parms.samples_per_tti*10, UE->frame_parms.nb_antennas_rx); - + if (rxs!=UE->frame_parms.samples_per_tti*10) { - exit_fun("problem in rx"); + LOG_E(PHY, "problem in rx 1! want #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti*10, rxs); + exit_fun("problem in rx 1"); return &UE_thread_retval; } } @@ -960,7 +961,8 @@ void *UE_thread(void *arg) { UE->frame_parms.nb_antennas_rx); if (rxs!=UE->frame_parms.samples_per_tti){ - exit_fun("problem in rx"); + LOG_E(PHY, "problem in rx 2! want #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti, rxs); + exit_fun("problem in rx 2"); return &UE_thread_retval; } @@ -982,7 +984,8 @@ void *UE_thread(void *arg) { UE->rx_offset, UE->frame_parms.nb_antennas_rx); if (rxs != UE->rx_offset) { - exit_fun("problem in rx"); + LOG_E(PHY, "problem in rx 3! want #samples=%d but got only %d!\n", UE->rx_offset, rxs); + exit_fun("problem in rx 3!"); return &UE_thread_retval; } } @@ -996,6 +999,11 @@ void *UE_thread(void *arg) { (void**)rxdata, UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0, UE->frame_parms.nb_antennas_rx); + if (rxs != (UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0)) { + LOG_E(PHY, "problem in rx 4! want #samples=%d but got only %d!\n", UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0, rxs); + exit_fun("problem in rx 4!"); + return &UE_thread_retval; + } slot_fep(UE, 0, 0, @@ -1029,6 +1037,11 @@ void *UE_thread(void *arg) { UE->frame_parms.nb_antennas_rx); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs ); + if (rxs != UE->frame_parms.samples_per_tti) { + LOG_E(PHY, "problem in rx 5! want #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti, rxs); + exit_fun("problem in rx 5!"); + return &UE_thread_retval; + } // prepare tx buffer pointers for (i=0; iframe_parms.nb_antennas_tx; i++) @@ -1046,6 +1059,10 @@ void *UE_thread(void *arg) { 1); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS, rxs ); + if (txs != UE->frame_parms.samples_per_tti) { + LOG_E(PHY,"TX : Timeout (sent %d/%d)\n",txs, UE->frame_parms.samples_per_tti); + exit_fun( "problem transmitting samples" ); + } } else { @@ -1057,6 +1074,11 @@ void *UE_thread(void *arg) { UE->frame_parms.nb_antennas_rx); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 0 ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs ); + if (rxs != (UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0)) { + LOG_E(PHY, "problem in rx 6! want #samples=%d but got only %d!\n", UE->frame_parms.samples_per_tti-UE->frame_parms.ofdm_symbol_size-UE->frame_parms.nb_prefix_samples0, rxs); + exit_fun("problem in rx 6!"); + return &UE_thread_retval; + } // prepare tx buffer pointers for (i=0; iframe_parms.nb_antennas_tx; i++) @@ -1088,7 +1110,12 @@ void *UE_thread(void *arg) { UE->frame_parms.nb_antennas_rx); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, 0 ); VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, rxs ); - rx_off_diff = 0; + if (rxs != (UE->frame_parms.ofdm_symbol_size + UE->frame_parms.nb_prefix_samples0 - rx_off_diff)) { + LOG_E(PHY, "problem in rx 7! want #samples=%d but got only %d! rx_off_diff=%d\n", UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0 - rx_off_diff, rxs, rx_off_diff); + exit_fun("problem in rx 7!"); + return &UE_thread_retval; + } + rx_off_diff = 0; } } // operate on thread sf mod 2 From 675e0b10cbc1e595b33982f3eb1ab59ff44d632c Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Fri, 2 Dec 2016 18:40:24 +0800 Subject: [PATCH 115/132] fixing thread busy crash: fixed incorrect processing of special-subframe TX as a normal TX --- targets/RT/USER/lte-ue.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 14f841df4b..b78bf36ed7 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -775,14 +775,21 @@ 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) || - (subframe_select( &UE->frame_parms, proc->subframe_tx ) == SF_S)) { + (UE->frame_parms.frame_type == FDD) ) { if (UE->mode != loop_through_memory) { phy_procedures_UE_TX(UE,proc,0,0,UE->mode,no_relay); } } + 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,no_relay); + } + } + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0+(proc->subframe_rx&1), 0 ); From 086520f50ec75ce9aca49cc6bd324df6628453f9 Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Fri, 25 Nov 2016 18:58:21 +0800 Subject: [PATCH 116/132] clean up changes for change submission issue #42 --- targets/RT/USER/lte-ue.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index a35c0e59e3..3caaac7b7c 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -717,7 +717,6 @@ static void *UE_thread_rxn_txnp4(void *arg) while (sync_var<0) pthread_cond_wait(&sync_cond, &sync_mutex); -#if 1 // 2016-11-23 wilson add pthread name to the logging #define THREAD_NAME_LEN 16 char threadname[THREAD_NAME_LEN]; ret = pthread_getname_np(proc->pthread_rxtx, threadname, THREAD_NAME_LEN); @@ -726,7 +725,6 @@ static void *UE_thread_rxn_txnp4(void *arg) perror("pthread_getname_np : "); exit_fun("Error getting thread name"); } -#endif pthread_mutex_unlock(&sync_mutex); printf("unlocked sync_mutex, waiting (UE_thread_rxtx)\n"); From 6c6d20b622517552448d824649c373d305ff148b Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Tue, 6 Dec 2016 21:10:53 +0800 Subject: [PATCH 117/132] added logging to debug PRACH --- openair1/PHY/LTE_TRANSPORT/prach.c | 7 +++++++ openair1/SCHED/phy_procedures_lte_ue.c | 13 +++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c index d9f5434cf5..33780a7def 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach.c +++ b/openair1/PHY/LTE_TRANSPORT/prach.c @@ -629,6 +629,13 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1 #if defined(EXMIMO) || defined(OAI_USRP) prach_start = (ue->rx_offset+subframe*ue->frame_parms.samples_per_tti-ue->hw_timing_advance-ue->N_TA_offset); +#ifdef PRACH_DEBUG + LOG_I(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id, + prach_start, + ue->rx_offset, + ue->hw_timing_advance, + ue->N_TA_offset); +#endif if (prach_start<0) prach_start+=(ue->frame_parms.samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME); diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 5dc629b90b..f0811476eb 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -1142,14 +1142,15 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin } else { UE_transport_info[ue->Mod_id][ue->CC_id].cntl.prach_flag=1; UE_transport_info[ue->Mod_id][ue->CC_id].cntl.prach_id=ue->prach_resources[eNB_id]->ra_PreambleIndex; - if (ue->mac_enabled==1){ - mac_xface->Msg1_transmitted(ue->Mod_id, - ue->CC_id, - frame_tx, - eNB_id); - } } + if (ue->mac_enabled==1){ + mac_xface->Msg1_transmitted(ue->Mod_id, + ue->CC_id, + frame_tx, + eNB_id); + } + LOG_D(PHY,"[UE %d][RAPROC] Frame %d, subframe %d: Generating PRACH (eNB %d) preamble index %d for UL, TX power %d dBm (PL %d dB), l3msg \n", ue->Mod_id,frame_tx,subframe_tx,eNB_id, ue->prach_resources[eNB_id]->ra_PreambleIndex, From 53777043c338e7a1a9e107078d2f2be4698c54ad Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Tue, 6 Dec 2016 21:10:30 +0800 Subject: [PATCH 118/132] fixed PRACH TA default value in TDD mode see issue #43 --- targets/RT/USER/lte-softmodem.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 9f98aaada1..e28f70a8c9 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -1594,8 +1594,16 @@ int main( int argc, char **argv ) UE[CC_id]->rx_total_gain_dB = (int)rx_gain[CC_id][0] + rx_gain_off; UE[CC_id]->tx_power_max_dBm = tx_max_power[CC_id]; - UE[CC_id]->N_TA_offset = 0; - + if (UE[CC_id]->frame_parms.frame_type == TDD) { + if (UE[CC_id]->frame_parms.N_RB_DL == 100) + UE[CC_id]->N_TA_offset = 624; + else if (UE[CC_id]->frame_parms.N_RB_DL == 50) + UE[CC_id]->N_TA_offset = 624/2; + else if (UE[CC_id]->frame_parms.N_RB_DL == 25) + UE[CC_id]->N_TA_offset = 624/4; + } else { + UE[CC_id]->N_TA_offset = 0; + } } // printf("tx_max_power = %d -> amp %d\n",tx_max_power,get_tx_amp(tx_max_poHwer,tx_max_power)); From 488b84cb4632fc081a4426028542a057ed30352e Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Fri, 2 Dec 2016 18:41:50 +0800 Subject: [PATCH 119/132] fixing thread busy crash: disabled timing consuming NAS logs see issue #44 --- openair3/NAS/COMMON/IES/EsmMessageContainer.c | 2 +- openair3/NAS/COMMON/UTIL/TLVDecoder.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openair3/NAS/COMMON/IES/EsmMessageContainer.c b/openair3/NAS/COMMON/IES/EsmMessageContainer.c index 1a7f88d299..a223f36820 100644 --- a/openair3/NAS/COMMON/IES/EsmMessageContainer.c +++ b/openair3/NAS/COMMON/IES/EsmMessageContainer.c @@ -28,7 +28,7 @@ #include "EsmMessageContainer.h" #include "nas_log.h" -#define NAS_DEBUG 1 +//#define NAS_DEBUG 1 int decode_esm_message_container(EsmMessageContainer *esmmessagecontainer, uint8_t iei, uint8_t *buffer, uint32_t len) { diff --git a/openair3/NAS/COMMON/UTIL/TLVDecoder.h b/openair3/NAS/COMMON/UTIL/TLVDecoder.h index 801ab77c8d..37834c5660 100644 --- a/openair3/NAS/COMMON/UTIL/TLVDecoder.h +++ b/openair3/NAS/COMMON/UTIL/TLVDecoder.h @@ -26,7 +26,7 @@ #include "nas_log.h" #ifndef NAS_DEBUG -# define NAS_DEBUG 1 +//# define NAS_DEBUG 1 #endif #define DECODE_U8(bUFFER, vALUE, sIZE) \ From 4041a661fc7f86eb65ab37d86498b9b5a3703d9d Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Thu, 27 Oct 2016 14:33:52 +0800 Subject: [PATCH 120/132] fixed incorrect wiresahrk SFN/SF for UL/DL data --- openair1/SCHED/phy_procedures_lte_ue.c | 14 +++++----- openair2/LAYER2/MAC/defs.h | 12 ++++++--- openair2/LAYER2/MAC/openair2_proc.c | 2 +- openair2/LAYER2/MAC/proto.h | 11 +++++--- openair2/LAYER2/MAC/ra_procedures.c | 4 +-- openair2/LAYER2/MAC/ue_procedures.c | 36 ++++++++++++++------------ openair2/PHY_INTERFACE/defs.h | 2 +- targets/RT/USER/lte-ue.c | 12 +++++---- 8 files changed, 55 insertions(+), 38 deletions(-) diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 5dc629b90b..9d1279c302 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -3684,12 +3684,14 @@ void phy_procedures_UE_lte(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,u if (ue->mac_enabled==1) { if (slot==0) { - ret = mac_xface->ue_scheduler(ue->Mod_id, - frame_tx, - subframe_rx, - subframe_select(&ue->frame_parms,subframe_tx), - eNB_id, - 0/*FIXME CC_id*/); + ret = mac_xface->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, diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h index 2235c3e1c4..96855dd1cd 100644 --- a/openair2/LAYER2/MAC/defs.h +++ b/openair2/LAYER2/MAC/defs.h @@ -995,10 +995,14 @@ typedef struct { /*!\brief Top level UE MAC structure */ typedef struct { uint16_t Node_id; - /// frame counter - frame_t frame; - /// subframe counter - sub_frame_t subframe; + /// RX frame counter + frame_t rxFrame; + /// RX subframe counter + sub_frame_t rxSubframe; + /// TX frame counter + frame_t txFrame; + /// TX subframe counter + sub_frame_t txSubframe; /// C-RNTI of UE uint16_t crnti; /// C-RNTI of UE before HO diff --git a/openair2/LAYER2/MAC/openair2_proc.c b/openair2/LAYER2/MAC/openair2_proc.c index 950713de5a..4b63571277 100644 --- a/openair2/LAYER2/MAC/openair2_proc.c +++ b/openair2/LAYER2/MAC/openair2_proc.c @@ -82,7 +82,7 @@ int openair2_stats_read(char *buffer, char **my_buffer, off_t off, int length) // mod_id used for PDCP and RLC Mod_id = NB_eNB_INST + ue_id ; - len+=sprintf(&buffer[len],"UE TTI: %d\n",UE_mac_inst[ue_id].frame); + len+=sprintf(&buffer[len],"UE RX TTI: %d\n",UE_mac_inst[ue_id].rxFrame); for (enb_id= 0; enb_id ra_SupervisionInfo.mac_ContentionResolutionTimer)<<3)); UE_mac_inst[module_idP].RA_contention_resolution_cnt++; @@ -1727,10 +1731,10 @@ ue_scheduler( } } - if (update_bsr(module_idP,frameP, eNB_indexP, lcid, UE_mac_inst[module_idP].scheduling_info.LCGID[lcid])) { + if (update_bsr(module_idP,txFrameP, eNB_indexP, lcid, UE_mac_inst[module_idP].scheduling_info.LCGID[lcid])) { UE_mac_inst[module_idP].scheduling_info.SR_pending= 1; LOG_D(MAC,"[UE %d][SR] Frame %d subframe %d SR for PUSCH is pending for LCGID %d with BSR level %d (%d bytes in RLC)\n", - module_idP, frameP,subframeP,UE_mac_inst[module_idP].scheduling_info.LCGID[lcid], + module_idP, txFrameP,txSubframeP,UE_mac_inst[module_idP].scheduling_info.LCGID[lcid], UE_mac_inst[module_idP].scheduling_info.BSR[UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]], UE_mac_inst[module_idP].scheduling_info.BSR_bytes[UE_mac_inst[module_idP].scheduling_info.LCGID[lcid]]); } diff --git a/openair2/PHY_INTERFACE/defs.h b/openair2/PHY_INTERFACE/defs.h index 0892b4d0b1..e29ccdcc5e 100644 --- a/openair2/PHY_INTERFACE/defs.h +++ b/openair2/PHY_INTERFACE/defs.h @@ -169,7 +169,7 @@ typedef struct { void (*dl_phy_sync_success) (module_id_t Mod_id,frame_t frameP, uint8_t CH_index,uint8_t first_sync); /// Only calls the PDCP for now - UE_L2_STATE_t (*ue_scheduler)(module_id_t Mod_id, frame_t frameP,sub_frame_t subframe, lte_subframe_t direction, uint8_t eNB_id, int CC_id); + UE_L2_STATE_t (*ue_scheduler)(module_id_t Mod_id, frame_t rxFrameP,sub_frame_t rxSubframe, frame_t txFrameP,sub_frame_t txSubframe, lte_subframe_t direction, uint8_t eNB_id, int CC_id); /// PHY-Config-Dedicated UE void (*phy_config_dedicated_ue)(module_id_t Mod_id,int CC_id,uint8_t CH_index, diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index 8e11a82638..932e875752 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -749,11 +749,13 @@ static void *UE_thread_rxn_txnp4(void *arg) if (UE->mac_enabled==1) { ret = mac_xface->ue_scheduler(UE->Mod_id, - proc->frame_tx, - proc->subframe_rx, - subframe_select(&UE->frame_parms,proc->subframe_tx), - 0, - 0/*FIXME CC_id*/); + proc->frame_rx, + proc->subframe_rx, + proc->frame_tx, + proc->subframe_tx, + subframe_select(&UE->frame_parms,proc->subframe_tx), + 0, + 0/*FIXME CC_id*/); if (ret == CONNECTION_LOST) { LOG_E( PHY, "[UE %"PRIu8"] Frame %"PRIu32", subframe %u RRC Connection lost, returning to PRACH\n", From 55e50b20523bbe6ec94881c2b6836b911f132353 Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Fri, 2 Dec 2016 18:45:34 +0800 Subject: [PATCH 121/132] enhanced wireshark logging. also logs BCH, PRACH and RAR. Tested with wireshark 2.2.2 on linux and windows see issue #45 --- openair1/SCHED/phy_procedures_lte_ue.c | 13 +++++++++++++ openair2/LAYER2/MAC/proto.h | 4 ++++ openair2/LAYER2/MAC/ra_procedures.c | 2 +- openair2/LAYER2/MAC/rar_tools.c | 7 +++++++ openair2/PHY_INTERFACE/defs.h | 2 +- openair2/UTIL/OPT/probe.c | 16 +++++++++++----- 6 files changed, 37 insertions(+), 7 deletions(-) diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 9d1279c302..db2c2788e5 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -56,6 +56,7 @@ fifo_dump_emos_UE emos_dump_UE; #endif #include "UTIL/LOG/vcd_signal_dumper.h" +#include "UTIL/OPT/opt.h" #if defined(ENABLE_ITTI) # include "intertask_interface.h" @@ -2302,6 +2303,17 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin if ((pbch_tx_ant>0) && (pbch_tx_ant<=4)) { + if (opt_enabled) { + static uint8_t dummy[3]; + dummy[0] = ue->pbch_vars[eNB_id]->decoded_output[2]; + dummy[1] = ue->pbch_vars[eNB_id]->decoded_output[1]; + dummy[2] = ue->pbch_vars[eNB_id]->decoded_output[0]; + trace_pdu(1, dummy, 3, ue->Mod_id, 0, 0, + frame_rx, subframe_rx, 0, 0); + LOG_D(OPT,"[UE %d][PBCH] Frame %d trace pdu for PBCH\n", + ue->Mod_id, subframe_rx); + } + if (pbch_tx_ant>2) { LOG_W(PHY,"[openair][SCHED][SYNCH] PBCH decoding: pbch_tx_ant>2 not supported\n"); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PBCH_PROCEDURES, VCD_FUNCTION_OUT); @@ -2980,6 +2992,7 @@ void process_rar(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, runmode_t mo timing_advance = mac_xface->ue_process_rar(ue->Mod_id, ue->CC_id, frame_rx, + ue->prach_resources[eNB_id]->ra_RNTI, dlsch0->harq_processes[0]->b, &ue->pdcch_vars[eNB_id]->crnti, ue->prach_resources[eNB_id]->ra_PreambleIndex); diff --git a/openair2/LAYER2/MAC/proto.h b/openair2/LAYER2/MAC/proto.h index 08f29f8f47..f6f59c1ed5 100644 --- a/openair2/LAYER2/MAC/proto.h +++ b/openair2/LAYER2/MAC/proto.h @@ -426,6 +426,9 @@ PRACH_RESOURCES_t *ue_get_rach(module_id_t module_idP,int CC_id,frame_t frameP,u /* \brief Function called by PHY to process the received RAR. It checks that the preamble matches what was sent by the eNB and provides the timing advance and t-CRNTI. @param Mod_id Index of UE instance +@param CC_id Index to a component carrier +@param frame Frame index +@param ra_rnti RA_RNTI value @param dlsch_buffer Pointer to dlsch_buffer containing RAR PDU @param t_crnti Pointer to PHY variable containing the T_CRNTI @param preamble_index Preamble Index used by PHY to transmit the PRACH. This should match the received RAR to trigger the rest of @@ -437,6 +440,7 @@ ue_process_rar( const module_id_t module_idP, const int CC_id, const frame_t frameP, + const rnti_t ra_rnti, uint8_t * const dlsch_buffer, rnti_t * const t_crnti, const uint8_t preamble_index diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c index 7d562bb353..c62fa1a8a7 100644 --- a/openair2/LAYER2/MAC/ra_procedures.c +++ b/openair2/LAYER2/MAC/ra_procedures.c @@ -271,7 +271,7 @@ void Msg1_tx(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id UE_mac_inst[module_idP].RA_attempt_number++; if (opt_enabled) { - trace_pdu(0, NULL, 0, module_idP, 2, UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex, + trace_pdu(0, NULL, 0, module_idP, 0 , UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex, UE_mac_inst[module_idP].txFrame, UE_mac_inst[module_idP].txSubframe, 0, UE_mac_inst[module_idP].RA_attempt_number); LOG_D(OPT,"[UE %d][RAPROC] TX MSG1 Frame %d trace pdu for rnti %x with size %d\n", module_idP, frameP, 1, UE_mac_inst[module_idP].RA_Msg3_size); diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c index c7bc9120c3..b453b5cca8 100644 --- a/openair2/LAYER2/MAC/rar_tools.c +++ b/openair2/LAYER2/MAC/rar_tools.c @@ -133,6 +133,7 @@ ue_process_rar( const module_id_t module_idP, const int CC_id, const frame_t frameP, + const rnti_t ra_rnti, uint8_t* const dlsch_buffer, rnti_t* const t_crnti, const uint8_t preamble_index @@ -168,6 +169,12 @@ ue_process_rar( LOG_D(MAC,"[UE %d][RAPROC] rar->t_crnti %x\n",module_idP,(uint16_t)rar[5]+(rar[4]<<8)); #endif + if (opt_enabled) { + LOG_D(OPT,"[UE %d][RAPROC] CC_id %d RAR Frame %d trace pdu for ra-RNTI %x\n", + module_idP, CC_id, frameP, ra_rnti); + trace_pdu(1, (uint8_t*)rarh, 7, module_idP, 2, ra_rnti, + UE_mac_inst[module_idP].rxFrame, UE_mac_inst[module_idP].rxSubframe, 0, 0); + } if (preamble_index == rarh->RAPID) { *t_crnti = (uint16_t)rar[5]+(rar[4]<<8);//rar->t_crnti; diff --git a/openair2/PHY_INTERFACE/defs.h b/openair2/PHY_INTERFACE/defs.h index e29ccdcc5e..b4a04e0b16 100644 --- a/openair2/PHY_INTERFACE/defs.h +++ b/openair2/PHY_INTERFACE/defs.h @@ -160,7 +160,7 @@ typedef struct { PRACH_RESOURCES_t* (*ue_get_rach)(module_id_t Mod_id,int CC_id,frame_t frameP,uint8_t Msg3_flag,sub_frame_t subframe); /// Process Random-Access Response - uint16_t (*ue_process_rar)(module_id_t Mod_id,int CC_id,frame_t frameP,uint8_t *dlsch_buffer,uint16_t *t_crnti,uint8_t preamble_index); + uint16_t (*ue_process_rar)(module_id_t Mod_id,int CC_id,frame_t frameP, uint16_t ra_rnti, uint8_t *dlsch_buffer, uint16_t *t_crnti,uint8_t preamble_index); /// Get SR payload (0,1) from UE MAC uint32_t (*ue_get_SR)(module_id_t Mod_id,int CC_id,frame_t frameP,uint8_t eNB_id,rnti_t rnti,sub_frame_t subframe); diff --git a/openair2/UTIL/OPT/probe.c b/openair2/UTIL/OPT/probe.c index a3836f5777..1c6b8e814b 100644 --- a/openair2/UTIL/OPT/probe.c +++ b/openair2/UTIL/OPT/probe.c @@ -304,19 +304,25 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType, frameBuffer[frameOffset++] = retx; } -#ifdef WIRESHARK_DEV +//#ifdef WIRESHARK_DEV /* Relating to out-of-band events */ /* N.B. dissector will only look to these fields if length is 0... */ if (pdu_buffer_size==0) { switch (oob_event) { case ltemac_send_preamble : - LOG_D(OPT,"oob event %d %d\n",ltemac_send_preamble ); + LOG_D(OPT,"oob ltemac_send_preamble event %02x." + //"%02x." + "%02x.%02x\n", + MAC_LTE_OOB_EVENT_TAG, + //ltemac_send_preamble, + rnti, + oob_event_value); //frameBuffer[frameOffset++]=0; //frameBuffer[frameOffset++]=0; //frameBuffer[frameOffset++]=0; frameBuffer[frameOffset++] = MAC_LTE_OOB_EVENT_TAG; - frameBuffer[frameOffset++]=ltemac_send_preamble; + //frameBuffer[frameOffset++]=ltemac_send_preamble; frameBuffer[frameOffset++]=rnti; // is the preamble frameBuffer[frameOffset++]=oob_event_value; break; @@ -329,12 +335,12 @@ static void SendFrame(guint8 radioType, guint8 direction, guint8 rntiType, case ltemac_sr_failure: default: - LOG_D(OPT,"not implemeneted yet\n"); + LOG_W(OPT,"not implemeneted yet\n"); break; } } -#endif +//#endif /***************************************/ /* Now write the MAC PDU */ frameBuffer[frameOffset++] = MAC_LTE_PAYLOAD_TAG; From 05a261ae6699903690b946e52037c6cd36077310 Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Wed, 7 Dec 2016 14:35:50 +0800 Subject: [PATCH 122/132] further clean up changes for change submission --- openair1/SCHED/phy_procedures_lte_ue.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 91d5fefb66..e6f27cca15 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -3299,7 +3299,6 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin l2 = (ue->frame_parms.symbols_per_tti/2)-1; } -#if 1 // 2016-11-24 wilson fixed missing slot_fep on 1st ofdm symbol of the first DL subframe after UL int prev_subframe_rx = (subframe_rx - 1)<0? 9: (subframe_rx - 1); if (subframe_select(&ue->frame_parms,prev_subframe_rx) != SF_DL) { //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -3313,9 +3312,6 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin l=1; } for (; l<=l2; l++) { -#else - for (l=1; l<=l2; l++) { -#endif if (abstraction_flag == 0) { start_meas(&ue->ofdm_demod_stats); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN); @@ -3437,11 +3433,9 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin } // for l=1..l2 -#if 1 // 2016-11-24 wilson fixed missing slot_fep on 1st ofdm symbol of the first DL subframe after UL // do first symbol of next downlink subframe for channel estimation int next_subframe_rx = (1+subframe_rx)%10; if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL) -#endif { slot_fep(ue, 0, From e6671827bb78a59620bdaaaa73b86e27005905f7 Mon Sep 17 00:00:00 2001 From: "Wilson W.K. Thong" Date: Wed, 7 Dec 2016 14:42:26 +0800 Subject: [PATCH 123/132] clean up changes for submission --- openair2/UTIL/LOG/vcd_signal_dumper.c | 6 ------ openair2/UTIL/LOG/vcd_signal_dumper.h | 6 ------ 2 files changed, 12 deletions(-) diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c index b65839cd90..86a7fbea3d 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.c +++ b/openair2/UTIL/LOG/vcd_signal_dumper.c @@ -174,10 +174,8 @@ const char* eurecomVariablesNames[] = { "ue0_SFN5", "ue0_SFN6", "ue0_SFN7", -#if 1 // 2016-11-29 wilson debug thread busy crash "ue0_trx_read_ns", "ue0_trx_write_ns", -#endif }; const char* eurecomFunctionsNames[] = { @@ -192,7 +190,6 @@ const char* eurecomFunctionsNames[] = { "ue_thread_synch", "ue_thread_rxtx0", "ue_thread_rxtx1", -#if 1 // 2016-11-29 wilson debug thread busy crash "trx_read_sf9", "trx_write_sf9", "ue_signal_cond_rxtx", @@ -204,7 +201,6 @@ const char* eurecomFunctionsNames[] = { "ue_lock_mutex_rxtx_for_cnt_decrement1", "ue_lock_mutex_rxtx_for_cnt_increment0", "ue_lock_mutex_rxtx_for_cnt_increment1", -#endif /* RRH signals */ "eNB_tx", @@ -235,13 +231,11 @@ const char* eurecomFunctionsNames[] = { "phy_eNB_slot_fep", "phy_procedures_ue_tx", "phy_procedures_ue_rx", -#if 1 // 2016-12-01 wilson debug long TX runtime in special subframe "phy_procedures_ue_tx_ulsch_uespec", "phy_procedures_ue_tx_pucch", "phy_procedures_ue_tx_ulsch_common", "phy_procedures_ue_tx_prach", "phy_procedures_ue_tx_ulsch_rar", -#endif "phy_procedures_eNB_lte", "phy_procedures_UE_lte", "pdsch_thread", diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h index f90775d824..19f5e8aab1 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.h +++ b/openair2/UTIL/LOG/vcd_signal_dumper.h @@ -146,10 +146,8 @@ typedef enum { VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN5, VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN6, VCD_SIGNAL_DUMPER_VARIABLES_UE0_SFN7, -#if 1 // 2016-11-29 wilson debug thread busy crash VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_READ_NS, VCD_SIGNAL_DUMPER_VARIABLES_UE0_TRX_WRITE_NS, -#endif VCD_SIGNAL_DUMPER_VARIABLES_LAST, VCD_SIGNAL_DUMPER_VARIABLES_END = VCD_SIGNAL_DUMPER_VARIABLES_LAST, } vcd_signal_dump_variables; @@ -166,7 +164,6 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_SYNCH, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX0, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_THREAD_RXTX1, -#if 1 // 2016-11-29 wilson debug thread busy crash VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ_SF9, VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE_SF9, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SIGNAL_COND_RXTX, @@ -178,7 +175,6 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0, VCD_SIGNAL_DUMPER_FUNCTIONS_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1, -#endif /* RRH signals */ VCD_SIGNAL_DUMPER_FUNCTIONS_eNB_TX, @@ -209,13 +205,11 @@ typedef enum { VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_SLOT_FEP, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, -#if 1 // 2016-12-01 wilson debug long TX runtime in special subframe VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_COMMON, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PRACH, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_ULSCH_RAR, -#endif VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE, VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_LTE, VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_THREAD, From 3750ebc2d60091742444139cc38d1949b0786f19 Mon Sep 17 00:00:00 2001 From: ROBERT Benoit Date: Fri, 9 Dec 2016 16:13:06 +0100 Subject: [PATCH 124/132] Update UE autotest testsuite for OAI1B develop1B_integration_w49 branch --- .../autotests/patches/CmakeLists.patch | 2 +- .../autotest_ue_cell_synch_event.patch | 4 +- .../autotest_ue_dlsch_bitrate_metric.patch | 4 +- .../patches/autotest_ue_offsets_metric.patch | 18 +- .../autotests/patches/build_oai.patch | 10 +- cmake_targets/autotests/testsuite_ue_noS1.xml | 1154 +++++++++++------ 6 files changed, 752 insertions(+), 440 deletions(-) diff --git a/cmake_targets/autotests/patches/CmakeLists.patch b/cmake_targets/autotests/patches/CmakeLists.patch index 9f2731ca73..1e54e3a0f3 100644 --- a/cmake_targets/autotests/patches/CmakeLists.patch +++ b/cmake_targets/autotests/patches/CmakeLists.patch @@ -1,5 +1,5 @@ diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt -index 3169c6c..eaf5417 100644 +index 07d92a1..b6a02d1 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -235,6 +235,7 @@ add_boolean_option(DEBUG_OMG False "???") diff --git a/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch b/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch index 33f5ac339f..766b724c6c 100644 --- a/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch +++ b/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch @@ -1,8 +1,8 @@ diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c -index 661fe96..782305d 100644 +index 663978e..b77cb1b 100644 --- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c +++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c -@@ -469,6 +469,15 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) +@@ -476,6 +476,15 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) //#endif if (ue->UE_scan_carrier == 0) { diff --git a/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch b/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch index b7a7dbfa02..74139109f2 100644 --- a/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch +++ b/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch @@ -1,8 +1,8 @@ diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c -index 3ed4c79..6023886 100644 +index 5dc629b..353a049 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c -@@ -2944,6 +2944,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin +@@ -3551,6 +3551,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n", ue->Mod_id,frame_rx,ue->total_TBS[eNB_id], ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0); diff --git a/cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch b/cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch index 3fca1a70fd..85afe8703e 100644 --- a/cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch +++ b/cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch @@ -1,14 +1,12 @@ diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c -index 3ed4c79..7185e5a 100644 +index 5dc629b..4d31ad3 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c -@@ -2748,7 +2748,25 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin - 0); +@@ -3347,6 +3347,22 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin // first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH) -- -+ -+ /* SYRTEM */ + ++ #if UE_AUTOTEST_TRACE + if ( (frame_rx % 10 == 0) && (subframe_rx == 0)) { + printf("AUTOTEST Metric : UE_FREQ_OFFSET = %d Hz (frame = %d) \n", ue->common_vars.freq_offset, frame_rx); + printf("AUTOTEST Metric : UE_RX_OFFSET = %d (frame = %d) \n", ue->rx_offset, frame_rx); @@ -21,11 +19,9 @@ index 3ed4c79..7185e5a 100644 + (double)ue->measurements.n0_power_tot_dBm+132.24, + frame_rx); + } ++ #endif + -+ -+ -+ -+ ++ // do procedures for C-RNTI if (ue->dlsch[eNB_id][0]->active == 1) { - ue_pdsch_procedures(ue, + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN); diff --git a/cmake_targets/autotests/patches/build_oai.patch b/cmake_targets/autotests/patches/build_oai.patch index d6cecda6e5..cf93b466e7 100644 --- a/cmake_targets/autotests/patches/build_oai.patch +++ b/cmake_targets/autotests/patches/build_oai.patch @@ -1,8 +1,8 @@ diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai -index b77a9ba..8e3021d 100755 +index 25e9a1c..0b04bb7 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai -@@ -53,6 +53,7 @@ BUILD_DOXYGEN=0 +@@ -54,6 +54,7 @@ BUILD_DOXYGEN=0 T_TRACER="False" DISABLE_HARDWARE_DEPENDENCY="False" CMAKE_BUILD_TYPE="" @@ -10,7 +10,7 @@ index b77a9ba..8e3021d 100755 trap handle_ctrl_c INT function print_help() { -@@ -127,6 +128,8 @@ Options +@@ -130,6 +131,8 @@ Options Enables the T tracer. --disable-hardware-dependency Disable HW dependency during installation @@ -19,7 +19,7 @@ index b77a9ba..8e3021d 100755 Usage (first build): oaisim (eNB + UE): ./build_oai -I --oaisim -x --install-system-files Eurecom EXMIMO + COTS UE : ./build_oai -I --eNB -x --install-system-files -@@ -278,6 +281,10 @@ function main() { +@@ -285,6 +288,10 @@ function main() { echo_info "Disabling hardware dependency for compiling software" DISABLE_HARDWARE_DEPENDENCY="True" shift 1;; @@ -30,7 +30,7 @@ index b77a9ba..8e3021d 100755 -h | --help) print_help exit 1;; -@@ -447,6 +454,7 @@ function main() { +@@ -457,6 +464,7 @@ function main() { echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file echo "set ( T_TRACER $T_TRACER )" >> $cmake_file diff --git a/cmake_targets/autotests/testsuite_ue_noS1.xml b/cmake_targets/autotests/testsuite_ue_noS1.xml index 19b945dc28..c5403feab2 100644 --- a/cmake_targets/autotests/testsuite_ue_noS1.xml +++ b/cmake_targets/autotests/testsuite_ue_noS1.xml @@ -2,22 +2,27 @@ imb182-desktop yanbo-M4HM87P-00 /mnt/sradio/TEST_RESULTS/ - - https://gitlab.eurecom.fr/oai/openairinterface5g.git --> - + https://gitlab.eurecom.fr/oai1B/openairinterface5g.git + + https://gitlab.eurecom.fr/oai/openair-cn.git --> - Enhancement-142-OAI_UE_autotest_framework - + develop1B + develop1B_integration_w49 --> + - develop @@ -30,12 +35,21 @@ yanbo-M4HM87P-00 - + + + + + + + + + + lte-softmodem-noS1 @@ -62,7 +76,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -164,7 +178,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -271,7 +285,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -373,7 +387,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -475,7 +489,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -577,7 +591,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -679,7 +693,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -781,7 +795,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -884,7 +898,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -986,7 +1000,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -1088,7 +1102,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -1190,7 +1204,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -1292,7 +1306,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -1395,7 +1409,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -1497,7 +1511,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -1599,7 +1613,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -1675,57 +1689,6 @@ unit_of_meas = ""/> - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 --single-thread-disable --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB --ue-autotest-trace - source ./targets/bin/init_nas_nos1 UE - - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS28 - 36 - - - - - lte-softmodem-noS1 @@ -1804,7 +1767,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -1907,7 +1870,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -2010,7 +1973,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test @@ -2089,54 +2052,6 @@ - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 512K - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB --ue-autotest-trace - source ./targets/bin/init_nas_nos1 UE - - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS00 - 36 - - - - lte-softmodem-noS1 @@ -2152,7 +2067,7 @@ $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf -W -m 28 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 6M + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 30M @@ -2164,7 +2079,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S iperf -s -i 1 -u @@ -2240,54 +2155,6 @@ unit_of_meas = ""/> - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB --ue-autotest-trace - source ./targets/bin/init_nas_nos1 UE - - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS09 - 36 - - - - @@ -2340,55 +2207,6 @@ - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB --ue-autotest-trace - source ./targets/bin/init_nas_nos1 UE - - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS10 - 36 - - - - - lte-softmodem-noS1 @@ -2441,54 +2259,6 @@ - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB --ue-autotest-trace - source ./targets/bin/init_nas_nos1 UE - - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS16 - 36 - - - - @@ -2542,55 +2312,6 @@ - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB --ue-autotest-trace - source ./targets/bin/init_nas_nos1 UE - - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS17 - 36 - - - - - lte-softmodem-noS1 @@ -2645,54 +2366,6 @@ - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB --ue-autotest-trace - source ./targets/bin/init_nas_nos1 UE - - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS19 - 36 - - - - @@ -2745,54 +2418,6 @@ - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 - sleep 30;iperf -c 10.0.1.9 -i 1 -u -b 10M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB --ue-autotest-trace - source ./targets/bin/init_nas_nos1 UE - - sleep 5; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS27 - 36 - - - - @@ -2821,7 +2446,7 @@ -c --UE -w USRP --noS1 --eNB --ue-autotest-trace source ./targets/bin/init_nas_nos1 UE - sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S iperf -s -i 1 -u @@ -2894,5 +2519,696 @@ unit_of_meas = ""/> + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 512K + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS00 + 36 + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS09 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS10 + 36 + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS16 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS17 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS19 + 36 + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 + sleep 30;iperf -c 10.0.1.9 -i 1 -u -b 15M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 5; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS27 + 36 + + + + + + + + + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + + + + UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS28 + 36 + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 18000 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 --single-thread-disable --phy-test + + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S --phy-test + + + + + + False + + + + UE_USRP.NOS1.PHYTEST_STAB.BAND7.5MHZ.MCS28 + 16 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 + sleep 30;iperf -c 10.0.1.9 -i 1 -u -b 13700K + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 5; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 200 + + False + + + + + UE_USRP.NOS1.DATA_IPERF_DL.BAND7.5MHZ.MCS28 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 3600 + UE_USRP.NOS1.DATA_IPERF_STAB_DL.BAND7.5MHZ.MCS28 + 16 + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 + sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 -u + + 2800 + + False + + + + + + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 + sleep 30;iperf -c 10.0.1.9 -i 1 + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 5; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 + + 200 + + False + + + + + UE_USRP.NOS1.DATA_IPERF_TCP_DL.BAND7.5MHZ.MCS28 + 36 + + + + + lte-softmodem-noS1 + + imb182-desktop + yanbo-M4HM87P-00 + 300 + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c -w USRP --eNB --noS1 + source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB + + $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 + -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf -W -m 28 + sleep 80;iperf -c 10.0.1.9 -i 1 + + + + False + + /tmp + + $OPENAIR_DIR/cmake_targets/build_oai + -c --UE -w USRP --noS1 --eNB --ue-autotest-trace + source ./targets/bin/init_nas_nos1 UE + + sleep 20; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 85 -A 20 --ue-rxgain 125 -S + + iperf -s -i 1 + + 200 + + False + UE_USRP.NOS1.DATA_IPERF_TCP_DL.BAND7.10MHZ.MCS28 + 36 + + + + + + + + + + + + From ca078ff54945b97c84be7ddcf2e6703cbd8dba13 Mon Sep 17 00:00:00 2001 From: hbilel Date: Tue, 13 Dec 2016 17:38:43 +0100 Subject: [PATCH 125/132] fix compilation error --- openair2/LAYER2/MAC/ue_procedures.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c index 0761177a19..cdac22c486 100644 --- a/openair2/LAYER2/MAC/ue_procedures.c +++ b/openair2/LAYER2/MAC/ue_procedures.c @@ -2127,14 +2127,14 @@ ue_scheduler( } //Check whether Regular BSR is triggered - if (update_bsr(module_idP,frameP, subframeP,eNB_indexP) == TRUE) { + if (update_bsr(module_idP,txFrameP, txSubframeP,eNB_indexP) == TRUE) { // call SR procedure to generate pending SR and BSR for next PUCCH/PUSCH TxOp. This should implement the procedures // outlined in Sections 5.4.4 an 5.4.5 of 36.321 UE_mac_inst[module_idP].scheduling_info.SR_pending= 1; // Regular BSR trigger UE_mac_inst[module_idP].BSR_reporting_active |= BSR_TRIGGER_REGULAR; LOG_D(MAC,"[UE %d][BSR] Regular BSR Triggered Frame %d subframe %d SR for PUSCH is pending\n", - module_idP, frameP,subframeP); + module_idP, txFrameP,txSubframeP); } // UE has no valid phy config dedicated || no valid/released SR From 1167dd6b33b44d5c078108874cbe9f6d6478711b Mon Sep 17 00:00:00 2001 From: gabrielC Date: Wed, 14 Dec 2016 10:16:54 +0100 Subject: [PATCH 126/132] ue autotest merge part2 --- .../autotests/patches/CmakeLists.patch | 12 - .../autotest_ue_cell_synch_event.patch | 20 - .../autotest_ue_dlsch_bitrate_metric.patch | 18 - .../patches/autotest_ue_offsets_metric.patch | 27 - .../autotests/patches/build_oai.patch | 40 - .../autotests/run_lte-softmodem-nos1_tests.py | 2595 ------------- .../autotests/testsuite_ue_noS1_eurecom.xml | 3214 ----------------- .../CODING/3gpplte_turbo_decoder_sse_8bit.c | 5 - 8 files changed, 5931 deletions(-) delete mode 100644 cmake_targets/autotests/patches/CmakeLists.patch delete mode 100644 cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch delete mode 100644 cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch delete mode 100644 cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch delete mode 100644 cmake_targets/autotests/patches/build_oai.patch delete mode 100755 cmake_targets/autotests/run_lte-softmodem-nos1_tests.py delete mode 100644 cmake_targets/autotests/testsuite_ue_noS1_eurecom.xml diff --git a/cmake_targets/autotests/patches/CmakeLists.patch b/cmake_targets/autotests/patches/CmakeLists.patch deleted file mode 100644 index 1e54e3a0f3..0000000000 --- a/cmake_targets/autotests/patches/CmakeLists.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt -index 07d92a1..b6a02d1 100644 ---- a/cmake_targets/CMakeLists.txt -+++ b/cmake_targets/CMakeLists.txt -@@ -235,6 +235,7 @@ add_boolean_option(DEBUG_OMG False "???") - add_boolean_option(XFORMS False "This adds the possibility to see the signal oscilloscope") - add_boolean_option(PRINT_STATS False "This adds the possibility to see the status") - add_boolean_option(T_TRACER False "Activate the T tracer, a debugging/monitoring framework" ) -+add_boolean_option(UE_AUTOTEST_TRACE False "Activate UE autotest specific logs") - - add_boolean_option(DEBUG_CONSOLE False "makes debugging easier, disables stdout/stderr buffering") - diff --git a/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch b/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch deleted file mode 100644 index 766b724c6c..0000000000 --- a/cmake_targets/autotests/patches/autotest_ue_cell_synch_event.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/openair1/PHY/LTE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_TRANSPORT/initial_sync.c -index 663978e..b77cb1b 100644 ---- a/openair1/PHY/LTE_TRANSPORT/initial_sync.c -+++ b/openair1/PHY/LTE_TRANSPORT/initial_sync.c -@@ -476,6 +476,15 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) - //#endif - - if (ue->UE_scan_carrier == 0) { -+ -+ #if UE_AUTOTEST_TRACE -+ LOG_I(PHY,"[UE %d] AUTOTEST Cell Sync : frame = %d, rx_offset %d, freq_offset %d \n", -+ ue->Mod_id, -+ ue->proc.proc_rxtx[0].frame_rx, -+ ue->rx_offset, -+ ue->common_vars.freq_offset ); -+ #endif -+ - if (ue->mac_enabled==1) { - LOG_I(PHY,"[UE%d] Sending synch status to higher layers\n",ue->Mod_id); - //mac_resynch(); diff --git a/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch b/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch deleted file mode 100644 index 74139109f2..0000000000 --- a/cmake_targets/autotests/patches/autotest_ue_dlsch_bitrate_metric.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c -index 5dc629b..353a049 100644 ---- a/openair1/SCHED/phy_procedures_lte_ue.c -+++ b/openair1/SCHED/phy_procedures_lte_ue.c -@@ -3551,6 +3551,13 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin - LOG_D(PHY,"[UE %d] Calculating bitrate Frame %d: total_TBS = %d, total_TBS_last = %d, bitrate %f kbits\n", - ue->Mod_id,frame_rx,ue->total_TBS[eNB_id], - ue->total_TBS_last[eNB_id],(float) ue->bitrate[eNB_id]/1000.0); -+ -+ #if UE_AUTOTEST_TRACE -+ if ((frame_rx % 100 == 0)) { -+ LOG_I(PHY,"[UE %d] AUTOTEST Metric : UE_DLSCH_BITRATE = %5.2f kbps (frame = %d) \n", ue->Mod_id, (float) ue->bitrate[eNB_id]/1000.0, frame_rx); -+ } -+ #endif -+ - } - - diff --git a/cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch b/cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch deleted file mode 100644 index 85afe8703e..0000000000 --- a/cmake_targets/autotests/patches/autotest_ue_offsets_metric.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c -index 5dc629b..4d31ad3 100644 ---- a/openair1/SCHED/phy_procedures_lte_ue.c -+++ b/openair1/SCHED/phy_procedures_lte_ue.c -@@ -3347,6 +3347,22 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin - - // first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH) - -+ #if UE_AUTOTEST_TRACE -+ if ( (frame_rx % 10 == 0) && (subframe_rx == 0)) { -+ printf("AUTOTEST Metric : UE_FREQ_OFFSET = %d Hz (frame = %d) \n", ue->common_vars.freq_offset, frame_rx); -+ printf("AUTOTEST Metric : UE_RX_OFFSET = %d (frame = %d) \n", ue->rx_offset, frame_rx); -+ -+ printf("AUTOTEST Metric : RRC Measurments RSRP[0] %.2f dBm/RE, RSSI %.2f dBm, RSRQ[0] %.2f dB, N0 %d dBm/RE, NF %.1f dB (frame = %d)\n", -+ 10*log10(ue->measurements.rsrp[0])-ue->rx_total_gain_dB, -+ 10*log10(ue->measurements.rssi)-ue->rx_total_gain_dB, -+ 10*log10(ue->measurements.rsrq[0]), -+ ue->measurements.n0_power_tot_dBm, -+ (double)ue->measurements.n0_power_tot_dBm+132.24, -+ frame_rx); -+ } -+ #endif -+ -+ - // do procedures for C-RNTI - if (ue->dlsch[eNB_id][0]->active == 1) { - VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN); diff --git a/cmake_targets/autotests/patches/build_oai.patch b/cmake_targets/autotests/patches/build_oai.patch deleted file mode 100644 index cf93b466e7..0000000000 --- a/cmake_targets/autotests/patches/build_oai.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai -index 25e9a1c..0b04bb7 100755 ---- a/cmake_targets/build_oai -+++ b/cmake_targets/build_oai -@@ -54,6 +54,7 @@ BUILD_DOXYGEN=0 - T_TRACER="False" - DISABLE_HARDWARE_DEPENDENCY="False" - CMAKE_BUILD_TYPE="" -+UE_AUTOTEST_TRACE="False" - trap handle_ctrl_c INT - - function print_help() { -@@ -130,6 +131,8 @@ Options - Enables the T tracer. - --disable-hardware-dependency - Disable HW dependency during installation -+--ue-autotest-trace -+ Enable specific traces for UE autotest framework - Usage (first build): - oaisim (eNB + UE): ./build_oai -I --oaisim -x --install-system-files - Eurecom EXMIMO + COTS UE : ./build_oai -I --eNB -x --install-system-files -@@ -285,6 +288,10 @@ function main() { - echo_info "Disabling hardware dependency for compiling software" - DISABLE_HARDWARE_DEPENDENCY="True" - shift 1;; -+ --ue-autotest-trace) -+ UE_AUTOTEST_TRACE="True" -+ echo_info "Enabling autotest specific trace for UE" -+ shift 1;; - -h | --help) - print_help - exit 1;; -@@ -457,6 +464,7 @@ function main() { - echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file - echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file - echo "set ( T_TRACER $T_TRACER )" >> $cmake_file -+ echo "set (UE_AUTOTEST_TRACE $UE_AUTOTEST_TRACE)" >> $cmake_file - echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file - cd $DIR/$lte_build_dir/build - cmake .. diff --git a/cmake_targets/autotests/run_lte-softmodem-nos1_tests.py b/cmake_targets/autotests/run_lte-softmodem-nos1_tests.py deleted file mode 100755 index 2ece62ae16..0000000000 --- a/cmake_targets/autotests/run_lte-softmodem-nos1_tests.py +++ /dev/null @@ -1,2595 +0,0 @@ -#! /usr/bin/python -#/* -# * 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.0 (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 -# */ - -# \author Rohit Gupta - Benoit ROBERT (benoit.robert@syrtem.com) -# \version 0.1 -# @ingroup _test - -# \Changelog -# 2016-11-18 : -# - Add progess bar during test execution update_progress() - -import tempfile -import threading -import sys -import traceback -import wave -import os -import time -import datetime -import getpass -import math #from time import clock -import xml.etree.ElementTree as ET -import re - -#from dict2xml import dict2xml as xmlify - -from colorama import Fore, Back, Style - -import numpy as np - -import log - -from openair import * - -import paramiko - -import subprocess -import commands -sys.path.append('/opt/ssh') -sys.path.append(os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/')) - -from lib_autotest import * -import ssh -from ssh import SSHSession -import argparse - - -# update_progress() : Displays or updates a console progress bar -## Accepts a float between 0 and 1. Any int will be converted to a float. -## A value under 0 represents a 'halt'. -## A value at 1 or bigger represents 100% -def update_progress(progress, prefix_string): - barLength = 20 # Modify this to change the length of the progress bar - status = "" - #print "progress = "+ str(progress) - if isinstance(progress, int): - progress = float(progress) - if not isinstance(progress, float): - progress = 0 - status = "error: progress var must be float\r\n" - if progress < 0: - progress = 0 - status = "Halt...\r\n" - if progress >= 1: - progress = 1 - status = "Done...\r\n" - block = int(round(barLength*progress)) - text = "\r"+prefix_string+" [{0}] {1}% {2}".format( "="*block + " "*(barLength-block), progress*100, status) - sys.stdout.write(text) - sys.stdout.flush() - - -def exit_prog(exit_val): - print(Style.RESET_ALL), - sys.exit(exit_val) - -# \brief write a string to a file -# \param filename name of file -# \param string string to write -# \mode file opening mode (default=write) -def write_file(filename, string, mode="w"): - text_file = open(filename, mode) - text_file.write(string) - text_file.close() - -# \brief function to check if test case passed throughput test -# \param filename name of file which has throughput results (usually from iperf -s ... -# \param min_tput minimum throughput -# \param max_tuput maximum throughput -# \param average average throughput -# \param min_duration minimum duration of throughput -#The throughput values found in file must be higher than values from from arguments 2,3,4,5 -#The function returns True if throughput conditions are saisfied else it returns fails -def tput_test(filename, min_tput, max_tput, average, min_duration): - - if os.path.exists(filename): - with open (filename, "r") as myfile: - data=myfile.read() - p=re.compile('(\d*.\d*) Mbits/sec') - array=p.findall(data) - array = [ float(x) for x in array ] - duration = array.__len__() - if duration !=0: - min_list = min(array) - max_list = max(array) - average_list = np.mean(array) - else: - min_list = 0 - max_list = 0 - average_list=0 - tput_string=' ( '+ "min=%0.2f" % min_list + ' Mbps / ' + "max=%0.2f" % max_list + ' Mbps / ' + "avg=%0.2f" % average_list + ' Mbps / ' + "dur=%0.2f" % duration + ' s) ' - if (min_list >= min_tput and max_list >= max_tput and average_list >= average and duration >= min_duration): - return True , tput_string - else: - return False , tput_string - else: - return False , tput_string - -# \brief Convert string to float or return None if there is exception -def try_convert_to_float(string, fail=None): - try: - return float(string) - except Exception: - return fail; - -# \brief get throughput statistics from log file -# \param search_expr search expression found in test_case_list.xml file -# \param logfile_traffic logfile which has traffic statistics -def tput_test_search_expr (search_expr, logfile_traffic): - result=0 - tput_string='' - if search_expr !='': - if search_expr.find('throughput_test')!= -1 : - p= re.compile('min\s*=\s*(\d*.\d*)\s*Mbits/sec') - min_tput=p.findall(search_expr) - if min_tput.__len__()==1: - min_tput = min_tput[0] - else: - min_tput = None - - p= re.compile('max\s*=\s*(\d*.\d*)\s*Mbits/sec') - max_tput=p.findall(search_expr) - if max_tput.__len__()==1: - max_tput = max_tput[0] - else: - max_tput = None - - p= re.compile('average\s*=\s*(\d*.\d*)\s*Mbits/sec') - avg_tput=p.findall(search_expr) - if avg_tput.__len__()==1: - avg_tput=avg_tput[0] - else: - avg_tput = None - - p= re.compile('duration\s*=\s*(\d*.\d*)\s*s') - duration=p.findall(search_expr) - if duration.__len__()==1: - duration = duration[0] - else: - duration = None - - min_tput = try_convert_to_float(min_tput) - max_tput = try_convert_to_float(max_tput) - avg_tput = try_convert_to_float(avg_tput) - duration = try_convert_to_float(duration) - - if (min_tput != None and max_tput != None and avg_tput != None and duration != None ): - result, tput_string = tput_test(logfile_traffic, min_tput, max_tput, avg_tput, duration) - else: - result=1 - - return result, tput_string - -# \brief function to copy files to/from remote machine -# \param username user with which to make sftp connection -# \param password password of user -# \param hostname host to connect -# \ports port of remote machine on which server is listening -# \paramList This is list of operations as a set {operation: "get/put", localfile: "filename", remotefile: "filename" -# \param logfile Ignored currently and set once at the beginning of program -def sftp_module (username, password, hostname, ports, paramList,logfile): - #localD = localfile - #remoteD = remotefile - #fd, paramiko_logfile = tempfile.mkstemp() - #res = os.close(fd ) - #paramiko logfile path should not be changed with multiple calls. The logs seem to in first file regardless - error = "" - #The lines below are outside exception loop to be sure to terminate the test case if the network connectivity goes down or there is authentication failure - transport = paramiko.Transport((hostname, ports)) - transport.connect(username = username, password = password) - sftp = paramiko.SFTPClient.from_transport(transport) - # index =0 - for param in paramList: - try: - operation = param["operation"] - localD = param["localfile"] - remoteD = param["remotefile"] - if operation == "put": - sftp.put(remotepath=remoteD, localpath=localD) - elif operation == "get": - sftp.get(remotepath=remoteD, localpath=localD) - else : - print "sftp_module: unidentified operation:<" + operation + "> Exiting now" - print "hostname = " + hostname - print "ports = " + ports - print "localfile = " + localD - print "remotefile = " + remoteD - print "operation = " + operation - sys.exit() - except Exception, e: - error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n username = ' + username + '\n hostname = ' + hostname + '\n localfile = ' + localD + '\n remotefile = ' + remoteD + '\n operation = ' + operation + '\nlogfile = ' + logfile + '\n ports = ' + str(ports) + '\n' - error = error + traceback.format_exc() - print error - - sftp.close() - transport.close() - res = os.system('\n echo \'SFTP Module Log for Machine: <' + hostname + '> starts...\' >> ' + logfile + ' 2>&1 ') - res = os.system('cat ' + paramiko_logfile + ' >> ' + logfile + ' 2>&1 \n') - write_file(logfile, error, "a") - res = os.system('\n echo \'SFTP Module Log for Machine: <' + hostname + '> ends...\' >> ' + logfile + ' 2>&1 \n') - -# \brief bash script stub put at the end of scripts to terminate it -# \param timeout_cmd terminate script after timeout_cmd seconds -# \param terminate_missing_procs if True terminate all the processes launched by script if one of them terminates prematurely (due to error) -def finalize_deploy_script (timeout_cmd, terminate_missing_procs='False'): - cmd = 'declare -i timeout_cmd='+str(timeout_cmd) + '\n' - if terminate_missing_procs == 'True': - cmd = cmd + """ - #The code below checks if one the processes launched in background has crashed. - #If it does, then the code below terminates all the child processes created by this script - declare -i wakeup_interval=1 - declare -i step=0 - echo \"Array pid = ${array_exec_pid[@]}\" - while [ "$step" -lt "$timeout_cmd" ] - do - declare -i break_while_loop=0 - #Iterate over each process ID in array_exec_pid - for i in "${array_exec_pid[@]}" - do - numchild=`pstree -p $i | perl -ne 's/\((\d+)\)/print " $1"/ge' |wc -w` - echo "PID = $i, numchild = $numchild" - if [ "$numchild" -eq "0" ] ; then - echo "Process ID $i has finished unexpectedly. Now preparing to kill all the processes " - break_while_loop=1 - break - fi - done - if [ "$break_while_loop" -eq "1" ] ; then - break - fi - step=$(( step + wakeup_interval )) - sleep $wakeup_interval - done - echo "Final time step (Duration of test case) = $step " - date - """ - else: - #We do not terminate the script if one of the processes has existed prematurely - cmd = cmd + 'sleep ' + str(timeout_cmd) + ' ; date \n' - - return cmd - -# \brief run python script and update config file params of test case -# \param oai module with already open connection -# \param config_string config string taken from xml file -# \param logdirRepo directory of remote repository -# \param python_script python script location -def update_config_file(oai, config_string, logdirRepo, python_script): - cmd="" - if config_string : - stringArray = config_string.splitlines() - #python_script = '$OPENAIR_DIR/targets/autotests/tools/search_repl.py' - for string in stringArray: - #split the string based on space now - string1=string.split() - cmd = cmd + 'python ' + python_script + ' ' + logdirRepo+'/'+string1[0] + ' ' + string1[1] + ' '+ string1[2] + '\n' - #cmd = cmd + 'perl -p -i -e \'s/'+ string1[1] + '\\s*=\\s*"\\S*"\\s*/' + string1[1] + ' = "' + string1[2] +'"' + '/g\' ' + logdirRepo + '/' +string1[0] + '\n' - return cmd - #result = oai.send_recv(cmd) - -# \brief thread safe sshsession wrapper due to occasional connection issues with ssh -# \param machine name of machine -# \param username user login for remote machine -# \param key_file file name which has keys to enable passwordless login -# \param password password for remote machine -# \param logdir_remote remote directory -# \param logdir_local_base local directory -# \param operation operation to perform (get_all, put_all) transfers recursively for directories -def SSHSessionWrapper(machine, username, key_file, password, logdir_remote, logdir_local_base, operation): - max_tries = 10 - i=0 - while i <= max_tries: - i = i +1 - try: - ssh = SSHSession(machine , username, key_file, password) - if operation == "get_all": - ssh.get_all(logdir_remote , logdir_local_base) - elif operation == "put_all": - ssh.put_all(logdir_local_base, logdir_remote ) - else: - print "Error: Uknown operation in SSHSessionWrapper. Exiting now..." - sys.exit(1) - break - except Exception, e: - error='' - error = error + ' In Class = function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n username = ' + username + '\n machine = ' + machine + '\n logdir_remote = ' + logdir_remote + '\n logdir_local_base = ' + logdir_local_base - error = error + traceback.format_exc() - print error - print " Retrying again in 1 seconds" - time.sleep(1) - print "Continuing ..." - if i ==max_tries: - print "Fatal Error: Max no of retries reached. Exiting now..." - sys.exit(1) - - - -# \briefFunction to clean old programs that might be running from earlier execution -# \param oai - parameter for making connection to machine -# \parm programList list of programs that must be terminated before execution of any test case -# \param CleanUpAluLteBox program to terminate AlU Bell Labs LTE Box -# \param ExmimoRfStop String to stop EXMIMO card (specified in test_case_list.xml) -def cleanOldPrograms(oai, programList, CleanUpAluLteBox, ExmimoRfStop, logdir, logdirOAI5GRepo): - cmd = 'killall -9 ' + programList - result = oai.send(cmd, True) -# print "\t\t > "+cmd -# print "\t\t < "+result - -# print "Killing old programs on ..." + result - programArray = programList.split() - programListJoin = '|'.join(programArray) - cmd = " ( date ;echo \"Starting cleaning old programs.. \" ; dmesg|tail ; echo \"Current disk space.. \" ; df -h )>& " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync" - result=oai.send_recv(cmd) -# print "\t\t > "+cmd -# print "\t\t < "+result - - cmd = cleanupOldProgramsScript + ' ' + '\''+programListJoin+'\'' - #result = oai.send_recv(cmd) - #print result - result = oai.send_expect_false(cmd, 'Match found', False) -# print "\t\t > "+cmd -# print "\t\t < "+result - -# print "Looking for old programs..." + result - res=oai.send_recv(CleanUpAluLteBox, True) -# print "\t\t > "+CleanUpAluLteBox -# print "\t\t < "+res - cmd= " echo \"Starting EXmimoRF Stop... \" >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync "; - result = oai.send_recv(cmd) -# print "\t\t > "+cmd -# print "\t\t < "+result - cmd = "( " + "cd " + logdirOAI5GRepo + " ; source oaienv ; " + ExmimoRfStop + " ) >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync " -# print "cleanoldprograms cmd = " + cmd - res=oai.send_recv(cmd, False, timeout=600) -# print "\t\t > "+cmd -# print "\t\t < "+res - - cmd= " echo \"Stopping EXmimoRF Stop... \" >> " + logdir + "/oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync "; - result = oai.send_recv(cmd) -# print "\t\t > "+cmd -# print "\t\t < "+result - - #res = oai.send_recv(ExmimoRfStop, False) - cmd = " ( date ;echo \"Finished cleaning old programs.. \" ; dmesg | tail)>> $HOME/.oai_test_setup_cleanup.log.`hostname` 2>&1 ; sync" - res=oai.send_recv(cmd) -# print "\t\t > "+cmd -# print "\t\t < "+res - -# \brief Class thread to launch a generic command on remote machine -# \param threadID number of thread (for book keeping) -# \param threadname string of threadname (for book keeping) -# \param machine machine name on which to run the command -# \param username username with which to login -# \param password password with which to login -# \param cmd command as a string to run on remote machine -# \parma sudo if True sudo is set -# \param timeout timeout of command in seconds -class oaiThread (threading.Thread): - def __init__(self, threadID, threadname, machine, username, password, cmd, sudo, timeout): - threading.Thread.__init__(self) - self.threadID = threadID - self.threadname = threadname - self.machine = machine - self.username = username - self.password = password - self.cmd = cmd - self.sudo = sudo - self.timeout = timeout - def run(self): - try: - oai = openair('localdomain',self.machine) - oai.connect(self.username, self.password) - # print "Starting " + self.threadname + " on machine " + self.machine - result = oai.send_recv(self.cmd, self.sudo, self.timeout) - #print "result = " + result - #print "Exiting " + self.threadname - oai.disconnect() - except Exception, e: - error='' - error = error + ' In class oaiThread, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n threadID = ' + str(self.threadID) + '\n threadname = ' + self.threadname + '\n timeout = ' + str(self.timeout) + '\n machine = ' + self.machine + '\n cmd = ' + self.cmd + '\n timeout = ' + str(self.timeout) + '\n username = ' + self.username + '\n' - error = error + traceback.format_exc() - print error - - -# \brief This class runs test cases with class {execution, compilatation} -# \param threadID number of thread (for book keeping) -# \param name string of threadname (for book keeping) -# \param machine machine name on which to run the command -# \param logdirOAI5GRepo directory on remote machine which as openairinterface5g repo installed -# \param testcasename name of test case to run on remote machine -# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) -# \param user username with which to login -# \param password password with which to login -# \param timeout timeout of command in seconds -# \param ExmimoRfStop command to stop EXMIMO Card -class testCaseThread_generic (threading.Thread): - def __init__(self, threadID, name, machine, logdirOAI5GRepo, testcasename,oldprogramList, CleanupAluLteBox, user, password, timeout, ExmimoRfStop): - threading.Thread.__init__(self) - self.threadID = threadID - self.name = name - self.testcasename = testcasename - self.timeout = timeout - self.machine = machine - self.logdirOAI5GRepo = logdirOAI5GRepo - self.oldprogramList = oldprogramList - self.CleanupAluLteBox = CleanupAluLteBox - self.password=password - self.ExmimoRfStop = ExmimoRfStop - self.user = user - def run(self): - try: - mypassword='' - #addsudo = 'echo \'' + mypassword + '\' | sudo -S -E ' - addpass = 'echo \'' + mypassword + '\' | ' - #user = getpass.getuser() - print "Starting test case : " + self.testcasename + " On machine " + self.machine + " timeout = " + str(self.timeout) - oai = openair('localdomain',self.machine) - oai.connect(self.user, self.password) - #cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox, self.ExmimoRfStop) - logdir_local = os.environ.get('OPENAIR_DIR') - logdir_local_testcase = logdir_local +'/cmake_targets/autotests/log/'+ self.testcasename - logdir_local_base = logdir_local +'/cmake_targets/autotests/log/' - logdir_remote_testcase = self.logdirOAI5GRepo + '/cmake_targets/autotests/log/' + self.testcasename - logdir_remote = self.logdirOAI5GRepo + '/cmake_targets/autotests/log/' - logfile_task_testcasename = logdir_local_testcase + '/test_task' + '_' + self.testcasename + '_.log' - logfile_task_testcasename_out = logdir_remote + '/test_task_out' + '_' + self.testcasename + '_.log' - #print "logdir_local_testcase = " + logdir_local_testcase - #print "logdir_remote_testcase = " + logdir_remote_testcase - #if os.path.exists(logdir_local_testcase) == True : - # os.removedirs(logdir_local_testcase) - #os.mkdir(logdir_local_testcase) - os.system("rm -fr " + logdir_local_testcase ) - os.system("mkdir -p " + logdir_local_testcase) - cmd = "mkdir -p " + logdir_remote_testcase - res = oai.send_recv(cmd, False, self.timeout) - #print "res = " + res - - cmd = "( cd " + self.logdirOAI5GRepo + " \n " - cmd = cmd + "source oaienv \n" - cmd = cmd + "$OPENAIR_DIR/cmake_targets/autotests/run_exec_autotests.bash --run-group \"" + self.testcasename + "\" -p \'\'" - cmd = cmd + " ) >& " + logfile_task_testcasename_out + " ; " + "mkdir -p " + logdir_remote_testcase + "; mv " + logfile_task_testcasename_out + " " +logdir_remote_testcase - - #print "cmd = " + cmd - res = oai.send_recv(cmd, False, self.timeout) - #print "res = " + res - #print "ThreadID = " + str(self.threadID) + "ThreadName: " + self.name + " testcasename: " + self.testcasename + "Execution Result = " + res - write_file(logfile_task_testcasename, cmd, mode="w") - #Now we copy all the remote files - #ssh = SSHSession(self.machine , username=user, key_file=None, password=self.password) - #ssh.get_all(logdir_remote_testcase , logdir_local_base) - SSHSessionWrapper(self.machine, self.user, None, self.password, logdir_remote_testcase, logdir_local_base, "get_all") - print "Finishing test case : " + self.testcasename + " On machine " + self.machine - #cleanOldPrograms(oai, self.oldprogramList, self.CleanupAluLteBox, self.ExmimoRfStop) - #oai.kill(user,mypassword) - oai.disconnect() - except Exception, e: - error='' - error = error + ' In Class = testCaseThread_generic, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n threadID = ' + str(self.threadID) + '\n threadName = ' + self.name + '\n testcasename = ' + self.testcasename + '\n machine = ' + self.machine + '\n logdirOAI5GRepo = ' + self.logdirOAI5GRepo + '\n' + '\n timeout = ' + str(self.timeout) + '\n user = ' + self.user - error = error + traceback.format_exc() - print error - print "Continuing with next test case..." - #sys.exit() - - - -# \bried function to run a command as a sudo -# \param cmd command as a string -# \param password password to be supplied -def addsudo (cmd, password=""): - cmd = 'echo \'' + password + '\' | sudo -S -E bash -c \' ' + cmd + '\' ' - return cmd - -# \brief handler for executing test cases (compilation, execution) -# \param name of testcase -# \param threadListGeneric list of threads which are already running on remote machines -# \param oldprogramList list of programs which must be terminated before running a test case -# \param logdirOAI5GRepo directory on remote machine which as openairinterface5g repo installed -# \param MachineList list of all machines on which generic test cases can be run -# \param user username with which to login -# \param password password with which to login -# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) -# \param timeout timeout of command in seconds -# \param ExmimoRfStop command to stop EXMIMO Card -def handle_testcaseclass_generic (testcasename, threadListGeneric, oldprogramList, logdirOAI5GRepo, MachineList, user, password, CleanupAluLteBox,timeout, ExmimoRfStop): - try: - mypassword=password - MachineListFree=[] - threadListNew=[] - while MachineListFree.__len__() == 0 : - MachineListBusy=[] - MachineListFree=[] - threadListNew=[] - #first we need to find the list of free machines that we could run our test case - if threadListGeneric.__len__() ==0 : - #This means no thread is started yet - MachineListFree = MachineList[:] - else : - for param in threadListGeneric : - thread_id = param["thread_id"] - machine = param["Machine"] - testcasenameold = param["testcasename"] - thread_id.join(1) - if thread_id.isAlive() == True: - threadListNew.append(param) - print "thread_id is alive: testcasename: " + testcasenameold + " on machine "+ machine - if machine not in MachineListBusy: - MachineListBusy.append(machine) - else : - print "thread_id is finished: testcasename: " + testcasenameold + " on machine " + machine - #threadListGeneric.remove(param) - #if machine not in MachineListFree: - # MachineListFree.append(machine) - #Now we check if there is at least one free machine - MachineListFree = MachineList[:] - for machine in MachineListBusy: - if machine in MachineListFree: - MachineListFree.remove(machine) - print "MachineListFree = " + ','.join(MachineListFree) - print "MachineListBusy = " + ','.join(MachineListBusy) - print "MachineList = " + ','.join(MachineList) - machine = MachineListFree[0] - thread = testCaseThread_generic(1,"Generic Thread_"+testcasename+"_"+ "machine_", machine, logdirOAI5GRepo, testcasename, oldprogramList, CleanupAluLteBox, user, password, timeout, ExmimoRfStop) - param={"thread_id":thread, "Machine":machine, "testcasename":testcasename} - thread.start() - threadListNew.append(param) - return threadListNew - except Exception, e: - error='' - error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n testcasename = ' + testcasename + '\n logdirOAI5GRepo = ' + logdirOAI5GRepo + '\n MachineList = ' + ','.join(MachineList) + '\n timeout = ' + str(timeout) + '\n' + 'user = ' + user - error = error + traceback.format_exc() - print error - print "Continuing..." - #sys.exit(1) - -# \brief Blocking wait for all threads related to generic testcase execution, class (compilation and execution) -# \param threadListGeneric list of threads which are running on remote machines -# \param timeout time to wait on threads in seconds -def wait_testcaseclass_generic_threads(threadListGeneric, timeout = 1): - threadListGenericNew=[] - for param in threadListGeneric: - thread_id = param["thread_id"] - machine = param["Machine"] - testcasenameold = param["testcasename"] - thread_id.join(timeout) - if thread_id.isAlive() == True: - threadListGenericNew.append(param) - print "thread_id on machine: " + machine + " is still alive: testcasename: " + testcasenameold - print " Exiting now..." - sys.exit(1) - else: - print "thread_id on machine: " + machine + " is stopped: testcasename: " + testcasenameold - #threadListGeneric.remove(param) - return threadListGenericNew - - -# \brief handler for executing test cases (lte-softmodem) -# \param testcase name of testcase -# \param oldprogramList list of programs which must be terminated before running a test case -# \param logdirOAI5GRepo directory on remote machine which has openairinterface5g repo installed -# \param logdirOpenaircnRepo directory on remote machine which has openair-cn repo installed -# \param MachineList list of all machines on which test cases can be run -# \param user username with which to login -# \param password password with which to login -# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) -# \param ExmimoRfStop command to stop EXMIMO Card -# \param nruns_lte-softmodem global parameter to override number of runs (nruns) within the test case -def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, user, password, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, timeout_cmd): - #We ignore the password sent to this function for secuirity reasons for password present in log files - #It is recommended to add a line in /etc/sudoers that looks something like below. The line below will run sudo without password prompt - # your_user_name ALL=(ALL:ALL) NOPASSWD: ALL - mypassword='' - #addsudo = 'echo \'' + mypassword + '\' | sudo -S -E ' - addpass = 'echo \'' + mypassword + '\' | ' - #user = getpass.getuser() - testcasename = testcase.get('id') - testcaseclass = testcase.findtext('class',default='') - if timeout_cmd == '': - timeout_cmd = testcase.findtext('TimeOut_cmd',default='') - timeout_cmd = int(float(timeout_cmd)) - #Timeout_thread is more than that of cmd to have room for compilation time, etc - timeout_thread = timeout_cmd + 300 - if nruns_lte_softmodem == '': - nruns = testcase.findtext('nruns',default='') - else: - nruns = nruns_lte_softmodem - nruns = int(float(nruns)) - tags = testcase.findtext('tags',default='') - - RRHMachine = testcase.findtext('RRH',default='') - RRH_compile_prog = testcase.findtext('RRH_compile_prog',default='') - RRH_compile_prog_args = testcase.findtext('RRH_compile_prog_args',default='') - RRH_pre_exec = testcase.findtext('RRH_pre_exec',default='') - RRH_pre_exec_args = testcase.findtext('RRH_pre_exec_args',default='') - RRH_main_exec = testcase.findtext('RRH_main_exec',default='') - RRH_main_exec_args = testcase.findtext('RRH_main_exec_args',default='') - RRH_terminate_missing_procs = testcase.findtext('RRH_terminate_missing_procs',default='False') - - - eNBMachine = testcase.findtext('eNB',default='') - eNB_config_file = testcase.findtext('eNB_config_file',default='') - eNB_compile_prog = testcase.findtext('eNB_compile_prog',default='') - eNB_compile_prog_args = testcase.findtext('eNB_compile_prog_args',default='') - eNB_pre_exec = testcase.findtext('eNB_pre_exec',default='') - eNB_pre_exec_args = testcase.findtext('eNB_pre_exec_args',default='') - eNB_main_exec = testcase.findtext('eNB_main_exec',default='') - eNB_main_exec_args = testcase.findtext('eNB_main_exec_args',default='') - eNB_traffic_exec = testcase.findtext('eNB_traffic_exec',default='') - eNB_traffic_exec_args = testcase.findtext('eNB_traffic_exec_args',default='') - eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='False') - eNB_search_expr_true = testcase.findtext('eNB_search_expr_true','') - if re.compile('\w+').match(eNB_search_expr_true) != None: - eNB_search_expr_true = eNB_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' - - UEMachine = testcase.findtext('UE',default='') - UE_config_file = testcase.findtext('UE_config_file',default='') - UE_compile_prog = testcase.findtext('UE_compile_prog',default='') - UE_compile_prog_args = testcase.findtext('UE_compile_prog_args',default='') - UE_pre_exec = testcase.findtext('UE_pre_exec',default='') - UE_pre_exec_args = testcase.findtext('UE_pre_exec_args',default='') - UE_main_exec = testcase.findtext('UE_main_exec',default='') - UE_main_exec_args = testcase.findtext('UE_main_exec_args',default='') - UE_traffic_exec = testcase.findtext('UE_traffic_exec',default='') - UE_traffic_exec_args = testcase.findtext('UE_traffic_exec_args',default='') - UE_terminate_missing_procs = testcase.findtext('UE_terminate_missing_procs',default='False') - UE_search_expr_true = testcase.findtext('UE_search_expr_true','') - UE_stop_script = testcase.findtext('UE_stop_script','') - if re.compile('\w+').match(UE_search_expr_true) != None: - UE_search_expr_true = UE_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' - - EPCMachine = testcase.findtext('EPC',default='') - EPC_config_file = testcase.findtext('EPC_config_file',default='') - EPC_compile_prog = testcase.findtext('EPC_compile_prog',default='') - EPC_compile_prog_args = testcase.findtext('EPC_compile_prog_args',default='') - HSS_compile_prog = testcase.findtext('HSS_compile_prog',default='') - HSS_compile_prog_args = testcase.findtext('HSS_compile_prog_args',default='') - - EPC_pre_exec= testcase.findtext('EPC_pre_exec',default='') - EPC_pre_exec_args = testcase.findtext('EPC_pre_exec_args',default='') - EPC_main_exec= testcase.findtext('EPC_main_exec',default='') - EPC_main_exec_args = testcase.findtext('EPC_main_exec_args',default='') - HSS_main_exec= testcase.findtext('HSS_main_exec',default='') - HSS_main_exec_args = testcase.findtext('HSS_main_exec_args',default='') - EPC_traffic_exec = testcase.findtext('EPC_traffic_exec',default='') - EPC_traffic_exec_args = testcase.findtext('EPC_traffic_exec_args',default='') - EPC_terminate_missing_procs = testcase.findtext('EPC_terminate_missing_procs',default='False') - EPC_search_expr_true = testcase.findtext('EPC_search_expr_true','') - if re.compile('\w+').match(EPC_search_expr_true) != None: - EPC_search_expr_true = EPC_search_expr_true + ' duration=' + str(timeout_cmd-90) + 's' - - index_eNBMachine = MachineList.index(eNBMachine) - index_UEMachine = MachineList.index(UEMachine) - index_EPCMachine = MachineList.index(EPCMachine) - cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep OPENAIR' - oai_eNB = openair('localdomain', eNBMachine) - oai_eNB.connect(user, password) - res= oai_eNB.send_recv(cmd) - oai_UE = openair('localdomain', UEMachine) - oai_UE.connect(user, password) - res = oai_eNB.send_recv(cmd) - oai_EPC = openair('localdomain', EPCMachine) - oai_EPC.connect(user, password) - res = oai_eNB.send_recv(cmd) - if RRHMachine != '': - cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep OPENAIR' - index_RRHMachine = MachineList.index(RRHMachine) - oai_RRH = openair('localdomain', RRHMachine) - oai_RRH.connect(user, password) - res= oai_RRH.send_recv(cmd) - #cleanOldPrograms(oai_eNB, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) - #cleanOldPrograms(oai_UE, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) - #cleanOldPrograms(oai_EPC, oldprogramList, CleanUpAluLteBox, ExmimoRfStop) - logdir_local = os.environ.get('OPENAIR_DIR') - if logdir_local is None: - print "Environment variable OPENAIR_DIR not set correctly" - sys.exit() - - #Make the log directory of test case - #cmd = 'mkdir -p ' + logdir_eNB - #result = oai_eNB.send_recv(cmd) - #cmd = 'mkdir -p ' + logdir_UE - #result = oai_UE.send_recv(cmd) - #cmd = 'mkdir -p ' + logdir_EPC - #result = oai_EPC.send_recv(cmd) - - print "Updating the config files for ENB/UE/EPC..." - #updating the eNB/UE/EPC configuration file from the test case - #update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo) - #update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo) - #update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo) - test_result=1 - test_result_string='' - start_time=time.time() - for run in range(0,nruns): - run_result=1 - run_result_string='' - logdir_eNB = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) - logdir_RRH = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) - logdir_UE = logdirOAI5GRepo+'/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) - logdir_EPC = logdirOpenaircnRepo+'/TEST/autotests/log/'+ testcasename + '/run_' + str(run) - logdir_local_testcase = logdir_local + '/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) - #Make the log directory of test case - if RRHMachine != '': - cmd = 'rm -fr ' + logdir_RRH + ' ; mkdir -p ' + logdir_RRH - result = oai_RRH.send_recv(cmd) - cmd = 'rm -fr ' + logdir_eNB + ' ; mkdir -p ' + logdir_eNB - result = oai_eNB.send_recv(cmd) - cmd = 'rm -fr ' + logdir_UE + ' ; mkdir -p ' + logdir_UE - result = oai_UE.send_recv(cmd) - cmd = 'rm -fr ' + logdir_EPC + '; mkdir -p ' + logdir_EPC - result = oai_EPC.send_recv(cmd) - cmd = ' rm -fr ' + logdir_local_testcase + ' ; mkdir -p ' + logdir_local_testcase - result = os.system(cmd) - - if RRHMachine != '': - logfile_compile_RRH = logdir_RRH + '/RRH_compile' + '_' + str(run) + '_.log' - logfile_exec_RRH = logdir_RRH + '/RRH_exec' + '_' + str(run) + '_.log' - logfile_pre_exec_RRH = logdir_RRH + '/RRH_pre_exec' + '_' + str(run) + '_.log' - logfile_task_RRH_compile_out = logdir_RRH + '/RRH_task_compile_out' + '_' + str(run) + '_.log' - logfile_task_RRH_compile = logdir_local_testcase + '/RRH_task_compile' + '_' + str(run) + '_.log' - logfile_task_RRH_out = logdir_RRH + '/RRH_task_out' + '_' + str(run) + '_.log' - logfile_task_RRH = logdir_local_testcase + '/RRH_task' + '_' + str(run) + '_.log' - task_RRH_compile = ' ( uname -a ; date \n' - task_RRH_compile = task_RRH_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' - task_RRH_compile = task_RRH_compile + 'env |grep OPENAIR \n' - if RRH_compile_prog != "": - task_RRH_compile = task_RRH_compile + ' ( ' + RRH_compile_prog + ' '+ RRH_compile_prog_args + ' ) > ' + logfile_compile_RRH + ' 2>&1 \n' - task_RRH_compile = task_RRH_compile + ' date ) > ' + logfile_task_RRH_compile_out + ' 2>&1 ' - write_file(logfile_task_RRH_compile, task_RRH_compile, mode="w") - - task_RRH = ' ( uname -a ; date \n' - task_RRH = task_RRH + ' export OPENAIR_TESTDIR=' + logdir_RRH + '\n' - task_RRH = task_RRH + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' - task_RRH = task_RRH + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' - - if RRH_pre_exec != "": - task_RRH = task_RRH + ' ( date; ' + RRH_pre_exec + ' '+ RRH_pre_exec_args + ' ) > ' + logfile_pre_exec_RRH + ' 2>&1 \n' - if RRH_main_exec != "": - task_RRH = task_RRH + ' ( date; ' + addsudo(RRH_main_exec + ' ' + RRH_main_exec_args, mypassword) + ' ) > ' + logfile_exec_RRH + ' 2>&1 & \n' - task_RRH = task_RRH + 'array_exec_pid+=($!) \n' - task_RRH = task_RRH + 'echo eNB_main_exec PID = $! \n' - #terminate the eNB test case after timeout_cmd seconds - task_RRH = task_RRH + finalize_deploy_script (timeout_cmd, RRH_terminate_missing_procs) + ' \n' - task_RRH = task_RRH + 'handle_ctrl_c' + '\n' - task_RRH = task_RRH + ' ) > ' + logfile_task_RRH_out + ' 2>&1 ' - write_file(logfile_task_RRH, task_RRH, mode="w") - - logfile_compile_eNB = logdir_eNB + '/eNB_compile' + '_' + str(run) + '_.log' - logfile_exec_eNB = logdir_eNB + '/eNB_exec' + '_' + str(run) + '_.log' - logfile_pre_exec_eNB = logdir_eNB + '/eNB_pre_exec' + '_' + str(run) + '_.log' - logfile_traffic_eNB = logdir_eNB + '/eNB_traffic' + '_' + str(run) + '_.log' - logfile_task_eNB_compile_out = logdir_eNB + '/eNB_task_compile_out' + '_' + str(run) + '_.log' - logfile_task_eNB_compile = logdir_local_testcase + '/eNB_task_compile' + '_' + str(run) + '_.log' - logfile_task_eNB_out = logdir_eNB + '/eNB_task_out' + '_' + str(run) + '_.log' - logfile_task_eNB = logdir_local_testcase + '/eNB_task' + '_' + str(run) + '_.log' - logfile_local_traffic_eNB_out = logdir_local_testcase + '/eNB_traffic' + '_' + str(run) + '_.log' - logfile_tshark_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.log' - logfile_pcap_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.pcap' - logfile_pcap_zip_eNB = logdir_eNB + '/eNB_tshark' + '_' + str(run) + '_.pcap.zip' - logfile_pcap_tmp_eNB = '/tmp/' + '/eNB_tshark' + '_' + str(run) + '_.pcap' - - task_eNB_compile = ' ( uname -a ; date \n' - task_eNB_compile = task_eNB_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' - task_eNB_compile = task_eNB_compile + 'env |grep OPENAIR \n' - task_eNB_compile = task_eNB_compile + update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' - if eNB_compile_prog != "": - task_eNB_compile = task_eNB_compile + ' ( ' + eNB_compile_prog + ' '+ eNB_compile_prog_args + ' ) > ' + logfile_compile_eNB + ' 2>&1 \n' - task_eNB_compile = task_eNB_compile + ' date ) > ' + logfile_task_eNB_compile_out + ' 2>&1 ' - write_file(logfile_task_eNB_compile, task_eNB_compile, mode="w") - - task_eNB = ' ( uname -a ; date \n' - task_eNB = task_eNB + ' export OPENAIR_TESTDIR=' + logdir_eNB + '\n' - task_eNB = task_eNB + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' - task_eNB = task_eNB + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' - - if eNB_pre_exec != "": - task_eNB = task_eNB + ' ( date; ' + eNB_pre_exec + ' '+ eNB_pre_exec_args + ' ) > ' + logfile_pre_exec_eNB + ' 2>&1 \n' - if eNB_main_exec != "": - task_eNB = task_eNB + ' ( date; ' + addsudo(eNB_main_exec + ' ' + eNB_main_exec_args, mypassword) + ' ) > ' + logfile_exec_eNB + ' 2>&1 & \n' - task_eNB = task_eNB + 'array_exec_pid+=($!) \n' - task_eNB = task_eNB + 'echo eNB_main_exec PID = $! \n' - if eNB_traffic_exec != "": - cmd_traffic = eNB_traffic_exec + ' ' + eNB_traffic_exec_args - if cmd_traffic.find('-c') >= 0: - cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60) - task_eNB = task_eNB + ' (date; ' + cmd_traffic + ' ) > ' + logfile_traffic_eNB + ' 2>&1 & \n' - task_eNB = task_eNB + 'array_exec_pid+=($!) \n' - task_eNB = task_eNB + 'echo eNB_traffic_exec PID = $! \n' - - task_eNB = task_eNB + ' (date; sudo rm -f ' + logfile_pcap_tmp_eNB + ' ; sudo -E tshark -i lo -s 65535 -a duration:' + str(timeout_cmd-10)+ ' -w ' + logfile_pcap_tmp_eNB+ ' ; sudo -E chown ' + user + ' ' + logfile_pcap_tmp_eNB + ' ; zip -j -9 ' + logfile_pcap_zip_eNB + ' ' + logfile_pcap_tmp_eNB + ' ) > ' + logfile_tshark_eNB + ' 2>&1 & \n ' - task_eNB = task_eNB + 'array_exec_pid+=($!) \n' - task_eNB = task_eNB + 'echo eNB_tshark_exec PID = $! \n' - #terminate the eNB test case after timeout_cmd seconds - task_eNB = task_eNB + finalize_deploy_script (timeout_cmd, eNB_terminate_missing_procs) + ' \n' - #task_eNB = task_eNB + 'sleep ' + str(timeout_cmd) + ' \n' - task_eNB = task_eNB + 'handle_ctrl_c' + '\n' - task_eNB = task_eNB + ' ) > ' + logfile_task_eNB_out + ' 2>&1 ' - write_file(logfile_task_eNB, task_eNB, mode="w") - - #task_eNB = 'echo \" ' + task_eNB + '\" > ' + logfile_script_eNB + ' 2>&1 ; ' + task_eNB - logfile_compile_UE = logdir_UE + '/UE_compile' + '_' + str(run) + '_.log' - logfile_exec_UE = logdir_UE + '/UE_exec' + '_' + str(run) + '_.log' - logfile_pre_exec_UE = logdir_UE + '/UE_pre_exec' + '_' + str(run) + '_.log' - logfile_traffic_UE = logdir_UE + '/UE_traffic' + '_' + str(run) + '_.log' - logfile_task_UE_out = logdir_UE + '/UE_task_out' + '_' + str(run) + '_.log' - logfile_task_UE = logdir_local_testcase + '/UE_task' + '_' + str(run) + '_.log' - logfile_task_UE_compile_out = logdir_UE + '/UE_task_compile_out' + '_' + str(run) + '_.log' - logfile_task_UE_compile = logdir_local_testcase + '/UE_task_compile' + '_' + str(run) + '_.log' - logfile_local_traffic_UE_out = logdir_local_testcase + '/UE_traffic' + '_' + str(run) + '_.log' - - task_UE_compile = ' ( uname -a ; date \n' - task_UE_compile = task_UE_compile + 'array_exec_pid=()' + '\n' - task_UE_compile = task_UE_compile + 'cd ' + logdirOAI5GRepo + '\n' - task_UE_compile = task_UE_compile + 'source oaienv \n' - task_UE_compile = task_UE_compile + 'source cmake_targets/tools/build_helper \n' - task_UE_compile = task_UE_compile + 'env |grep OPENAIR \n' - task_UE_compile = task_UE_compile + update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' - if UE_compile_prog != "": - task_UE_compile = task_UE_compile + ' ( ' + UE_compile_prog + ' '+ UE_compile_prog_args + ' ) > ' + logfile_compile_UE + ' 2>&1 \n' - task_UE_compile = task_UE_compile + ' ) > ' + logfile_task_UE_compile_out + ' 2>&1 ' - write_file(logfile_task_UE_compile, task_UE_compile, mode="w") - - task_UE = ' ( uname -a ; date \n' - task_UE = task_UE + 'array_exec_pid=()' + '\n' - task_UE = task_UE + 'cd ' + logdirOAI5GRepo + '\n' - task_UE = task_UE + 'source oaienv \n' - task_UE = task_UE + 'source cmake_targets/tools/build_helper \n' - task_UE = task_UE + 'env |grep OPENAIR \n' - if UE_pre_exec != "": - task_UE = task_UE + ' ( date; ' + UE_pre_exec + ' '+ UE_pre_exec_args + ' ) > ' + logfile_pre_exec_UE + ' 2>&1 \n' - if UE_main_exec != "": - task_UE = task_UE + ' ( date; ' + addsudo(UE_main_exec + ' ' + UE_main_exec_args, mypassword) + ' ) > ' + logfile_exec_UE + ' 2>&1 & \n' - task_UE = task_UE + 'array_exec_pid+=($!) \n' - task_UE = task_UE + 'echo UE_main_exec PID = $! \n' - if UE_traffic_exec != "": - cmd_traffic = UE_traffic_exec + ' ' + UE_traffic_exec_args - if cmd_traffic.find('-c') >= 0: - cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60) - task_UE = task_UE + ' ( date; ' + cmd_traffic + ' ) >' + logfile_traffic_UE + ' 2>&1 & \n' - task_UE = task_UE + 'array_exec_pid+=($!) \n' - task_UE = task_UE + 'echo UE_traffic_exec PID = $! \n' - #terminate the UE test case after timeout_cmd seconds - task_UE = task_UE + finalize_deploy_script (timeout_cmd, UE_terminate_missing_procs) + ' \n' - #task_UE = task_UE + 'sleep ' + str(timeout_cmd) + ' \n' - task_UE = task_UE + 'handle_ctrl_c' + '\n' - task_UE = task_UE + ' ) > ' + logfile_task_UE_out + ' 2>&1 ' - write_file(logfile_task_UE, task_UE, mode="w") - #task_UE = 'echo \" ' + task_UE + '\" > ' + logfile_script_UE + ' 2>&1 ; ' + task_UE - - logfile_compile_EPC = logdir_EPC + '/EPC_compile' + '_' + str(run) + '_.log' - logfile_compile_HSS = logdir_EPC + '/HSS_compile' + '_' + str(run) + '_.log' - logfile_exec_EPC = logdir_EPC + '/EPC_exec' + '_' + str(run) + '_.log' - logfile_pre_exec_EPC = logdir_EPC + '/EPC_pre_exec' + '_' + str(run) + '_.log' - logfile_exec_HSS = logdir_EPC + '/HSS_exec' + '_' + str(run) + '_.log' - logfile_traffic_EPC = logdir_EPC + '/EPC_traffic' + '_' + str(run) + '_.log' - logfile_task_EPC_out = logdir_EPC + '/EPC_task_out' + '_' + str(run) + '_.log' - logfile_task_EPC = logdir_local_testcase + '/EPC_task' + '_' + str(run) + '_.log' - logfile_task_EPC_compile_out = logdir_EPC + '/EPC_task_compile_out' + '_' + str(run) + '_.log' - logfile_task_EPC_compile = logdir_local_testcase + '/EPC_task_compile' + '_' + str(run) + '_.log' - logfile_local_traffic_EPC_out = logdir_local_testcase + '/EPC_traffic' + '_' + str(run) + '_.log' - - task_EPC_compile = ' ( uname -a ; date \n' - task_EPC_compile = task_EPC_compile + 'array_exec_pid=()' + '\n' - task_EPC_compile = task_EPC_compile + 'cd ' + logdirOpenaircnRepo + ' ; source oaienv \n' - task_EPC_compile = task_EPC_compile + update_config_file(oai_EPC, EPC_config_file, logdirOpenaircnRepo, logdirOpenaircnRepo+'/TEST/autotests/tools/search_repl.py') + '\n' - task_EPC_compile = task_EPC_compile + 'source BUILD/TOOLS/build_helper \n' - if EPC_compile_prog != "": - task_EPC_compile = task_EPC_compile + '(' + EPC_compile_prog + ' ' + EPC_compile_prog_args + ' ) > ' + logfile_compile_EPC + ' 2>&1 \n' - if HSS_compile_prog != "": - task_EPC_compile = task_EPC_compile + '(' + HSS_compile_prog + ' ' + HSS_compile_prog_args + ' ) > ' + logfile_compile_HSS + ' 2>&1 \n' - task_EPC_compile = task_EPC_compile + ' ) > ' + logfile_task_EPC_compile_out + ' 2>&1 ' - write_file(logfile_task_EPC_compile, task_EPC_compile, mode="w") - - task_EPC = ' ( uname -a ; date \n' - task_EPC = task_EPC + ' export OPENAIRCN_TESTDIR=' + logdir_EPC + '\n' - task_EPC = task_EPC + 'array_exec_pid=()' + '\n' - task_EPC = task_EPC + 'cd ' + logdirOpenaircnRepo + '; source oaienv\n' - task_EPC = task_EPC + 'source BUILD/TOOLS/build_helper \n' - if EPC_pre_exec != "": - task_EPC = task_EPC + ' ( date; ' + EPC_pre_exec + ' '+ EPC_pre_exec_args + ' ) > ' + logfile_pre_exec_EPC + ' 2>&1 \n' - if HSS_main_exec != "": - task_EPC = task_EPC + '( date; ' + addsudo (HSS_main_exec + ' ' + HSS_main_exec_args, mypassword) + ' ) > ' + logfile_exec_HSS + ' 2>&1 & \n' - task_EPC = task_EPC + 'array_exec_pid+=($!) \n' - task_EPC = task_EPC + 'echo HSS_main_exec PID = $! \n' - if EPC_main_exec != "": - task_EPC = task_EPC + '( date; ' + addsudo (EPC_main_exec + ' ' + EPC_main_exec_args, mypassword) + ' ) > ' + logfile_exec_EPC + ' 2>&1 & \n' - task_EPC = task_EPC + 'array_exec_pid+=($!) \n' - task_EPC = task_EPC + 'echo EPC_main_exec PID = $! \n' - if EPC_traffic_exec != "": - cmd_traffic = EPC_traffic_exec + ' ' + EPC_traffic_exec_args - if cmd_traffic.find('-c') >= 0: - cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60) - task_EPC = task_EPC + '( date; ' + cmd_traffic + ' ) > ' + logfile_traffic_EPC + ' 2>&1 & \n' - task_EPC = task_EPC + 'array_exec_pid+=($!) \n' - task_EPC = task_EPC + 'echo EPC_traffic_exec PID = $! \n' - #terminate the EPC test case after timeout_cmd seconds - task_EPC = task_EPC + finalize_deploy_script (timeout_cmd, EPC_terminate_missing_procs) + '\n' - #task_EPC = task_EPC + 'sleep ' + str(timeout_cmd) + '\n' - task_EPC = task_EPC + 'handle_ctrl_c' '\n' - task_EPC = task_EPC + ' ) > ' + logfile_task_EPC_out + ' 2>&1 ' - write_file(logfile_task_EPC, task_EPC, mode="w") - - #first we compile all the programs but only for run_0 - if run == 0: - thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC_compile, False, timeout_thread) - thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB_compile, False, timeout_thread) - thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE_compile, False, timeout_thread) - if RRHMachine != '': - thread_RRH = oaiThread(4, "RRH_thread", RRHMachine, user, password , task_RRH_compile, False, timeout_thread) - threads=[] - threads.append(thread_eNB) - threads.append(thread_UE) - threads.append(thread_EPC) - if RRHMachine != '': - threads.append(thread_RRH) - # Start new Threads - thread_eNB.start() - thread_UE.start() - thread_EPC.start() - if RRHMachine != '': - thread_RRH.start() - #Wait for all the compile threads to complete - for t in threads: - t.join() - - #Now we execute all the threads - thread_EPC = oaiThread(1, "EPC_thread", EPCMachine, user, password , task_EPC, False, timeout_thread) - thread_eNB = oaiThread(2, "eNB_thread", eNBMachine, user, password , task_eNB, False, timeout_thread) - thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE, False, timeout_thread) - if RRHMachine != '': - thread_RRH = oaiThread(4, "RRH_thread", RRHMachine, user, password , task_RRH, False, timeout_thread) - threads=[] - threads.append(thread_eNB) - threads.append(thread_UE) - threads.append(thread_EPC) - if RRHMachine != '': - threads.append(thread_RRH) - # Start new Threads - - thread_eNB.start() - thread_UE.start() - thread_EPC.start() - if RRHMachine != '': - thread_RRH.start() - #Wait for all the compile threads to complete - for t in threads: - t.join() - #Now we get the log files from remote machines on the local machine - if RRHMachine != '': - cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC, oai_RRH] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC, logdir_RRH], logdirOAI5GRepo) - else: - cleanOldProgramsAllMachines([oai_eNB, oai_UE, oai_EPC] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB, logdir_UE, logdir_EPC], logdirOAI5GRepo) - logfile_UE_stop_script_out = logdir_UE + '/UE_stop_script_out' + '_' + str(run) + '_.log' - logfile_UE_stop_script = logdir_local_testcase + '/UE_stop_script' + '_' + str(run) + '_.log' - - if UE_stop_script != "": - cmd = ' ( uname -a ; date \n' - cmd = cmd + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' - cmd = cmd + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' - cmd = cmd + UE_stop_script + '\n' - cmd = cmd + ') > ' + logfile_UE_stop_script_out + ' 2>&1 ' - write_file(logfile_UE_stop_script , cmd, mode="w") - thread_UE = oaiThread(4, "UE_thread", UEMachine, user, password , cmd, False, timeout_thread) - thread_UE.start() - thread_UE.join() - - #Now we change the permissions of the logfiles to avoid some of them being with root permissions - cmd = 'sudo -E chown -R ' + user + ' ' + logdir_eNB - res= oai_eNB.send_recv(cmd) - print "Changing permissions of logdir <" + logdir_eNB + "> in eNB machine..." + res - - cmd = 'sudo -E chown -R ' + user + ' ' + logdir_UE - res= oai_UE.send_recv(cmd) - print "Changing permissions of logdir <" + logdir_UE + "> in UE machine..." + res - - cmd = 'sudo -E chown -R ' + user + ' ' + logdir_EPC - res= oai_EPC.send_recv(cmd) - print "Changing permissions of logdir <" + logdir_EPC + "> in EPC machine..." + res - - if RRHMachine != '': - cmd = 'sudo -E chown -R ' + user + ' ' + logdir_RRH - res= oai_RRH.send_recv(cmd) - print "Changing permissions of logdir <" + logdir_RRH + "> in RRH machine..." + res - - print "Copying files from EPCMachine : " + EPCMachine + "logdir_EPC = " + logdir_EPC - SSHSessionWrapper(EPCMachine, user, None, password, logdir_EPC, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all") - - print "Copying files from eNBMachine " + eNBMachine + "logdir_eNB = " + logdir_eNB - SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all") - - print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE - SSHSessionWrapper(UEMachine, user, None, password, logdir_UE, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all") - - if RRHMachine != '': - print "Copying files from RRHMachine : " + RRHMachine + "logdir_RRH = " + logdir_RRH - SSHSessionWrapper(RRHMachine, user, None, password, logdir_RRH, logdir_local + '/cmake_targets/autotests/log/'+ testcasename, "get_all") - - - #Currently we only perform throughput tests - tput_run_string='' - result, tput_string = tput_test_search_expr(eNB_search_expr_true, logfile_local_traffic_eNB_out) - tput_run_string = tput_run_string + tput_string - run_result=run_result&result - result, tput_string = tput_test_search_expr(EPC_search_expr_true, logfile_local_traffic_EPC_out) - run_result=run_result&result - tput_run_string = tput_run_string + tput_string - result, tput_string = tput_test_search_expr(UE_search_expr_true, logfile_local_traffic_UE_out) - run_result=run_result&result - tput_run_string = tput_run_string + tput_string - - if run_result == 1: - run_result_string = ' RUN_'+str(run) + ' = PASS' - else: - run_result_string = ' RUN_'+str(run) + ' = FAIL' - - #If there is assertion, we mark the test case as failure as most likely eNB crashed - cmd = "grep -ilr \"assertion\" " + logdir_local_testcase + " | cat " - cmd_out = subprocess.check_output ([cmd], shell=True) - if len(cmd_out) !=0 : - run_result=0 - run_result_string = ' RUN_'+str(run) + ' = FAIL(Assert)' - - #If there is thread busy error, we mark the test case as failure as most likely eNB crashed - cmd = "grep -ilr \"thread busy\" " + logdir_local_testcase + " | cat " - cmd_out = subprocess.check_output ([cmd], shell=True) - if len(cmd_out) !=0: - run_result=0 - run_result_string = ' RUN_'+str(run) + ' = FAIL(Thread_Busy)' - - #If there is Segmentation fault, we mark the test case as failure as most likely eNB crashed - cmd = "grep -ilr \"segmentation fault\" " + logdir_local_testcase + " | cat " - cmd_out = subprocess.check_output ([cmd], shell=True) - if len(cmd_out) !=0: - run_result=0 - run_result_string = ' RUN_'+str(run) + ' = FAIL(SEGFAULT)' - - run_result_string = run_result_string + tput_run_string - - test_result=test_result & run_result - test_result_string=test_result_string + run_result_string - - oai_eNB.disconnect() - oai_UE.disconnect() - oai_EPC.disconnect() - #We need to close the new ssh session that was created - #if index_eNBMachine == index_EPCMachine: - # oai_EPC.disconnect() - #Now we finalize the xml file of the test case - end_time=time.time() - duration= end_time - start_time - xmlFile = logdir_local + '/cmake_targets/autotests/log/'+ testcasename + '/test.' + testcasename + '.xml' - if test_result ==0: - result='FAIL' - else: - result = 'PASS' - xml="\n \n" - write_file(xmlFile, xml, mode="w") - - - - -# \brief handler for executing test cases (lte-softmodem-noS1) -# \param testcase name of testcase -# \param oldprogramList list of programs which must be terminated before running a test case -# \param logdirOAI5GRepo directory on remote machine which has openairinterface5g repo installed -# \param logdirOpenaircnRepo directory on remote machine which has openair-cn repo installed -# \param MachineList list of all machines on which test cases can be run -# \param user username with which to login -# \param password password with which to login -# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) -# \param ExmimoRfStop command to stop EXMIMO Card -# \param nruns_lte-softmodem global parameter to override number of runs (nruns) within the test case -def handle_testcaseclass_softmodem_noS1 (testcase, oldprogramList, logdirOAI5GRepo , logdirOpenaircnRepo, MachineList, user, password, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, timeout_cmd): - #We ignore the password sent to this function for secuirity reasons for password present in log files - #It is recommended to add a line in /etc/sudoers that looks something like below. The line below will run sudo without password prompt - # your_user_name ALL=(ALL:ALL) NOPASSWD: ALL - - indent="\t" - threads=[] - - # - # Test case parameters - # ----------------------------------------------------------------------------- - testcase_verdict = 'PASS' - testcase_time_start = datetime.datetime.now() - testcase_name = testcase.get('id') - testcase_class = testcase.findtext('class',default='') - testcase_desc = testcase.findtext('desc',default='') - if timeout_cmd == '': - timeout_cmd = testcase.findtext('TimeOut_cmd',default='') - timeout_cmd = int(float(timeout_cmd)) - timeout_thread = timeout_cmd + 60 #Timeout_thread is more than that of cmd to have room for compilation time, etc - if nruns_lte_softmodem == '': - nruns = testcase.findtext('nruns',default='') - else: - nruns = nruns_lte_softmodem - nruns = int(float(nruns)) - tags = testcase.findtext('tags',default='') - - max_ntries = testcase.findtext('max_ntries',default='') - if max_ntries : - max_ntries = int(float(max_ntries)) - else : - max_ntries = nruns - - print( indent + "> testcase time start : " + str(testcase_time_start) ) - print( indent + "> testcase class : " + testcase_class ) - print( indent + "> testcase description : " + testcase_desc ) - print( indent + "> testcase timeout : " + str(timeout_cmd) ) - print( indent + "> testcase thread timeout : " + str(timeout_thread) ) - print( indent + "> number of runs : " + str(nruns) ) - print( indent + "> number of max tries : " + str(max_ntries) ) - print( indent + "> testcase tags : " + tags ) - - logdir_local_testcase = openairdir_local + '/cmake_targets/autotests/log/'+ testcasename - logdir_eNB_testcase = logdirOAI5GRepo +'/cmake_targets/autotests/log/'+ testcasename - logdir_UE_testcase = logdirOAI5GRepo +'/cmake_targets/autotests/log/'+ testcasename - - # - # Local checks for test cases - # ----------------------------------------------- - - # Logging directory - if (not os.path.exists(logdir_local_testcase)): - os.system('mkdir -p ' + logdir_local_testcase) - - # - # REMOTE MACHINE COMPILATION - # ------------------------------------------------ - - eNBMachine = testcase.findtext('eNB',default='') - eNB_config_file = testcase.findtext('eNB_config_file',default='') - eNB_compile_prog = testcase.findtext('eNB_compile_prog',default='') - eNB_compile_prog_args = testcase.findtext('eNB_compile_prog_args',default='') - - logfile_compile_eNB = logdir_eNB_testcase + '/eNB_compile.log' - logfile_task_eNB_compile_out = logdir_eNB_testcase + '/eNB_task_compile_out.log' - logfile_task_eNB_compile = logdir_local_testcase + '/eNB_task_compile.log' - - # Check that machine is in test setup machine list - print( Fore.WHITE + indent + "> testcase eNB machine :"), - if (eNBMachine not in MachineList): - print( Fore.RED + eNBMachine + " not in test setup machine list") - testcase_verdict = 'INCON' - else : - print eNBMachine, - # get machine description - eNBMachineDesc = MachineDescDic[eNBMachine] - index_eNBMachine = MachineList.index(eNBMachine) - # check that openairinterface is installed on machine - oai_eNB = openair('localdomain', eNBMachine) - oai_eNB.connect(user, password) - cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep --color=never OPENAIR' - res= oai_eNB.send_recv(cmd) - m = re.search('OPENAIR_HOME', res, re.DOTALL) - if m: - print - # Create testcase directory on remote eNB - cmd = 'rm -fr ' + logdir_eNB_testcase + ' ; mkdir -p ' + logdir_eNB_testcase - result = oai_eNB.send_recv(cmd) - - # Check if we need to compile lte-softmodem-noS1 on remote machine - eNB_compile_cmd = eNB_compile_prog + ' '+ eNB_compile_prog_args - if ('last_compile_prog' in eNBMachineDesc) and eNBMachineDesc['last_compile_prog'] == eNB_compile_cmd: - print( Fore.WHITE + indent + "> eNB machine compilation : skipped -> "+eNB_compile_cmd ) - else: - print( Fore.WHITE + indent + "> eNB machine compilation : triggered -> "+eNB_compile_cmd ) - eNBMachineDesc['last_compile_prog'] = eNB_compile_prog + ' '+ eNB_compile_prog_args # if last compilation is the same do not compile again - task_eNB_compile = ' ( uname -a ; date \n' - task_eNB_compile = task_eNB_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' - task_eNB_compile = task_eNB_compile + 'env |grep OPENAIR \n' - task_eNB_compile = task_eNB_compile + update_config_file(oai_eNB, eNB_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' - if eNB_compile_cmd != "": - task_eNB_compile = task_eNB_compile + ' ( ' + eNB_compile_cmd + ' ) > ' + logfile_compile_eNB + ' 2>&1 \n' - task_eNB_compile = task_eNB_compile + ' date ) > ' + logfile_task_eNB_compile_out + ' 2>&1 ' - write_file(logfile_task_eNB_compile, task_eNB_compile, mode="w") - - - thread_eNB = oaiThread(1, "eNB_thread_compile", eNBMachine, user, password , task_eNB_compile, False, timeout_thread) - threads.append(thread_eNB) - thread_eNB.start() - - else: - print( Fore.RED + " -> OAI5G not properly setup ! please check REMOTE MACHINE PREPARATION step") - testcase_verdict = 'INCON' - - - UEMachine = testcase.findtext('UE',default='') - UE_config_file = testcase.findtext('UE_config_file',default='') - UE_compile_prog = testcase.findtext('UE_compile_prog',default='') - UE_compile_prog_args = testcase.findtext('UE_compile_prog_args',default='') - - logfile_compile_UE = logdir_UE_testcase + '/UE_compile.log' - logfile_task_UE_compile_out = logdir_UE_testcase + '/UE_task_compile_out.log' - logfile_task_UE_compile = logdir_local_testcase + '/UE_task_compile.log' - - # Check that machine is in test setup machine list - print( Fore.WHITE + indent + "> testcase UE machine :"), - if (UEMachine not in MachineList): - print( Fore.RED + UEMachine + " not in test setup machine list") - testcase_verdict = 'INCON' - else : - print UEMachine, - # get machine description - UEMachineDesc = MachineDescDic[UEMachine] - index_UEMachine = MachineList.index(UEMachine) - # check that openairinterface is installed on machine - oai_UE = openair('localdomain', UEMachine) - oai_UE.connect(user, password) - cmd = 'cd ' + logdirOAI5GRepo + '; source oaienv ; env|grep --color=never OPENAIR' - res= oai_UE.send_recv(cmd) - m = re.search('OPENAIR_HOME', res, re.DOTALL) - if m: - print - # Create testcase directory on remote UE - cmd = 'rm -fr ' + logdir_UE_testcase + ' ; mkdir -p ' + logdir_UE_testcase - result = oai_UE.send_recv(cmd) - - # Check if we need to compile lte-softmodem-noS1 on remote machine - UE_compile_cmd = UE_compile_prog + ' '+ UE_compile_prog_args - if ('last_compile_prog' in UEMachineDesc) and UEMachineDesc['last_compile_prog'] == UE_compile_cmd: - print( Fore.WHITE + indent + "> UE machine compilation : skipped -> "+UE_compile_cmd ) - else: - print( Fore.WHITE + indent + "> UE machine compilation : triggered -> "+UE_compile_cmd ) - UEMachineDesc['last_compile_prog'] = UE_compile_prog + ' '+ UE_compile_prog_args - task_UE_compile = ' ( uname -a ; date \n' - task_UE_compile = task_UE_compile + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' - task_UE_compile = task_UE_compile + 'env |grep OPENAIR \n' - task_UE_compile = task_UE_compile + update_config_file(oai_UE, UE_config_file, logdirOAI5GRepo, '$OPENAIR_DIR/cmake_targets/autotests/tools/search_repl.py') + '\n' - if UE_compile_cmd != "": - task_UE_compile = task_UE_compile + ' ( ' + UE_compile_cmd + ' ) > ' + logfile_compile_UE + ' 2>&1 \n' - task_UE_compile = task_UE_compile + ' date ) > ' + logfile_task_UE_compile_out + ' 2>&1 ' - write_file(logfile_task_UE_compile, task_UE_compile, mode="w") - - thread_UE = oaiThread(2, "UE_thread_compile", UEMachine, user, password , task_UE_compile, False, timeout_thread) - threads.append(thread_UE) - thread_UE.start() - - else: - print( Fore.RED + " -> OAI5G not properly setup ! please check REMOTE MACHINE PREPARATION step") - testcase_verdict = 'INCON' - - - - - - - # Wait for Compilation thread to terminate - #----------------------------------------- - for t in threads: - t.join() - - # TODO check that compilation is succeed - - #first we compile all the programs -# thread_UE = oaiThread(3, "UE_thread", UEMachine, user, password , task_UE_compile, False, timeout_thread) -# threads.append(thread_UE) -# thread_UE.start() - - - - - -# index_UEMachine = MachineList.index(UEMachine) -# oai_UE = openair('localdomain', UEMachine) -# oai_UE.connect(user, password) -# res = oai_UE.send_recv(cmd) -# res = oai_eNB.send_recv(cmd) - - - - # - # RUN LOOP - # ------------------------------------------------ - if testcase_verdict != 'PASS': # if something went wrong to not run test cases - max_ntries=0 - - indent="\t\t" - - runs_results = [] - nb_runs = 0 - nb_run_pass = 0 - nb_run_failed = 0 - nb_run_inc = 0 - nb_run_skip = 0 - - nb_seg_fault = 0 - - for run in range(0,max_ntries): - - if nruns == nb_run_pass + nb_run_failed: - break - - nb_runs += 1 - - # - # RUN initialization - # ---------------------------------------------------- - - prefix_string = Fore.WHITE + indent + "> RUN_"+str(run).zfill(2)+" :" - -# print (Fore.WHITE + indent + "> RUN_"+str(run).zfill(2)+" : " ), -# sys.stdout.flush() - - run_start_time=datetime.datetime.now() - - logdir_local_run = openairdir_local + '/cmake_targets/autotests/log/'+ testcasename + '/run_' + str(run) - logdir_eNB_run = logdirOAI5GRepo +'/cmake_targets/autotests/log/' + testcasename + '/run_' + str(run) - logdir_UE_run = logdirOAI5GRepo +'/cmake_targets/autotests/log/' + testcasename + '/run_' + str(run) - - cmd = 'rm -fr ' + logdir_eNB_run + ' ; mkdir -p ' + logdir_eNB_run - result = oai_eNB.send_recv(cmd) - cmd = 'rm -fr ' + logdir_UE_run + ' ; mkdir -p ' + logdir_UE_run - result = oai_UE.send_recv(cmd) - cmd = ' rm -fr ' + logdir_local_run + ' ; mkdir -p ' + logdir_local_run - result = os.system(cmd) - - - # - # RUN parametrization - # ---------------------------------------------------- - eNB_pre_exec = testcase.findtext('eNB_pre_exec',default='') - eNB_pre_exec_args = testcase.findtext('eNB_pre_exec_args',default='') - eNB_main_exec = testcase.findtext('eNB_main_exec',default='') - eNB_main_exec_args = testcase.findtext('eNB_main_exec_args',default='') - eNB_traffic_exec = testcase.findtext('eNB_traffic_exec',default='') - eNB_traffic_exec_args = testcase.findtext('eNB_traffic_exec_args',default='') - eNB_terminate_missing_procs = testcase.findtext('eNB_terminate_missing_procs',default='True') - - logfile_exec_eNB = logdir_eNB_run + '/eNB_exec' + '_' + str(run) + '_.log' - logfile_pre_exec_eNB = logdir_eNB_run + '/eNB_pre_exec' + '_' + str(run) + '_.log' - logfile_task_eNB_out = logdir_eNB_run + '/eNB_task_out' + '_' + str(run) + '_.log' - logfile_traffic_eNB = logdir_eNB_run + '/eNB_traffic' + '_' + str(run) + '_.log' - logfile_task_eNB = logdir_local_run + '/eNB_task' + '_' + str(run) + '_.log' - - task_eNB = ' ( uname -a ; date \n' - task_eNB = task_eNB + 'cd ' + logdirOAI5GRepo + ' ; source oaienv ; source cmake_targets/tools/build_helper \n' - task_eNB = task_eNB + 'env |grep OPENAIR \n' + 'array_exec_pid=() \n' - if eNB_pre_exec != "": - task_eNB = task_eNB + ' ( date; ' + eNB_pre_exec + ' '+ eNB_pre_exec_args + ' ) > ' + logfile_pre_exec_eNB + ' 2>&1 \n' - if eNB_main_exec != "": - task_eNB = task_eNB + ' ( date; ' + addsudo(eNB_main_exec + ' ' + eNB_main_exec_args, '') + ' ) > ' + logfile_exec_eNB + ' 2>&1 & \n' - task_eNB = task_eNB + 'array_exec_pid+=($!) \n' - task_eNB = task_eNB + 'echo eNB_main_exec PID = $! \n' - if eNB_traffic_exec != "": - cmd_traffic = eNB_traffic_exec + ' ' + eNB_traffic_exec_args - if cmd_traffic.find('-c') >= 0: - cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 80) - task_eNB = task_eNB + ' (date; ' + cmd_traffic + ' ) > ' + logfile_traffic_eNB + ' 2>&1 & \n' - task_eNB = task_eNB + 'array_exec_pid+=($!) \n' - task_eNB = task_eNB + 'echo eNB_traffic_exec PID = $! \n' - #terminate the eNB test case after timeout_cmd seconds - task_eNB = task_eNB + finalize_deploy_script (timeout_cmd, eNB_terminate_missing_procs) + ' \n' - #task_eNB = task_eNB + 'sleep ' + str(timeout_cmd) + ' \n' - task_eNB = task_eNB + 'handle_ctrl_c' + '\n' - task_eNB = task_eNB + ' ) > ' + logfile_task_eNB_out + ' 2>&1 ' - write_file(logfile_task_eNB, task_eNB, mode="w") - - - UE_pre_exec = testcase.findtext('UE_pre_exec',default='') - UE_pre_exec_args = testcase.findtext('UE_pre_exec_args',default='') - UE_main_exec = testcase.findtext('UE_main_exec',default='') - UE_main_exec_args = testcase.findtext('UE_main_exec_args',default='') - UE_traffic_exec = testcase.findtext('UE_traffic_exec',default='') - UE_traffic_exec_args = testcase.findtext('UE_traffic_exec_args',default='') - UE_terminate_missing_procs = testcase.findtext('UE_terminate_missing_procs',default='True') - UE_search_expr_true = testcase.findtext('UE_search_expr_true','') - - logfile_exec_UE = logdir_UE_run + '/UE_exec' + '_' + str(run) + '_.log' - logfile_pre_exec_UE = logdir_UE_run + '/UE_pre_exec' + '_' + str(run) + '_.log' - logfile_task_UE_out = logdir_UE_run + '/UE_task_out' + '_' + str(run) + '_.log' - logfile_traffic_UE = logdir_UE_run + '/UE_traffic' + '_' + str(run) + '_.log' - logfile_task_UE = logdir_local_run + '/UE_task' + '_' + str(run) + '_.log' - - - task_UE = ' ( uname -a ; date \n' - task_UE = task_UE + 'array_exec_pid=()' + '\n' - task_UE = task_UE + 'cd ' + logdirOAI5GRepo + '\n' - task_UE = task_UE + 'source oaienv \n' - task_UE = task_UE + 'source cmake_targets/tools/build_helper \n' - task_UE = task_UE + 'env |grep OPENAIR \n' - if UE_pre_exec != "": - task_UE = task_UE + ' ( date; ' + UE_pre_exec + ' '+ UE_pre_exec_args + ' ) > ' + logfile_pre_exec_UE + ' 2>&1 \n' - if UE_main_exec != "": - task_UE = task_UE + ' ( date; ' + addsudo(UE_main_exec + ' ' + UE_main_exec_args, '') + ' ) > ' + logfile_exec_UE + ' 2>&1 & \n' - task_UE = task_UE + 'array_exec_pid+=($!) \n' - task_UE = task_UE + 'echo UE_main_exec PID = $! \n' - if UE_traffic_exec != "": - cmd_traffic = UE_traffic_exec + ' ' + UE_traffic_exec_args - if cmd_traffic.find('-c') >= 0: - cmd_traffic = cmd_traffic + ' -t ' + str(timeout_cmd - 60) - task_UE = task_UE + ' ( date; ' + cmd_traffic + ' ) >' + logfile_traffic_UE + ' 2>&1 & \n' - task_UE = task_UE + 'array_exec_pid+=($!) \n' - task_UE = task_UE + 'echo UE_traffic_exec PID = $! \n' - #terminate the UE test case after timeout_cmd seconds - task_UE = task_UE + finalize_deploy_script (timeout_cmd, UE_terminate_missing_procs) + ' \n' - #task_UE = task_UE + 'sleep ' + str(timeout_cmd) + ' \n' - task_UE = task_UE + 'handle_ctrl_c' + '\n' - task_UE = task_UE + ' ) > ' + logfile_task_UE_out + ' 2>&1 ' - write_file(logfile_task_UE, task_UE, mode="w") - #task_UE = 'echo \" ' + task_UE + '\" > ' + logfile_script_UE + ' 2>&1 ; ' + task_UE - - - - - - - - # - # RUN work - # ---------------------------------------------------- - thread_eNB = oaiThread(1, "eNB_thread", eNBMachine, user, password , task_eNB, False, timeout_thread) - thread_UE = oaiThread(2, "UE_thread", UEMachine, user, password , task_UE, False, timeout_thread) - threads=[] - threads.append(thread_eNB) - threads.append(thread_UE) - thread_eNB.start() - thread_UE.start() - - run_work_inprogress_flag = True - progress_step = timeout_thread/20 - progress_count = 0 - - while (run_work_inprogress_flag): - - - update_progress(float(progress_count)/float(timeout_thread),prefix_string) - - time.sleep(progress_step) - - progress_count += progress_step - -# sys.stdout.write ('#') -# sys.stdout.flush() - - run_work_inprogress_flag = False - for t in threads: - if t.isAlive(): - run_work_inprogress_flag = True - - - update_progress(1,prefix_string) - - for t in threads: - t.join() - - - # - # - #----------------------------------------------------- - cleanOldProgramsAllMachines([oai_eNB, oai_UE] , oldprogramList, CleanUpAluLteBox, ExmimoRfStop, [logdir_eNB_run, logdir_UE_run], logdirOAI5GRepo) - - SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB_run, logdir_local_testcase, "get_all") - #print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE - SSHSessionWrapper(UEMachine, user, None, password, logdir_UE_run, logdir_local_testcase, "get_all") - - metric_checks_flag = 1 - - fname = logdir_local_run+ '/UE_exec' + '_' + str(run) + '_.log' - cell_synch_status = analyser.check_cell_synchro(fname) - print (Fore.WHITE + indent + "> Check Cell synchro :"), - - if cell_synch_status == 'CELL_SYNCH': - print ( Fore.GREEN + cell_synch_status) - else : - print ( Fore.RED + cell_synch_status) - metric_checks_flag = 0 - - ue_seg_fault_status = analyser.check_exec_seg_fault(fname) - if ue_seg_fault_status == 'SEG_FAULT' : - nb_seg_fault += 1 - - # - # Check metrics - #---------------------------------------------------- - runs_metrics = [] - run_traffic = [] - - if metric_checks_flag : - verdict = 'PASS' - - # UE side metrics - metricList=testcase.findall('UE_metric') - for metric in metricList: - - metric_verdict = 'PASS' - - metric_def = {} - metric_def['id'] = metric.get('id') - metric_def['description'] = metric.get('description') - metric_def['regex'] = metric.get('regex') - metric_def['unit_of_meas'] = metric.get('unit_of_meas') - metric_def['pass_fail_stat']= metric.get('pass_fail_stat') - metric_min_lim = metric.get('min_limit') - if metric_min_lim: - metric_def['min_limit'] = float(metric_min_lim) - metric_max_lim = metric.get('max_limit') - if metric_max_lim: - metric_def['max_limit'] = float(metric_max_lim) - - fname = logdir_local_run+ '/UE_exec' + '_' + str(run) + '_.log' - - args = {'metric' : metric_def, - 'file' : fname } - - metric_extracted = analyser.do_extract_metrics(args) - - print (Fore.WHITE + indent + "> Metric : "+metric_def['id']), - print ("(min="+str( metric_extracted['metric_min'])+", max="+str( metric_extracted['metric_max'])+", mean="+str( metric_extracted['metric_mean'])+", median="+str( metric_extracted['metric_median'])+")") - -# print "\t > Metric "+metric_def['id']+" :" -# print "\t\t> min = "+ str( metric_extracted['metric_min'] ) -# print "\t\t> min_index = "+ str( metric_extracted['metric_min_index'] ) -# print "\t\t> max = "+ str( metric_extracted['metric_max'] ) -# print "\t\t> max_index = "+ str( metric_extracted['metric_max_index'] ) -# print "\t\t> mean = "+ str( metric_extracted['metric_mean'] ) -# print "\t\t> median = "+ str( metric_extracted['metric_median'] ) - - if metric_def['pass_fail_stat'] : - metric_verdict = analyser.do_check_verdict(metric_def, metric_extracted) - - metric_fig = logdir_local_run+ '/UE_metric_'+ metric_def['id']+'_' + str(run) + '_.png' - analyser.do_img_metrics(metric_def, metric_extracted, metric_fig) - - - metric_fig_report = '../log/'+ testcasename + '/run_' + str(run) + '/UE_metric_'+ metric_def['id']+'_' + str(run) + '_.png' - - run_metrics = dict( metric_id = metric_def['id'], - metric_desc = metric_def['description'], - metric_uom = metric_def['unit_of_meas'], - metric_min = metric_extracted['metric_min'], - metric_min_index= metric_extracted['metric_min_index'], - metric_max = metric_extracted['metric_max'], - metric_max_index= metric_extracted['metric_max_index'], - metric_mean = metric_extracted['metric_mean'], - metric_median = metric_extracted['metric_median'], - metric_fig = metric_fig_report) - - if metric_def['pass_fail_stat'] : - run_metrics['pass_fail_stat'] = metric_def['pass_fail_stat'] - if metric_min_lim : - run_metrics['pass_fail_min_limit'] = metric_def['min_limit'] - if metric_max_lim : - run_metrics['pass_fail_max_limit'] = metric_def['max_limit'] - - runs_metrics.append(run_metrics) - - if metric_verdict != 'PASS': - verdict = metric_verdict - - # End Metrics LOOP - # --------------------- - - - # Traffic analysis - if UE_traffic_exec != "": - - fname = logdir_local_run+ '/UE_traffic' + '_' + str(run) + '_.log' - args = {'file' : fname } - traffic_metrics = analyser.do_extract_traffic_metrics(args) - traffic_fig = logdir_local_run+ '/UE_traffic'+'_' + str(run) + '_.png' - analyser.do_img_traffic(traffic_metrics, traffic_fig) - - traffic_fig_report= '../log/'+ testcasename + '/run_' + str(run) + '/UE_traffic'+'_' + str(run) + '_.png' - - dur_pass_fail_crit = 'none' - if traffic_metrics['traffic_count'] == 0 : - verdict = 'FAIL' - elif UE_search_expr_true != "": - traffic_duration_limit = float(UE_search_expr_true) - dur_pass_fail_crit = str(traffic_duration_limit) - # print 'traffic_duration_limit = '+str(traffic_duration_limit) - # print 'traffic_metrics[interval_stop_max] = '+str(traffic_metrics['interval_stop_max']) - if traffic_metrics['interval_stop_max'] < traffic_duration_limit : - verdict = 'FAIL' - - - run_traffic = dict( traffic_count = traffic_metrics['traffic_count'], - bw_min = traffic_metrics['bw_min'], - bw_max = traffic_metrics['bw_max'], - bw_mean = traffic_metrics['bw_mean'], - bw_median = traffic_metrics['bw_median'], - jitter_min = traffic_metrics['jitter_min'], - jitter_max = traffic_metrics['jitter_max'], - jitter_mean = traffic_metrics['jitter_mean'], - jitter_median = traffic_metrics['jitter_median'], - rl_min = traffic_metrics['rl_min'], - rl_max = traffic_metrics['rl_max'], - rl_mean = traffic_metrics['rl_mean'], - rl_median = traffic_metrics['rl_median'], - iperf_duration = traffic_metrics['interval_stop_max'], - dur_pass_fail_crit = dur_pass_fail_crit, - traffic_fig = traffic_fig_report ) - else: - run_traffic = dict( traffic_count = 0) - - else : - verdict = 'SKIP' - - - - # - # RUN verdict and finalization - # ---------------------------------------------------- - run_stop_time=datetime.datetime.now() - run_duration = run_stop_time-run_start_time -# print (Fore.WHITE + ("duration=" :"), - print (Fore.WHITE + indent + "> RUN duration : "+ str(run_duration) +"s" ) - - print (Fore.WHITE + indent + "> RUN verdict :"), - - if verdict == 'PASS': - nb_run_pass += 1 - print ( Fore.GREEN + verdict) - elif verdict == 'FAIL': - nb_run_failed += 1 - testcase_verdict = 'FAIL' - print ( Fore.RED + verdict) - elif verdict == 'SKIP': - nb_run_skip += 1 - print ( Fore.YELLOW + verdict) - else: - nb_run_inc += 1 - if testcase_verdict == 'PASS' : testcase_verdict = 'INCON' - print (Fore.YELLOW+'INCONCLUSIVE') - - run_results = dict( run_id=str(run), - run_start_time = run_start_time, - run_stop_time = run_stop_time , - run_verdict = verdict, - ue_seg_fault_status = ue_seg_fault_status, - run_duration = run_duration, - runs_metrics = runs_metrics, - run_traffic = run_traffic) - runs_results.append(run_results) - - # END RUN LOOP - #---------------------------------------------------- - - indent="\t" - - # Test case duration - # ---------------------------------- - testcase_time_stop = datetime.datetime.now() - print(Fore.WHITE + indent + "> testcase time stop : " + str(testcase_time_start) ), - print " -> TestCase duration = "+str(testcase_time_stop - testcase_time_start) - - # Save remote log files - # ----------------------------------- - #Now we change the permissions of the logfiles to avoid some of them being with root permissions - cmd = 'sudo -E chown -R ' + user + ' ' + logdir_eNB_testcase - res= oai_eNB.send_recv(cmd) - cmd = 'sudo -E chown -R ' + user + ' ' + logdir_UE_testcase - res= oai_UE.send_recv(cmd) - - # Save remote log files on MTC - #print "Copying files from eNBMachine " + eNBMachine + "logdir_eNB = " + logdir_eNB - SSHSessionWrapper(eNBMachine, user, None, password, logdir_eNB_testcase, openairdir_local + '/cmake_targets/autotests/log/', "get_all") - #print "Copying files from UEMachine : " + UEMachine + "logdir_UE = " + logdir_UE - SSHSessionWrapper(UEMachine, user, None, password, logdir_UE_testcase, openairdir_local + '/cmake_targets/autotests/log/', "get_all") - - oai_eNB.disconnect() - oai_UE.disconnect() - - # Set test case final verdict - # ----------------------------------- - test_result_string = 'do be completed' - - if testcase_verdict == 'PASS': - if nb_run_pass == 0 : - testcase_verdict = 'INCON' - - print(Fore.WHITE + indent + "> testcase final verdict :"), - if testcase_verdict == 'PASS': - print ( Fore.GREEN + testcase_verdict) - elif testcase_verdict == 'FAIL': - print ( Fore.RED + testcase_verdict) - else: - print (Fore.YELLOW+'INCONCLUSIVE') - - print(Style.RESET_ALL) - - duration= testcase_time_stop - testcase_time_start - - test_result = dict(testcase_name=testcasename, - testcaseclass=testcaseclass, - testcase_verdict = testcase_verdict, - testcase_time_start=testcase_time_start, - testcase_time_stop=testcase_time_stop, - tags=tags, - nruns=nb_runs, - nb_run_pass = nb_run_pass, - nb_run_skip = nb_run_skip, - nb_run_failed = nb_run_failed, - nb_run_inc=nb_run_inc, - nb_seg_fault = nb_seg_fault, - testcase_timeout=timeout_cmd, - testcase_duration = duration, - testcase_eNBMachine =eNBMachine, - testcase_UEMachine =UEMachine, - runs_results = runs_results) - test_results.append(test_result) - - xmlFile = logdir_local_testcase + '/test.' + testcasename + '.xml' - xml="\n \n" - write_file(xmlFile, xml, mode="w") - - xmlFile_ng = logdir_local_testcase + '/test.' + testcasename + '_ng.xml' - xml_ng = xmlify(test_result, wrap=testcasename, indent=" ") - write_file(xmlFile_ng, xml_ng, mode="w") - - - - return testcase_verdict - - - - -# \brief This function searches if test case is present in list of test cases that need to be executed by user -# \param testcasename the test case to search for -# \param testcasegroup list that is passed from the arguments -# \param test_case_exclude list of test cases excluded from execution (specified in test_case_list.xml) -def search_test_case_group(testcasename, testcasegroup, test_case_exclude): - - if test_case_exclude != "": - testcase_exclusion_list=test_case_exclude.split() - for entry in testcase_exclusion_list: - if entry.find('+') >=0: - match = re.search(entry, testcasename) - if match: - #print "\nSkipping test case as it is found in black list: " + testcasename - return False - else: - match = entry.find(testcasename) - if match >=0: - #print "\nSkipping test case as it is found in black list: " + testcasename - return False - if testcasegroup == '': - return True - else: - testcaselist = testcasegroup.split() - for entry in testcaselist: - if entry.find('+') >=0: - match = re.search(entry, testcasename) - if match: - return True - else: - match = testcasename.find(entry) - if match >=0: - return True - return False - -# \brief thread that cleans up remote machines from pre-existing test case executions -# \param threadID number of thread (for book keeping) -# \param threadname name of thread (for book keeping) -# \param oai handler that can be used to execute programs on remote machines -# \param CleanUpOldProgs list of programs which must be terminated before running a test case (specified in test_case_list.xml) -# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) -# \param ExmimoRfStop command to stop EXMIMO Card -class oaiCleanOldProgramThread (threading.Thread): - def __init__(self, threadID, threadname, oai, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, logdir, logdirOAI5GRepo): - threading.Thread.__init__(self) - self.threadID = threadID - self.threadname = threadname - self.oai = oai - self.CleanUpOldProgs = CleanUpOldProgs - self.CleanUpAluLteBox = CleanUpAluLteBox - self.ExmimoRfStop = ExmimoRfStop - self.logdir = logdir - self.logdirOAI5GRepo = logdirOAI5GRepo - def run(self): - try: - cleanOldPrograms(self.oai, self.CleanUpOldProgs, self.CleanUpAluLteBox, self.ExmimoRfStop, self.logdir, self.logdirOAI5GRepo) - except Exception, e: - error='' - error = error + ' In class oaiCleanOldProgramThread, function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n threadID = ' + str(self.threadID) + '\n threadname = ' + self.threadname + '\n CleanUpOldProgs = ' + self.CleanUpOldProgs + '\n CleanUpAluLteBox = ' + self.CleanUpAluLteBox + '\n ExmimoRfStop = ' + self.ExmimoRfStop + '\n' - error = error + traceback.format_exc() - print error - print "There is error in cleaning up old programs....." - #sys.exit(1) - -# \brief Run parallel threads in all machines for clean up old execution of test cases -# \param oai_list list of handlers that can be used to execute programs on remote machines -# \param CleanUpOldProgs list of programs which must be terminated before running a test case (specified in test_case_list.xml) -# \param CleanupAluLteBox string that contains commands to stop ALU Bell Labs LTEBox (specified in test_case_list.xml) -# \param ExmimoRfStop command to stop EXMIMO Card -def cleanOldProgramsAllMachines(oai_list, CleanOldProgs, CleanUpAluLteBox, ExmimoRfStop, logdir_list, logdirOAI5GRepo): - threadId=0 - threadList=[] - index=0 - if len(oai_list)!=len(logdir_list) : - logdir_list=[logdir[0]]*len(oai_list) - - for oai in oai_list: - threadName="cleanup_thread_"+str(threadId) - thread=oaiCleanOldProgramThread(threadId, threadName, oai, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, logdir_list[index],logdirOAI5GRepo) - threadList.append(thread) - thread.start() - threadId = threadId + 1 - index = index+1 - for t in threadList: - t.join() - - -debug = 0 -pw ='' -i = 0 -dlsim=0 -localshell=0 -GitOAI5GRepo='' -GitOAI5GRepoBranch='' -GitOAI5GHeadVersion='' -user='' -pw='' -testcasegroup='' -NFSResultsShare='' -cleanUpRemoteMachines=False -openairdir_local = os.environ.get('OPENAIR_DIR') -if openairdir_local is None: - print "Environment variable OPENAIR_DIR not set correctly" - sys.exit() -locallogdir = openairdir_local + '/cmake_targets/autotests/log' -reportdir = openairdir_local + '/cmake_targets/autotests/report' -MachineList = '' -MachineListGeneric='' -MachineDescDic={} -flag_remove_logdir=False -flag_start_testcase=False -nruns_lte_softmodem='' -flag_skip_git_head_check=False -flag_skip_oai_install=False -flag_skip_machine_preparation=False -flag_skip_sanity_check=False -Timeout_cmd='' -xmlInputFile='' - -#print "Number of arguments argc = " + str(len(sys.argv)) -#for index in range(1,len(sys.argv) ): -# print "argv_" + str(index) + " : " + sys.argv[index] - -oai_list = [] - - -i=1 -while i < len (sys.argv): - arg=sys.argv[i] - if arg == '-r': - flag_remove_logdir=True - elif arg == '-s' : - flag_start_testcase=True - elif arg == '-g' : - testcasegroup = sys.argv[i+1].replace("\"","") - i = i +1 - elif arg == '-c': - cleanUpRemoteMachines=True - elif arg == '-5GRepo': - GitOAI5GRepo = sys.argv[i+1] - i = i +1 - elif arg == '-5GRepoBranch': - GitOAI5GRepoBranch = sys.argv[i+1] - i = i +1 - elif arg == '-5GRepoHeadVersion': - GitOAI5GHeadVersion = sys.argv[i+1] - #We now find the branch that corresponds to this Git Head Commit - cmd = "git show-ref --head " + " | grep " + GitOAI5GHeadVersion - cmd_out = subprocess.check_output ([cmd], shell=True) - cmd_out=cmd_out.replace("\n","") - cmd_out = cmd_out.split('/') - GitOAI5GRepoBranch = cmd_out[-1] - if GitOAI5GRepoBranch == '': - print "Error extracting GitBranch from head commit. Exiting now..." - sys.exit(1) - i = i +1 - elif arg == '-u': - user = sys.argv[i+1] - i = i +1 - elif arg == '-p': - pw = sys.argv[i+1] - i = i +1 - elif arg == '-n': - NFSResultsShare = sys.argv[i+1] - i = i +1 - elif arg == '--nrun_lte_softmodem': - nruns_lte_softmodem = sys.argv[i+1] - i = i +1 - elif arg == '-MachineList': - MachineList = sys.argv[i+1] - MachineList = MachineList.replace("\"","") - MachineList = MachineList.replace("\'","") - i = i +1 - elif arg == '-MachineListGeneric': - MachineListGeneric = sys.argv[i+1] - MachineListGeneric = MachineListGeneric.replace("\"","") - MachineListGeneric = MachineListGeneric.replace("\'","") - i = i +1 - elif arg == '--skip-git-head-check': - flag_skip_git_head_check=True - elif arg == '--timeout_cmd': - Timeout_cmd = sys.argv[i+1] - i = i +1 - elif arg == '--skip-oai-install': - flag_skip_oai_install=True - elif arg == '--skip-machine-preparation': - flag_skip_machine_preparation=True - elif arg == '--skip-sanity-check': - flag_skip_sanity_check=True - elif arg == '--test-suite' : - xmlInputFile = sys.argv[i+1] - i = i +1 - elif arg == '-h' : - print "-s: This flag *MUST* be set to start the test cases" - print "-r: Remove the log directory in autotests" - print "-g: Run test cases in a group" - print "-c: Run cleanup scripts on remote machines and exit" - print "-5GRepo: Repository for OAI 5G to use to run tests (overrides GitOAI5GRepo in test_case_list.xml)" - print "-5GRepoBranch: Branch for OAI 5G Repository to run tests (overrides the branch in test_case_list.xml)" - print "-5GRepoHeadVersion: Head commit on which to run tests (overrides the branch in test_case_list.xml)" - print "-u: use the user name passed as argument" - print "-p: use the password passed as an argument" - print "-n: Set the NFS share passed as an argument" - print "--nrun_lte_softmodem: Set the number of runs for lte-softmodem test case class" - print "-MachineList : overrides the MachineList parameter in test_case_list.xml" - print "-MachineListGeneric : overrides the MachineListGeneric parameter in test_case_list.xml" - print "--skip-git-head-check: skip checking of GitHead remote/local branch (only for debugging)" - print "--timeout_cmd: Override the default parameter (timeout_cmd) in test_case_list.xml. This parameter is in seconds and should be > 120" - print "--skip-oai-install: Skips the openairinterface5g installer" - print "--skip-machine-preparation: skipp the whole system preparation -> direct to test cases" - print "--skip-sanity-check: skipp the machine sanity checks" - print "--test-suite: Select a XML test-suite file" - sys.exit() - else : - print "Unrecongnized Option: <" + arg + ">. Use -h to see valid options" - sys.exit() - i= i + 1 - -logdir = '/tmp/' + 'OAITestFrameWork-' + user + '/' -logdirOAI5GRepo = logdir + 'openairinterface5g/' -logdirOpenaircnRepo = logdir + 'openair-cn/' -patchdir = logdirOAI5GRepo + 'cmake_targets/autotests/patches/' -NFSResultsDir = '/mnt/sradio' -cleanupOldProgramsScript = '$OPENAIR_DIR/cmake_targets/autotests/tools/remove_old_programs.bash' - -#Now we parse the xml file for basic configuration -xmlTree = ET.parse(xmlInputFile) -xmlRoot = xmlTree.getroot() - -# -# Read test session configuration -# --------------------------------------------------------------------------------- -print (Fore.YELLOW + '\nStep 0.1 - Read test session configuration') -print (Fore.YELLOW + '-------------------------------------------------') - -test_session_start_time = datetime.datetime.now() -print (Fore.WHITE + ' - start time : '+ str(test_session_start_time)) - -host = os.uname()[1] -print (Fore.WHITE + ' - MTC host : '+host) - - -if user=='': - user = getpass.getuser() -print (Fore.WHITE + ' - user : '+user) - -if pw=='': - pw = getpass.getpass() -print (Fore.WHITE + ' - password : '+pw) - -print (Fore.WHITE + ' - cmd line flags : ') -print (Fore.WHITE + ' + -s : '+str(flag_start_testcase)) -print (Fore.WHITE + ' + -r : '+str(flag_remove_logdir)) -print (Fore.WHITE + ' + -c : '+str(cleanUpRemoteMachines)) -print (Fore.WHITE + ' + --skip-git-head-check : '+str(flag_skip_git_head_check)) -print (Fore.WHITE + ' + --skip-oai-install : '+str(flag_skip_oai_install)) -print (Fore.WHITE + ' + --skip-machine-preparation : '+str(flag_skip_machine_preparation)) -print (Fore.WHITE + ' + --skip-sanity-check : '+str(flag_skip_sanity_check)) - - -print (Fore.WHITE + ' - Test setup basic config : (* -> overwrite by cmd line parameter)') -print (Fore.WHITE + ' + test setup config file : '+str(xmlInputFile)) -print (Fore.WHITE + ' + remote setup dir : '+str(logdir)) -print (Fore.WHITE + ' + remote OAI5G repo : '+str(logdirOAI5GRepo)) -print (Fore.WHITE + ' + remote OpenAirCN repo : '+str(logdirOpenaircnRepo)) - - -if MachineList =='': - MachineList = xmlRoot.findtext('MachineList',default='') -NFSResultsShare = xmlRoot.findtext('NFSResultsShare',default='') -GitOpenaircnRepo = xmlRoot.findtext('GitOpenair-cnRepo',default='') - -if GitOAI5GRepo == '': - GitOAI5GRepo = xmlRoot.findtext('GitOAI5GRepo',default='') - -if GitOAI5GRepoBranch == '': - GitOAI5GRepoBranch = xmlRoot.findtext('GitOAI5GRepoBranch',default='') -if GitOAI5GHeadVersion == '': - GitOAI5GHeadVersion = xmlRoot.findtext('GitOAI5GHeadVersion',default='') - -GitOpenaircnRepoBranch = xmlRoot.findtext('GitOpenair-cnRepoBranch',default='') -CleanUpOldProgs = xmlRoot.findtext('CleanUpOldProgs',default='') -CleanUpAluLteBox = xmlRoot.findtext('CleanUpAluLteBox',default='') -Timeout_execution = int (xmlRoot.findtext('Timeout_execution')) -if MachineListGeneric == '': - MachineListGeneric = xmlRoot.findtext('MachineListGeneric',default='') -TestCaseExclusionList = xmlRoot.findtext('TestCaseExclusionList',default='') -ExmimoRfStop = xmlRoot.findtext('ExmimoRfStop',default='') -if nruns_lte_softmodem == '': - nruns_lte_softmodem = xmlRoot.findtext('nruns_lte-softmodem',default='') - -print (Fore.WHITE + ' + MachineList : '+ MachineList) -print (Fore.WHITE + ' + GitOpenair-cnRepo : '+ GitOpenaircnRepo) -print (Fore.WHITE + ' + GitOAI5GRepo : '+ GitOAI5GRepo) -print (Fore.WHITE + ' + GitOAI5GBranch : '+ GitOAI5GRepoBranch) -print (Fore.WHITE + ' + GitOpenaircnRepoBranch : '+ GitOpenaircnRepoBranch) -print (Fore.WHITE + ' + NFSResultsShare : '+ NFSResultsShare) -print (Fore.WHITE + ' + nruns_lte_softmodem : '+ nruns_lte_softmodem) -print (Fore.WHITE + ' + Timeout_cmd : '+ Timeout_cmd) - - -if GitOAI5GHeadVersion == '': - cmd = "git log --pretty=format:\'%H\' -n 1" # origin/"+ GitOAI5GRepoBranch -# cmd = "git show-ref --heads -s "+ GitOAI5GRepoBranch - GitOAI5GHeadVersion = subprocess.check_output ([cmd], shell=True) - GitOAI5GHeadVersion=GitOAI5GHeadVersion.replace("\n","") - - # Print commiter and date : git log -1 --pretty=format:"%an %ad" - -print (Fore.WHITE + ' + GitOAI5GHeadVersion : '+ GitOAI5GHeadVersion) -#print "CleanUpOldProgs = " + CleanUpOldProgs -print (Fore.WHITE + ' + Timeout_execution (s) : '+ str(Timeout_execution)) - -if GitOAI5GHeadVersion == '': - print "Error getting the OAI5GBranch Head version...Exiting" - sys.exit() - -NFSTestsResultsDir = NFSResultsShare + '/'+ GitOAI5GRepoBranch + '/' + GitOAI5GHeadVersion - -#print "NFSTestsResultsDir = " + NFSTestsResultsDir - -OAI5GpatchFileList=xmlRoot.findall('OAI5GPatchFile') - - - -MachineList = MachineList.split() -MachineListGeneric = MachineListGeneric.split() - - -MachineDescDic - - -# -# 'Check Mater Test Controller sanity (MTC)' -# --------------------------------------------------------------------------------- -print (Fore.YELLOW + '\nStep 0.2 - Check Mater Test Controller sanity (MTC)') -print (Fore.YELLOW + '-------------------------------------------------') - -try: - print (Fore.WHITE + ' - check OpenAirInterface environment variable OPENAIR1_DIR... '), - os.environ["OPENAIR1_DIR"] -except KeyError: - print (Fore.RED + 'FAILED') - print "Please set the environment variable OPENAIR1_DIR in the .bashrc or run 'source oaienv' " - exit_prog(1) -print (Fore.GREEN + 'OK') - -try: - print (Fore.WHITE + ' - check OpenAirInterface environment variable OPENAIR2_DIR... '), - os.environ["OPENAIR2_DIR"] -except KeyError: - print (Fore.RED + 'FAILED') - print "Please set the environment variable OPENAIR2_DIR in the .bashrc or run 'source oaienv' " - exit_prog(1) -print (Fore.GREEN + 'OK') - -try: - os.environ["OPENAIR_TARGETS"] -except KeyError: - print "Please set the environment variable OPENAIR_TARGETS in the .bashrc or run 'source oaienv' " - sexit_prog(1) - -print (Fore.WHITE + ' - kill zombie ssh sessions from earlier sessions... '), -cmd='ps aux |grep \"/usr/bin/ssh -q -l ' + user + '\"| tr -s \" \" :| cut -f 2 -d :| xargs kill -9 ' -os.system(cmd) -print (Fore.GREEN + 'DONE') - -if flag_start_testcase == False: - print "You need to start the testcase by passing option -s. Use -h to see all options. Aborting now..." - exit_prog(1) - - -#print "Killing zombie ssh sessions from earlier sessions..." -#cmd='ps aux |grep \"/usr/bin/ssh -q -l guptar\"|tr -s \" \" :|cut -f 2 -d :|xargs kill -9 ' -#cmd = cmd + '; ps aux |grep \"/usr/bin/ssh -q -l ' + user + '\"| tr -s \" \" :| cut -f 2 -d :| xargs kill -9 ' -#os.system(cmd) -#print cmd - -try: - analyser = __import__("lib_autotest_analyser") -except ImportError as err: - print('Import error: ' + str(err)) - exit(0) - -if flag_remove_logdir == True: - print "Removing directory: " + locallogdir - os.system(' rm -fr ' + locallogdir + '; mkdir -p ' + locallogdir ) - -if not os.path.exists(locallogdir): - os.system('mkdir -p ' + locallogdir ) - - -paramiko_logfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/log/paramiko.log') -res=os.system(' echo > ' + paramiko_logfile) -paramiko.util.log_to_file(paramiko_logfile) - - -# -# 'REMOTE MACHINE SANITY CHEKS' -# --------------------------------------------------------------------------------- -print (Fore.YELLOW + '\nStep 0.3 - REMOTE MACHINE SANITY CHEKS') -print (Fore.YELLOW + '-------------------------------------------------') - - -for machine in MachineList: - oai_list.append( openair('localdomain',machine)) - MachineDescDic[machine]={} - - -if not flag_skip_sanity_check: - - if localshell == 0: - try: - index=0 - for machine in MachineList: - print (Fore.WHITE + " - Check sanity for remote machine "+machine) - - oai_list[index].connect(user,pw) - print (Fore.WHITE + " > Checking for sudo permissions for user "+user+ " : "), - result = oai_list[index].send_expect_false('sudo -S -v','may not run sudo',True) - if (result == 'OK'): - print (Fore.GREEN + result ) - else: - print (Fore.RED + result ) - - print (Fore.WHITE + " > Cleaning Older running programs : "), - cleanOldPrograms(oai_list[index], CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, '$HOME', '/tmp') - print (Fore.WHITE + " Done") - - #result = oai_list[index].send('mount ' + NFSResultsDir, True) - #print "Mounting NFS Share " + NFSResultsDir + "..." + result - - # Check if NFS share is mounted correctly. - #print 'Checking if NFS Share<' + NFSResultsDir + '> is mounted correctly...' - #cmd = 'if grep -qs '+NFSResultsDir+ ' /proc/mounts; then echo \'' + NFSResultsDir + ' is mounted\' ; fi' - #search_expr = NFSResultsDir + ' is mounted' - #print "cmd = " + cmd - #print "search_expr = " + search_expr - #result = oai_list[index].send_expect(cmd, search_expr) - #print "Mount NFS_Results_Dir..." + result - index = index + 1 - - #oai.connect2(user,pw) - #oai.get_shell() - except : - print 'Fail to connect to the machine: '+ machine - sys.exit(1) - else: - pw = '' - oai_list[0].connect_localshell() -else: - print (Fore.RED + " Skipping Machine sanity check...") - - -# -# 'REMOTE MACHINE TEST SETUP CONFIGURATION' -# --------------------------------------------------------------------------------- -print (Fore.YELLOW + '\nStep 0.4 - REMOTE MACHINE PREPARATION') -print (Fore.YELLOW + '-------------------------------------------------') - -if not flag_skip_machine_preparation: - index=0 - threads_init_setup=[] - for oai in oai_list: - try: - print "setting up machine: " + MachineList[index] - #print oai_list[oai].send_recv('echo \''+pw+'\' |sudo -S -v') - #print oai_list[oai].send_recv('sudo su') - #print oai_list[oai].send_recv('who am i') - #cleanUpPrograms(oai_list[oai] - cmd = 'sudo -S -E rm -fr ' + logdir + ' ; mkdir -p ' + logdir - result = oai.send_recv(cmd) - print cmd - - setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' - setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' - - #Sometimes git fails so the script below retries in that case - localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/git-retry.sh') - remotefile = logdir + '/git-retry.sh' - paramList=[] - port=22 - paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) - sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') - sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) - - cmd = ' ( \n' - #cmd = cmd + 'rm -fR ' + logdir + '\n' - #cmd = cmd + 'mkdir -p ' + logdir + '\n' - cmd = cmd + 'cd '+ logdir + '\n' - cmd = cmd + 'sudo apt-get install -y git \n' - cmd = cmd + 'chmod 700 ' + logdir + '/git-retry.sh \n' - cmd = cmd + logdir + '/git-retry.sh clone '+ GitOAI5GRepo +' \n' - cmd = cmd + logdir + '/git-retry.sh clone '+ GitOpenaircnRepo + ' \n' - cmd = cmd + 'cd ' + logdirOAI5GRepo + '\n' - cmd = cmd + 'git checkout ' + GitOAI5GRepoBranch + '\n' - if GitOAI5GHeadVersion : - cmd = cmd + 'git checkout ' + GitOAI5GHeadVersion + '\n' - cmd = cmd + 'git_head=`git ls-remote |grep \'' + GitOAI5GRepoBranch + '\'` \n' - cmd = cmd + 'git_head=($git_head) \n' - cmd = cmd + 'git_head=${git_head[0]} \n' - cmd = cmd + 'echo \"GitOAI5GHeadVersion_remote = $git_head\" \n' - cmd = cmd + 'echo \"GitOAI5GHeadVersion_local = ' + GitOAI5GHeadVersion + '\" \n' - if flag_skip_git_head_check==True: - cmd = cmd + 'echo \"skipping GitHead check...\" \n ' - else: - cmd = cmd + 'if [ \"$git_head\" != \"'+ GitOAI5GHeadVersion + '\" ]; then echo \"error: Git openairinterface5g head version does not match\" ; fi \n' - cmd = cmd + 'source oaienv' + '\n' - if flag_skip_oai_install == False: - cmd = cmd + 'source $OPENAIR_DIR/cmake_targets/tools/build_helper \n' - cmd = cmd + 'echo \"Installing core OAI dependencies...Start\" \n' - cmd = cmd + '$OPENAIR_DIR/cmake_targets/build_oai -I --install-optional-packages \n' - cmd = cmd + 'echo \"Installing core OAI dependencies...Finished\" \n' - #cmd = cmd + 'echo \"Installing BLADERF OAI dependencies...Start\" \n' - #cmd = cmd + 'check_install_bladerf_driver \n' - #cmd = cmd + 'echo \"Installing BLADERF OAI dependencies...Finished\" \n' - #cmd = cmd + 'echo \"Installing USRP OAI dependencies...Start\" \n' - #cmd = cmd + 'check_install_usrp_uhd_driver \n' - #cmd = cmd + 'echo \"Installing USRP OAI dependencies...Finished\" \n' - cmd = cmd + 'cd ' + logdirOpenaircnRepo + '\n' - cmd = cmd + 'git checkout ' + GitOpenaircnRepoBranch + '\n' - cmd = cmd + 'env |grep OPENAIR' + '\n' - cmd = cmd + ' cd ' + logdir + '\n' - cmd = cmd + 'mkdir -p ' + patchdir + '\n' - cmd = cmd + ' ) > ' + setuplogfile + ' 2>&1 \n' - #cmd = cmd + 'echo \' ' + cmd + '\' > ' + setup_script + ' 2>&1 \n ' - #result = oai_list[index].send_recv(cmd, False, 300 ) - write_file(setup_script, cmd, mode="w") - tempThread = oaiThread(index, 'thread_setup_'+str(index)+'_' + MachineList[index] , MachineList[index] , user, pw, cmd, False, 3000) - threads_init_setup.append(tempThread ) - tempThread.start() - index = index + 1 - except Exception, e: - print 'There is error in one of the commands to setup the machine '+ MachineList[index] - error='' - error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + traceback.format_exc() - print error - sys.exit(1) - - #Now we wait for all the threads to complete - index = 0 - for t in threads_init_setup: - t.join() - - port = 22 - paramList=[] - sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') - - #Now we copy patch files and apply them - print( Fore.WHITE + " - Installating patch files on machine " + MachineList[index]) - for patchFile in OAI5GpatchFileList: - localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/patches/')+patchFile.get('name') - remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/patches/'+patchFile.get('name') - if patchFile.get('machine') == MachineList[index] or patchFile.get('machine') == None: - if os.path.isfile(localfile): - print( Fore.WHITE + "\t> PATCH FILE :"+localfile) - paramList=[] - paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) - sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) - cmd = ' cd ' + logdirOAI5GRepo + ' ;git apply cmake_targets/autotests/patches/'+patchFile.get('name') - res = oai_list[index].send_recv(cmd) - #print res - - paramList=[] - - setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' - setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' - localfile = locallogdir + '/setup_log_' + MachineList[index] + '_.txt' - remotefile = logdir + '/setup_log_' + MachineList[index] + '_.txt' - sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') - paramList.append ( {"operation":'get', "localfile":localfile, "remotefile":remotefile} ) - #sftp_module (user, pw, MachineList[index], port, localfile, remotefile, sftp_log, "get") - - #Now we copy test_case_list.xml on the remote machines - localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/test_case_list.xml') - remotefile = logdirOAI5GRepo + '/cmake_targets/autotests/test_case_list.xml' - # paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) - # sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) - - sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) - - - cmd = ' cd ' + logdirOAI5GRepo + ' ; source oaienv ; env|grep OPENAIR \n' - res = oai_list[index].send_recv(cmd) - index = index +1 - if os.path.exists(localfile) == 0: - print "Setup log file <" + localfile + "> missing for machine <" + MachineList[index] + ">. Please check the setup log files. Exiting now" - sys.exit(1) - - #Now we process all the test cases - #Now we check if there was error in setup files - - status, out = commands.getstatusoutput('grep ' + ' -il \'error\' ' + locallogdir + '/setup_log*') - if (out != '') : - print "There is error in setup of machines" - print "status = " + str(status) + "\n Check files for error = " + out - print "Exiting now..." - sys.exit(1) - - cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop, '$HOME' , logdirOAI5GRepo) - if cleanUpRemoteMachines == True: - print "Error while cleaning Remote machines" - print "Exiting now..." - sys.exit(0) - - -else: - print (Fore.RED + " Skipping Machine preparation...") - -# ************************************************************************** -# ************************************************************************** -# STEP 2 - TEST SELECTION AND PARAMETRIZATION -# ************************************************************************** -# ************************************************************************** - -print (Fore.YELLOW + '\nStep 2 - TEST SELECTION') -print (Fore.YELLOW + '-------------------------------------------------') - -print (Fore.WHITE + " Parsing test case list for test selection...") -print (Fore.WHITE + " - TestCaseExclusionList : "+TestCaseExclusionList) -print (Fore.WHITE + " - testcasegroup : "+testcasegroup) - - - - -testcaseList=xmlRoot.findall('testCase') - -nb_total_testcases = 0 -nb_total_testcases_softmodem = 0 -nb_total_testcases_softmodem_noS1 = 0 -nb_total_testcases_compilation = 0 -nb_total_testcases_execution = 0 - -nb_run_testcases = 0 -nb_run_testcases_softmodem = 0 -nb_run_testcases_softmodem_noS1 = 0 -nb_run_testcases_compilation = 0 -nb_run_testcases_execution = 0 - - -for testcase in testcaseList: - try: - testcasename = testcase.get('id') - testcaseclass = testcase.findtext('class',default='') - desc = testcase.findtext('desc',default='') - nb_total_testcases+=1 - - run_flag = search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList) - if (run_flag): - nb_run_testcases+=1 - - if testcaseclass == 'lte-softmodem' : - nb_total_testcases_softmodem+=1 - if (run_flag): nb_run_testcases_softmodem+=1 - elif testcaseclass == 'lte-softmodem-noS1': - nb_total_testcases_softmodem_noS1+=1 - if (run_flag): nb_run_testcases_softmodem_noS1+=1 - elif testcaseclass == 'compilation': - nb_total_testcases_compilation+=1 - if (run_flag): nb_run_testcases_compilation+=1 - elif testcaseclass == 'execution': - nb_total_testcases_execution+=1 - if (run_flag): nb_run_testcases_execution+=1 - else : - print "Unknown test case class: " + testcaseclass - sys.exit() - - except Exception, e: - error='' - error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n testcasename = ' + testcasename + '\n testcaseclass = ' + testcaseclass + '\n desc = ' + 'desc' + '\n' - error = error + traceback.format_exc() - print error - print "Continuing to next test case..." - -print (Fore.WHITE + " Parsing done...") - -print (Fore.WHITE + " - Total number of test cases : "+str(nb_total_testcases)) -print (Fore.WHITE + " - Total number class softmodem : "+str(nb_total_testcases_softmodem)) -print (Fore.WHITE + " - Total number class softmodem-noS1 : "+str(nb_total_testcases_softmodem_noS1)) -print (Fore.WHITE + " - Total number class compilation : "+str(nb_total_testcases_compilation)) -print (Fore.WHITE + " - Total number class execution : "+str(nb_total_testcases_execution)) -print -print (Fore.WHITE + " - Selected number of test cases : "+str(nb_run_testcases)) -print (Fore.WHITE + " - Selected class softmodem : "+str(nb_run_testcases_softmodem)) -print (Fore.WHITE + " - Selected class softmodem_noS1 : "+str(nb_run_testcases_softmodem_noS1)) -print (Fore.WHITE + " - Selected class compilation : "+str(nb_run_testcases_compilation)) -print (Fore.WHITE + " - Selected class execution : "+str(nb_run_testcases_execution)) - -# ************************************************************************** -# ************************************************************************** -# STEP 3 - TEST CAMPAIGNS -# ************************************************************************** -# ************************************************************************** - -test_results = [] - - -print (Fore.YELLOW + '\nStep 3 - TEST CAMPAIGNS') -print (Fore.YELLOW + '-------------------------------------------------') - -print (Fore.WHITE + " Start test campaign...") - -run_count = 0 -for testcase in testcaseList: - try: - testcasename = testcase.get('id') - testcaseclass = testcase.findtext('class',default='') - desc = testcase.findtext('desc',default='') - #print "Machine list top level = " + ','.join(MachineList) - - if search_test_case_group(testcasename, testcasegroup, TestCaseExclusionList) == True: - run_count+=1 - print (Fore.WHITE + " ("+str(run_count).zfill(3)+"/"+str(nb_run_testcases).zfill(3)+") - test case "+testcasename+" : "), - if testcaseclass == 'lte-softmodem' : - eNBMachine = testcase.findtext('eNB',default='') - UEMachine = testcase.findtext('UE',default='') - EPCMachine = testcase.findtext('EPC',default='') - #index_eNBMachine = MachineList.index(eNBMachine) - #index_UEMachine = MachineList.index(UEMachine) - #index_EPCMachine = MachineList.index(EPCMachine) - if (eNBMachine not in MachineList)|(UEMachine not in MachineList)|(UEMachine not in MachineList): - print "One of the machines is not in the machine list" - print "eNBMachine : " + eNBMachine + "UEMachine : " + UEMachine + "EPCMachine : " + EPCMachine + "MachineList : " + ','.join(MachineList) - print "testcasename = " + testcasename + " class = " + testcaseclass - threadListGlobal = wait_testcaseclass_generic_threads(threadListGlobal, Timeout_execution) - #cleanOldProgramsAllMachines(oai_list, CleanUpOldProgs, CleanUpAluLteBox, ExmimoRfStop) - handle_testcaseclass_softmodem (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, user, pw, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, Timeout_cmd ) - - #The lines below are copied from below to trace the failure of some of the machines in test setup. These lines below need to be removed in long term - print "Creating xml file for overall results..." - cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " - res=os.system(cmd) - os.system('sync') - print "Now copying files to NFS Share" - oai_localhost = openair('localdomain','localhost') - oai_localhost.connect(user,pw) - cmd = ' mkdir -p ' + NFSTestsResultsDir - res = oai_localhost.send_recv(cmd) - - print "Copying files from GilabCI Runner Machine : " + host + " .locallogdir = " + locallogdir + ", NFSTestsResultsDir = " + NFSTestsResultsDir - SSHSessionWrapper('localhost', user, None, pw , NFSTestsResultsDir , locallogdir, "put_all") - oai_localhost.disconnect() - - elif testcaseclass == 'lte-softmodem-noS1' : - eNBMachine = testcase.findtext('eNB',default='') - UEMachine = testcase.findtext('UE',default='') - if (eNBMachine not in MachineList)|(UEMachine not in MachineList): - print "One of the machines is not in the machine list" - print "eNBMachine : " + eNBMachine + "UEMachine : " + UEMachine + "MachineList : " + ','.join(MachineList) - print "testcasename = " + testcasename + " class = " + testcaseclass - threadListGlobal = wait_testcaseclass_generic_threads(threadListGlobal, Timeout_execution) - - handle_testcaseclass_softmodem_noS1 (testcase, CleanUpOldProgs, logdirOAI5GRepo, logdirOpenaircnRepo, MachineList, user, pw, CleanUpAluLteBox, ExmimoRfStop, nruns_lte_softmodem, Timeout_cmd ) - - #The lines below are copied from below to trace the failure of some of the machines in test setup. These lines below need to be removed in long term - print "Creating xml file for overall results..." - cmd = "cat $OPENAIR_DIR/cmake_targets/autotests/log/*/*.xml > $OPENAIR_DIR/cmake_targets/autotests/log/results_autotests.xml " - res=os.system(cmd) - os.system('sync') - - elif (testcaseclass == 'compilation'): - threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox,Timeout_execution, ExmimoRfStop) - elif (testcaseclass == 'execution'): - threadListGlobal = handle_testcaseclass_generic (testcasename, threadListGlobal, CleanUpOldProgs, logdirOAI5GRepo, MachineListGeneric, user, pw, CleanUpAluLteBox, Timeout_execution, ExmimoRfStop) - else : - print "Unknown test case class: " + testcaseclass - sys.exit() - - except Exception, e: - error='' - error = error + ' In function: ' + sys._getframe().f_code.co_name + ': *** Caught exception: ' + str(e.__class__) + " : " + str( e) - error = error + '\n testcasename = ' + testcasename + '\n testcaseclass = ' + testcaseclass + '\n desc = ' + 'desc' + '\n' - error = error + traceback.format_exc() - print error - print "Continuing to next test case..." - #sys.exit(1) - - -print "Exiting the test cases execution now. Waiting for existing threads to complete..." - -for param in threadListGlobal: - thread_id = param["thread_id"] - thread_id.join() - - -# ************************************************************************** -# ************************************************************************** -# STEP 4 - TEST REPORT PRODUCTION -# ************************************************************************** -# ************************************************************************** - - - -test_session_stop_time = datetime.datetime.now() - -print (Fore.YELLOW + '\nStep 4 - TEST REPORT PRODUCTION') -print (Fore.YELLOW + '-------------------------------------------------') - -report_dir = reportdir + '/'+ test_session_start_time.strftime("%Y-%m-%d_%H-%M")+"_"+host - -cmd = 'mkdir -p ' + report_dir -result = os.system(cmd) - -cmd = 'cp -r '+locallogdir+' '+report_dir -result = os.system(cmd) - -context = { - 'report_path' : report_dir, - 'test_session_start_time' : test_session_start_time, - 'test_session_stop_time' : test_session_stop_time, - 'test_session_duration' : test_session_stop_time-test_session_start_time, - 'mtc_host' : host, - 'user' : user, - 'password' : pw, - 'test_results' : test_results, -} - -for test_result in test_results: - cmd = 'mkdir -p ' + report_dir + '/'+ test_result['testcase_name'] - result = os.system(cmd) - - report_file = report_dir + '/'+ test_result['testcase_name'] + '/'+ test_result['testcase_name']+ '_report.html' - - analyser.create_test_report_detailed_html(test_result, report_file ) - - print test_result - - -analyser.create_report_html(context) - -exit_prog(0) - diff --git a/cmake_targets/autotests/testsuite_ue_noS1_eurecom.xml b/cmake_targets/autotests/testsuite_ue_noS1_eurecom.xml deleted file mode 100644 index 25a4a652e5..0000000000 --- a/cmake_targets/autotests/testsuite_ue_noS1_eurecom.xml +++ /dev/null @@ -1,3214 +0,0 @@ - - -imb182-desktop yanbo-M4HM87P-00 - /mnt/sradio/TEST_RESULTS/ - https://gitlab.eurecom.fr/oai/openairinterface5g.git - https://gitlab.eurecom.fr/oai/openair-cn.git --> - develop - - - - - - - - - develop - oaisim oaisim_nos1 lte-softmodem lte-softmodem-nos1 mme_gw run_epc auth_request run_hss oai_hss mme spgw hss hss_sim configure_cots* wvdial iperf iperf_script iperf_script_phone ping tshark rrh_gw iperf3 iperf3_script iperf3_script_phone pppd - sudo -S -E /opt/ltebox/tools/stop_ltebox -$OPENAIR_DIR/cmake_targets/build_oai -w EXMIMO -c; sudo -S -E $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue; uname -a; sudo -E dmesg - 36000 - - - yanbo-M4HM87P-00 - - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS00 - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS00 - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 1 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS01 - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 1 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS01 - 36 - - - - - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS09 - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS09 - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS16 - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS16 - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS10 - - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS10 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS17 - - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS17 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 18 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS18 - - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 18 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS18 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS19 - - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS19 - 36 - - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 20 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS20 - - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 20 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS20 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 21 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS21 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 21 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS21 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 22 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS22 - - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 22 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS22 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 23 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS23 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 23 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS23 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 24 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS24 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 24 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS24 - 36 - - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 25 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS25 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 25 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS25 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 26 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS26 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 26 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS26 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS27 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS27 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS28 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.5MHZ.MCS28 - 36 - - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 18000 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_STAB.BAND7.5MHZ.MCS27 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_STAB.BAND7.5MHZ.MCS27 - 36 - - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r50 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS27 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r50 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS27 - 36 - - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 28 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636. -r50 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S --phy-test -g 4 - - - - - - False - UE_USRP.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS28 - 36 - - - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 50 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 --phy-test - - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r50 --ue-scan-carrier --ue-txgain 0 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 --phy-test -g 4 - - - - - - False - UE_UEDV1.NOS1.PHYTEST_PERF.BAND7.10MHZ.MCS19 - 36 - - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 512K - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS00 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 0 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 512K - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS00 - 36 - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS09 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 9 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS09 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS10 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 10 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS10 - 36 - - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS16 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 16 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS16 - 36 - - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS17 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 17 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS17 - 36 - - - - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS19 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 19 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS19 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_USRP.NOS1.DATA_IPERF.BAND7.5MHZ.MCS27 - 36 - - - - - lte-softmodem-noS1 - - imb182-desktop - yanbo-M4HM87P-00 - 3600 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w USRP --noS1 --eNB - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C2685004636 -r25 --ue-scan-carrier --ue-txgain 90 -A 20 --ue-rxgain 125 -S -g 4 - - iperf -s -i 1 -u - - 2800 - - False - UE_USRP.NOS1.DATA_IPERF_STAB.BAND7.5MHZ.MCS27 - 16 - - - - - lte-softmodem-noS1 - - imb182-desktop - ued-PRM-130 - 300 - /tmp - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tracking_area_code \"1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_country_code \"208\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mobile_network_code \"95\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf N_RB_DL 25 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf mme_ip_address "ipv4=\"192.168.12.26\";ipv6=\"192:168:30::17\";active=\"yes\";preference=\"ipv4\";" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf downlink_frequency 2685000000L - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf uplink_frequency_offset -120000000 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf tx_gain 90 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf rx_gain 125 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152 - $OPENAIR_DIR/cmake_targets/build_oai - -c -w USRP --eNB --noS1 - source $OPENAIR_DIR/cmake_targets/tools/init_nas_nos1 eNB - - $OPENAIR_DIR/cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 - -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -W -m 27 - sleep 80;iperf -c 10.0.1.9 -i 1 -u -b 2M - - - - False - - /tmp - - $OPENAIR_DIR/cmake_targets/build_oai - -c --UE -w EXMIMO --noS1 - source ./targets/bin/init_nas_nos1 UE - - sleep 50; ./cmake_targets/autotests/tools/run_gdb ./cmake_targets/lte_noS1_build_oai/build/lte-softmodem-nos1 -U -C 2685000000 -r25 --ue-scan-carrier --ue-txgain 15 --ue-rxgain 5 -S -A 6 -F myriadRF_FMX --ue-max-power -25 -g 4 - - iperf -s -i 1 -u - - 200 - - False - UE_UEDV1.NOS1.DATA_IPERF.BAND7.5MHZ.MCS27 - 36 - - - diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c index 5ae2ec2ecd..ff7e02a239 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c @@ -972,11 +972,6 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, } else n2 = n; - if(n2<256) - { - printf("phy_threegpplte_turbo_decoder8 : frame length < 256\n"); - return 255; - } for (iind=0; iind < 188 && f1f2mat[iind].nb_bits != n; iind++); From 2f3483d1d30457961e9cfa5bd80d471417728967 Mon Sep 17 00:00:00 2001 From: Benoit ROBERT Date: Wed, 14 Dec 2016 12:26:01 +0100 Subject: [PATCH 127/132] correct issue 154 on PDCP fifo for noS1 mode --- openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c index fedef42b60..eb78a4ca7c 100644 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c @@ -424,18 +424,22 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) return 0; # else /* PDCP_USE_NETLINK_QUEUES*/ int len = 1; + int msg_len; rb_id_t rab_id = 0; - - while (len > 0) { + int rlc_data_req_flag = 3; + + while ((len > 0) && (rlc_data_req_flag !=0)) { len = recvmsg(nas_sock_fd, &nas_msg_rx, 0); if (len<=0) { // nothing in pdcp NAS socket //LOG_D(PDCP, "[PDCP][NETLINK] Nothing in socket, length %d \n", len); } else { + + msg_len = len; for (nas_nlh_rx = (struct nlmsghdr *) nl_rx_buf; - NLMSG_OK (nas_nlh_rx, len); - nas_nlh_rx = NLMSG_NEXT (nas_nlh_rx, len)) { + NLMSG_OK (nas_nlh_rx, msg_len); + nas_nlh_rx = NLMSG_NEXT (nas_nlh_rx, msg_len)) { if (nas_nlh_rx->nlmsg_type == NLMSG_DONE) { LOG_D(PDCP, "[PDCP][NETLINK] RX NLMSG_DONE\n"); @@ -493,7 +497,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP) ctxt.enb_flag = ctxt_cpy.enb_flag; #ifdef PDCP_DEBUG - LOG_D(PDCP, "[PDCP][NETLINK] pdcp_read_header_g.rb_id = %d\n", pdcp_read_header_g.rb_id); + LOG_I(PDCP, "[PDCP][NETLINK] pdcp_read_header_g.rb_id = %d\n", pdcp_read_header_g.rb_id); #endif if (ctxt_cpy.enb_flag) { From 82437cccb756d05e0546aceefaf346e938793f67 Mon Sep 17 00:00:00 2001 From: ROBERT Benoit Date: Thu, 1 Dec 2016 16:31:05 +0100 Subject: [PATCH 128/132] - Problem in DCI NDI : the implementation use 5 HARQ processes, but process 0 NDI never toggled because it was reused on subframe 5 that is not carrying format 1 DCI. Fix -> use 8 harq processes instead of 5. - SI scheduled on every subframe 5 (even and odd frames) instead of only on even frames - Add DLSCH scheduling on subframe 5 for odd frames - change default rballoc from 0x7FFF to 0x1FFFF to support maximum 10MHz throughput --- openair1/SCHED/phy_mac_stub.c | 79 ++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 34 deletions(-) diff --git a/openair1/SCHED/phy_mac_stub.c b/openair1/SCHED/phy_mac_stub.c index 0ac194d051..7753e9c2e3 100644 --- a/openair1/SCHED/phy_mac_stub.c +++ b/openair1/SCHED/phy_mac_stub.c @@ -40,14 +40,21 @@ #include "SCHED/phy_procedures_emos.h" #endif +/* SYRTEM */ +uint8_t dci_ndi_toggle_even[8] = {0, 0, 0, 0, 0, 0, 0, 0}; +uint8_t dci_ndi_toggle_odd[8] = {0, 0, 0, 0, 0, 0, 0, 0}; + void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) { - +/* SYRTEM */ + uint8_t *dci_ndi_toggle_tmp = NULL; + uint8_t harq_pid_value = 0; +/* End of SYRTEM */ //uint8_t cooperation_flag = eNB->cooperation_flag; uint8_t transmission_mode = eNB->transmission_mode[0]; - uint32_t rballoc = 0x7FFF; + uint32_t rballoc = 0x1FFFF; //uint32_t rballoc2 = 0x000F; int subframe = proc->subframe_tx; @@ -68,12 +75,14 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) switch (subframe) { case 5: - DCI_pdu->Num_common_dci = 1; - DCI_pdu->dci_alloc[0].L = 2; - DCI_pdu->dci_alloc[0].firstCCE = 0; - DCI_pdu->dci_alloc[0].rnti = SI_RNTI; - DCI_pdu->dci_alloc[0].format = format1A; - DCI_pdu->dci_alloc[0].ra_flag = 0; + if ( !(proc->frame_tx&1) ) // SI message on even frame only (SFN mod 2 == 0) + { + DCI_pdu->Num_common_dci = 1; + DCI_pdu->dci_alloc[0].L = 2; + DCI_pdu->dci_alloc[0].firstCCE = 0; + DCI_pdu->dci_alloc[0].rnti = SI_RNTI; + DCI_pdu->dci_alloc[0].format = format1A; + DCI_pdu->dci_alloc[0].ra_flag = 0; switch (eNB->frame_parms.N_RB_DL) { case 6: @@ -187,6 +196,12 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) } break; //subframe switch + } // if ( !(proc->frame_tx&1) ) + else // No SI message on odd frame (SFN mod 2 == 1) + { + /* warning: work around to send dlsch on subframe 5 odd frame !!! */ + /* todo: clean up, espacially if subframe cases are added next !!! */ + } /* case 6: DCI_pdu->Num_ue_spec_dci = 1; @@ -225,15 +240,23 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) if (eNB->frame_parms.frame_type == FDD) { DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_5MHz_FDD_t; + harq_pid_value = ( ((proc->frame_tx * 10) + subframe) % 8 ); + + if (!(subframe&1)) // even subframe + dci_ndi_toggle_tmp = &(dci_ndi_toggle_even[harq_pid_value]); + else // odd subframe + dci_ndi_toggle_tmp = &(dci_ndi_toggle_odd[harq_pid_value]); + ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc; //computeRIV(25,10,3); ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0; - ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = subframe % 5; + ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = harq_pid_value; ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; - //((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28); - ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = subframe / 5; + ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = (*dci_ndi_toggle_tmp); ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0; ((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rah = 0; + (*dci_ndi_toggle_tmp) = ((*dci_ndi_toggle_tmp) + 1) & 1; + memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_FDD_t)); /* @@ -296,36 +319,24 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) if (eNB->frame_parms.frame_type == FDD) { DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_10MHz_FDD_t; + harq_pid_value = ( ((proc->frame_tx * 10) + subframe) % 8 ); + + if (!(subframe&1)) // even subframe + dci_ndi_toggle_tmp = &(dci_ndi_toggle_even[harq_pid_value]); + else // odd subframe + dci_ndi_toggle_tmp = &(dci_ndi_toggle_odd[harq_pid_value]); + ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc; //computeRIV(50,10,3); ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC = 0; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = subframe % 5; + ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = harq_pid_value; ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; - //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28); - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = subframe / 5; + ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = (*dci_ndi_toggle_tmp); ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0; ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rah = 0; + (*dci_ndi_toggle_tmp) = ((*dci_ndi_toggle_tmp) + 1) & 1; + memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_10MHz_FDD_t)); - - /* - //user2 - DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_10MHz_TDD_t; - DCI_pdu->dci_alloc[1].L = 2; - DCI_pdu->dci_alloc[1].rnti = 0x1236; - DCI_pdu->dci_alloc[1].format = format1; - DCI_pdu->dci_alloc[1].ra_flag = 0; - - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc2; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->TPC = 0; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->dai = 0; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->harq_pid = 1; - //((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->proc[subframe].frame%1024)%28); - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->ndi = 1; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rv = 0; - ((DCI1_10MHz_FDD_t *)&dlsch_pdu)->rah = 0; - memcpy((void*)&DCI_pdu->dci_alloc[1].dci_pdu[0],(void *)&((DCI1_10MHz_FDD_t *)&dlsch_pdu)->,sizeof(DCI1_10MHz_TDD_t)); - */ } else { DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_10MHz_TDD_t; From 17d62a67776b13e2af75b464ee85c9c1fd6bb735 Mon Sep 17 00:00:00 2001 From: ROBERT Benoit Date: Mon, 5 Dec 2016 15:41:47 +0100 Subject: [PATCH 129/132] correct issue 147 : --phy-test mode : error msg " DL Received HarqReTx round=1 mcs=28 rballoc=8191 rv=0 " --- openair1/SCHED/phy_procedures_lte_eNb.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index a7d9e73e2f..ff12ac7fef 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -1124,7 +1124,7 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, int frame=proc->frame_tx; int subframe=proc->subframe_tx; // uint16_t input_buffer_length; - uint32_t i,aa; + uint32_t i,j,aa; uint8_t harq_pid; DCI_PDU *DCI_pdu; DCI_PDU DCI_pdu_tmp; @@ -1222,6 +1222,14 @@ void phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, fill_dci_emos(DCI_pdu,eNB); #else fill_dci(DCI_pdu,eNB,proc); + // clear previous allocation information for all UEs + for (i=0; idlsch[i][0]){ + for (j=0; j<8; j++) + eNB->dlsch[i][0]->harq_processes[j]->round = 0; + } + } + #endif } From a525be94c3640eeea5c6ebc70a92f7a26018684c Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Thu, 15 Dec 2016 17:00:53 +0100 Subject: [PATCH 130/132] changing antenna number back to 1 --- .../PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf index 2942832d94..5ef5a4f50b 100644 --- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf +++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf @@ -37,8 +37,8 @@ eNBs = N_RB_DL = 25; Nid_cell_mbsfn = 0; nb_antenna_ports = 1; - nb_antennas_tx = 2; - nb_antennas_rx = 2; + nb_antennas_tx = 1; + nb_antennas_rx = 1; tx_gain = 90; rx_gain = 125; prach_root = 0; From 66c292b95b35203e3fb714777f8b431dbd5b7dbe Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 19 Dec 2016 11:19:05 +0100 Subject: [PATCH 131/132] integration fix: update T messages --- common/utils/T/T_messages.txt | 104 +++++++++++++++++++++++++++++++++- 1 file changed, 102 insertions(+), 2 deletions(-) diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt index af2579cb1b..d1807080bc 100644 --- a/common/utils/T/T_messages.txt +++ b/common/utils/T/T_messages.txt @@ -1267,6 +1267,14 @@ ID = VCD_VARIABLE_UE0_SFN7 DESC = VCD variable UE0_SFN7 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value +ID = VCD_VARIABLE_UE0_TRX_READ_NS + DESC = VCD variable UE0_TRX_READ_NS + GROUP = ALL:VCD:ENB:VCD_VARIABLE + FORMAT = ulong,value +ID = VCD_VARIABLE_UE0_TRX_WRITE_NS + DESC = VCD variable UE0_TRX_WRITE_NS + GROUP = ALL:VCD:ENB:VCD_VARIABLE + FORMAT = ulong,value #functions @@ -1310,6 +1318,50 @@ ID = VCD_FUNCTION_UE_THREAD_RXTX1 DESC = VCD function UE_THREAD_RXTX1 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value +ID = VCD_FUNCTION_TRX_READ_SF9 + DESC = VCD function TRX_READ_SF9 + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_TRX_WRITE_SF9 + DESC = VCD function TRX_WRITE_SF9 + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX + DESC = VCD function UE_SIGNAL_COND_RXTX + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_UE_WAIT_COND_RXTX0 + DESC = VCD function UE_WAIT_COND_RXTX0 + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_UE_WAIT_COND_RXTX1 + DESC = VCD function UE_WAIT_COND_RXTX1 + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0 + DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT0 + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1 + DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_COND_WAIT1 + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0 + DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT0 + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1 + DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_DECREMENT1 + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0 + DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT0 + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1 + DESC = VCD function UE_LOCK_MUTEX_RXTX_FOR_CNT_INCREMENT1 + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value ID = VCD_FUNCTION_eNB_TX DESC = VCD function eNB_TX GROUP = ALL:VCD:ENB:VCD_FUNCTION @@ -1402,8 +1454,8 @@ ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_RX_UESPEC1 DESC = VCD function PHY_PROCEDURES_ENB_RX_UESPEC1 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value -ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_SLOT_FEP - DESC = VCD function PHY_PROCEDURES_ENB_SLOT_FEP +ID = VCD_FUNCTION_ENB_SLOT_FEP + DESC = VCD function ENB_SLOT_FEP GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX @@ -1414,6 +1466,26 @@ ID = VCD_FUNCTION_PHY_PROCEDURES_UE_RX DESC = VCD function PHY_PROCEDURES_UE_RX GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value +ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_UESPEC + DESC = VCD function PHY_PROCEDURES_UE_TX_ULSCH_UESPEC + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PUCCH + DESC = VCD function PHY_PROCEDURES_UE_TX_PUCCH + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_COMMON + DESC = VCD function PHY_PROCEDURES_UE_TX_ULSCH_COMMON + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_PRACH + DESC = VCD function PHY_PROCEDURES_UE_TX_PRACH + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_PHY_PROCEDURES_UE_TX_ULSCH_RAR + DESC = VCD function PHY_PROCEDURES_UE_TX_ULSCH_RAR + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value ID = VCD_FUNCTION_PHY_PROCEDURES_ENB_LTE DESC = VCD function PHY_PROCEDURES_ENB_LTE GROUP = ALL:VCD:ENB:VCD_FUNCTION @@ -1502,6 +1574,22 @@ ID = VCD_FUNCTION_RX_PHICH DESC = VCD function RX_PHICH GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value +ID = VCD_FUNCTION_PDSCH_PROC + DESC = VCD function PDSCH_PROC + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_PDSCH_PROC_SI + DESC = VCD function PDSCH_PROC_SI + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_PDSCH_PROC_P + DESC = VCD function PDSCH_PROC_P + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_PDSCH_PROC_RA + DESC = VCD function PDSCH_PROC_RA + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value ID = VCD_FUNCTION_PHY_UE_CONFIG_SIB2 DESC = VCD function PHY_UE_CONFIG_SIB2 GROUP = ALL:VCD:UE:VCD_FUNCTION @@ -1606,6 +1694,14 @@ ID = VCD_FUNCTION_ENB_DLSCH_SCRAMBLING DESC = VCD function ENB_DLSCH_SCRAMBLING GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value +ID = VCD_FUNCTION_ENB_BEAM_PRECODING + DESC = VCD function ENB_BEAM_PRECODING + GROUP = ALL:VCD:ENB:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_ENB_OFDM_MODULATION + DESC = VCD function ENB_OFDM_MODULATION + GROUP = ALL:VCD:ENB:VCD_FUNCTION + FORMAT = int,value ID = VCD_FUNCTION_MACPHY_INIT DESC = VCD function MACPHY_INIT GROUP = ALL:VCD:ENB:VCD_FUNCTION @@ -1718,6 +1814,10 @@ ID = VCD_FUNCTION_RLC_DATA_REQ DESC = VCD function RLC_DATA_REQ GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value +ID = VCD_FUNCTION_RLC_DATA_IND + DESC = VCD function RLC_DATA_IND + GROUP = ALL:VCD:ENB:VCD_FUNCTION + FORMAT = int,value ID = VCD_FUNCTION_MAC_RLC_STATUS_IND DESC = VCD function MAC_RLC_STATUS_IND GROUP = ALL:VCD:ENB:VCD_FUNCTION From 5ebdbf9f2d99a675844d5a63f02876a807d94859 Mon Sep 17 00:00:00 2001 From: Cedric Roux Date: Mon, 19 Dec 2016 12:25:35 +0100 Subject: [PATCH 132/132] integration fix: align32 missing (NOT DEFINITIVE!) We have a crash: Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7fff7387d700 (LWP 1944)] ulsch_decoding (eNB=eNB@entry=0x7fffaf73b010, proc=proc@entry=0x7fffaf73b480, UE_id=UE_id@entry=0 '\000', control_only_flag=control_only_flag@entry=0 '\000', Nbundled=, llr8_flag=) at /roux/merge/openairinterface5g/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c:1450 1450 *((__m256i *)&ulsch_harq->e[iprime]) = *((__m256i *)&y[j2]); This commit reduces the apparition of the crash, but does not eliminate it completely. To be fixed after integration. --- openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index 7f4f4cf5f6..68f3abc094 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -872,7 +872,7 @@ unsigned int ulsch_decoding(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, int16_t ys,c; uint32_t wACK_idx; uint8_t dummy_w_cc[3*(MAX_CQI_BITS+8+32)]; - int16_t y[6*14*1200]; + int16_t y[6*14*1200] __attribute__((aligned(32))); uint8_t ytag[14*1200]; // uint8_t ytag2[6*14*1200],*ytag2_ptr; int16_t cseq[6*14*1200];