diff --git a/common/utils/itti/intertask_interface.c b/common/utils/itti/intertask_interface.c index 5b15f6e4f87078f0cfd1e93e5a2b19b6bdd13585..caa8ad6d9024fc80c09d55d1be5410411c2ae9da 100644 --- a/common/utils/itti/intertask_interface.c +++ b/common/utils/itti/intertask_interface.c @@ -1015,7 +1015,7 @@ void itti_wait_tasks_end(void) { if (ready_tasks > 0) { usleep (100 * 1000); } - } while ((ready_tasks > 0) && (retries--)); + } while ((ready_tasks > 0) && (retries--)&& (!end) ); printf("ready_tasks %d\n",ready_tasks); diff --git a/openair-cn/SCTP/sctp_eNB_task.c b/openair-cn/SCTP/sctp_eNB_task.c index 8825acf3692d1a0ebb5633975d25409c3180e3a1..33e17d6bbe57fd50280eb03060817ef27ad069d7 100644 --- a/openair-cn/SCTP/sctp_eNB_task.c +++ b/openair-cn/SCTP/sctp_eNB_task.c @@ -199,6 +199,7 @@ sctp_handle_new_association_req( &in); if (s > 0 ) { if (((struct sockaddr_in*)ifa->ifa_addr)->sin_addr.s_addr == in.s_addr) { +#if 0 memset(&ifr, 0, sizeof(ifr)); snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s",ifa->ifa_name); if (setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) < 0) { @@ -208,7 +209,22 @@ sctp_handle_new_association_req( SCTP_DEBUG("Setsockopt SOL_SOCKET socket bound to : %s\n", ifa->ifa_name); } +#else + struct sockaddr_in locaddr; + locaddr.sin_family = AF_INET; + locaddr.sin_port = htons(sctp_new_association_req_p->port); + locaddr.sin_addr.s_addr = in.s_addr; + + if (sctp_bindx(sd, (struct sockaddr*)&locaddr, 1, SCTP_BINDX_ADD_ADDR) < 0) { + SCTP_ERROR("sctp_bindx SCTP_BINDX_ADD_ADDR failed: %s\n", + strerror(errno)); + } else { + SCTP_DEBUG("sctp_bindx SCTP_BINDX_ADD_ADDR socket bound to : %s\n", + inet_ntoa(locaddr.sin_addr)); + } +#endif break; + } } } else if (sctp_new_association_req_p->local_address.ipv6 && family == AF_INET6) { @@ -298,7 +314,7 @@ sctp_handle_new_association_req( } /* Connect to remote host and port */ - if (sctp_connectx(sd, (struct sockaddr *)addr, used_address, &assoc_id) < 0) + if (sctp_connectx(sd, (struct sockaddr *)addr, 1, &assoc_id) < 0) { /* sctp_connectx on non-blocking socket return EINPROGRESS */ if (errno != EINPROGRESS) { diff --git a/openair1/PHY/impl_defs_top.h b/openair1/PHY/impl_defs_top.h index 2371749002a8ee8a42f0c6e73e577d5277636f23..d496ac573351661194002326beb1523048f4381e 100755 --- a/openair1/PHY/impl_defs_top.h +++ b/openair1/PHY/impl_defs_top.h @@ -326,7 +326,7 @@ typedef struct { #if defined(CBMIMO1) || defined(EXMIMO) #define MAX_FRAME_NUMBER 0x400 #define NUMBER_OF_eNB_MAX 1 -#define NUMBER_OF_UE_MAX 2 +#define NUMBER_OF_UE_MAX 16 #define NUMBER_OF_CONNECTED_eNB_MAX 3 #else #define MAX_FRAME_NUMBER 0xFFFF diff --git a/openair1/SCHED/defs.h b/openair1/SCHED/defs.h index 813c8d86c60459e7fe412b9c949186d4e4740759..15e321c880f2732b4c7457ffbcae34bfc2ef8168 100644 --- a/openair1/SCHED/defs.h +++ b/openair1/SCHED/defs.h @@ -47,7 +47,7 @@ enum THREAD_INDEX { OPENAIR_THREAD_INDEX = 0, #define OPENAIR_THREAD_PRIORITY 255 -#define OPENAIR_THREAD_STACK_SIZE 8192 //4096 //RTL_PTHREAD_STACK_MIN*6 +#define OPENAIR_THREAD_STACK_SIZE PTHREAD_STACK_MIN //4096 //RTL_PTHREAD_STACK_MIN*6 //#define DLC_THREAD_STACK_SIZE 4096 //DLC stack size enum openair_SCHED_STATUS { diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index 792be8dd2a3ab88c43ad6cee317e07f0ae13df50..74851b692f3bde857d4a05a3e699760298138d5f 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -2402,8 +2402,7 @@ 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 -#ifndef EXMIMO -#ifndef USRP +#if !(defined(EXMIMO) || defined(USRP) || defined (CPRIGW)) if (abstraction_flag==0) { start_meas(&phy_vars_eNB->ofdm_mod_stats); do_OFDM_mod(phy_vars_eNB->lte_eNB_common_vars.txdataF[0], @@ -2416,7 +2415,6 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e &phy_vars_eNB->lte_frame_parms); stop_meas(&phy_vars_eNB->ofdm_mod_stats); } -#endif #endif vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX,0); diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c index 908ce28c33d7e78a6bb37d1728bc99514632d9f0..01dbe9b1253845eb832a422998ce807ca59e1884 100644 --- a/openair2/RRC/LITE/rrc_eNB.c +++ b/openair2/RRC/LITE/rrc_eNB.c @@ -560,7 +560,7 @@ rrc_eNB_free_UE_index( eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP]); #if defined(ENABLE_USE_MME) - rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_mod_idP, S1AP_CAUSE_RADIO_NETWORK, 0); // ue_mod_idP ??? or ??? + rrc_eNB_send_S1AP_UE_CONTEXT_RELEASE_REQ(enb_mod_idP, ue_mod_idP, S1AP_CAUSE_RADIO_NETWORK, 21); // send cause 21: connection with ue lost /* From 3GPP 36300v10 p129 : 19.2.2.2.2 S1 UE Context Release Request (eNB triggered) * If the E-UTRAN internal reason is a radio link failure detected in the eNB, the eNB shall wait a sufficient time before * triggering the S1 UE Context Release Request procedure @@ -570,6 +570,7 @@ rrc_eNB_free_UE_index( #endif eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].Status = RRC_IDLE; eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP] = 0; +eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].eNB_ue_s1ap_id = 0; ctxt.enb_module_id = enb_mod_idP; ctxt.ue_module_id = ue_mod_idP; @@ -3001,7 +3002,7 @@ int rrc_eNB_decode_ccch( //CONFIG SRB2 (DCCHs, ONE per User) //meas && lchan Cfg //eNB_rrc_inst[enb_mod_idP].Info.Dtch_bd_config[ue_mod_idP].Status=NEED_RADIO_CONFIG; //eNB_rrc_inst[enb_mod_idP].Info.Dtch_bd_config[ue_mod_idP].Next_eNBeck_frame=Rrc_xface->Frame_index+1; - eNB_rrc_inst[ue_mod_id].Info.Nb_ue++; + eNB_rrc_inst[enb_mod_idP].Info.Nb_ue++; #ifndef NO_RRM send_msg(&S_rrc, msg_rrc_MR_attach_ind(enb_mod_idP, Mac_id)); @@ -3460,8 +3461,9 @@ void *rrc_enb_task( break; case GTPV1U_ENB_DELETE_TUNNEL_RESP: - LOG_I(RRC, "[eNB %d] Received message %s, not processed because procedure not synched\n", - instance, msg_name_p); + /* Nothing to do. Apparently everything is done in S1AP processing */ + //LOG_I(RRC, "[eNB %d] Received message %s, not processed because procedure not synched\n", + //instance, msg_name_p); break; # endif diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.c b/openair2/RRC/LITE/rrc_eNB_S1AP.c index 425e6fa59e98f8070745759c9e24ed268e85adb5..ba68ff73a1ad63c829f4a6b21b5f4913cd46817c 100644 --- a/openair2/RRC/LITE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LITE/rrc_eNB_S1AP.c @@ -859,10 +859,12 @@ int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const ch } else { rrc_eNB_generate_RRCConnectionRelease(instance, 0 /*frame*/, ue_index); +/* LOG_W(RRC, "[eNB %d] In S1AP_UE_CONTEXT_RELEASE_COMMAND: TODO call rrc_eNB_connection_release for eNB %d\n", instance, eNB_ue_s1ap_id); +*/ { int e_rab; int mod_id = 0; diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c index 2fffc3e5f2cbe1bc049696ffc4b392c5f71a6923..4aa7ebff317ee6f0642a5fba328edf1bbb123e14 100644 --- a/openair2/UTIL/LOG/vcd_signal_dumper.c +++ b/openair2/UTIL/LOG/vcd_signal_dumper.c @@ -208,6 +208,7 @@ const char* eurecomFunctionsNames[] = { "macxface_ue_get_sr", "ue_send_mch_sdu", + "ue_synch", /*RLC signals */ "rlc_data_req", diff --git a/openair2/UTIL/MEM/mem_block.c b/openair2/UTIL/MEM/mem_block.c index f7988a34e046c8c3f35e2ab4f3efba4e336bbfdb..21931dfced0681f37c37e4b82065ca9aea9ba76c 100644 --- a/openair2/UTIL/MEM/mem_block.c +++ b/openair2/UTIL/MEM/mem_block.c @@ -211,6 +211,7 @@ get_free_mem_block (uint16_t sizeP) #endif } while (pool_selected++ < 12); + display_mem_load(); mac_xface->macphy_exit("[MEM_MNGT][ERROR][FATAL] get_free_mem_block failed"); return NULL; }; diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 1eb679c2654886574b9041cc753d70d5f4a9b7f9..257a709bf79befc811d7797826031b61a7f1b605 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -844,7 +844,7 @@ void *l2l1_task(void *arg) result = itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p); AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); - } while(1); + } while(!oai_exit); return NULL; } @@ -1769,7 +1769,7 @@ static void get_options (int argc, char **argv) { // char line[1000]; // int l; int k,i;//,j,k; -#ifdef USRP +#if defined(USRP) || defined(CPRIGW) int clock_src; #endif int CC_id; @@ -1953,7 +1953,7 @@ static void get_options (int argc, char **argv) { } break; case 's': -#ifdef USRP +#if defined(USRP) || defined(CPRIGW) clock_src = atoi(optarg); if (clock_src == 0) {