Commit b7f699a3 authored by thomasl's avatar thomasl

bug fixing during CPRIGW integration

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6986 818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent f48ea731
...@@ -1015,7 +1015,7 @@ void itti_wait_tasks_end(void) { ...@@ -1015,7 +1015,7 @@ void itti_wait_tasks_end(void) {
if (ready_tasks > 0) { if (ready_tasks > 0) {
usleep (100 * 1000); usleep (100 * 1000);
} }
} while ((ready_tasks > 0) && (retries--)); } while ((ready_tasks > 0) && (retries--)&& (!end) );
printf("ready_tasks %d\n",ready_tasks); printf("ready_tasks %d\n",ready_tasks);
......
...@@ -199,6 +199,7 @@ sctp_handle_new_association_req( ...@@ -199,6 +199,7 @@ sctp_handle_new_association_req(
&in); &in);
if (s > 0 ) { if (s > 0 ) {
if (((struct sockaddr_in*)ifa->ifa_addr)->sin_addr.s_addr == in.s_addr) { if (((struct sockaddr_in*)ifa->ifa_addr)->sin_addr.s_addr == in.s_addr) {
#if 0
memset(&ifr, 0, sizeof(ifr)); memset(&ifr, 0, sizeof(ifr));
snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s",ifa->ifa_name); snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s",ifa->ifa_name);
if (setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) < 0) { if (setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) < 0) {
...@@ -208,7 +209,22 @@ sctp_handle_new_association_req( ...@@ -208,7 +209,22 @@ sctp_handle_new_association_req(
SCTP_DEBUG("Setsockopt SOL_SOCKET socket bound to : %s\n", SCTP_DEBUG("Setsockopt SOL_SOCKET socket bound to : %s\n",
ifa->ifa_name); 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; break;
} }
} }
} else if (sctp_new_association_req_p->local_address.ipv6 && family == AF_INET6) { } else if (sctp_new_association_req_p->local_address.ipv6 && family == AF_INET6) {
...@@ -298,7 +314,7 @@ sctp_handle_new_association_req( ...@@ -298,7 +314,7 @@ sctp_handle_new_association_req(
} }
/* Connect to remote host and port */ /* 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 */ /* sctp_connectx on non-blocking socket return EINPROGRESS */
if (errno != EINPROGRESS) { if (errno != EINPROGRESS) {
......
...@@ -326,7 +326,7 @@ typedef struct { ...@@ -326,7 +326,7 @@ typedef struct {
#if defined(CBMIMO1) || defined(EXMIMO) #if defined(CBMIMO1) || defined(EXMIMO)
#define MAX_FRAME_NUMBER 0x400 #define MAX_FRAME_NUMBER 0x400
#define NUMBER_OF_eNB_MAX 1 #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 #define NUMBER_OF_CONNECTED_eNB_MAX 3
#else #else
#define MAX_FRAME_NUMBER 0xFFFF #define MAX_FRAME_NUMBER 0xFFFF
......
...@@ -47,7 +47,7 @@ enum THREAD_INDEX { OPENAIR_THREAD_INDEX = 0, ...@@ -47,7 +47,7 @@ enum THREAD_INDEX { OPENAIR_THREAD_INDEX = 0,
#define OPENAIR_THREAD_PRIORITY 255 #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 //#define DLC_THREAD_STACK_SIZE 4096 //DLC stack size
enum openair_SCHED_STATUS { enum openair_SCHED_STATUS {
......
...@@ -2402,8 +2402,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e ...@@ -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); phy_procedures_emos_eNB_TX(subframe, phy_vars_eNB);
#endif #endif
#ifndef EXMIMO #if !(defined(EXMIMO) || defined(USRP) || defined (CPRIGW))
#ifndef USRP
if (abstraction_flag==0) { if (abstraction_flag==0) {
start_meas(&phy_vars_eNB->ofdm_mod_stats); start_meas(&phy_vars_eNB->ofdm_mod_stats);
do_OFDM_mod(phy_vars_eNB->lte_eNB_common_vars.txdataF[0], 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 ...@@ -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); &phy_vars_eNB->lte_frame_parms);
stop_meas(&phy_vars_eNB->ofdm_mod_stats); stop_meas(&phy_vars_eNB->ofdm_mod_stats);
} }
#endif
#endif #endif
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX,0); vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_TX,0);
......
...@@ -560,7 +560,7 @@ rrc_eNB_free_UE_index( ...@@ -560,7 +560,7 @@ rrc_eNB_free_UE_index(
eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP]); eNB_rrc_inst[enb_mod_idP].Info.UE_list[ue_mod_idP]);
#if defined(ENABLE_USE_MME) #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) /* 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 * 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 * triggering the S1 UE Context Release Request procedure
...@@ -570,6 +570,7 @@ rrc_eNB_free_UE_index( ...@@ -570,6 +570,7 @@ rrc_eNB_free_UE_index(
#endif #endif
eNB_rrc_inst[enb_mod_idP].Info.UE[ue_mod_idP].Status = RRC_IDLE; 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_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.enb_module_id = enb_mod_idP;
ctxt.ue_module_id = ue_mod_idP; ctxt.ue_module_id = ue_mod_idP;
...@@ -3001,7 +3002,7 @@ int rrc_eNB_decode_ccch( ...@@ -3001,7 +3002,7 @@ int rrc_eNB_decode_ccch(
//CONFIG SRB2 (DCCHs, ONE per User) //meas && lchan Cfg //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].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[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 #ifndef NO_RRM
send_msg(&S_rrc, msg_rrc_MR_attach_ind(enb_mod_idP, Mac_id)); send_msg(&S_rrc, msg_rrc_MR_attach_ind(enb_mod_idP, Mac_id));
...@@ -3460,8 +3461,9 @@ void *rrc_enb_task( ...@@ -3460,8 +3461,9 @@ void *rrc_enb_task(
break; break;
case GTPV1U_ENB_DELETE_TUNNEL_RESP: case GTPV1U_ENB_DELETE_TUNNEL_RESP:
LOG_I(RRC, "[eNB %d] Received message %s, not processed because procedure not synched\n", /* Nothing to do. Apparently everything is done in S1AP processing */
instance, msg_name_p); //LOG_I(RRC, "[eNB %d] Received message %s, not processed because procedure not synched\n",
//instance, msg_name_p);
break; break;
# endif # endif
......
...@@ -859,10 +859,12 @@ int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const ch ...@@ -859,10 +859,12 @@ int rrc_eNB_process_S1AP_UE_CONTEXT_RELEASE_COMMAND (MessageDef *msg_p, const ch
} }
else { else {
rrc_eNB_generate_RRCConnectionRelease(instance, 0 /*frame*/, ue_index); rrc_eNB_generate_RRCConnectionRelease(instance, 0 /*frame*/, ue_index);
/*
LOG_W(RRC, LOG_W(RRC,
"[eNB %d] In S1AP_UE_CONTEXT_RELEASE_COMMAND: TODO call rrc_eNB_connection_release for eNB %d\n", "[eNB %d] In S1AP_UE_CONTEXT_RELEASE_COMMAND: TODO call rrc_eNB_connection_release for eNB %d\n",
instance, instance,
eNB_ue_s1ap_id); eNB_ue_s1ap_id);
*/
{ {
int e_rab; int e_rab;
int mod_id = 0; int mod_id = 0;
......
...@@ -208,6 +208,7 @@ const char* eurecomFunctionsNames[] = { ...@@ -208,6 +208,7 @@ const char* eurecomFunctionsNames[] = {
"macxface_ue_get_sr", "macxface_ue_get_sr",
"ue_send_mch_sdu", "ue_send_mch_sdu",
"ue_synch",
/*RLC signals */ /*RLC signals */
"rlc_data_req", "rlc_data_req",
......
...@@ -211,6 +211,7 @@ get_free_mem_block (uint16_t sizeP) ...@@ -211,6 +211,7 @@ get_free_mem_block (uint16_t sizeP)
#endif #endif
} while (pool_selected++ < 12); } while (pool_selected++ < 12);
display_mem_load();
mac_xface->macphy_exit("[MEM_MNGT][ERROR][FATAL] get_free_mem_block failed"); mac_xface->macphy_exit("[MEM_MNGT][ERROR][FATAL] get_free_mem_block failed");
return NULL; return NULL;
}; };
......
...@@ -844,7 +844,7 @@ void *l2l1_task(void *arg) ...@@ -844,7 +844,7 @@ void *l2l1_task(void *arg)
result = itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p); result = itti_free (ITTI_MSG_ORIGIN_ID(message_p), message_p);
AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result); AssertFatal (result == EXIT_SUCCESS, "Failed to free memory (%d)!\n", result);
} while(1); } while(!oai_exit);
return NULL; return NULL;
} }
...@@ -1769,7 +1769,7 @@ static void get_options (int argc, char **argv) { ...@@ -1769,7 +1769,7 @@ static void get_options (int argc, char **argv) {
// char line[1000]; // char line[1000];
// int l; // int l;
int k,i;//,j,k; int k,i;//,j,k;
#ifdef USRP #if defined(USRP) || defined(CPRIGW)
int clock_src; int clock_src;
#endif #endif
int CC_id; int CC_id;
...@@ -1953,7 +1953,7 @@ static void get_options (int argc, char **argv) { ...@@ -1953,7 +1953,7 @@ static void get_options (int argc, char **argv) {
} }
break; break;
case 's': case 's':
#ifdef USRP #if defined(USRP) || defined(CPRIGW)
clock_src = atoi(optarg); clock_src = atoi(optarg);
if (clock_src == 0) { if (clock_src == 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment