亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? timer_queue.c

?? 一種AODV實現方法
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*               Kernel AODV  v2.0National Institute of Standards and Technology               Luke Klein-Berndt-----------------------------------------------------  Version 2.0 new features:     * Updated to AODV draft version 11     * Managed internet gatewaying     * Monitor wireles signal strength     * Many bug fixes!-----------------------------------------------------Originally based upon MadHoc code. I am notsure how much of it is left anymore, but MadHocproved to be a great starting point.MadHoc was written by - Fredrik Lilieblad,Oskar Mattsson, Petra Nylund, Dan Ouchterlonyand Anders Roxenhag Mail: mad-hoc@flyinglinux.netThis software is Open Source under the GNU General Public Licence.*/#include "timer_queue.h"/****************************************************   timer_queue----------------------------------------------------A queue of timed events****************************************************/struct timer_queue_entry *timer_queue=NULL;extern struct route_table_entry *g_my_entry;extern u_int32_t g_broadcast_ip;extern u_int32_t g_my_ip;/****************************************************   read_timer_queue_proc----------------------------------------------------Prints out the current queue into a buffer whenever the proc file its read****************************************************/int read_timer_queue_proc(char *buffer, char **buffer_location, off_t offset, int buffer_length,int *eof,void *data){    struct timer_queue_entry *tmp;u_int64_t remainder, numerator;    u_int64_t tmp_time;    int len;    static char *my_buffer;    char temp_buffer[80];    my_buffer=buffer;    sprintf(my_buffer,"\nTimer Queue\n---------------------------------\n");    tmp = timer_queue;    while (tmp != NULL)    {        tmp_time=tmp->tv-getcurrtime();	//This is a fix for an error that occurs on ARM Linux Kernels because they do 64bits differently	//Thanks to S. Peter Li for coming up with this fix!	numerator = (tmp_time);	remainder = do_div( numerator, 1000 );	sprintf(temp_buffer,"sec/msec: %lu/%lu\t id:%s\t retries: %u\t ttl: %u\t Type: %d\n", (unsigned long)numerator, (unsigned long)remainder, inet_ntoa(tmp->id), tmp->retries, tmp->ttl,tmp->flags);	strcat(my_buffer,temp_buffer);        tmp = tmp->next;    }    sprintf(temp_buffer,"\n---------------------------------\n");    strcat(my_buffer,temp_buffer);    len = strlen(my_buffer);    if (len <= offset+buffer_length) *eof = 1;    *buffer_location = my_buffer + offset;    len -= offset;    if (len>buffer_length) len = buffer_length;    if (len<0) len = 0;    return len;}/****************************************************   print_timer----------------------------------------------------prints the contents of the timer queue to theconsole screen****************************************************/void print_timer_queue(){    struct timer_queue_entry *tmp;    u_int64_t tmp_time;	u_int64_t remainder, numerator;    tmp = timer_queue;    while (tmp != NULL)    {        tmp_time=tmp->tv-getcurrtime();	//This is a fix for an error that occurs on ARM Linux Kernels because they do 64bits differently	//Thanks to S. Peter Li for coming up with this fix!	numerator = tmp_time;	remainder = do_div( numerator, 1000 );	printk("sec/msec: %lu/%lu id:%lu size: %d retries: %u ttl: %u\n", (unsigned long)numerator, (unsigned long)remainder, (unsigned long)tmp->id, tmp->size, tmp->retries, tmp->ttl);        tmp = tmp->next;    }}/****************************************************   timer_rreq----------------------------------------------------Handles the resendinf of RREQ if a routereply is not recieved in a certian amount of time****************************************************/int timer_rreq(struct timer_queue_entry *tmp_entry){    struct route_table_entry *tmp_route;    struct rreq *tmp_rreq;    u_int64_t currtime;    tmp_rreq=tmp_entry->data;#ifdef TRACE    printk("TIMER_QUEUE: Timer RREQ entered \n");#endif    /* Check how may time we have sent it already */    if (tmp_entry->retries >= RREQ_RETRIES)    {        /* Sent it maximum times */#ifdef TRACE        printk("TIMER_QUEUE: Timer RREQ exiting...  retries used up! \n");#endif        ipq_drop_ip(tmp_rreq->dst_ip);        kfree(tmp_entry->data);        /* Return error */        return 1;    }    else    {        /* Increment nr of retries */        tmp_entry->retries++;        /* Check new TTL */        if (tmp_entry->ttl > TTL_THRESHOLD)            tmp_entry->ttl = NET_DIAMETER;        else            tmp_entry->ttl += TTL_INCREMENT;        tmp_route = (find_interface_by_ip(tmp_rreq->src_ip))->route_entry;        (tmp_route->rreq_id)++;        if (insert_rreq_id_queue_entry(tmp_rreq->src_ip, tmp_rreq->dst_ip,tmp_route->rreq_id,getcurrtime() + tmp_entry->ttl * 2 * NODE_TRAVERSAL_TIME) == 1)            /* Couldn't add to broadcast list */            return 1;        /* Send packet again */        local_broadcast( tmp_entry->ttl,tmp_rreq, tmp_entry->size);        /* Set a new timer */        currtime = getcurrtime();        insert_timer_queue_entry(currtime + NET_TRAVERSAL_TIME, tmp_rreq,tmp_entry->size,tmp_rreq->dst_ip,tmp_entry->retries,tmp_entry->ttl, EVENT_RREQ);#ifdef TRACE        printk("TIMER_QUEUE: Timer RREQ all done! \n");#endif    }    return 0;}void timer_neighbor(struct timer_queue_entry *timer_entry){    struct neighbor_list_entry  *tmp_entry;    struct route_table_entry *tmp_route;    tmp_entry = find_neighbor_list_entry(timer_entry->id);    if (tmp_entry!=NULL)    {        tmp_route=find_route_table_entry(tmp_entry->ip);        if (tmp_route!=NULL)        {#ifdef TRACE            printk("TIMER_QUEUE: The link to Neighbor: %s \n",inet_ntoa(tmp_entry->ip));#endif            //link_break(tmp_entry->ip);  we can't delete it directly because that would trigger an error because you are making changes to the route table on an interupt!!!            tmp_route->lifetime=0;            insert_event_queue_entry(g_my_ip,g_my_ip,NULL,NULL,EVENT_CLEANUP,0,NULL,0);            delete_neighbor_list_entry(tmp_entry->ip);        }    }}/****************************************************   hello_resend----------------------------------------------------Handles the resending of the Hello message andalso places the hello message back on thequeue so it will be called again****************************************************/int hello_resend(struct timer_queue_entry *tmp_entry){    struct rrep *tmp_rrep;    struct interface_list_entry *tmp_interface;    u_int64_t curr_time=getcurrtime();    u_int16_t random_number;    tmp_rrep=tmp_entry->data;    // we want to update the stats once every hello period    if (g_my_ip==tmp_rrep->dst_ip)        get_wireless_stats();#ifdef TRACE    printk("TIMER: Hello RESEND!\n");#endif    tmp_interface=find_interface_by_ip(tmp_rrep->dst_ip);    if (tmp_interface==NULL)    {#ifndef NO_ERROR        printk("HELLO_RESEND: error retrieveing interface\n");#endif        return 0;    }    tmp_rrep->dst_seq = htonl(tmp_interface->route_entry->dst_seq);    local_broadcast(1,tmp_rrep, sizeof(struct rrep));    get_random_bytes(&random_number,sizeof(u_int16_t));    random_number=random_number%20;    tmp_interface->last_hello=curr_time;    insert_timer_queue_entry(tmp_entry->tv + HELLO_INTERVAL-random_number, tmp_rrep,tmp_entry->size,tmp_rrep->dst_ip,tmp_entry->retries,tmp_entry->ttl, EVENT_HELLO);#ifdef TRACE    printk("TIMER: Hello RESEND! - all done!\n");#endif    return 0;}/****************************************************   timer_cleanup----------------------------------------------------Gets rid of everything in the timer queue.Should be called before you shutdown the module****************************************************/void timer_cleanup(){#ifdef TRACE    printk("timer cleanup entered!\n");#endif    insert_event_queue_entry(g_my_ip,g_my_ip,NULL,NULL,EVENT_CLEANUP,0,NULL,0);    insert_timer_queue_entry(getcurrtime() + ACTIVE_ROUTE_TIMEOUT, NULL,0,g_my_ip,0,0, EVENT_CLEANUP);#ifdef TRACE    printk("timer cleanup exited!\n");#endif}/****************************************************   init_timer_queue----------------------------------------------------Initalizes the timer queue... duh!****************************************************/int init_timer_queue(){    init_timer(&aodv_timer);    timer_queue=NULL;    return 0;}/****************************************************   update_timer_queue----------------------------------------------------Sets the  system alarm for the first event in thetimer queue****************************************************/static unsigned long tvtojiffies(struct timeval *value){    unsigned long sec = (unsigned) value->tv_sec;    unsigned long usec = (unsigned) value->tv_usec;u_int64_t numerator, numerator1;	//This is a fix for an error that occurs on ARM Linux Kernels because they do 64bits differently	//Thanks to S. Peter Li for coming up with this fix!    numerator = ULONG_MAX;    do_div( numerator, HZ );    if (sec > (unsigned long) numerator)        return ULONG_MAX;    numerator = 1000000;    do_div( numerator, HZ );    usec += numerator - 1;    numerator1 = usec;    do_div( numerator1,  numerator );    usec = numerator1;    return HZ*sec+usec;}void update_timer_queue(){    struct timeval delay_time;    u_int64_t currtime;    u_int64_t tv;u_int64_t remainder, numerator;    delay_time.tv_sec = 0;    delay_time.tv_usec = 0;#ifdef TRACE    printk("PQ_UPDATETIMER: entered\n");#endif    if (timer_queue == NULL)    {        // No event to set timer for        delay_time.tv_sec = 0;        delay_time.tv_usec = 0;    }    else    {        //* Get the first time value        tv = timer_queue->tv;        currtime = getcurrtime();        if (tv <= currtime)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区在线不卡| 不卡免费追剧大全电视剧网站| 亚洲一区二区三区激情| 日韩国产欧美在线播放| 国产69精品久久久久毛片| 色诱视频网站一区| 欧美激情一区二区三区| 午夜av一区二区三区| 九色综合狠狠综合久久| 欧美亚洲国产怡红院影院| 久久众筹精品私拍模特| 亚洲成人精品影院| 不卡一区二区中文字幕| 91麻豆精品国产91久久久更新时间| 国产欧美精品区一区二区三区| 亚洲免费观看高清完整版在线观看 | 欧美性色黄大片手机版| 久久综合九色综合97_久久久 | 91影院在线免费观看| 欧美一区二区三区免费大片| 亚洲三级在线播放| 成人午夜看片网址| 亚洲精品在线免费播放| 天天色天天操综合| 欧美精品vⅰdeose4hd| 亚洲欧美二区三区| 91免费在线播放| 亚洲丝袜美腿综合| 成人av在线播放网址| 久久久久久久久久久久电影| 精品在线你懂的| 宅男噜噜噜66一区二区66| 亚洲女同女同女同女同女同69| 免费日本视频一区| 欧美丝袜第三区| 亚洲三级在线免费观看| 国产91精品露脸国语对白| 国产欧美日韩精品一区| 国产乱码精品一区二区三区忘忧草 | 亚洲第一电影网| 欧美综合在线视频| 亚洲精品乱码久久久久久黑人| 成人av午夜影院| 精品99一区二区三区| 狠狠色丁香久久婷婷综合丁香| 欧美日韩一区二区在线观看 | 久久久99精品久久| 国产一区二区三区日韩| 久久久精品蜜桃| 99久久久久久99| 亚洲精品成人精品456| 97久久精品人人澡人人爽| 亚洲精品视频一区二区| 99精品桃花视频在线观看| 亚洲人精品午夜| 欧美丝袜第三区| 天堂av在线一区| 日韩女同互慰一区二区| 极品尤物av久久免费看| 久久久久久97三级| 不卡的av中国片| 亚洲精品成人在线| 在线播放一区二区三区| 卡一卡二国产精品| 日本一区二区三级电影在线观看 | 欧美精品 国产精品| 午夜伊人狠狠久久| 欧美不卡视频一区| 国产一二三精品| 综合久久久久久久| 欧美色区777第一页| 久久成人精品无人区| 久久久久久免费网| 色婷婷综合久久久久中文| 自拍偷在线精品自拍偷无码专区| 色综合色综合色综合色综合色综合| 一区二区三区在线播| 欧美放荡的少妇| 一区二区三区四区亚洲| 日韩欧美另类在线| 成人污污视频在线观看| 午夜精品久久久久久久99水蜜桃| 久久亚洲免费视频| 欧美午夜精品久久久久久孕妇| 久久99久久久久| 国产精品美女www爽爽爽| 欧美精品久久久久久久多人混战 | 777午夜精品免费视频| 国产做a爰片久久毛片| 亚洲永久精品大片| 国产精品三级视频| 国产三级欧美三级日产三级99| 欧美色图12p| 91精品福利视频| 91在线精品一区二区| 国产成人精品综合在线观看| 蜜臀精品久久久久久蜜臀| 亚洲一区二区三区免费视频| 亚洲三级电影全部在线观看高清| 国产网红主播福利一区二区| xnxx国产精品| 精品蜜桃在线看| 91精品国产欧美日韩| 欧美这里有精品| 在线中文字幕一区二区| 色婷婷久久综合| 色老汉av一区二区三区| 成人动漫一区二区在线| 国产福利一区二区三区在线视频| 蜜芽一区二区三区| 日本亚洲三级在线| 玖玖九九国产精品| 蜜桃av一区二区三区电影| 天堂成人国产精品一区| 免费人成精品欧美精品| 青青草原综合久久大伊人精品| 亚洲制服丝袜av| 亚洲成av人影院| 日本欧美韩国一区三区| 日本午夜精品一区二区三区电影| 日本系列欧美系列| 久久精品免费观看| 国产精品66部| 成人激情免费网站| 色呦呦一区二区三区| 欧美在线看片a免费观看| 欧美日韩精品电影| 8x8x8国产精品| 国产亚洲精品bt天堂精选| 国产精品福利一区二区三区| 亚洲色图19p| 日本成人超碰在线观看| 精品一区二区三区在线观看| 国产高清不卡二三区| 一本色道**综合亚洲精品蜜桃冫| 91官网在线免费观看| 91精品国产欧美日韩| 久久久不卡网国产精品二区| 中文字幕一区二区三区四区 | 麻豆成人在线观看| 成人高清视频在线| 欧美在线视频你懂得| 在线播放日韩导航| 久久久影院官网| 亚洲一二三区不卡| 国产麻豆日韩欧美久久| 在线观看国产91| 精品久久久久久最新网址| 亚洲丝袜自拍清纯另类| 肉色丝袜一区二区| www.亚洲激情.com| 日韩一级免费一区| 亚洲精品免费在线播放| 精品一区二区精品| 欧洲一区二区三区在线| 欧美va在线播放| 一区二区在线看| 国产成人精品一区二区三区四区 | 国产精品欧美综合在线| 日韩精品每日更新| 91蝌蚪porny成人天涯| 欧美一级片在线观看| 亚洲三级久久久| 国产精品亚洲午夜一区二区三区| 在线免费观看日本欧美| 久久蜜桃av一区二区天堂 | 一区二区三区在线免费| 国产在线国偷精品产拍免费yy| 欧美日韩国产一二三| 国产精品免费视频观看| 激情久久五月天| 欧美日韩国产另类不卡| 亚洲精品久久嫩草网站秘色| 成人精品gif动图一区| 精品成人在线观看| 三级影片在线观看欧美日韩一区二区 | 宅男噜噜噜66一区二区66| 最新国产の精品合集bt伙计| 国产剧情一区二区三区| 欧美精品九九99久久| 亚洲国产精品久久久男人的天堂| 波多野结衣中文字幕一区 | 性做久久久久久| 91欧美一区二区| 国产精品国产自产拍在线| 国产寡妇亲子伦一区二区| 日韩网站在线看片你懂的| 亚洲3atv精品一区二区三区| 色婷婷精品久久二区二区蜜臀av| 日本一区二区高清| 国产成人精品影院| 国产欧美日本一区二区三区| 激情综合一区二区三区| 精品久久久久一区| 精油按摩中文字幕久久| 久久综合九色综合97婷婷 | 亚洲一区二区三区国产| 欧美亚日韩国产aⅴ精品中极品| 亚洲欧美电影院| 日本乱码高清不卡字幕|