亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产日韩欧美电影| 91精品午夜视频| 亚洲色图欧美在线| av中文字幕不卡| 一区二区三区不卡视频| 欧美日免费三级在线| 日韩精品欧美成人高清一区二区| 在线不卡一区二区| 精品一区二区三区免费毛片爱| 亚洲精品一区二区在线观看| 成人午夜电影网站| 亚洲综合精品自拍| 日韩欧美一区在线| 成人a级免费电影| 亚洲成人中文在线| 精品人在线二区三区| 成人高清视频免费观看| 亚洲精品一卡二卡| 日韩精品中文字幕一区二区三区| 国内成人精品2018免费看| 国产精品家庭影院| 欧美日韩国产综合一区二区 | 七七婷婷婷婷精品国产| 国产丝袜美腿一区二区三区| 色综合天天综合网天天狠天天 | 亚洲综合免费观看高清完整版 | 亚洲一区二区三区四区在线| 欧美一级国产精品| 成人av免费在线播放| 日韩精品电影一区亚洲| 亚洲欧洲另类国产综合| 7777精品伊人久久久大香线蕉最新版| 国产成人小视频| 视频一区二区三区入口| 欧美激情一区二区| 欧美一区二区三区视频在线| 99精品久久只有精品| 久久99精品久久久久久久久久久久| 中文字幕亚洲综合久久菠萝蜜| 欧美一区二区三区四区高清| 99综合电影在线视频| 精品无人区卡一卡二卡三乱码免费卡| 亚洲人午夜精品天堂一二香蕉| 日韩精品一区二区在线| 精品视频在线免费看| 粉嫩嫩av羞羞动漫久久久| 久久精品二区亚洲w码| 亚洲图片一区二区| 国产精品日产欧美久久久久| 日韩欧美色综合网站| 欧美午夜电影在线播放| 91视频观看免费| 国产91精品一区二区麻豆亚洲| 日韩和欧美一区二区| 亚洲制服丝袜在线| 亚洲欧洲综合另类在线| 国产精品激情偷乱一区二区∴| 精品奇米国产一区二区三区| 91精品国产乱| 欧美浪妇xxxx高跟鞋交| 在线观看欧美日本| 色欧美日韩亚洲| 91美女视频网站| 成人毛片在线观看| 成a人片亚洲日本久久| 国产成人精品亚洲日本在线桃色 | 美女尤物国产一区| 天堂一区二区在线| 亚洲午夜在线观看视频在线| 《视频一区视频二区| 国产精品丝袜91| 欧美激情在线观看视频免费| 国产人伦精品一区二区| 国产精品乱码一区二三区小蝌蚪| 国产亚洲午夜高清国产拍精品| 精品国产制服丝袜高跟| 国产女人18毛片水真多成人如厕 | 五月婷婷久久丁香| 午夜精品视频在线观看| 亚洲成av人综合在线观看| 亚洲国产精品久久人人爱蜜臀| 一区二区三区成人在线视频| 亚洲国产日韩在线一区模特| 五月天一区二区| 日韩国产一区二| 看电视剧不卡顿的网站| 久久国产生活片100| 精品一区二区三区不卡| 国产在线视频一区二区三区| 国产成人久久精品77777最新版本| 成人小视频免费观看| 日本韩国精品一区二区在线观看| 欧美三日本三级三级在线播放| 欧美日韩电影一区| 久久婷婷一区二区三区| 欧美激情一区二区三区全黄| 1024国产精品| 日韩电影网1区2区| 国产二区国产一区在线观看| 99视频一区二区| 欧美喷潮久久久xxxxx| 久久亚洲捆绑美女| 综合在线观看色| 偷拍亚洲欧洲综合| 国产精品亚洲专一区二区三区| 波多野结衣亚洲一区| 欧美亚洲愉拍一区二区| 日韩精品中文字幕在线不卡尤物| 中日韩av电影| 午夜日韩在线电影| 国产不卡免费视频| 欧美色图免费看| 久久免费视频一区| 一区二区三区日韩| 另类小说色综合网站| 91女人视频在线观看| 日韩视频在线一区二区| 国产精品毛片久久久久久久| 亚洲中国最大av网站| 国产成人综合在线| 欧美日本在线观看| 中文在线一区二区| 丝袜亚洲另类丝袜在线| 福利视频网站一区二区三区| 欧美军同video69gay| 亚洲欧洲一区二区三区| 理论片日本一区| 欧美性生交片4| 国产精品福利av| 麻豆精品在线看| 欧美在线观看你懂的| 国产欧美1区2区3区| 热久久久久久久| 欧美四级电影在线观看| 亚洲欧洲日产国产综合网| 不卡欧美aaaaa| 久久综合狠狠综合| 亚洲1区2区3区4区| 91蜜桃免费观看视频| 久久精品人人做人人综合| 日韩激情在线观看| 色视频欧美一区二区三区| 中文字幕av一区二区三区免费看 | 亚洲国产成人porn| 99久久精品久久久久久清纯| 精品久久人人做人人爱| 亚洲午夜精品17c| 91一区二区三区在线播放| 久久综合久久99| 麻豆精品精品国产自在97香蕉| 欧美午夜一区二区| 亚洲人123区| 91丨九色丨蝌蚪富婆spa| 久久婷婷国产综合国色天香| 日韩影院精彩在线| 56国语精品自产拍在线观看| 亚洲精品videosex极品| 一本一道波多野结衣一区二区| 日本一区二区三区高清不卡| 国产一区二区三区在线观看免费 | 日韩欧美中文字幕制服| 日本视频免费一区| 91精品视频网| 日本sm残虐另类| 欧美精品久久久久久久久老牛影院| 亚洲激情图片小说视频| 在线精品视频一区二区三四| 亚洲综合小说图片| 欧美人狂配大交3d怪物一区| 亚洲第一会所有码转帖| 在线成人免费观看| 奇米一区二区三区| 26uuu久久天堂性欧美| 蜜桃视频第一区免费观看| 日韩一区二区免费电影| 国产一区二区h| 国产日韩一级二级三级| 高清shemale亚洲人妖| 国产精品三级av在线播放| 风间由美中文字幕在线看视频国产欧美| 久久久国产精品午夜一区ai换脸| 国产乱码精品一区二区三| 国产精品久久久久久户外露出| av亚洲精华国产精华精华| 亚洲精品国产精华液| 欧美天天综合网| 久久国产福利国产秒拍| 久久在线免费观看| 91免费在线视频观看| 亚洲成人午夜影院| 日韩精品中文字幕在线不卡尤物 | 久久激情五月婷婷| 久久久国产精品麻豆| av一二三不卡影片| 五月天婷婷综合| 2017欧美狠狠色| 91免费国产在线| 久久精品99国产国产精| 国产精品成人午夜| 欧美吞精做爰啪啪高潮|