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; }
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)); }
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); }
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); }
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; }