diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index 3cbf4ac2823474bf240ab196a9590159bcacf786..889427b800193026b7ca443a5159b11a01591f9d 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -2314,7 +2314,8 @@ uint8_t generate_dci_top_emul(PHY_VARS_eNB *phy_vars_eNB, eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].num_ue_spec_dci = num_ue_spec_dci; eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].num_common_dci = num_common_dci; - LOG_D(PHY,"[eNB %d][DCI][EMUL] num spec dci %d num comm dci %d num PMCH %d \n", phy_vars_eNB->Mod_id, num_ue_spec_dci,num_common_dci, + LOG_D(PHY,"[eNB %d][DCI][EMUL] CC id %d: num spec dci %d num comm dci %d num PMCH %d \n", + phy_vars_eNB->Mod_id, phy_vars_eNB->CC_id, num_ue_spec_dci,num_common_dci, eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].num_pmch); if (eNB_transport_info[phy_vars_eNB->Mod_id][phy_vars_eNB->CC_id].cntl.pmch_flag == 1 ) diff --git a/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c b/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c index b3bc9d6dec5279713b351fcdba648e4f35367b83..1b035ffc84a16960cf024ead228d241a3cf5bba0 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/bypass_session_layer.c @@ -29,7 +29,7 @@ /*! \file bypass_session_layer.h * \brief implementation of emultor tx and rx * \author Navid Nikaein and Raymond Knopp - * \date 2011 + * \date 2011 - 2014 * \version 1.0 * \company Eurecom * \email: navid.nikaein@eurecom.fr @@ -246,7 +246,7 @@ int emu_transport_handle_ue_info(bypass_msg_header_t *messg, int bytes_read) { UE_transport_info_t *UE_info; - int n_ue, n_enb,CC_id; + int n_ue, n_enb,CC_id=0; int total_tbs = 0, total_header = 0, ue_info_ix =0; DevAssert(bytes_read >= 0); @@ -277,7 +277,7 @@ int emu_transport_handle_ue_info(bypass_msg_header_t *messg, LOG_W(EMU,"RX [UE %d] Total size of buffer is %d (header%d,tbs %d) \n", n_ue, total_header+total_tbs,total_header,total_tbs); } - +#warning "CC id should be adjusted, set to zero for the moment" memcpy(&UE_transport_info[n_ue][CC_id], UE_info, total_header + total_tbs); /* Go to the next UE info */ @@ -357,8 +357,9 @@ int bypass_rx_data(unsigned int frame, unsigned int last_slot, #if defined(ENABLE_PGM_TRANSPORT) if (messg->Message_type != EMU_TRANSPORT_NACK) #endif - DevCheck4((messg->frame == frame) && (messg->subframe == (next_slot>>1)), - messg->frame, frame, messg->subframe, next_slot>>1); + DevCheck4((messg->frame == frame) && (messg->subframe == (next_slot>>1)), + messg->frame, frame, messg->subframe, next_slot>>1); + #else if ((messg->frame != frame) || (messg->subframe != next_slot>>1)) LOG_W(EMU, @@ -589,7 +590,7 @@ void bypass_tx_data(emu_transport_info_t Type, unsigned int frame, unsigned int sleep(oai_emulation.info.master_id+1); LOG_T(EMU,"[TX_DATA] SYNC TRANSPORT\n"); } else if(Type==ENB_TRANSPORT) { - LOG_D(EMU,"[TX_DATA] ENB TRANSPORT\n"); + messg->Message_type = EMU_TRANSPORT_INFO_ENB; total_size=0; total_tbs=0; @@ -598,6 +599,11 @@ void bypass_tx_data(emu_transport_info_t Type, unsigned int frame, unsigned int n_enb++) for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { total_tbs=0; + LOG_D(EMU,"[TX_DATA] Frame %d subframe %d CC id %d : ENB TRANSPORT: num dci %d \n", + frame, next_slot>>1, CC_id, + eNB_transport_info[n_enb][CC_id].num_pmch + + eNB_transport_info[n_enb][CC_id].num_ue_spec_dci + + eNB_transport_info[n_enb][CC_id].num_common_dci ); for (n_dci = 0; n_dci < (eNB_transport_info[n_enb][CC_id].num_pmch + eNB_transport_info[n_enb][CC_id].num_ue_spec_dci + eNB_transport_info[n_enb][CC_id].num_common_dci); @@ -624,7 +630,8 @@ void bypass_tx_data(emu_transport_info_t Type, unsigned int frame, unsigned int for (n_ue = oai_emulation.info.first_ue_local; n_ue < (oai_emulation.info.first_ue_local+oai_emulation.info.nb_ue_local); n_ue++) { - for (n_enb=0; n_enb<UE_transport_info[n_ue][CC_id].num_eNB; n_enb++) { + for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) { + for (n_enb=0; n_enb<UE_transport_info[n_ue][CC_id].num_eNB; n_enb++) { total_tbs+=UE_transport_info[n_ue][CC_id].tbs[n_enb]; } if (total_tbs <= MAX_TRANSPORT_BLOCKS_BUFFER_SIZE) { @@ -635,10 +642,15 @@ void bypass_tx_data(emu_transport_info_t Type, unsigned int frame, unsigned int "[UE]running out of memory for the UE emulation transport buffer of size %d\n", MAX_TRANSPORT_BLOCKS_BUFFER_SIZE); } +#ifdef DEBUG_EMU + LOG_D(EMU,"[UE %d][eNB %d][CC %d] total size %d\n", + n_ue, n_enb, CC_id,total_size); +#endif memcpy(&bypass_tx_buffer[byte_tx_count], (char *)&UE_transport_info[n_ue][CC_id], total_size); byte_tx_count += total_size; - } + } + } } else if (Type == RELEASE_TRANSPORT) { messg->Message_type = EMU_TRANSPORT_INFO_RELEASE; } else { @@ -656,8 +668,8 @@ void bypass_tx_data(emu_transport_info_t Type, unsigned int frame, unsigned int bypass_tx_buffer, byte_tx_count); #endif - LOG_D(EMU, "Sent %d bytes [%s] with master_id %d and seq %"PRIuMAX"\n", - byte_tx_count, map_int_to_str(transport_names, Type), + LOG_D(EMU, "Frame %d, subframe %d (%d): Sent %d bytes [%s] with master_id %d and seq %"PRIuMAX"\n", + frame, next_slot>>1, next_slot,byte_tx_count, map_int_to_str(transport_names, Type), messg->master_id, messg->seq_num); } diff --git a/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c b/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c index fa14d6b018c64c97fec3a9577f7474717d584ee5..a8367d429daf7f787b8add8e52b1f3415a37741c 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/emu_transport.c @@ -29,7 +29,7 @@ /*! \file phy_emulation.c * \brief implements the underlying protocol for emulated data exchange over Ethernet using IP multicast * \author Navid Nikaein - * \date 2011 + * \date 2011 - 2014 * \version 1.1 * \company Eurecom * \email: navid.nikaein@eurecom.fr @@ -148,7 +148,7 @@ void emu_transport(unsigned int frame, unsigned int last_slot, } // UL if (((frame_type == 1) && (direction == SF_UL)) || (frame_type == 0) ) { - emu_transport_UL(frame, last_slot, next_slot); + emu_transport_UL(frame, last_slot, next_slot); } } #if defined(ENABLE_PGM_TRANSPORT) @@ -206,8 +206,8 @@ void emu_transport_UL(unsigned int frame, unsigned int last_slot, bypass_rx_data(frame, last_slot, next_slot, 1); bypass_tx_data(UE_TRANSPORT, frame, next_slot); } else { - bypass_rx_data(frame,last_slot, next_slot, 0); - bypass_tx_data(WAIT_SM_TRANSPORT, frame, next_slot); + bypass_rx_data(frame,last_slot, next_slot, 0); + bypass_tx_data(WAIT_SM_TRANSPORT, frame, next_slot); } } @@ -253,7 +253,9 @@ void clear_eNB_transport_info(uint8_t nb_eNB) eNB_transport_info[eNB_id][CC_id].num_ue_spec_dci=0; } } - // LOG_T(EMU, "EMUL clear_eNB_transport_info\n"); +#ifdef DEBUG_EMU + LOG_D(EMU, "EMUL clear_eNB_transport_info\n"); +#endif } void clear_UE_transport_info(uint8_t nb_UE) @@ -265,7 +267,9 @@ void clear_UE_transport_info(uint8_t nb_UE) UE_transport_info_TB_index[UE_id][CC_id]=0; memset((void *)&UE_transport_info[UE_id][CC_id].cntl,0,sizeof(UE_cntl)); } - // LOG_T(EMU, "EMUL clear_UE_transport_info\n"); +#ifdef DEBUG_EMU + LOG_D(EMU, "EMUL clear_UE_transport_info\n"); +#endif } void fill_phy_enb_vars(unsigned int enb_id, uint8_t CC_id,unsigned int next_slot) @@ -278,10 +282,6 @@ void fill_phy_enb_vars(unsigned int enb_id, uint8_t CC_id,unsigned int next_slot uint8_t nb_total_dci; int i; -#ifdef DEBUG_EMU - LOG_D(EMU, " pbch fill phy eNB %d vars for slot %d fault %d\n", - enb_id, next_slot, network_fault); -#endif // eNB // PBCH : copy payload @@ -309,7 +309,10 @@ void fill_phy_enb_vars(unsigned int enb_id, uint8_t CC_id,unsigned int next_slot eNB_transport_info[enb_id][CC_id].num_ue_spec_dci; PHY_vars_eNB_g[enb_id][CC_id]->num_common_dci[(next_slot>>1)&1] = eNB_transport_info[enb_id][CC_id].num_common_dci; - +#ifdef DEBUG_EMU + LOG_D(EMU, "Fill phy vars eNB %d for slot %d, DCI found %d \n", + enb_id, next_slot, nb_total_dci); +#endif if (nb_total_dci >0) { memcpy(PHY_vars_eNB_g[enb_id][CC_id]->dci_alloc[(next_slot>>1)&1], @@ -423,9 +426,9 @@ void fill_phy_ue_vars(unsigned int ue_id, uint8_t CC_id,unsigned int last_slot) #ifdef DEBUG_EMU LOG_D(EMU, - "Last slot %d subframe %d Fill phy UE %d vars PRACH is (%d,%d) preamble (%d,%d) SR (%d,%d), pucch_sel (%d, %d)\n", + "Last slot %d subframe %d CC_id %d: Fill phy vars UE %d : PRACH is (%d,%d) preamble (%d,%d) SR (%d,%d), pucch_sel (%d, %d)\n", - last_slot,subframe,ue_id, + last_slot,subframe,CC_id, ue_id, UE_transport_info[ue_id][CC_id].cntl.prach_flag, ue_cntl_delay[ue_id][CC_id][last_slot%2].prach_flag, UE_transport_info[ue_id][CC_id].cntl.prach_id, diff --git a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c index 61d0ceaed27b8faad68dd4f6be84aaf89d3fad88..078ecbde5a643167715073d0f24a1f0970a8f143 100755 --- a/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c @@ -276,7 +276,7 @@ int multicast_link_read_data_from_sock(uint8_t is_master) multicast_link_build_select_list (); LOG_D(EMU, "Stuck on select with timeout %s\n", - timeout_p == NULL ? "infinite" : "1000 usecs"); + timeout_p == NULL ? "infinite" : "15000 usecs"); readsocks = select(highsock + 1, &socks, (fd_set *) 0, (fd_set *) 0, timeout_p); if (readsocks < 0) { diff --git a/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c b/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c index 7893c9c1ecd670a51162920177cc57ce909a7761..1c1dca6074ddd37ff192f0d49cf6aaada334ed83 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c +++ b/openair1/SIMULATION/ETH_TRANSPORT/pgm_link.c @@ -15,8 +15,8 @@ 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 <http://www.gnu.org/licenses/>. + included in this distribution in the file called "COPYING". If not, + see <http://www.gnu.org/licenses/>. Contact Information OpenAirInterface Admin: openair_admin@eurecom.fr @@ -26,6 +26,15 @@ Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE *******************************************************************************/ +/*! \file pgm_link.c + * \brief implementation a warpper for openpgm for reliable multicast transmission + * \author Navid Nikaein and S. Roux + * \date 2013 - 2014 + * \version 1.0 + * \company Eurecom + * \email: navid.nikaein@eurecom.fr + */ + #include <pthread.h> #include <stdint.h> #include <string.h> diff --git a/targets/README.txt b/targets/README.txt index e955e233bfcb670a7d200dc6ff2ef6367237a6ae..4ed83b4af266a00df940ef13d5dc64be8129a2f5 100644 --- a/targets/README.txt +++ b/targets/README.txt @@ -18,6 +18,7 @@ First, you must have all four openair SW directories, openair1, openair2, openai - libblas and libblas-dev - libconfig++8-dev - libgtk-3-dev + - libpgm-5.1 and libpgm-5.1-dev for distributed simulation with reliable multicast transmport - libxml2 and libxml2-dev and gccxml - libforms-bin libforms-dev - nettle-dev nettle-bin openssl libssl-dev diff --git a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/Makefile b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/Makefile index 077cc849610e7686e7dd139b3f23321855b83d0d..6c05991a2fb430097b796be6787b32f041c0a3c6 100644 --- a/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/Makefile +++ b/targets/SIMU/EXAMPLES/ETH_EMUL_1eNB_1UE/Makefile @@ -1,7 +1,7 @@ all: oaisim nasmesh oaisim: - (cd $(OPENAIR_TARGETS)/SIMU/USER && make oaisim NAS=1) + (cd $(OPENAIR_TARGETS)/SIMU/USER && make NAS=1 -j2 ) nasmesh: (cd $(OPENAIR2_DIR) && make nasmesh_netlink.ko) (cd $(OPENAIR2_DIR)/NAS/DRIVER/MESH/RB_TOOL/ && make) @@ -11,4 +11,4 @@ one_eNB_one_UE: oaisim nasmesh userclean: clean oaisim nasmesh clean: - (cd $(OPENAIR_TARGETS)/SIMU/USER && make clean) + (cd $(OPENAIR_TARGETS)/SIMU/USER && make cleanall) diff --git a/targets/SIMU/USER/oaisim.c b/targets/SIMU/USER/oaisim.c index a289cba301684ccd3826564cac86e61e31886435..6f14f9709eeb2ab03b74fe22475c23e84920ac95 100644 --- a/targets/SIMU/USER/oaisim.c +++ b/targets/SIMU/USER/oaisim.c @@ -689,7 +689,8 @@ void *l2l1_task(void *args_p) { log_set_instance_type (LOG_INSTANCE_ENB); #endif - if ((next_slot % 2) == 0) + // if ((next_slot % 2) == 0) + if ((slot&1) == 0) clear_eNB_transport_info (oai_emulation.info.nb_enb_local); for (eNB_inst = oai_emulation.info.first_enb_local; (eNB_inst < (oai_emulation.info.first_enb_local + oai_emulation.info.nb_enb_local)); eNB_inst++) { @@ -750,6 +751,7 @@ void *l2l1_task(void *args_p) { #endif if ((next_slot % 2) == 0) + // if ((slot&1) == 0) clear_UE_transport_info (oai_emulation.info.nb_ue_local); for (UE_inst = oai_emulation.info.first_ue_local; (UE_inst < (oai_emulation.info.first_ue_local + oai_emulation.info.nb_ue_local)); UE_inst++) {