diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index 7f2847a5ead260c11eff47904d2f08c868d9a6dd..e51b57e6ec1e23c753f8f4cddbb742efb210517a 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -62,8 +62,7 @@ <compile_prog_args>--oaisim -r Rel10 --noS1 -c </compile_prog_args> <compile_prog_out>$OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/oaisim_nos1 $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/rb_tool - $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko - $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/CMakeFiles/oai_nw_drv/oai_nw_drv.ko</compile_prog_out> + $OPENAIR_DIR/cmake_targets/oaisim_noS1_build_oai/build/CMakeFiles/nasmesh/nasmesh.ko</compile_prog_out> <pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec> <pre_exec_args></pre_exec_args> <main_exec></main_exec> @@ -10486,7 +10485,7 @@ c <UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog> <UE_branch>develop1B</UE_branch> <UE_compile_prog_args></UE_compile_prog_args> - <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec> + <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec> <UE_pre_exec_args></UE_pre_exec_args> <UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec> <UE_main_exec_args></UE_main_exec_args> @@ -10586,7 +10585,7 @@ c <UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog> <UE_branch>develop1B</UE_branch> <UE_compile_prog_args></UE_compile_prog_args> - <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec> + <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec> <UE_pre_exec_args></UE_pre_exec_args> <UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec> <UE_main_exec_args></UE_main_exec_args> @@ -10686,7 +10685,7 @@ c <UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog> <UE_branch>develop1B</UE_branch> <UE_compile_prog_args></UE_compile_prog_args> - <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec> + <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec> <UE_pre_exec_args></UE_pre_exec_args> <UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r100 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec> <UE_main_exec_args></UE_main_exec_args> @@ -10787,7 +10786,7 @@ c <UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog> <UE_branch>develop1B</UE_branch> <UE_compile_prog_args></UE_compile_prog_args> - <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec> + <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec> <UE_pre_exec_args></UE_pre_exec_args> <UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r25 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec> <UE_main_exec_args></UE_main_exec_args> @@ -10887,7 +10886,7 @@ c <UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog> <UE_branch>develop1B</UE_branch> <UE_compile_prog_args></UE_compile_prog_args> - <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec> + <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec> <UE_pre_exec_args></UE_pre_exec_args> <UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r50 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec> <UE_main_exec_args></UE_main_exec_args> @@ -10989,7 +10988,7 @@ c <UE_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai --eNB --UE -w USRP -c -x </UE_compile_prog> <UE_branch>develop1B</UE_branch> <UE_compile_prog_args></UE_compile_prog_args> - <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip; sudo rmmod oai_nw_drv</UE_pre_exec> + <UE_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo rmmod nasmesh ; sudo rmmod ue_ip</UE_pre_exec> <UE_pre_exec_args></UE_pre_exec_args> <UE_main_exec>sleep 50; cd $OPENAIR_DIR/cmake_targets/lte_build_oai/build ; sudo -E $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem -U -C2660000000 -r100 --ue-scan-carrier --ue-txgain 90 --ue-rxgain 125 </UE_main_exec> <UE_main_exec_args></UE_main_exec_args> diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index b6f2d2c6c562496cbb459114cd323fb49a63cfed..db0899d1fef9d0b68a1755ad22a1c389f0f95540 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -465,6 +465,11 @@ function main() { 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 + if [ "$UE" = 1 -a "$NOS1" = "0" ] ; then + echo_info "Compiling UE S1 build : enabling Linux and NETLINK" + echo "set (LINUX True )" >> $cmake_file + echo "set (PDCP_USE_NETLINK True )" >> $cmake_file + fi echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file cd $DIR/$lte_build_dir/build cmake .. diff --git a/common/utils/T/T_messages.txt b/common/utils/T/T_messages.txt index 85441722b0ecd78f72fffcedf04b9be67451b829..09ed098ee0fb591bc2fa1b878601d9eec14ca6de 100644 --- a/common/utils/T/T_messages.txt +++ b/common/utils/T/T_messages.txt @@ -93,7 +93,7 @@ ID = ENB_MAC_UE_UL_PDU FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu ID = ENB_MAC_UE_UL_PDU_WITH_DATA DESC = MAC uplink UE received PDU - GROUP = ALL:MAC:ENB:HEAVY + GROUP = ALL:MAC:ENB FORMAT = int,eNB_ID : int,CC_id : int,rnti : int,frame : int,subframe : int,harq_pid : int,sdu_length : int,num_ce : int,num_sdu : buffer,data ID = ENB_MAC_UE_UL_SDU DESC = MAC uplink UE received SDU @@ -805,6 +805,85 @@ ID = LEGACY_CLI_TRACE GROUP = ALL:LEGACY_CLI:LEGACY_GROUP_TRACE:LEGACY FORMAT = string,log +################# +#### UE LOGS #### +################# +#general logs +ID = UE_MASTER_TICK + DESC = UE master tick - one tick per ms, to be used as "reference clock", mostly for ticktime view + GROUP = ALL:GENERAL:UE + FORMAT = int,eNB_ID : int,frame : int,subframe + +#PHY logs +ID = UE_PHY_UL_TICK + DESC = UE uplink tick - one tick per ms at start of uplink processing + GROUP = ALL:PHY:GRAPHIC:UE + FORMAT = int,eNB_ID : int,frame : int,subframe +ID = UE_PHY_DL_TICK + DESC = UE downlink tick - one tick per ms at start of downlink processing + GROUP = ALL:PHY:GRAPHIC:UE + FORMAT = int,eNB_ID : int,frame : int,subframe +ID = UE_PHY_DLSCH_UE_DCI + DESC = UE downlink UE specific DCI as sent by the PHY layer + GROUP = ALL:PHY:GRAPHIC:UE + FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,dci_format : int,harq_pid : int,mcs : int,TBS +ID = UE_PHY_DLSCH_UE_ACK + DESC = UE downlink UE ACK as seen by the PHY layer in process_HARQ_feedback + GROUP = ALL:PHY:GRAPHIC:UE + FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid +ID = UE_PHY_DLSCH_UE_NACK + DESC = UE downlink UE NACK as seen by the PHY layer in process_HARQ_feedback + GROUP = ALL:PHY:GRAPHIC:UE + FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid +ID = UE_PHY_ULSCH_UE_DCI + DESC = UE uplink UE specific DCI as sent by the PHY layer + GROUP = ALL:PHY:GRAPHIC:UE + FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid : int,mcs : int,round : int,first_rb : int,nb_rb : int,TBS +ID = UE_PHY_ULSCH_UE_ACK + DESC = UE uplink UE ACK as seen by the PHY layer + GROUP = ALL:PHY:GRAPHIC:UE + FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid +ID = UE_PHY_ULSCH_UE_NACK + DESC = UE uplink UE NACK as seen by the PHY layer + GROUP = ALL:PHY:GRAPHIC:UE + FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid +ID = UE_PHY_INPUT_SIGNAL + DESC = UE received signal in the time domain for a duration of 1ms + GROUP = ALL:PHY:GRAPHIC:HEAVY:UE + FORMAT = int,eNB_ID : int,frame : int,subframe : int,antenna : buffer,rxdata +ID = UE_PHY_DL_CHANNEL_ESTIMATE + DESC = UE channel estimation in the time domain + GROUP = ALL:PHY:GRAPHIC:HEAVY:UE + FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,antenna : buffer,chest_t +ID = UE_PHY_PDCCH_IQ + DESC = UE PDCCH received IQ data + GROUP = ALL:PHY:GRAPHIC:HEAVY:UE + FORMAT = int,nb_rb : int,NB_RB_DL : int,symbols_per_tti : buffer,rxdataF_comp +ID = UE_PHY_PDCCH_ENERGY + DESC = UE PDSCH 1 energy and threshold + GROUP = ALL:PHY:GRAPHIC:HEAVY:UE + FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdcch_ch_level00 : int,pdcch_ch_level01 : int,pdcch_ch_level10: int,pdcch_ch_level11 +ID = UE_PHY_PDSCH_IQ + DESC = UE PDSCH received IQ data + GROUP = ALL:PHY:GRAPHIC:HEAVY:UE + FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,nb_rb : int,N_RB_UL : int,symbols_per_tti : buffer,pusch_comp +ID = UE_PHY_PDSCH_ENERGY + DESC = UE PDSCH 1 energy and threshold + GROUP = ALL:PHY:GRAPHIC:HEAVY:UE + FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdsch_ch_level00 : int,pdsch_ch_level01 : int,pdsch_ch_level10: int,pdsch_ch_level11 +ID = UE_PHY_PUSCH_TX_POWER + DESC = UE PUSCH tx power + GROUP = ALL:PHY:GRAPHIC:HEAVY:UE + FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pusch : int,ampl: int,g_pusch: int,pl: int,nb_rb +ID = UE_PHY_PUCCH_TX_POWER + DESC = UE PDSCH 1 energy and threshold + GROUP = ALL:PHY:GRAPHIC:HEAVY:UE + FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pucch : int,ampl: int,g_pucch: int,pl +ID = UE_PHY_MEAS + DESC = UE PHY measurements + GROUP = ALL:PHY:GRAPHIC:HEAVY:UE + FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,rsrp : int,rssi : int,snr: int,rx_power: int,noise_power: int,w_cqi: int,freq_offset + #for debug/test - not used ID = first ID = buf_test @@ -963,6 +1042,10 @@ ID = VCD_VARIABLE_TRX_TST DESC = VCD variable TRX_TST GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value +ID = VCD_VARIABLE_TRX_WRITE_FLAGS + DESC = VCD variable TRX_WRITE_FLAGS + GROUP = ALL:VCD:ENB:VCD_VARIABLE + FORMAT = ulong,value ID = VCD_VARIABLE_TX_TS DESC = VCD variable TX_TS GROUP = ALL:VCD:ENB:VCD_VARIABLE @@ -1267,13 +1350,29 @@ ID = VCD_VARIABLE_UE0_SFN7 DESC = VCD variable UE0_SFN7 GROUP = ALL:VCD:ENB:VCD_VARIABLE FORMAT = ulong,value +ID = VCD_VARIABLE_UE_PDCP_FLUSH_SIZE + DESC = VCD variable UE_PDCP_FLUSH_SIZE + GROUP = ALL:VCD:ENB:UE:VCD_VARIABLE + FORMAT = ulong,value +ID = VCD_VARIABLE_UE_PDCP_FLUSH_ERR + DESC = VCD variable UE_PDCP_FLUSH_ERR + GROUP = ALL:VCD:ENB:UE: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 + GROUP = ALL:VCD:UE: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 + GROUP = ALL:VCD:UE:VCD_VARIABLE + FORMAT = ulong,value +ID = VCD_VARIABLE_UE0_TRX_READ_NS_MISSING + DESC = VCD variable UE0_TRX_READ_NS_MISSING + GROUP = ALL:VCD:UE:VCD_VARIABLE + FORMAT = ulong,value +ID = VCD_VARIABLE_UE0_TRX_WRITE_NS_MISSING + DESC = VCD variable UE0_TRX_WRITE_NS_MISSING + GROUP = ALL:VCD:UE:VCD_VARIABLE FORMAT = ulong,value #functions @@ -1326,8 +1425,12 @@ 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 +ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX0 + DESC = VCD function UE_SIGNAL_COND_RXTX0 + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_UE_SIGNAL_COND_RXTX1 + DESC = VCD function UE_SIGNAL_COND_RXTX1 GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value ID = VCD_FUNCTION_UE_WAIT_COND_RXTX0 @@ -1674,6 +1777,10 @@ ID = VCD_FUNCTION_UE_ULSCH_ENCODING DESC = VCD function UE_ULSCH_ENCODING GROUP = ALL:VCD:UE:VCD_FUNCTION FORMAT = int,value +ID = VCD_FUNCTION_UE_ULSCH_ENCODING_FILL_CQI + DESC = VCD function UE_ULSCH_ENCODING_FILL_CQI + GROUP = ALL:VCD:UE:VCD_FUNCTION + FORMAT = int,value ID = VCD_FUNCTION_UE_ULSCH_SCRAMBLING DESC = VCD function UE_ULSCH_SCRAMBLING GROUP = ALL:VCD:UE:VCD_FUNCTION @@ -1814,10 +1921,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_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 @@ -1862,6 +1969,22 @@ ID = VCD_FUNCTION_PDCP_VALIDATE_SECURITY DESC = VCD function PDCP_VALIDATE_SECURITY GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value +ID = VCD_FUNCTION_PDCP_FIFO_READ + DESC = VCD function PDCP_FIFO_READ + GROUP = ALL:VCD:ENB:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_PDCP_FIFO_READ_BUFFER + DESC = VCD function PDCP_FIFO_READ_BUFFER + GROUP = ALL:VCD:ENB:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_PDCP_FIFO_FLUSH + DESC = VCD function PDCP_FIFO_FLUSH + GROUP = ALL:VCD:ENB:VCD_FUNCTION + FORMAT = int,value +ID = VCD_FUNCTION_PDCP_FIFO_FLUSH_BUFFER + DESC = VCD function PDCP_FIFO_FLUSH_BUFFER + GROUP = ALL:VCD:ENB:VCD_FUNCTION + FORMAT = int,value ID = VCD_FUNCTION_RRC_RX_TX DESC = VCD function RRC_RX_TX GROUP = ALL:VCD:ENB:VCD_FUNCTION @@ -1938,82 +2061,3 @@ ID = VCD_FUNCTION_RECV_IF5 DESC = VCD function RECV_IF5 GROUP = ALL:VCD:ENB:VCD_FUNCTION FORMAT = int,value - -################# -#### UE LOGS #### -################# -#general logs -ID = UE_MASTER_TICK - DESC = UE master tick - one tick per ms, to be used as "reference clock", mostly for ticktime view - GROUP = ALL:GENERAL:UE - FORMAT = int,eNB_ID : int,frame : int,subframe - -#PHY logs -ID = UE_PHY_UL_TICK - DESC = UE uplink tick - one tick per ms at start of uplink processing - GROUP = ALL:PHY:GRAPHIC:UE - FORMAT = int,eNB_ID : int,frame : int,subframe -ID = UE_PHY_DL_TICK - DESC = UE downlink tick - one tick per ms at start of downlink processing - GROUP = ALL:PHY:GRAPHIC:UE - FORMAT = int,eNB_ID : int,frame : int,subframe -ID = UE_PHY_DLSCH_UE_DCI - DESC = UE downlink UE specific DCI as sent by the PHY layer - GROUP = ALL:PHY:GRAPHIC:UE - FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,dci_format : int,harq_pid : int,mcs : int,TBS -ID = UE_PHY_DLSCH_UE_ACK - DESC = UE downlink UE ACK as seen by the PHY layer in process_HARQ_feedback - GROUP = ALL:PHY:GRAPHIC:UE - FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid -ID = UE_PHY_DLSCH_UE_NACK - DESC = UE downlink UE NACK as seen by the PHY layer in process_HARQ_feedback - GROUP = ALL:PHY:GRAPHIC:UE - FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid -ID = UE_PHY_ULSCH_UE_DCI - DESC = UE uplink UE specific DCI as sent by the PHY layer - GROUP = ALL:PHY:GRAPHIC:UE - FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid : int,mcs : int,round : int,first_rb : int,nb_rb : int,TBS -ID = UE_PHY_ULSCH_UE_ACK - DESC = UE uplink UE ACK as seen by the PHY layer - GROUP = ALL:PHY:GRAPHIC:UE - FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid -ID = UE_PHY_ULSCH_UE_NACK - DESC = UE uplink UE NACK as seen by the PHY layer - GROUP = ALL:PHY:GRAPHIC:UE - FORMAT = int,eNB_ID : int,frame : int,subframe : int,UE_id : int,rnti : int,harq_pid -ID = UE_PHY_INPUT_SIGNAL - DESC = UE received signal in the time domain for a duration of 1ms - GROUP = ALL:PHY:GRAPHIC:HEAVY:UE - FORMAT = int,eNB_ID : int,frame : int,subframe : int,antenna : buffer,rxdata -ID = UE_PHY_DL_CHANNEL_ESTIMATE - DESC = UE channel estimation in the time domain - GROUP = ALL:PHY:GRAPHIC:HEAVY:UE - FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,antenna : buffer,chest_t -ID = UE_PHY_PDCCH_IQ - DESC = UE PDCCH received IQ data - GROUP = ALL:PHY:GRAPHIC:HEAVY:UE - FORMAT = int,nb_rb : int,NB_RB_DL : int,symbols_per_tti : buffer,rxdataF_comp -ID = UE_PHY_PDCCH_ENERGY - DESC = UE PDSCH 1 energy and threshold - GROUP = ALL:PHY:GRAPHIC:HEAVY:UE - FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdcch_ch_level00 : int,pdcch_ch_level01 : int,pdcch_ch_level10: int,pdcch_ch_level11 -ID = UE_PHY_PDSCH_IQ - DESC = UE PDSCH received IQ data - GROUP = ALL:PHY:GRAPHIC:HEAVY:UE - FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,nb_rb : int,N_RB_UL : int,symbols_per_tti : buffer,pusch_comp -ID = UE_PHY_PDSCH_ENERGY - DESC = UE PDSCH 1 energy and threshold - GROUP = ALL:PHY:GRAPHIC:HEAVY:UE - FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,pdsch_ch_level00 : int,pdsch_ch_level01 : int,pdsch_ch_level10: int,pdsch_ch_level11 -ID = UE_PHY_PUSCH_TX_POWER - DESC = UE PUSCH tx power - GROUP = ALL:PHY:GRAPHIC:HEAVY:UE - FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pusch : int,ampl: int,g_pusch: int,pl: int,nb_rb -ID = UE_PHY_PUCCH_TX_POWER - DESC = UE PDSCH 1 energy and threshold - GROUP = ALL:PHY:GRAPHIC:HEAVY:UE - FORMAT = int,eNB_ID : int,UE_id : int,frame : int,subframe : int,p0_pucch : int,ampl: int,g_pucch: int,pl -ID = UE_PHY_MEAS - DESC = UE PHY measurements - GROUP = ALL:PHY:GRAPHIC:HEAVY:UE - FORMAT = int,eNB_ID : int,UE_ID : int,frame : int,subframe : int,rsrp : int,rssi : int,snr: int,rx_power: int,noise_power: int,w_cqi: int,freq_offset diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c index 8ec2a40d8de12b481fd90ad783595698de551dcb..752180a6fcc45f7b620cf2bd91adc031eba1628a 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c @@ -40,6 +40,8 @@ #include "SCHED/defs.h" #include "defs.h" #include "UTIL/LOG/vcd_signal_dumper.h" +#include "UTIL/LOG/log.h" +#include <syscall.h> //#define DEBUG_DLSCH_CODING //#define DEBUG_DLSCH_FREE 1 @@ -347,6 +349,8 @@ int dlsch_encoding_2threads0(te_params *tep) { extern int oai_exit; void *te_thread(void *param) { + pthread_setname_np( pthread_self(),"te processing"); + LOG_I(PHY,"thread te created id=%ld", syscall(__NR_gettid)); eNB_proc_t *proc = &((te_params *)param)->eNB->proc; while (!oai_exit) { diff --git a/openair1/PHY/LTE_TRANSPORT/proto.h b/openair1/PHY/LTE_TRANSPORT/proto.h index a9674ca21e44518062fb23822f1ca41b17404ad6..52c258762badf8673985ddc0109de2dbbf2698ba 100644 --- a/openair1/PHY/LTE_TRANSPORT/proto.h +++ b/openair1/PHY/LTE_TRANSPORT/proto.h @@ -1207,7 +1207,8 @@ int32_t rx_pdcch(LTE_UE_COMMON *lte_ue_common_vars, */ int pss_sss_extract(PHY_VARS_UE *phy_vars_ue, int32_t pss_ext[4][72], - int32_t sss_ext[4][72]); + int32_t sss_ext[4][72], + uint8_t subframe); /*! \brief Extract only PSS resource elements @param phy_vars_ue Pointer to UE variables diff --git a/openair1/PHY/LTE_TRANSPORT/sss.c b/openair1/PHY/LTE_TRANSPORT/sss.c index 85398edddba052105db304a77176aabe9987724a..fc5e7f0d1bd7c995002c961983e63b4c6970f681 100644 --- a/openair1/PHY/LTE_TRANSPORT/sss.c +++ b/openair1/PHY/LTE_TRANSPORT/sss.c @@ -149,7 +149,8 @@ int pss_ch_est(PHY_VARS_UE *ue, int _do_pss_sss_extract(PHY_VARS_UE *ue, int32_t pss_ext[4][72], int32_t sss_ext[4][72], - uint8_t doPss, uint8_t doSss) // add flag to indicate extracting only PSS, only SSS, or both + uint8_t doPss, uint8_t doSss, + uint8_t subframe) // add flag to indicate extracting only PSS, only SSS, or both { @@ -163,32 +164,52 @@ int _do_pss_sss_extract(PHY_VARS_UE *ue, int rx_offset = frame_parms->ofdm_symbol_size-3*12; uint8_t pss_symb,sss_symb; - int32_t **rxdataF = ue->common_vars.common_vars_rx_data_per_thread[0].rxdataF; - - if (frame_parms->frame_type == FDD) { - pss_symb = 6-frame_parms->Ncp; - sss_symb = pss_symb-1; - } else { - pss_symb = 2; - sss_symb = frame_parms->symbols_per_tti-1; - } + int32_t **rxdataF; for (aarx=0; aarx<frame_parms->nb_antennas_rx; aarx++) { + if (frame_parms->frame_type == FDD) { + pss_symb = 6-frame_parms->Ncp; + sss_symb = pss_symb-1; + + rxdataF = ue->common_vars.common_vars_rx_data_per_thread[(subframe&0x1)].rxdataF; + pss_rxF = &rxdataF[aarx][(rx_offset + (pss_symb*(frame_parms->ofdm_symbol_size)))]; + sss_rxF = &rxdataF[aarx][(rx_offset + (sss_symb*(frame_parms->ofdm_symbol_size)))]; + + } else { + pss_symb = 2; + sss_symb = frame_parms->symbols_per_tti-1; + + rxdataF = ue->common_vars.common_vars_rx_data_per_thread[(subframe&0x1)].rxdataF; + sss_rxF = &rxdataF[aarx][(rx_offset + (sss_symb*(frame_parms->ofdm_symbol_size)))]; + + rxdataF = ue->common_vars.common_vars_rx_data_per_thread[((subframe+1)&0x1)].rxdataF; + pss_rxF = &rxdataF[aarx][(rx_offset + (pss_symb*(frame_parms->ofdm_symbol_size)))]; + + } //printf("extract_rbs: symbol_mod=%d, rx_offset=%d, ch_offset=%d\n",symbol_mod, // (rx_offset + (symbol*(frame_parms->ofdm_symbol_size)))*2, // LTE_CE_OFFSET+ch_offset+(symbol_mod*(frame_parms->ofdm_symbol_size))); - pss_rxF = &rxdataF[aarx][(rx_offset + (pss_symb*(frame_parms->ofdm_symbol_size)))]; - sss_rxF = &rxdataF[aarx][(rx_offset + (sss_symb*(frame_parms->ofdm_symbol_size)))]; pss_rxF_ext = &pss_ext[aarx][0]; sss_rxF_ext = &sss_ext[aarx][0]; for (rb=0; rb<nb_rb; rb++) { // skip DC carrier if (rb==3) { - sss_rxF = &rxdataF[aarx][(1 + (sss_symb*(frame_parms->ofdm_symbol_size)))]; - pss_rxF = &rxdataF[aarx][(1 + (pss_symb*(frame_parms->ofdm_symbol_size)))]; + if(frame_parms->frame_type == FDD) + { + sss_rxF = &rxdataF[aarx][(1 + (sss_symb*(frame_parms->ofdm_symbol_size)))]; + pss_rxF = &rxdataF[aarx][(1 + (pss_symb*(frame_parms->ofdm_symbol_size)))]; + } + else + { + rxdataF = ue->common_vars.common_vars_rx_data_per_thread[(subframe&0x1)].rxdataF; + sss_rxF = &rxdataF[aarx][(1 + (sss_symb*(frame_parms->ofdm_symbol_size)))]; + + rxdataF = ue->common_vars.common_vars_rx_data_per_thread[((subframe+1)&0x1)].rxdataF; + pss_rxF = &rxdataF[aarx][(1 + (pss_symb*(frame_parms->ofdm_symbol_size)))]; + } } for (i=0; i<12; i++) { @@ -209,16 +230,17 @@ int _do_pss_sss_extract(PHY_VARS_UE *ue, int pss_sss_extract(PHY_VARS_UE *phy_vars_ue, int32_t pss_ext[4][72], - int32_t sss_ext[4][72]) + int32_t sss_ext[4][72], + uint8_t subframe) { - return _do_pss_sss_extract(phy_vars_ue, pss_ext, sss_ext, 1 /* doPss */, 1 /* doSss */); + return _do_pss_sss_extract(phy_vars_ue, pss_ext, sss_ext, 1 /* doPss */, 1 /* doSss */, subframe); } int pss_only_extract(PHY_VARS_UE *phy_vars_ue, int32_t pss_ext[4][72]) { static int32_t dummy[4][72]; - return _do_pss_sss_extract(phy_vars_ue, pss_ext, dummy, 1 /* doPss */, 0 /* doSss */); + return _do_pss_sss_extract(phy_vars_ue, pss_ext, dummy, 1 /* doPss */, 0 /* doSss */, 0); } @@ -226,7 +248,7 @@ int sss_only_extract(PHY_VARS_UE *phy_vars_ue, int32_t sss_ext[4][72]) { static int32_t dummy[4][72]; - return _do_pss_sss_extract(phy_vars_ue, dummy, sss_ext, 0 /* doPss */, 1 /* doSss */); + return _do_pss_sss_extract(phy_vars_ue, dummy, sss_ext, 0 /* doPss */, 1 /* doSss */, 0); } @@ -295,10 +317,10 @@ int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_ 0, 1); } - + // pss sss extract for subframe 0 pss_sss_extract(ue, pss_ext, - sss0_ext); + sss0_ext,0); /* write_output("rxsig0.m","rxs0",&ue->common_vars.rxdata[0][0],ue->frame_parms.samples_per_tti,1,1); write_output("rxdataF0.m","rxF0",&ue->common_vars.rxdataF[0][0],2*14*ue->frame_parms.ofdm_symbol_size,2,1); @@ -346,9 +368,10 @@ int rx_sss(PHY_VARS_UE *ue,int32_t *tot_metric,uint8_t *flip_max,uint8_t *phase_ 1); } + // pss sss extract for subframe 5 pss_sss_extract(ue, pss_ext, - sss5_ext); + sss5_ext,5); // write_output("sss5_ext0.m","sss5ext0",sss5_ext,72,1,1); // get conjugated channel estimate from PSS (symbol 6), H* = R* \cdot PSS diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c index 8edb1eaf9460443a4ebe58ceba7776c42a696ad2..d877aa3d295e589e7d093857dd77fe3cb321d8ce 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c @@ -418,6 +418,7 @@ int ulsch_decoding_data_2thread0(td_params* tdp) { extern int oai_exit; void *td_thread(void *param) { + pthread_setname_np( pthread_self(), "td processing"); PHY_VARS_eNB *eNB = ((td_params*)param)->eNB; eNB_proc_t *proc = &eNB->proc; diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 89da99460adfe156901bded4ac71097ea2ec50b4..d210f5c57462d46b87fbf9950343773af8c7ac15 100644 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -32,6 +32,7 @@ #ifndef __PHY_DEFS__H__ #define __PHY_DEFS__H__ +#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <malloc.h> diff --git a/openair1/SCHED/phy_procedures_lte_common.c b/openair1/SCHED/phy_procedures_lte_common.c index c787ea0773c3f6ac2621fba6af20e809dcb7eb53..93d3c94b1141c6623e1a17059d2be26e55bdaca1 100644 --- a/openair1/SCHED/phy_procedures_lte_common.c +++ b/openair1/SCHED/phy_procedures_lte_common.c @@ -339,6 +339,9 @@ uint8_t get_reset_ack(LTE_DL_FRAME_PARMS *frame_parms, o_ACK[0] = harq_ack[subframe_dl0].ack; status = harq_ack[subframe_dl0].send_harq_status; + + if(do_reset) + harq_ack[subframe_dl0].send_harq_status = 0; //printf("get_ack: Getting ACK/NAK for PDSCH (subframe %d) => %d\n",subframe_dl,o_ACK[0]); } else { switch (frame_parms->tdd_config) { diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index cad508c7c225d7bc90d5b6a1316b5a89096d1cc4..b47651b873d2f6ba8f81158bbb24c19da24157a6 100644 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -2605,6 +2605,7 @@ extern int oai_exit; static void *fep_thread(void *param) { + pthread_setname_np( pthread_self(), "UEfep"); PHY_VARS_eNB *eNB = (PHY_VARS_eNB *)param; eNB_proc_t *proc = &eNB->proc; while (!oai_exit) { diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 7d061f60bfcbfc75041ad838f41b1e04c6b960f4..ac90094ea495f588e5e1b375126dd15460b87562 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -1184,11 +1184,12 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ue->prach_resources[eNB_id]->ra_PreambleIndex = 19; } - LOG_I(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d, P0_PRACH %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d\n", + LOG_I(PHY,"[UE %d][RAPROC] Frame %d, Subframe %d : Generating PRACH, preamble %d,PL %d, P0_PRACH %d, TARGET_RECEIVED_POWER %d dBm, PRACH TDD Resource index %d, RA-RNTI %d\n", ue->Mod_id, frame_tx, subframe_tx, ue->prach_resources[eNB_id]->ra_PreambleIndex, + get_PL(ue->Mod_id,ue->CC_id,eNB_id), ue->tx_power_dBm[subframe_tx], ue->prach_resources[eNB_id]->ra_PREAMBLE_RECEIVED_TARGET_POWER, ue->prach_resources[eNB_id]->ra_TDD_map_index, @@ -1377,7 +1378,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB ue->ulsch[eNB_id]->harq_processes[harq_pid]->round = 0; } - ack_status = get_ack(&ue->frame_parms, + ack_status = reset_ack(&ue->frame_parms, ue->dlsch[eNB_id][0]->harq_ack, subframe_tx, ue->ulsch[eNB_id]->o_ACK); @@ -1393,14 +1394,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB // check if we received a PDSCH at subframe_tx - 4 // ==> send ACK/NACK on PUSCH - if( (ue->dlsch[eNB_id][0]->harq_ack[proc->subframe_rx].send_harq_status) == 1) - { - ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK = 1; - } - else - { - ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK = 0; - } + ue->ulsch[eNB_id]->harq_processes[harq_pid]->O_ACK = ack_status; #if T_TRACER if(ue->ulsch[eNB_id]->o_ACK[0]) @@ -1710,6 +1704,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin int tx_amp; int16_t Po_PUCCH; uint8_t ack_status=0; + uint8_t ack_sr_generated = 0; VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX_PUCCH,VCD_FUNCTION_IN); @@ -1781,7 +1776,8 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin // we need to transmit ACK/NAK in this subframe ue->generate_ul_signal[eNB_id] = 1; - + ack_sr_generated = 1; + if ((frame_parms->frame_type == TDD) && (SR_payload>0)) { format = pucch_format1b; } @@ -1882,6 +1878,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin } } else if (SR_payload==1) { // no ACK/NAK but SR is triggered by MAC + ack_sr_generated = 1; if (ue->mac_enabled == 1) { Po_PUCCH = pucch_power_cntl(ue,proc,subframe_tx,eNB_id,pucch_format1); } @@ -1940,7 +1937,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin // PUCCH 2x - if (ue->generate_ul_signal[eNB_id] == 0) { // we have not generated ACK/NAK/SR in this subframe + if (ack_sr_generated == 0) { // we have not generated ACK/NAK/SR in this subframe n2_pucch = ue->cqi_report_config[eNB_id].CQI_ReportPeriodic.cqi_PUCCH_ResourceIndex; // only use format2 for now, i.e. now ACK/NAK - CQI multiplexing @@ -1971,14 +1968,6 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin T(T_UE_PHY_PUCCH_TX_POWER, T_INT(eNB_id),T_INT(Mod_id), T_INT(frame_tx%1024), T_INT(subframe_tx),T_INT(ue->tx_power_dBm[subframe_tx]), T_INT(tx_amp),T_INT(ue->dlsch[eNB_id][0]->g_pucch),T_INT(get_PL(ue->Mod_id,ue->CC_id,eNB_id))); #endif - LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (CQI), n2_pucch %d, Po_PUCCH %d, isShortenPucch %d, amp %d\n", - Mod_id, - ue->dlsch[eNB_id][0]->rnti, - frame_tx, subframe_tx, - n2_pucch, - Po_PUCCH, - isShortenPucch, - tx_amp); int len; // get the payload : < 12 bits, returned in len @@ -1997,6 +1986,16 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin ue->pdcch_vars[eNB_id]->crnti); ue->generate_ul_signal[eNB_id] = 1; + + LOG_D(PHY,"[UE %d][RNTI %x] AbsSubFrame %d.%d Generating PUCCH 2 (CQI %d), n2_pucch %d, Po_PUCCH %d, isShortenPucch %d, amp %d\n", + Mod_id, + ue->dlsch[eNB_id][0]->rnti, + frame_tx, subframe_tx,CQI_payload, + n2_pucch, + Po_PUCCH, + isShortenPucch, + tx_amp); + } // Periodic RI report else if ((ue->cqi_report_config[eNB_id].CQI_ReportPeriodic.ri_ConfigIndex>0) && diff --git a/openair2/RRC/LITE/rrc_UE.c b/openair2/RRC/LITE/rrc_UE.c index a6290f1f3cbcd57b80ebb8b34bb84d5e29b53f37..c137d38cc08ac658255a614014eba274dfd8a3ca 100644 --- a/openair2/RRC/LITE/rrc_UE.c +++ b/openair2/RRC/LITE/rrc_UE.c @@ -3131,9 +3131,9 @@ static void dump_sib2( SystemInformationBlockType2_t *sib2 ) sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_SubframeConfig ); LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission : %d\n", sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.ackNackSRS_SimultaneousTransmission ); - LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts : %ld\n", + //LOG_I( RRC, "radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts : %ld\n", /* TODO: check that it's okay to access [0] */ - sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts[0] ); + // sib2->radioResourceConfigCommon.soundingRS_UL_ConfigCommon.choice.setup.srs_MaxUpPts[0] ); } // uplinkPowerControlCommon diff --git a/openair2/UTIL/LOG/log.h b/openair2/UTIL/LOG/log.h index 9a7dac4de5972a8ad658f6e373e162775e436d7e..1735a89a73530521a006374bfd881874c2aa3dbb 100644 --- a/openair2/UTIL/LOG/log.h +++ b/openair2/UTIL/LOG/log.h @@ -46,6 +46,8 @@ #include <time.h> #include <stdint.h> #include <inttypes.h> +#define _GNU_SOURCE +#include <pthread.h> #else #include "rtai_fifos.h" #endif diff --git a/openair3/NAS/COMMON/EMM/MSG/AttachAccept.c b/openair3/NAS/COMMON/EMM/MSG/AttachAccept.c index 248540dff3fb8b7481136a3c1b9ba5ca47a81747..727bacfa2dcbf316ad5a93b8e6beb6dfe4715609 100644 --- a/openair3/NAS/COMMON/EMM/MSG/AttachAccept.c +++ b/openair3/NAS/COMMON/EMM/MSG/AttachAccept.c @@ -28,6 +28,7 @@ #include "TLVEncoder.h" #include "TLVDecoder.h" #include "AttachAccept.h" +#include "assertions.h" int decode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint32_t len) { @@ -59,7 +60,7 @@ int decode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint decoded += decoded_result; /* Decoding optional fields */ - while(len - decoded > 0) { + while(((int32_t)len - (int32_t)decoded) > 0) { uint8_t ieiDecoded = *(buffer + decoded); /* Type | value iei are below 0x80 so just return the first 4 bits */ @@ -189,6 +190,7 @@ int decode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint default: errorCodeDecoder = TLV_DECODE_UNEXPECTED_IEI; LOG_TRACE(WARNING, "DECODE_UNEXPECTED_IEI %x (4 bits)", ieiDecoded); + AssertFatal(0, " "); return TLV_DECODE_UNEXPECTED_IEI; } } diff --git a/openair3/NAS/UE/UEprocess.c b/openair3/NAS/UE/UEprocess.c index 20af58dac67563576cb9c9f425a7bd63987033ec..791c9deccd97c34420755e47a795a4a2cda6e107 100644 --- a/openair3/NAS/UE/UEprocess.c +++ b/openair3/NAS/UE/UEprocess.c @@ -218,6 +218,7 @@ static void *_nas_user_mngr(void *args) { LOG_FUNC_IN; + pthread_setname_np( pthread_self(), "nas_user_mngr"); int exit_loop = FALSE; int *fd = (int *) args; diff --git a/targets/RT/USER/lte-ue.c b/targets/RT/USER/lte-ue.c index c4289b4f0a2793772cd0730aa8ab59b22bbffb17..5115a824fc104cb0bf22bc42a86b768a99ce075a 100644 --- a/targets/RT/USER/lte-ue.c +++ b/targets/RT/USER/lte-ue.c @@ -86,7 +86,7 @@ typedef enum { si=2 } sync_mode_t; -void init_UE_threads(int nb_inst); +void init_UE_threads(PHY_VARS_UE *UE); void *UE_thread(void *arg); void init_UE(int nb_inst); @@ -204,28 +204,21 @@ void init_thread(int sched_runtime, int sched_deadline, int sched_fifo, cpu_set_ while (sync_var<0) pthread_cond_wait(&sync_cond, &sync_mutex); pthread_mutex_unlock(&sync_mutex); - printf("starting %s\n",name); + printf("started %s as PID: %ld\n",name, gettid()); } void init_UE(int nb_inst) { - PHY_VARS_UE *UE; - - for (int inst=0; inst<nb_inst; inst++) { - printf("Intializing UE Threads for instance %d ...\n",inst); - init_UE_threads(inst); - sleep(1); - UE = PHY_vars_UE_g[inst][0]; - - AssertFatal(0== openair0_device_load(&(UE->rfdevice), &openair0_cfg[0]), ""); - - UE->rfdevice.host_type = BBU_HOST; + for (long long inst=0; inst<nb_inst; inst++) { // UE->rfdevice.type = NONE_DEV; - AssertFatal(0 == pthread_create(&UE->proc.pthread_ue, &UE->proc.attr_ue, UE_thread, NULL), ""); - pthread_setname_np( UE->proc.pthread_ue, "main UE" ); + PHY_VARS_UE *UE = PHY_vars_UE_g[inst][0]; + AssertFatal(0 == pthread_create(&UE->proc.pthread_ue, + &UE->proc.attr_ue, + UE_thread, + (void*)UE), ""); } - printf("UE threads created\n"); + printf("UE threads created by %ld\n", gettid()); #ifdef USE_MME while (start_UE == 0) { sleep(1); @@ -465,7 +458,11 @@ static void *UE_thread_synch(void *arg) { // rerun with new cell parameters and frequency-offset for (i=0; i<openair0_cfg[UE->rf_map.card].rx_num_channels; i++) { openair0_cfg[UE->rf_map.card].rx_gain[UE->rf_map.chain+i] = UE->rx_total_gain_dB;//-USRP_GAIN_OFFSET; - openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] -= UE->common_vars.freq_offset; + if (freq_offset >= 0) { + openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] += UE->common_vars.freq_offset; + } else { + openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i] -= UE->common_vars.freq_offset; + } openair0_cfg[UE->rf_map.card].tx_freq[UE->rf_map.chain+i] = openair0_cfg[UE->rf_map.card].rx_freq[UE->rf_map.chain+i]+uplink_frequency_offset[CC_id][i]; downlink_frequency[CC_id][i] = openair0_cfg[CC_id].rx_freq[i]; freq_offset=0; @@ -629,13 +626,13 @@ static void *UE_thread_rxn_txnp4(void *arg) { static long long __thread instance_cnt_rxtx=-1; proc->subframe_rx=proc->sub_frame_start; - char threadName[256]= {0}; - sprintf(threadName,"UE_thread_rxn_txnp4_%d",proc->sub_frame_start); + char threadname[256]= {0}; + sprintf(threadname,"UE_proc_%d",proc->sub_frame_start); cpu_set_t cpuset; CPU_ZERO(&cpuset); CPU_SET(proc->sub_frame_start+1, &cpuset); init_thread(900000,1000000 , 40, &cpuset,//sched_get_priority_max(SCHED_FIFO)-1, - threadName); + threadname); while (!oai_exit) { // Wait Rx data to process are available @@ -660,14 +657,14 @@ static void *UE_thread_rxn_txnp4(void *arg) { if (UE->frame_parms.frame_type == TDD) { LOG_D(PHY, "%s,TDD%d,%s: calling UE_RX\n", - threadName, + 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, + threadname, (UE->frame_parms.frame_type==FDD? "FDD": (UE->frame_parms.frame_type==TDD? "TDD":"UNKNOWN_DUPLEX_MODE")), (sf_type==SF_DL? "SF_DL" : @@ -742,7 +739,7 @@ static void *UE_thread_rxn_txnp4(void *arg) { void *UE_thread(void *arg) { - PHY_VARS_UE *UE = PHY_vars_UE_g[0][0]; + PHY_VARS_UE *UE = (PHY_VARS_UE *) arg; // int tx_enabled = 0; int dummy_rx[UE->frame_parms.nb_antennas_rx][UE->frame_parms.samples_per_tti] __attribute__((aligned(32))); openair0_timestamp timestamp,timestamp1; @@ -756,6 +753,11 @@ void *UE_thread(void *arg) { init_thread(100000, 500000, 40, &cpuset, //sched_get_priority_max(SCHED_FIFO), "main UE"); + AssertFatal(0== openair0_device_load(&(UE->rfdevice), &openair0_cfg[0]), ""); + UE->rfdevice.host_type = BBU_HOST; + sleep(1); + init_UE_threads(UE); + #ifdef NAS_UE MessageDef *message_p; message_p = itti_alloc_new_message(TASK_NAS_UE, INITIALIZE_MESSAGE); @@ -763,7 +765,7 @@ void *UE_thread(void *arg) { #endif int sub_frame=-1; - int cumulated_shift=0; + //int cumulated_shift=0; while (!oai_exit) { if (UE->is_synchronized == 0) { @@ -775,7 +777,7 @@ void *UE_thread(void *arg) { if (instance_cnt_synch < 0) { // we can invoke the synch // grab 10 ms of signal and wakeup synch thread for (int i=0; i<UE->frame_parms.nb_antennas_rx; i++) - rxp[i] = (void*)&UE->common_vars.rxdata[i][0]; + rxp[i] = (void*)&UE->common_vars.rxdata[i][0]; if (UE->mode != loop_through_memory) AssertFatal( UE->frame_parms.samples_per_tti*10 == @@ -821,7 +823,7 @@ void *UE_thread(void *arg) { AssertFatal(UE->rx_offset == UE->rfdevice.trx_read_func(&UE->rfdevice, ×tamp, - (void**)UE->common_vars.rxdata, + (void**)UE->common_vars.rxdata, UE->rx_offset, UE->frame_parms.nb_antennas_rx),""); } @@ -833,8 +835,8 @@ void *UE_thread(void *arg) { AssertFatal (UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0 == UE->rfdevice.trx_read_func(&UE->rfdevice, ×tamp, - (void**)UE->common_vars.rxdata, - UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0, + (void**)UE->common_vars.rxdata, + UE->frame_parms.ofdm_symbol_size+UE->frame_parms.nb_prefix_samples0, UE->frame_parms.nb_antennas_rx),""); slot_fep(UE,0, 0, 0, 0, 0); } //UE->mode != loop_through_memory @@ -849,8 +851,8 @@ void *UE_thread(void *arg) { if (UE->mode != loop_through_memory) { for (i=0; i<UE->frame_parms.nb_antennas_rx; i++) rxp[i] = (void*)&UE->common_vars.rxdata[i][UE->frame_parms.ofdm_symbol_size+ - UE->frame_parms.nb_prefix_samples0+ - sub_frame*UE->frame_parms.samples_per_tti]; + UE->frame_parms.nb_prefix_samples0+ + sub_frame*UE->frame_parms.samples_per_tti]; for (i=0; i<UE->frame_parms.nb_antennas_tx; i++) txp[i] = (void*)&UE->common_vars.txdata[i][((sub_frame+2)%10)*UE->frame_parms.samples_per_tti]; @@ -859,20 +861,28 @@ void *UE_thread(void *arg) { readBlockSize=UE->frame_parms.samples_per_tti; writeBlockSize=UE->frame_parms.samples_per_tti; } else { - int rx_off_diff; - if ( UE->rx_offset< 5*UE->frame_parms.samples_per_tti ) - rx_off_diff = -UE->rx_offset; - else // moving to the left so drop rx_off_diff samples - rx_off_diff = 10*UE->frame_parms.samples_per_tti - RX_OFF_MIN - UE->rx_offset; - cumulated_shift+=rx_off_diff; - if ( rx_off_diff > 10 ) - LOG_E (PHY,"HUGE shift %d, cumul %d\n", rx_off_diff, cumulated_shift); - static __thread int printed_cumul=0; - if ( abs(cumulated_shift/1000) > printed_cumul ) { - LOG_W(PHY,"Shifted for 1000 samples: cumul %d\n", cumulated_shift); - printed_cumul=abs(cumulated_shift/1000); + static int rx_correction_timer=5; + static int rx_off_diff =0; + if ((UE->rx_offset<(5*UE->frame_parms.samples_per_tti)) && + (UE->rx_offset > 0) && + (rx_correction_timer == 0)) { + rx_off_diff = -1 ; + LOG_D(PHY,"AbsSubframe %d.%d UE->rx_offset %d > %d, diff %d\n", + proc->frame_rx,proc->subframe_rx,UE->rx_offset,0,rx_off_diff); + rx_correction_timer = 5; + } else if ((UE->rx_offset>(5*UE->frame_parms.samples_per_tti)) && + (UE->rx_offset < ((10*UE->frame_parms.samples_per_tti))) && + (rx_correction_timer == 0)) { // moving to the left so drop rx_off_diff samples + rx_off_diff = 1; + LOG_D(PHY,"AbsSubframe %d.%d UE->rx_offset %d < %d, diff %d\n", + proc->frame_rx,proc->subframe_rx,UE->rx_offset,10*UE->frame_parms.samples_per_tti,rx_off_diff); + rx_correction_timer = 5; } - + if (rx_correction_timer>0) + rx_correction_timer--; + UE->rx_offset_diff = rx_off_diff; + LOG_D(PHY,"SET rx_off_diff to %d\n",UE->rx_offset_diff); + rx_off_diff = 0; readBlockSize=UE->frame_parms.samples_per_tti- UE->frame_parms.ofdm_symbol_size- UE->frame_parms.nb_prefix_samples0; @@ -935,30 +945,6 @@ void *UE_thread(void *arg) { printf("Processing subframe %d",proc->subframe_rx); getchar(); } - /* - }// for sf=0..10 - - uint8_t proc_select = 9&1; - UE_rxtx_proc_t *proc = &UE->proc.proc_rxtx[proc_select]; - - if ((UE->rx_offset<(5*UE->frame_parms.samples_per_tti)) && - (UE->rx_offset > 0) && - (rx_correction_timer == 0)) { - rx_off_diff = -1 ; - LOG_D(PHY,"AbsSubframe %d.%d UE->rx_offset %d > %d, diff %d\n",proc->frame_rx,proc->subframe_rx,UE->rx_offset,0,rx_off_diff); - rx_correction_timer = 5; - } else if ((UE->rx_offset>(5*UE->frame_parms.samples_per_tti)) && - (UE->rx_offset < ((10*UE->frame_parms.samples_per_tti))) && - (rx_correction_timer == 0)) { // moving to the left so drop rx_off_diff samples - rx_off_diff = 1; - LOG_D(PHY,"AbsSubframe %d.%d UE->rx_offset %d < %d, diff %d\n",proc->frame_rx,proc->subframe_rx,UE->rx_offset,10*UE->frame_parms.samples_per_tti,rx_off_diff); - - rx_correction_timer = 5; - } - - if (rx_correction_timer>0) - rx_correction_timer--; - */ } // start_rx_stream==1 } // UE->is_synchronized==1 @@ -974,14 +960,13 @@ void *UE_thread(void *arg) { * - UE_thread_synch * and the locking between them. */ -void init_UE_threads(int inst) { - PHY_VARS_UE *UE; - - UE = PHY_vars_UE_g[inst][0]; +void init_UE_threads(PHY_VARS_UE *UE) { pthread_attr_init (&UE->proc.attr_ue); pthread_attr_setstacksize(&UE->proc.attr_ue,8192);//5*PTHREAD_STACK_MIN); + pthread_mutex_init(&UE->proc.mutex_synch,NULL); + pthread_cond_init(&UE->proc.cond_synch,NULL); // the threads are not yet active, therefore access is allowed without locking int nb_threads=2; @@ -992,8 +977,6 @@ void init_UE_threads(int inst) { UE->proc.proc_rxtx[i].sub_frame_step=nb_threads; pthread_create(&UE->proc.proc_rxtx[i].pthread_rxtx,NULL,UE_thread_rxn_txnp4,(void*)&UE->proc.proc_rxtx[i]); } - pthread_mutex_init(&UE->proc.mutex_synch,NULL); - pthread_cond_init(&UE->proc.cond_synch,NULL); pthread_create(&UE->proc.pthread_synch,NULL,UE_thread_synch,(void*)UE); } diff --git a/targets/SIMU/USER/oaisim_functions.c b/targets/SIMU/USER/oaisim_functions.c index 130a3393905e0325aa60d3ba1612c1772d6ed9aa..508ebcde27804d8f8856657c1b19ce3882f131cc 100644 --- a/targets/SIMU/USER/oaisim_functions.c +++ b/targets/SIMU/USER/oaisim_functions.c @@ -450,6 +450,8 @@ void get_simulation_options(int argc, char *argv[]) case 'a': abstraction_flag = 1; + printf("FATAL: -a flag not functional for the moment.\nWe are working on fixing the abstraction mode.\n"); + exit(1); break; case 'A':