Beispiel #1
0
int insert_timer_directional(u_int8_t task_type, u_int64_t delay,
		u_int8_t retries, u_int32_t src_ip, u_int32_t dst_ip, unsigned char tos) {
	task *new_timer = NULL;

	new_timer = create_task(task_type);

	// get memory
	if (!(new_timer)) {
		printk("Error allocating timer!\n");
		return -ENOMEM;
	}

	new_timer->src_ip = src_ip;
	new_timer->dst_ip = dst_ip;
	new_timer->tos = tos;

	if (delay != 0)
		new_timer->time = getcurrtime() + delay;

	else if (task_type == TASK_RESEND_RREQ) {
		new_timer->retries = retries;
		new_timer->ttl = 30;
		new_timer->time = getcurrtime() + ((2 ^ (RREQ_RETRIES - retries))
				* NET_TRAVERSAL_TIME);
	} else
		new_timer->time = getcurrtime() + delay;
	queue_timer(new_timer);
	//update_timer_queue();
	return 0;
}
Beispiel #2
0
void  polltimer_periodic_start(t_polltimer** queue_head,
			       struct polltimer_periodic** periodic,
			       void (*timer_handler)(void*), 
			       int msec,void* param)
{
  *periodic=(t_polltimer_periodic*)
    malloc(sizeof(t_polltimer_periodic));
 
  /* base time for this periodic timer */
  clock_gettime(CLOCK_REALTIME,&(*periodic)->ts);

  /* for dumping time stamps */
  if ( starttime == 0 )
    starttime=(*periodic)->ts.tv_sec;

  /* store parameters */
  (*periodic)->queue_head = queue_head;
  (*periodic)->timer_handler = timer_handler;
  (*periodic)->msec = msec;
  (*periodic)->param = param;

  /* set first expiry */
  expire_msec(&(*periodic)->ts,msec);
  
  queue_timer(queue_head,&(*periodic)->ts,periodic_handler,(void*)(*periodic));
}
Beispiel #3
0
static void periodic_handler(void* param)
{
  t_polltimer_periodic* periodic = (t_polltimer_periodic*) param;

  /* call callback function */
  (periodic->timer_handler) ( periodic->param );

  /* set next expiry */
  expire_msec(&periodic->ts,periodic->msec);

  /* queue next */
  queue_timer(periodic->queue_head,
	      &periodic->ts,
	      periodic_handler,
	      (void*)periodic);
}
Beispiel #4
0
t_polltimer* polltimer_start(t_polltimer** queue_head,
			     void (*timer_handler)(void *), 
			     int msec,void* param)
{
  struct timespec ts;
 
  /* calculate abs. time of expiry */
  clock_gettime(CLOCK_REALTIME,&ts);

  /* for dumping time stamps */
  if ( starttime == 0 )
    starttime=ts.tv_sec;

  expire_msec(&ts,msec);

  return queue_timer(queue_head,&ts,timer_handler,param);
}
Beispiel #5
0
int insert_timer_simple(u_int8_t task_type, u_int64_t delay, u_int32_t ip) {
	task *new_entry;

	new_entry = create_task(task_type);

	// get memory
	if (new_entry == NULL) {
		printk("Error allocating timer!\n");
		return -ENOMEM;
	}
	new_entry->src_ip = ip;
	new_entry->dst_ip = ip;
	new_entry->tos = NO_TOS;
	new_entry->time = getcurrtime() + delay;
	queue_timer(new_entry);
	//update_timer_queue();
	return 0;
}