/*------------------------------------------------------------------------------*/ int main (int argc, char **argv) { int32_t i; // pointers signal buffers (s = transmit, r,r0 = receive) clock_t t; //FILE *SINRpost; //char SINRpost_fname[512]; // sprintf(SINRpost_fname,"postprocSINR.m"); //SINRpost = fopen(SINRpost_fname,"w"); // variables/flags which are set by user on command-line //Default values if not changed by the user in get_simulation_options(); #if !defined(ENABLE_ITTI) pthread_t tid; int err; if ((err = pthread_sigmask (SIG_BLOCK, &sigblock, NULL)) != 0) { printf ("SIG_BLOCK error\n"); return -1; } if (pthread_create (&tid, NULL, sigh, NULL)) { printf ("Pthread for tracing Signals is not created!\n"); return -1; } else { printf ("Pthread for tracing Signals is created!\n"); } #endif LOG_N(EMU, ">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU initialization done <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); #if defined(ENABLE_ITTI) // Handle signals until all tasks are terminated if (create_phani_tasks(oai_emulation.info.nb_enb_local, oai_emulation.info.nb_ue_local) >= 0) { itti_wait_tasks_end(); } else { exit(-1); // need a softer mode } #endif LOG_N(EMU, ">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU Ending <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); raise (SIGINT); oai_shutdown (); return (0); }
//-------------------------------------------------------------------------------------------// void rrc_lite_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t frameP, eNB_flag_t enb_flagP,rb_id_t Srb_id, sdu_size_t sdu_sizeP,uint8_t *buffer_pP){ //-------------------------------------------------------------------------------------------// rb_id_t DCCH_index = Srb_id; #if defined(ENABLE_ITTI) instance_t instance; #endif if (enb_flagP == ENB_FLAG_NO) { #if defined(ENABLE_ITTI) instance = ue_mod_idP + NB_eNB_INST; #endif LOG_N(RRC, "[UE %d] Frame %d: received a DCCH %d message on SRB %d with Size %d from eNB %d\n", ue_mod_idP, frameP, DCCH_index,Srb_id-1,sdu_sizeP, enb_mod_idP); } else { #if defined(ENABLE_ITTI) instance = enb_mod_idP; #endif LOG_N(RRC, "[eNB %d] Frame %d: received a DCCH %d message on SRB %d with Size %d from UE %d\n", enb_mod_idP, frameP, DCCH_index,Srb_id-1,sdu_sizeP, ue_mod_idP); } #if defined(ENABLE_ITTI) { MessageDef *message_p; // Uses a new buffer to avoid issue with PDCP buffer content that could be changed by PDCP (asynchronous message handling). uint8_t *message_buffer; message_buffer = itti_malloc (enb_flagP ? TASK_PDCP_ENB : TASK_PDCP_UE, enb_flagP ? TASK_RRC_ENB : TASK_RRC_UE, sdu_sizeP); memcpy (message_buffer, buffer_pP, sdu_sizeP); message_p = itti_alloc_new_message (enb_flagP ? TASK_PDCP_ENB : TASK_PDCP_UE, RRC_DCCH_DATA_IND); RRC_DCCH_DATA_IND (message_p).frame = frameP; RRC_DCCH_DATA_IND (message_p).dcch_index = DCCH_index; RRC_DCCH_DATA_IND (message_p).sdu_size = sdu_sizeP; RRC_DCCH_DATA_IND (message_p).sdu_p = message_buffer; RRC_DCCH_DATA_IND (message_p).ue_index = ue_mod_idP; RRC_DCCH_DATA_IND (message_p).eNB_index = enb_mod_idP; itti_send_msg_to_task (enb_flagP ? TASK_RRC_ENB : TASK_RRC_UE, instance, message_p); } #else if (enb_flagP == ENB_FLAG_YES) { rrc_eNB_decode_dcch(enb_mod_idP,frameP,DCCH_index,ue_mod_idP,buffer_pP,sdu_sizeP); } else { rrc_ue_decode_dcch(ue_mod_idP,frameP,DCCH_index,buffer_pP,enb_mod_idP); } #endif }
void oai_shutdown (void) { return; LOG_N(EMU, ">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU shutdown <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); }
static int show_contents(struct pldraw *pldraw, char * const *file_names, size_t n_files, struct epdoc_opt *opt, unsigned long pause_ms, int do_infinite_loop, const char *background) { struct plep_waveform_info wfinfo; if (plep_get_waveform_info(pldraw_get_plep(pldraw), opt->wfid, &wfinfo)) { LOG("failed to get waveform info"); return -1; } LOG_N("waveform: "); log_waveform_path(&wfinfo); if (set_background_opt(pldraw, opt, background) < 0) { LOG("Failed to set background option"); return -1; } if (!n_files) { if (opt->doc_type == NULL) { LOG("document type required when reading from stdin"); return -1; } LOG("reading from stdin as %s", opt->doc_type); return show_doc(pldraw, NULL, opt); } return enum_docs(pldraw, file_names, n_files, opt, pause_ms, do_infinite_loop); }
/*stop sumo mobiity generator*/ void stop_mobility_generator (omg_global_param * omg_param_list) { int i; for (i = 0; i < MAX_NUM_NODE_TYPES; i++) { switch (omg_param_list[i].mobility_type) { case STATIC: break; case RWP: break; case RWALK: break; case TRACE: clear_list (); break; case STEADY_RWP: break; #ifdef SUMO_IF case SUMO: stop_sumo_generator (); //LOG_D(OMG," --------OMG will interface with SUMO for mobility generation-------- \n"); break; #endif default: LOG_N (OMG, "Unsupported generator\n"); } } }
void update_node_vector (int mobility_type, double cur_time) { //set_time(cur_time); switch (mobility_type) { case RWP: update_rwp_nodes (cur_time); break; case RWALK: update_rwalk_nodes (cur_time); break; case TRACE: update_trace_nodes (cur_time); break; #ifdef SUMO_IF case SUMO: // printf("in SUMO case \n"); update_sumo_nodes (cur_time); break; #endif case STEADY_RWP: update_steadystaterwp_nodes (cur_time); break; default: //printf("STATIC or Unsupported generator %d \n", omg_param_list.mobility_type); LOG_N (OMG, "STATIC or Unsupported generator\n"); } }
int handshake(char *hoststr,int portno){ check_endianness(); // check endianness int i; for(i = 0; i< 10; i++) { if ( connection_(hoststr,portno) <0 ) { #ifdef STANDALONE printf("connection error...trying again in 3 seconds\n"); #else LOG_E(OMG, " Could not connect to TraCIServer - sleeping before trying again...\n"); #endif sleep(5); } else { #ifdef STANDALONE printf(" SUMO now connected to OMG on host address\n"); #else LOG_N(OMG, " SUMO now connected to OMG on host address %s and port %i .\n", hoststr, portno); #endif return 0; } } #ifdef STANDALONE printf(" SUMO unreachable...giving up...\n"); #else LOG_E(OMG, " SUMO unreachable...giving up...\n"); #endif return -1; }
int main(int argc, char **argv) { struct sigaction action; int exitCode; parseArgs(argc,argv); initLogs(); if (keepAsDaemon) { LOG_N("Trying to keep as a daemon..."); if (daemon(false,false)<0) { LOG_E(strerror(errno)); LOG_W("... continuing daemonless"); } else { LOG_N("... Success "); } } memset(&action,0,sizeof(action)); action.sa_handler =signalHandler; sigaction(SIGHUP,&action,NULL); sigaction(SIGTERM,&action,NULL); // signal(SIGHUP,signalHandler); /* catch hangup signal */ // signal(SIGTERM,signalHandler); /* catch kill signal */ exitCode = runMonitor(); return exitCode; //return EXIT_SUCCESS; }
static int enumerate_waveforms(struct plep *plep) { struct plep_waveform_info wfinfo; unsigned n; LOG("Available waveforms are:"); for (n = 0; !plep_get_waveform_info(plep, n, &wfinfo); ++n) { LOG_N(" "); log_waveform_path(&wfinfo); } return 0; }
void commandClose() { reset(); // command length writeUnsignedByte(0x02); // command id writeUnsignedByte(CMD_CLOSE); // send request message #ifdef STANDALONE printf("closing the socket... \n"); #else LOG_N(OMG,"closing the socket... \n"); #endif sendExact(storageLength(storageStart)); extractCommandStatus(receiveExact(), CMD_CLOSE, description); }
/*initiate mobility generator*/ void init_mobility_generator (omg_global_param omg_param_list[]) { int node_t, mobility_t; for (node_t = eNB; node_t < MAX_NUM_NODE_TYPES; node_t++) { mobility_t = omg_param_list[node_t].mobility_type; switch (mobility_t) { case STATIC: start_static_generator (omg_param_list[node_t]); break; case RWP: start_rwp_generator (omg_param_list[node_t]); break; case RWALK: start_rwalk_generator (omg_param_list[node_t]); break; case TRACE: start_trace_generator (omg_param_list[node_t]); break; #ifdef SUMO_IF case SUMO: start_sumo_generator (omg_param_list[node_t]); break; #endif case STEADY_RWP: start_steadystaterwp_generator (omg_param_list[node_t]); break; default: LOG_N (OMG, "Unsupported generator\n"); } } }
void init(int max_sim_time) { #ifdef STANDALONE printf(" Initializing TraCI...\n"); #else LOG_N(OMG, " Initializing TraCI...\n"); #endif char *objID = " "; // size_t size = strlen(objID); int noSubscribedVars = 2; writeUnsignedByte(0); writeInt(1 + 4 + 1 + 4 + 4 + 4 + (int) strlen(objID) + 1 + noSubscribedVars); writeUnsignedByte(CMD_SUBSCRIBE_SIM_VARIABLE); // command id writeInt(0); // begin time writeInt(max_sim_time*1000); // end time writeString(objID); // object id writeUnsignedByte(noSubscribedVars); // variable number writeUnsignedByte(VAR_DEPARTED_VEHICLES_IDS); writeUnsignedByte(VAR_ARRIVED_VEHICLES_IDS); // send request message sendExact(storageLength(storageStart)); extractCommandStatus(receiveExact(), CMD_SUBSCRIBE_SIM_VARIABLE, description); if (departed == NULL) { departed = (string_list*) malloc(sizeof(string_list)); // departed MUST point to HEAD departed->string = NULL; departed->next = NULL; } if (arrived == NULL) { arrived = (string_list*) malloc(sizeof(string_list)); // arrived MUST point to HEAD arrived->string = NULL; arrived->next = NULL; } processSubscriptions(); reset(); }
void test(double d1, double d2, float f1, float f2, long double ld1, long double ld2) { /* Test logN(1) -> 0. */ #define LOG_1(LOG) \ extern void link_failure_##LOG##_1(void); \ if (LOG(1.0) != 0.0 || LOG##f(1.0F) != 0.0F || LOG##l(1.0L) != 0.0L) \ link_failure_##LOG##_1() LOG_1(log); LOG_1(log2); LOG_1(log10); /* Test logN(N) -> 1. */ #define LOG_N(LOG, BASE) \ extern void link_failure_##LOG##_N(void); \ if (LOG(BASE) != 1.0 || LOG##f(BASE##F) != 1.0F || LOG##l(BASE##L) != 1.0L) \ link_failure_##LOG##_N() LOG_N(log, M_E); LOG_N(log2, 2.0); LOG_N(log10, 10.0); /* Test logN(expN(x)) -> x. */ #define LOGEXP_SAME(LOG, EXP) \ extern void link_failure_##LOG##_##EXP##_same(void); \ if (LOG(EXP(d1)) != d1 || LOG##f(EXP##f(f1)) != f1 \ || LOG##l(EXP##l(ld1)) != ld1) link_failure_##LOG##_##EXP##_same() LOGEXP_SAME(log,exp); LOGEXP_SAME(log2,exp2); LOGEXP_SAME(log10,exp10); LOGEXP_SAME(log10,pow10); /* Test logN(expM(x)) -> x*logN(M). */ #define LOGEXP(LOG, EXP, BASE) \ extern void link_failure_##LOG##_##EXP(void); \ if (LOG(EXP(d1)) != d1*LOG(BASE) || LOG##f(EXP##f(f1)) != f1*LOG##f(BASE##F) \ || LOG##l(EXP##l(ld1)) != ld1*LOG##l(BASE##L)) link_failure_##LOG##_##EXP() LOGEXP(log,exp,M_E); LOGEXP(log,exp2,2.0); LOGEXP(log,exp10,10.0); LOGEXP(log,pow10,10.0); LOGEXP(log2,exp,M_E); LOGEXP(log2,exp2,2.0); LOGEXP(log2,exp10,10.0); LOGEXP(log2,pow10,10.0); LOGEXP(log10,exp,M_E); LOGEXP(log10,exp2,2.0); LOGEXP(log10,exp10,10.0); LOGEXP(log10,pow10,10.0); /* Test logN(sqrt(x)) -> 0.5*logN(x). */ #define LOG_SQRT(LOG) \ extern void link_failure_##LOG##_sqrt(void); \ if (LOG(sqrt(d1)) != 0.5*LOG(d1) || LOG##f(sqrtf(f1)) != 0.5F*LOG##f(f1) \ || LOG##l(sqrtl(ld1)) != 0.5L*LOG##l(ld1)) link_failure_##LOG##_sqrt() LOG_SQRT(log); LOG_SQRT(log2); LOG_SQRT(log10); /* Test sqrt(expN(x)) -> expN(x*0.5). */ #define SQRT_EXP(EXP) \ extern void link_failure_sqrt_##EXP(void); \ if (sqrt(EXP(d1)) != EXP(d1*0.5) || sqrtf(EXP##f(f1)) != EXP##f(f1*0.5F) \ || sqrtl(EXP##l(ld1)) != EXP##l(ld1*0.5L)) link_failure_sqrt_##EXP() SQRT_EXP(exp); SQRT_EXP(exp2); SQRT_EXP(exp10); SQRT_EXP(pow10); /* Test logN(cbrt(x)) -> (1/3)*logN(x). */ #define LOG_CBRT(LOG) \ extern void link_failure_##LOG##_cbrt(void); \ if (LOG(cbrt(d1)) != (1.0/3)*LOG(d1) \ || LOG##f(cbrtf(f1)) != (1.0F/3)*LOG##f(f1) \ || LOG##l(cbrtl(ld1)) != (1.0L/3)*LOG##l(ld1)) link_failure_##LOG##_cbrt() LOG_CBRT(log); LOG_CBRT(log2); LOG_CBRT(log10); /* Test cbrt(expN(x)) -> expN(x/3). */ #define CBRT_EXP(EXP) \ extern void link_failure_cbrt_##EXP(void); \ if (cbrt(EXP(d1)) != EXP(d1/3.0) || cbrtf(EXP##f(f1)) != EXP##f(f1/3.0F) \ || cbrtl(EXP##l(ld1)) != EXP##l(ld1/3.0L)) link_failure_cbrt_##EXP() CBRT_EXP(exp); CBRT_EXP(exp2); CBRT_EXP(exp10); CBRT_EXP(pow10); /* Test logN(pow(x,y)) -> y*logN(x). */ #define LOG_POW(LOG, POW) \ extern void link_failure_##LOG##_##POW(void); \ if (LOG(POW(d1,d2)) != d2*LOG(d1) || LOG##f(POW##f(f1,f2)) != f2*LOG##f(f1) \ || LOG##l(POW##l(ld1,ld2)) != ld2*LOG##l(ld1)) link_failure_##LOG##_##POW() LOG_POW(log,pow); LOG_POW(log2,pow); LOG_POW(log10,pow); /* Test pow(expN(x),y)) -> expN(x*y). */ #define POW_EXP(POW, EXP) \ extern void link_failure_##POW##_##EXP(void); \ if (POW(EXP(d1),d2) != EXP(d1*d2) || POW##f(EXP##f(f1),f2) != EXP##f(f1*f2) \ || POW##l(EXP##l(ld1),ld2) != EXP##l(ld1*ld2)) link_failure_##POW##_##EXP() POW_EXP(pow, exp); POW_EXP(pow, exp2); POW_EXP(pow, exp10); POW_EXP(pow, pow10); /* Test expN(0) -> 1. */ #define EXP_0(EXP) \ extern void link_failure_##EXP##_0(void); \ if (EXP(0.0) != 1.0 || EXP##f(0.0F) != 1.0F || EXP##l(0.0L) != 1.0L) \ link_failure_##EXP##_0() EXP_0(exp); EXP_0(exp2); EXP_0(exp10); EXP_0(pow10); /* Test expN(1) -> N. */ #define EXP_N(EXP, BASE) \ extern void link_failure_##EXP##_N(void); \ if (EXP(1.0) != BASE || EXP##f(1.0F) != BASE##F || EXP##l(1.0L) != BASE##L) \ link_failure_##EXP##_N() EXP_N(exp, M_E); EXP_N(exp2, 2.0); EXP_N(exp10, 10.0); EXP_N(pow10, 10.0); /* Test expN(integer) -> N*N*N*... */ #define EXP_INT(EXP, BASE) \ extern void link_failure_##EXP##_INT(void); \ if (EXP(5.0) < (BASE)*(BASE)*(BASE)*(BASE)*(BASE) - PREC \ || EXP(5.0) > (BASE)*(BASE)*(BASE)*(BASE)*(BASE) + PREC \ || EXP##f(5.0F) < (BASE##F)*(BASE##F)*(BASE##F)*(BASE##F)*(BASE##F) -PRECF \ || EXP##f(5.0F) > (BASE##F)*(BASE##F)*(BASE##F)*(BASE##F)*(BASE##F) +PRECF \ || EXP##l(5.0L) < (BASE##L)*(BASE##L)*(BASE##L)*(BASE##L)*(BASE##L) -PRECL \ || EXP##l(5.0L) > (BASE##L)*(BASE##L)*(BASE##L)*(BASE##L)*(BASE##L) +PRECL) \ link_failure_##EXP##_INT() EXP_INT(exp, M_E); EXP_INT(exp2, 2.0); EXP_INT(exp10, 10.0); EXP_INT(pow10, 10.0); /* Test expN(logN(x)) -> x. */ #define EXPLOG_SAME(EXP, LOG) \ extern void link_failure_##EXP##_##LOG##_same(void); \ if (EXP(LOG(d1)) != d1 || EXP##f(LOG##f(f1)) != f1 \ || EXP##l(LOG##l(ld1)) != ld1) link_failure_##EXP##_##LOG##_same() EXPLOG_SAME(exp, log); EXPLOG_SAME(exp2, log2); EXPLOG_SAME(exp10, log10); EXPLOG_SAME(pow10, log10); /* Test expN(x)*expN(y)) -> expN(x+y). */ #define EXPXEXP(EXP) \ extern void link_failure_##EXP##X##EXP(void); \ if (EXP(d1)*EXP(d2) != EXP(d1+d2) || EXP##f(f1)*EXP##f(f2) != EXP##f(f1+f2) \ || EXP##l(ld1)*EXP##l(ld2) != EXP##l(ld1+ld2)) link_failure_##EXP##X##EXP() EXPXEXP(exp); EXPXEXP(exp2); EXPXEXP(exp10); EXPXEXP(pow10); /* Test x/expN(y) -> x*expN(-y). */ /* Test expN(x)/expN(y) -> expN(x-y). */ #define DIVEXP(EXP) \ extern void link_failure_div1_##EXP(void); \ if (d1/EXP(d2) != d1*EXP(-d2) || f1/EXP##f(f2) != f1*EXP##f(-f2) \ || ld1/EXP##l(ld2) != ld1*EXP##l(-ld2)) link_failure_div1_##EXP(); \ extern void link_failure_div2_##EXP(void); \ if (EXP(d1)/EXP(d2) != EXP(d1-d2) || EXP##f(f1)/EXP##f(f2) != EXP##f(f1-f2) \ || EXP##l(ld1)/EXP##l(ld2) != EXP##l(ld1-ld2)) link_failure_div2_##EXP() DIVEXP(exp); DIVEXP(exp2); DIVEXP(exp10); DIVEXP(pow10); }
void test(double d1, double d2, float f1, float f2, long double ld1, long double ld2) { #define LOG_1(LOG) \ extern void link_failure_##LOG##_1(void); \ if (LOG(1.0) != 0.0 || LOG##f(1.0F) != 0.0F || LOG##l(1.0L) != 0.0L) \ link_failure_##LOG##_1() LOG_1(log); LOG_1(log2); LOG_1(log10); #define LOG_N(LOG, BASE) \ extern void link_failure_##LOG##_N(void); \ if (LOG(BASE) != 1.0 || LOG##f(BASE##F) != 1.0F || LOG##l(BASE##L) != 1.0L) \ link_failure_##LOG##_N() LOG_N(log, M_E); LOG_N(log2, 2.0); LOG_N(log10, 10.0); #define LOGEXP_SAME(LOG, EXP) \ extern void link_failure_##LOG##_##EXP##_same(void); \ if (LOG(EXP(d1)) != d1 || LOG##f(EXP##f(f1)) != f1 \ || LOG##l(EXP##l(ld1)) != ld1) link_failure_##LOG##_##EXP##_same() LOGEXP_SAME(log,exp); LOGEXP_SAME(log2,exp2); LOGEXP_SAME(log10,exp10); LOGEXP_SAME(log10,pow10); #define LOGEXP(LOG, EXP, BASE) \ extern void link_failure_##LOG##_##EXP(void); \ if (LOG(EXP(d1)) != d1*LOG(BASE) || LOG##f(EXP##f(f1)) != f1*LOG##f(BASE##F) \ || LOG##l(EXP##l(ld1)) != ld1*LOG##l(BASE##L)) link_failure_##LOG##_##EXP() LOGEXP(log,exp,M_E); LOGEXP(log,exp2,2.0); LOGEXP(log,exp10,10.0); LOGEXP(log,pow10,10.0); LOGEXP(log2,exp,M_E); LOGEXP(log2,exp2,2.0); LOGEXP(log2,exp10,10.0); LOGEXP(log2,pow10,10.0); LOGEXP(log10,exp,M_E); LOGEXP(log10,exp2,2.0); LOGEXP(log10,exp10,10.0); LOGEXP(log10,pow10,10.0); #define LOG_SQRT(LOG) \ extern void link_failure_##LOG##_sqrt(void); \ if (LOG(sqrt(d1)) != 0.5*LOG(d1) || LOG##f(sqrtf(f1)) != 0.5F*LOG##f(f1) \ || LOG##l(sqrtl(ld1)) != 0.5L*LOG##l(ld1)) link_failure_##LOG##_sqrt() LOG_SQRT(log); LOG_SQRT(log2); LOG_SQRT(log10); #define LOG_CBRT(LOG) \ extern void link_failure_##LOG##_cbrt(void); \ if (LOG(cbrt(d1)) != (1.0/3)*LOG(d1) \ || LOG##f(cbrtf(f1)) != (1.0F/3)*LOG##f(f1) \ || LOG##l(cbrtl(ld1)) != (1.0L/3)*LOG##l(ld1)) link_failure_##LOG##_cbrt() LOG_CBRT(log); LOG_CBRT(log2); LOG_CBRT(log10); #define LOGPOW(LOG, POW) \ extern void link_failure_##LOG##_##POW(void); \ if (LOG(POW(d1,d2)) != d2*LOG(d1) || LOG##f(POW##f(f1,f2)) != f2*LOG##f(f1) \ || LOG##l(POW##l(ld1,ld2)) != ld2*LOG##l(ld1)) link_failure_##LOG##_##POW() LOGPOW(log,pow); LOGPOW(log2,pow); LOGPOW(log10,pow); #define EXP_0(EXP) \ extern void link_failure_##EXP##_0(void); \ if (EXP(0.0) != 1.0 || EXP##f(0.0F) != 1.0F || EXP##l(0.0L) != 1.0L) \ link_failure_##EXP##_0() EXP_0(exp); EXP_0(exp2); EXP_0(exp10); EXP_0(pow10); #define EXP_N(EXP, BASE) \ extern void link_failure_##EXP##_N(void); \ if (EXP(1.0) != BASE || EXP##f(1.0F) != BASE##F || EXP##l(1.0L) != BASE##L) \ link_failure_##EXP##_N() EXP_N(exp, M_E); EXP_N(exp2, 2.0); EXP_N(exp10, 10.0); EXP_N(pow10, 10.0); #define EXP_INT(EXP, BASE) \ extern void link_failure_##EXP##_INT(void); \ if (EXP(5.0) < (BASE)*(BASE)*(BASE)*(BASE)*(BASE) - PREC \ || EXP(5.0) > (BASE)*(BASE)*(BASE)*(BASE)*(BASE) + PREC \ || EXP##f(5.0F) < (BASE##F)*(BASE##F)*(BASE##F)*(BASE##F)*(BASE##F) -PRECF \ || EXP##f(5.0F) > (BASE##F)*(BASE##F)*(BASE##F)*(BASE##F)*(BASE##F) +PRECF \ || EXP##l(5.0L) < (BASE##L)*(BASE##L)*(BASE##L)*(BASE##L)*(BASE##L) -PRECL \ || EXP##l(5.0L) > (BASE##L)*(BASE##L)*(BASE##L)*(BASE##L)*(BASE##L) +PRECL) \ link_failure_##EXP##_INT() EXP_INT(exp, M_E); EXP_INT(exp2, 2.0); EXP_INT(exp10, 10.0); EXP_INT(pow10, 10.0); #define EXPLOG_SAME(EXP, LOG) \ extern void link_failure_##EXP##_##LOG##_same(void); \ if (EXP(LOG(d1)) != d1 || EXP##f(LOG##f(f1)) != f1 \ || EXP##l(LOG##l(ld1)) != ld1) link_failure_##EXP##_##LOG##_same() EXPLOG_SAME(exp, log); EXPLOG_SAME(exp2, log2); EXPLOG_SAME(exp10, log10); EXPLOG_SAME(pow10, log10); #define EXPXEXP(EXP) \ extern void link_failure_##EXP##X##EXP(void); \ if (EXP(d1)*EXP(d2) != EXP(d1+d2) || EXP##f(f1)*EXP##f(f2) != EXP##f(f1+f2) \ || EXP##l(ld1)*EXP##l(ld2) != EXP##l(ld1+ld2)) link_failure_##EXP##X##EXP() EXPXEXP(exp); EXPXEXP(exp2); EXPXEXP(exp10); EXPXEXP(pow10); #define DIVEXP(EXP) \ extern void link_failure_div1_##EXP(void); \ if (d1/EXP(d2) != d1*EXP(-d2) || f1/EXP##f(f2) != f1*EXP##f(-f2) \ || ld1/EXP##l(ld2) != ld1*EXP##l(-ld2)) link_failure_div1_##EXP(); \ extern void link_failure_div2_##EXP(void); \ if (EXP(d1)/EXP(d2) != EXP(d1-d2) || EXP##f(f1)/EXP##f(f2) != EXP##f(f1-f2) \ || EXP##l(ld1)/EXP##l(ld2) != EXP##l(ld1-ld2)) link_failure_div2_##EXP() DIVEXP(exp); DIVEXP(exp2); DIVEXP(exp10); DIVEXP(pow10); }
//----------------------------------------------------------------------------- int rlc_um_fsm_notify_event ( const protocol_ctxt_t* const ctxt_pP, rlc_um_entity_t *rlc_pP, uint8_t eventP) { switch (rlc_pP->protocol_state) { //------------------------------- // RLC_NULL_STATE //------------------------------- case RLC_NULL_STATE: switch (eventP) { case RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_DATA_TRANSFER_READY_STATE_EVENT: LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" FSM RLC_NULL_STATE -> RLC_DATA_TRANSFER_READY_STATE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP)); rlc_pP->protocol_state = RLC_DATA_TRANSFER_READY_STATE; return 1; break; default: LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" FSM WARNING PROTOCOL ERROR - EVENT %02X hex NOT EXPECTED FROM NULL_STATE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), eventP); mac_xface->macphy_exit("RLC-UM FSM WARNING PROTOCOL ERROR - EVENT NOT EXPECTED FROM NULL_STATE"); return 0; } break; //------------------------------- // RLC_DATA_TRANSFER_READY_STATE //------------------------------- case RLC_DATA_TRANSFER_READY_STATE: switch (eventP) { case RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_NULL_STATE_EVENT: LOG_D(RLC, PROTOCOL_RLC_UM_CTXT_FMT" FSM RLC_DATA_TRANSFER_READY_STATE -> RLC_NULL_STATE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP)); rlc_pP->protocol_state = RLC_NULL_STATE; return 1; break; case RLC_UM_RECEIVE_CRLC_SUSPEND_REQ_EVENT: case RLC_UM_TRANSMIT_CRLC_SUSPEND_CNF_EVENT: LOG_N(RLC, PROTOCOL_RLC_UM_CTXT_FMT" FSM RLC_DATA_TRANSFER_READY_STATE -> RLC_LOCAL_SUSPEND_STATE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP)); rlc_pP->protocol_state = RLC_LOCAL_SUSPEND_STATE; return 1; break; default: LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" FSM WARNING PROTOCOL ERROR - EVENT %02X hex NOT EXPECTED FROM DATA_TRANSFER_READY_STATE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), eventP); return 0; } break; //------------------------------- // RLC_LOCAL_SUSPEND_STATE //------------------------------- case RLC_LOCAL_SUSPEND_STATE: switch (eventP) { case RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_NULL_STATE_EVENT: LOG_N(RLC, PROTOCOL_RLC_UM_CTXT_FMT" FSM RLC_LOCAL_SUSPEND_STATE -> RLC_NULL_STATE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP)); rlc_pP->protocol_state = RLC_NULL_STATE; return 1; break; case RLC_UM_RECEIVE_CRLC_RESUME_REQ_EVENT: LOG_N(RLC, PROTOCOL_RLC_UM_CTXT_FMT" FSM RLC_LOCAL_SUSPEND_STATE -> RLC_DATA_TRANSFER_READY_STATE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP)); rlc_pP->protocol_state = RLC_DATA_TRANSFER_READY_STATE; return 1; break; default: LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" FSM WARNING PROTOCOL ERROR - EVENT %02X hex NOT EXPECTED FROM RLC_LOCAL_SUSPEND_STATE\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), eventP); return 0; } break; default: LOG_E(RLC, PROTOCOL_RLC_UM_CTXT_FMT" FSM ERROR UNKNOWN STATE %d\n", PROTOCOL_RLC_UM_CTXT_ARGS(ctxt_pP, rlc_pP), rlc_pP->protocol_state); return 0; } }
static int dcca_cb( struct msg ** msg, struct avp * avp, struct session * sess, void * opaque, enum disp_action * act) { struct msg * m; struct avp_hdr * val_app_id = NULL, * val_rt = NULL, * val_rn = NULL, * val_io = NULL, * val_oo = NULL, *val_imsi = NULL; struct avp *groupedavp = NULL, *groupedavp2 = NULL; union avp_value validity_time, total_octets, result_code, rating_group; struct avp * a = NULL, * aa = NULL; int input_octets = 0, output_octets = 0; char* imsi = NULL; LOG_N("CCR processor"); TRACE_ENTRY("%p %p %p %p", msg, avp, sess, act); if (msg == NULL) return EINVAL; // // Read AVPs from request // // CHECK_FCT( dcca_read_avps_from_message(*msg) ); // Read AVPs CHECK_FCT( dcca_cb_read(msg, dcca_dict.Auth_Application_Id, &val_app_id) ); CHECK_FCT( dcca_cb_read(msg, dcca_dict.CC_Request_Type, &val_rt) ); CHECK_FCT( dcca_cb_read(msg, dcca_dict.CC_Request_Number, &val_rn) ); // Read IMSI CHECK_FCT( get_imsi(*msg, &a) ); if (a) { CHECK_FCT( fd_msg_avp_hdr( a, &val_imsi ) ); int len = val_imsi->avp_value->os.len; imsi = malloc(len * sizeof(char)); int i; for (i = 0; i < len; i++) { imsi[i] = val_imsi->avp_value->os.data[i]; } imsi[len] = 0; } // Read Input / Output Octets CHECK_FCT( fd_msg_search_avp ( *msg, dcca_dict.Multiple_Services_Credit_Control, &a) ); if (a) { CHECK_FCT( avp_search_child ( a, dcca_dict.Used_Service_Unit, &a) ); if (a) { CHECK_FCT( avp_search_child ( a, dcca_dict.CC_Input_Octets, &aa) ); if (aa) { CHECK_FCT( fd_msg_avp_hdr( aa, &val_io ) ); input_octets = val_io->avp_value->i32; } CHECK_FCT( avp_search_child ( a, dcca_dict.CC_Output_Octets, &aa) ); if (aa) { CHECK_FCT( fd_msg_avp_hdr( aa, &val_oo ) ); output_octets = val_oo->avp_value->i32; } } } LOG_N("IMSI: %s", imsi); LOG_N("IN: %i", input_octets); LOG_N("OUT: %i", output_octets); // Create response message CHECK_FCT( fd_msg_new_answer_from_req ( fd_g_config->cnf_dict, msg, 0 ) ); m = *msg; CHECK_FCT( fd_msg_rescode_set( m, "DIAMETER_SUCCESS", NULL, NULL, 1 ) ); // Put params to response CHECK_FCT( dcca_cb_put(m, dcca_dict.Auth_Application_Id, val_app_id) ); CHECK_FCT( dcca_cb_put(m, dcca_dict.CC_Request_Type, val_rt) ); CHECK_FCT( dcca_cb_put(m, dcca_dict.CC_Request_Number, val_rn) ); // Multiple Services CC Group total_octets.i64 = rest_api_vsca(imsi, input_octets, output_octets); CHECK_FCT( fd_msg_avp_new ( dcca_dict.Multiple_Services_Credit_Control, 0, &groupedavp ) ); // Granted Service Unit CHECK_FCT( fd_msg_avp_new ( dcca_dict.Granted_Service_Unit, 0, &groupedavp2 ) ); CHECK_FCT( dcca_cb_put_value_to_avp(groupedavp2, dcca_dict.CC_Total_Octets, &total_octets) ); CHECK_FCT( fd_msg_avp_add( groupedavp, MSG_BRW_LAST_CHILD, groupedavp2 ) ); // Result code result_code.i32 = 2001; CHECK_FCT( dcca_cb_put_value_to_avp(groupedavp, dcca_dict.Result_Code, &result_code) ); // Rating group rating_group.i32 = 1001; CHECK_FCT( dcca_cb_put_value_to_avp(groupedavp, dcca_dict.Rating_Group, &rating_group) ); // Validity Time validity_time.i32 = 60; CHECK_FCT( dcca_cb_put_value_to_avp(groupedavp, dcca_dict.Validity_Time, &validity_time) ); CHECK_FCT( fd_msg_avp_add( m, MSG_BRW_LAST_CHILD, groupedavp ) ); // Send the answer *act = DISP_ACT_SEND; return 0; }
int test_log(void) { LOG_ENTER(MAC); // because the default level is DEBUG LOG_I(EMU, "1 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); LOG_D(MAC, "1 debug MAC \n"); LOG_N(MAC, "1 notice MAC \n"); LOG_W(MAC, "1 warning MAC \n"); set_comp_log(EMU, LOG_INFO, FLAG_ONLINE); set_comp_log(MAC, LOG_WARNING, 0); LOG_I(EMU, "2 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); LOG_E(MAC, "2 emerge MAC\n"); LOG_D(MAC, "2 debug MAC \n"); LOG_N(MAC, "2 notice MAC \n"); LOG_W(MAC, "2 warning MAC \n"); LOG_I(MAC, "2 info MAC \n"); set_comp_log(MAC, LOG_NOTICE, 1); LOG_ENTER(MAC); LOG_I(EMU, "3 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); LOG_D(MAC, "3 debug MAC \n"); LOG_N(MAC, "3 notice MAC \n"); LOG_W(MAC, "3 warning MAC \n"); LOG_I(MAC, "3 info MAC \n"); set_comp_log(MAC, LOG_DEBUG,1); set_comp_log(EMU, LOG_DEBUG,1); LOG_ENTER(MAC); LOG_I(EMU, "4 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); LOG_D(MAC, "4 debug MAC \n"); LOG_N(MAC, "4 notice MAC \n"); LOG_W(MAC, "4 warning MAC \n"); LOG_I(MAC, "4 info MAC \n"); set_comp_log(MAC, LOG_DEBUG,0); set_comp_log(EMU, LOG_DEBUG,0); LOG_I(LOG, "5 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); LOG_D(MAC, "5 debug MAC \n"); LOG_N(MAC, "5 notice MAC \n"); LOG_W(MAC, "5 warning MAC \n"); LOG_I(MAC, "5 info MAC \n"); set_comp_log(MAC, LOG_TRACE,0X07F); set_comp_log(EMU, LOG_TRACE,0X07F); LOG_ENTER(MAC); LOG_I(LOG, "6 Starting OAI logs version %s Build date: %s on %s\n", BUILD_VERSION, BUILD_DATE, BUILD_HOST); LOG_D(MAC, "6 debug MAC \n"); LOG_N(MAC, "6 notice MAC \n"); LOG_W(MAC, "6 warning MAC \n"); LOG_I(MAC, "6 info MAC \n"); LOG_EXIT(MAC); return 0; }
int runMonitor() { //TODO: Necesitamos doble conexions una para la lectura y otra para la escritura DB_T *dbr; DB_T *dbw; RES_T *res; LOG_N("Inicializando monitor..."); dbr = db_create("localhost","Yii","user","entrar"); dbw = db_create("localhost","Yii","user","entrar"); db_connect(dbr); if (!db_isConnected(dbr)) { LOG_E(db_getError(dbr)); db_destroy(dbr); return EXIT_FAILURE; } db_connect(dbw); if (!db_isConnected(dbw)) { LOG_E(db_getError(dbw)); db_destroy(dbw); db_destroy(dbr); return EXIT_FAILURE; } frame_decodermanager_init(); while(!terminate) { // Sospecho que tras un tiempo la conexion con la bbdd se cierra.... if (!db_chkConnection(dbr)) { LOG_E("Read database is closed. Trying to reconnect"); db_connect(dbr); } // Sospecho que tras un tiempo la conexion con la bbdd se cierra.... if (!db_chkConnection(dbw)) { LOG_E("Write database is closed. Trying to reconnect"); db_connect(dbw); } LOG_D("Checking for undecoded frames..."); res = mydb_select_undecoded_transport_frames(dbr); if (res_getRowCount(res)>0) { LOG_F_N("Processing %d new frames..",res_getRowCount(res)); processData(res,dbw,dbr); LOG_N("... done"); } res_destroy(res); // if ( mysql_query(conRead,sql) ) { // // LOG_E(mysql_error(conRead)); // // // } else { // // res = mysql_use_result(conRead); // // if (res != NULL) { // // // processGpsData(res); // // mysql_free_result(res); // // } // // // } LOG_F_D("...All done. Sleeping %d",timeLapse); sleep(timeLapse); // Wait 5 seconds; } db_destroy(dbr); db_destroy(dbw); //mysql_close(conRead); frame_decodermanager_finish(); return EXIT_SUCCESS; }
/* The function that does the work of calling the extension's callbacks and also managing the permessagedata structures */ void fd_hook_call(enum fd_hook_type type, struct msg * msg, struct fd_peer * peer, void * other, struct fd_msg_pmdl * pmdl) { struct fd_list * li; ASSERT(type <= HOOK_LAST); int call_default = 0; /* lock the list of hooks for this type */ CHECK_POSIX_DO( pthread_rwlock_rdlock(&HS_array[type].rwlock), ); pthread_cleanup_push( fd_cleanup_rwlock, &HS_array[type].rwlock ); if (FD_IS_LIST_EMPTY(&HS_array[type].sentinel)) { call_default = 1; } else { /* for each registered hook */ for (li = HS_array[type].sentinel.next; li != &HS_array[type].sentinel; li = li->next) { struct fd_hook_hdl * h = (struct fd_hook_hdl *)li->o; struct fd_hook_permsgdata * pmd = NULL; /* do we need to handle pmd ? */ if (h->data_hdl && pmdl) { pmd = get_or_create_pmd(pmdl, h->data_hdl); } /* Now, call this callback */ (*h->fd_hook_cb)(type, msg, &peer->p_hdr, other, pmd, h->regdata); } } pthread_cleanup_pop(0); /* done */ CHECK_POSIX_DO( pthread_rwlock_unlock(&HS_array[type].rwlock), ); if (call_default) { CHECK_POSIX_DO( pthread_mutex_lock(&hook_default_mtx), ); pthread_cleanup_push( fd_cleanup_mutex, &hook_default_mtx ); /* There was no registered handler, default behavior for this hook */ switch (type) { case HOOK_DATA_RECEIVED: { struct fd_cnx_rcvdata *rcv_data = other; LOG_A("RCV: %zd bytes", rcv_data->length); break; } case HOOK_MESSAGE_RECEIVED: { CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); LOG_D("RCV from '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); break; } case HOOK_MESSAGE_LOCAL: { CHECK_MALLOC_DO(fd_msg_dump_full(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); LOG_A("Handled to framework for sending: %s", hook_default_buf); break; } case HOOK_MESSAGE_PRE_SEND: { CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); LOG_D("GOING TO SEND TO '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); break; } case HOOK_MESSAGE_SENT: { CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); LOG_D("SENT to '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); break; } case HOOK_MESSAGE_FAILOVER: { CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); LOG_D("Failing over message sent to '%s': %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); break; } case HOOK_MESSAGE_PARSING_ERROR: { if (msg) { DiamId_t id = NULL; if (!fd_msg_source_get( msg, &id, NULL )) id = (DiamId_t)"<error getting source>"; if (!id) id = (DiamId_t)"<local>"; CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); LOG_E("Parsing error: '%s' for the following message received from '%s':", (char *)other, (char *)id); LOG_SPLIT(FD_LOG_ERROR, " ", hook_default_buf, NULL); } else { struct fd_cnx_rcvdata *rcv_data = other; CHECK_MALLOC_DO(fd_dump_extend_hexdump(&hook_default_buf, &hook_default_len, NULL, rcv_data->buffer, rcv_data->length, 0, 0), break); LOG_E("Parsing error: cannot parse %zdB buffer from '%s': %s", rcv_data->length, peer ? peer->p_hdr.info.pi_diamid : "<unknown>", hook_default_buf); } break; } case HOOK_MESSAGE_ROUTING_ERROR: { CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); LOG_E("Routing error: '%s' for the following message:", (char *)other); LOG_SPLIT(FD_LOG_ERROR, " ", hook_default_buf, NULL); break; } case HOOK_MESSAGE_ROUTING_FORWARD: { CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); LOG_D("FORWARDING: %s", hook_default_buf); break; } case HOOK_MESSAGE_ROUTING_LOCAL: { CHECK_MALLOC_DO(fd_msg_dump_summary(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); LOG_D("DISPATCHING: %s", hook_default_buf); break; } case HOOK_MESSAGE_DROPPED: { CHECK_MALLOC_DO(fd_msg_dump_treeview(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); LOG_E("Message discarded ('%s'):", (char *)other); LOG_SPLIT(FD_LOG_ERROR, " ", hook_default_buf, NULL); break; } case HOOK_PEER_CONNECT_FAILED: { if (msg) { CHECK_MALLOC_DO(fd_msg_dump_full(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); LOG_N("Connection to '%s' failed: '%s'; CER/CEA dump:", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", (char *)other); LOG_SPLIT(FD_LOG_NOTICE, " ", hook_default_buf, NULL); } else { LOG_D("Connection to '%s' failed: %s", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", (char *)other); } break; } case HOOK_PEER_CONNECT_SUCCESS: { DiamId_t id = NULL; if ((!fd_msg_source_get( msg, &id, NULL )) && (id == NULL)) { /* The CEA is locally issued */ fd_msg_answ_getq(msg, &msg); /* We dump the CER in that case */ } CHECK_MALLOC_DO(fd_msg_dump_full(&hook_default_buf, &hook_default_len, NULL, msg, NULL, 0, 1), break); char protobuf[40]; if (peer) { CHECK_FCT_DO(fd_peer_cnx_proto_info(&peer->p_hdr, protobuf, sizeof(protobuf)), break ); } else { protobuf[0] = '-'; protobuf[1] = '\0'; } LOG_N("Connected to '%s' (%s), remote capabilities: ", peer ? peer->p_hdr.info.pi_diamid : "<unknown>", protobuf); LOG_SPLIT(FD_LOG_NOTICE, " ", hook_default_buf, NULL); break; }
//----------------------------------------------------------------------------- int rlc_um_fsm_notify_event (rlc_um_entity_t *rlc_pP, uint8_t eventP) { //----------------------------------------------------------------------------- switch (rlc_pP->protocol_state) { //------------------------------- // RLC_NULL_STATE //------------------------------- case RLC_NULL_STATE: switch (eventP) { case RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_DATA_TRANSFER_READY_STATE_EVENT: LOG_D(RLC, "[RLC_UM][%s][MOD %u/%u][RB %u] FSM RLC_NULL_STATE -> RLC_DATA_TRANSFER_READY_STATE\n", (rlc_pP->is_enb) ? "eNB" : "UE", rlc_pP->enb_module_id, rlc_pP->ue_module_id, rlc_pP->rb_id); rlc_pP->protocol_state = RLC_DATA_TRANSFER_READY_STATE; return 1; break; default: LOG_E(RLC, "[RLC_UM][%s][MOD %u/%u][RB %u] FSM WARNING PROTOCOL ERROR - EVENT %02X hex NOT EXPECTED FROM NULL_STATE\n", (rlc_pP->is_enb) ? "eNB" : "UE", rlc_pP->enb_module_id, rlc_pP->ue_module_id, rlc_pP->rb_id, eventP); mac_xface->macphy_exit("RLC-UM FSM WARNING PROTOCOL ERROR - EVENT NOT EXPECTED FROM NULL_STATE"); return 0; } break; //------------------------------- // RLC_DATA_TRANSFER_READY_STATE //------------------------------- case RLC_DATA_TRANSFER_READY_STATE: switch (eventP) { case RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_NULL_STATE_EVENT: LOG_D(RLC, "[RLC_UM][%s][MOD %u/%u][RB %u] FSM RLC_DATA_TRANSFER_READY_STATE -> RLC_NULL_STATE\n", (rlc_pP->is_enb) ? "eNB" : "UE", rlc_pP->enb_module_id, rlc_pP->ue_module_id, rlc_pP->rb_id); rlc_pP->protocol_state = RLC_NULL_STATE; return 1; break; case RLC_UM_RECEIVE_CRLC_SUSPEND_REQ_EVENT: case RLC_UM_TRANSMIT_CRLC_SUSPEND_CNF_EVENT: LOG_N(RLC, "[RLC_UM][%s][MOD %u/%u][RB %u] FSM RLC_DATA_TRANSFER_READY_STATE -> RLC_LOCAL_SUSPEND_STATE\n", (rlc_pP->is_enb) ? "eNB" : "UE", rlc_pP->enb_module_id, rlc_pP->ue_module_id, rlc_pP->rb_id); rlc_pP->protocol_state = RLC_LOCAL_SUSPEND_STATE; return 1; break; default: LOG_E(RLC, "[RLC_UM][%s][MOD %u/%u][RB %u] FSM WARNING PROTOCOL ERROR - EVENT %02X hex NOT EXPECTED FROM DATA_TRANSFER_READY_STATE\n", (rlc_pP->is_enb) ? "eNB" : "UE", rlc_pP->enb_module_id, rlc_pP->ue_module_id, rlc_pP->rb_id, eventP); return 0; } break; //------------------------------- // RLC_LOCAL_SUSPEND_STATE //------------------------------- case RLC_LOCAL_SUSPEND_STATE: switch (eventP) { case RLC_UM_RECEIVE_CRLC_CONFIG_REQ_ENTER_NULL_STATE_EVENT: LOG_N(RLC, "[RLC_UM][%s][MOD %u/%u][RB %u] FSM RLC_LOCAL_SUSPEND_STATE -> RLC_NULL_STATE\n", (rlc_pP->is_enb) ? "eNB" : "UE", rlc_pP->enb_module_id, rlc_pP->ue_module_id, rlc_pP->rb_id); rlc_pP->protocol_state = RLC_NULL_STATE; return 1; break; case RLC_UM_RECEIVE_CRLC_RESUME_REQ_EVENT: LOG_N(RLC, "[RLC_UM][%s][MOD %u/%u][RB %u] FSM RLC_LOCAL_SUSPEND_STATE -> RLC_DATA_TRANSFER_READY_STATE\n", (rlc_pP->is_enb) ? "eNB" : "UE", rlc_pP->enb_module_id, rlc_pP->ue_module_id, rlc_pP->rb_id); rlc_pP->protocol_state = RLC_DATA_TRANSFER_READY_STATE; return 1; break; default: LOG_E(RLC, "[RLC_UM][%s][MOD %u/%u][RB %u] FSM WARNING PROTOCOL ERROR - EVENT %02X hex NOT EXPECTED FROM RLC_LOCAL_SUSPEND_STATE\n", (rlc_pP->is_enb) ? "eNB" : "UE", rlc_pP->enb_module_id, rlc_pP->ue_module_id, rlc_pP->rb_id, eventP); return 0; } break; default: LOG_E(RLC, "[RLC_UM][%s][MOD %u/%u][RB %u] FSM ERROR UNKNOWN STATE %d\n", (rlc_pP->is_enb) ? "eNB" : "UE", rlc_pP->enb_module_id, rlc_pP->ue_module_id, rlc_pP->rb_id, rlc_pP->protocol_state); return 0; } }
//--------------------------------------------------------------------------- int mRAL_mihf_connect(ral_ue_instance_t instanceP) { //--------------------------------------------------------------------------- struct addrinfo info; /* endpoint information */ struct addrinfo *addr, *rp; /* endpoint address */ int rc; /* returned error code */ int optval; /* socket option value */ module_id_t mod_id = instanceP - NB_eNB_INST; unsigned char buf[sizeof(struct sockaddr_in6)]; /* * Initialize the remote MIH-F endpoint address information */ memset(&info, 0, sizeof(struct addrinfo)); info.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ info.ai_socktype = SOCK_DGRAM; /* Datagram socket */ info.ai_flags = 0; info.ai_protocol = 0; /* Any protocol */ rc = getaddrinfo(g_ue_ral_obj[mod_id].mihf_ip_address, g_ue_ral_obj[mod_id].mihf_remote_port, &info, &addr); if (rc != 0) { LOG_E(RAL_UE, " getaddrinfo: %s\n", gai_strerror(rc)); return -1; } /* * getaddrinfo() returns a linked list of address structures. * Try each address until we successfully connect(2). If socket(2) * (or connect(2)) fails, we (close the socket and) try the next address. */ for (rp = addr; rp != NULL; rp = rp->ai_next) { g_ue_ral_obj[mod_id].mih_sock_desc = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); if (g_ue_ral_obj[mod_id].mih_sock_desc < 0) { continue; } optval = 1; setsockopt(g_ue_ral_obj[mod_id].mih_sock_desc, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); /* * Convert the RAL local network address */ if (rp->ai_family == AF_INET) { /* IPv4 network address family */ struct sockaddr_in *addr4 = NULL; LOG_D(RAL_UE, " %s is an ipv4 address\n", g_ue_ral_obj[mod_id].mihf_ip_address); addr4 = (struct sockaddr_in *)(&buf[0]); addr4->sin_port = htons(atoi(g_ue_ral_obj[mod_id].ral_listening_port)); addr4->sin_family = AF_INET; rc = inet_pton(AF_INET, g_ue_ral_obj[mod_id].ral_ip_address, &addr4->sin_addr); } else if (rp->ai_family == AF_INET6) { /* IPv6 network address family */ struct sockaddr_in6 *addr6 = NULL; LOG_D(RAL_UE, " %s is an ipv6 address\n", g_ue_ral_obj[mod_id].mihf_ip_address); addr6 = (struct sockaddr_in6 *)(&buf[0]); addr6->sin6_port = htons(atoi(g_ue_ral_obj[mod_id].ral_listening_port)); addr6->sin6_family = AF_INET6; rc = inet_pton(AF_INET, g_ue_ral_obj[mod_id].ral_ip_address, &addr6->sin6_addr); } else { LOG_E(RAL_UE, " %s is an unknown address format %d\n", g_ue_ral_obj[mod_id].mihf_ip_address, rp->ai_family); return -1; } if (rc < 0) { /* The network address convertion failed */ LOG_E(RAL_UE, " inet_pton(RAL IP address %s): %s\n", g_ue_ral_obj[mod_id].ral_ip_address, strerror(rc)); return -1; } else if (rc == 0) { /* The network address is not valid */ LOG_E(RAL_UE, " RAL IP address %s is not valid\n", g_ue_ral_obj[mod_id].ral_ip_address); return -1; } /* Bind the socket to the local RAL network address */ rc = bind(g_ue_ral_obj[mod_id].mih_sock_desc, (const struct sockaddr *)buf, sizeof(struct sockaddr_in)); if (rc < 0) { LOG_E(RAL_UE, " bind(RAL IP address %s): %s\n", g_ue_ral_obj[mod_id].ral_ip_address, strerror(errno)); return -1; } /* Connect the socket to the remote MIH-F network address */ if (connect(g_ue_ral_obj[mod_id].mih_sock_desc, rp->ai_addr, rp->ai_addrlen) == 0) { LOG_N(RAL_UE, " RAL [%s:%s] is now UDP-CONNECTED to MIH-F [%s:%s]\n", g_ue_ral_obj[mod_id].ral_ip_address, g_ue_ral_obj[mod_id].ral_listening_port, g_ue_ral_obj[mod_id].mihf_ip_address, g_ue_ral_obj[mod_id].mihf_remote_port); break; } /* * We failed to connect: * Close the socket file descriptor and try to connect to an other * address. */ close(g_ue_ral_obj[mod_id].mih_sock_desc); } /* * Unable to connect to a network address */ if (rp == NULL) { LOG_E(RAL_UE, " Could not connect to MIH-F\n"); return -1; } freeaddrinfo(addr); return 0; }