Esempio n. 1
0
/*------------------------------------------------------------------------------*/
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);
}
Esempio n. 2
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
}
Esempio n. 3
0
void
oai_shutdown (void) {
    return;

    LOG_N(EMU,
          ">>>>>>>>>>>>>>>>>>>>>>>>>>> OAIEMU shutdown <<<<<<<<<<<<<<<<<<<<<<<<<<\n\n");
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
/*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");
    }
  }

}
Esempio n. 6
0
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;
}
Esempio n. 8
0
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;
}
Esempio n. 9
0
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;
}
Esempio n. 10
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);

}
Esempio n. 11
0
/*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");
    }


  }

}
Esempio n. 12
0
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();
}
Esempio n. 13
0
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);
}
Esempio n. 14
0
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);
}
Esempio n. 15
0
//-----------------------------------------------------------------------------
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;
  }
}
Esempio n. 16
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;
}
Esempio n. 17
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;
}
Esempio n. 18
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;
}
Esempio n. 19
0
/* 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;
        }
Esempio n. 20
0
//-----------------------------------------------------------------------------
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;
}