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

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

?? timer_queue.c

?? 一種AODV實現方法
?? C
?? 第 1 頁 / 共 2 頁
字號:
        {            // If the event has allready happend, set the timeout to              1 microsecond :-)            delay_time.tv_sec = 0;            delay_time.tv_usec = 1;        }        else        {            // Set the timer to the actual seconds / microseconds from now	    //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 = ( tv - currtime );	  remainder = do_div( numerator, 1000 );	    delay_time.tv_sec =  numerator;            delay_time.tv_usec = remainder * 1000;	}    }    if (!timer_pending(&aodv_timer))    {        aodv_timer.function=&timer_queue_signal;        aodv_timer.expires=jiffies + tvtojiffies(&delay_time);        add_timer(&aodv_timer);    }    else    {        mod_timer(&aodv_timer,jiffies + tvtojiffies(&delay_time));    }#ifdef TRACE    printk("PQ_UPDATETIMER: exited\n");#endif    // Set the timer (in real time)    return;}/****************************************************   timer_queue_signal----------------------------------------------------Gets called when the system alarm goes off. Thefunction then pulls the first queued event andacts on it****************************************************/void timer_queue_signal(){    struct timer_queue_entry *tmp_entry;    u_int64_t currtime;#ifdef TRACE    printk("PQ_SIGNAL: entered\n");    print_timer_queue();#endif    // Get the first due entry in the queue /    currtime = getcurrtime();    tmp_entry = find_first_timer_queue_entry_due(currtime);    // While there is still events that has timed out    while (tmp_entry != NULL)    {        switch (tmp_entry->flags)        {        case EVENT_RREQ:            timer_rreq(tmp_entry);            break;        case EVENT_HELLO:            hello_resend(tmp_entry);            break;        case EVENT_CLEANUP:            timer_cleanup();            break;        case EVENT_NEIGHBOR:            timer_neighbor(tmp_entry);            break;        default:            break;        }        // Dequeue the entry so that it will not happened again        delete_timer_queue_entry(tmp_entry);        // Get new time and check for more timedout entrys        currtime = getcurrtime();        tmp_entry = find_first_timer_queue_entry_due(currtime);    }    update_timer_queue();#ifdef TRACE    print_timer_queue();#endif #ifdef TRACE    printk("PQ_SIGNAL: exited\n");#endif}/****************************************************   insert_timer_queue_entry----------------------------------------------------Insert an event into the queue. Also allocatesenough room for the data and copies that too****************************************************/int insert_timer_queue_entry(u_int64_t msec,void *data,int size,u_int32_t id,u_int16_t retries,u_int8_t ttl,unsigned char flags){    struct timer_queue_entry *prev_entry;    struct timer_queue_entry *tmp_entry;    struct timer_queue_entry *new_entry;#ifdef TRACE    printk("TIMER_QUEUE: Insert Timer Queue Entry entered \n");#endif    // get memory    if ((new_entry = kmalloc(sizeof(struct timer_queue_entry), GFP_ATOMIC)) == NULL)    {#ifndef NO_ERROR        printk("TIMER: Error allocating timer!\n");#endif        return 1;    }    // copy data    new_entry->tv = msec;    new_entry->id = id;    new_entry->flags = flags;    new_entry->retries=retries;    new_entry->ttl=ttl;    new_entry->size=size;    new_entry->data=data;#ifdef TRACE    printk("TIMER_QUEUE: Finished allocating and creating \n");#endif    prev_entry=NULL;    tmp_entry=timer_queue;    while (tmp_entry!=NULL && new_entry->tv > tmp_entry ->tv)    {        prev_entry=tmp_entry;        tmp_entry=tmp_entry->next;    }    if (timer_queue==tmp_entry)  // If queue is empty!    {        new_entry->next=timer_queue;        timer_queue=new_entry;    }    else    {        if (tmp_entry==NULL)  // If at the end of the List        {            new_entry->next=NULL;            prev_entry->next=new_entry;        }        else     // Inserting in to the middle of the list somewhere        {            new_entry->next=prev_entry->next;            prev_entry->next=new_entry;        }    }    // Update the timer to reflect the new situation    //    update_timer_queue();#ifdef TRACE    printk("TIMER_QUEUE: exited\n");#endif    return 0;}/****************************************************   find_first_timer_queue_entry----------------------------------------------------Returns the first entry in the timer queue****************************************************/struct timer_queue_entry *find_first_timer_queue_entry(){#ifdef TRACE    printk("TIMER_QUEUE: Found first timer queue \n");#endif    return timer_queue;}/****************************************************   find_first_timer_queue_entry_of_id----------------------------------------------------Returns the first timer queue entry with a matchingID****************************************************/struct timer_queue_entry * find_first_timer_queue_entry_of_id(u_int32_t id){    struct timer_queue_entry *tmp_entry;    tmp_entry=timer_queue;    while (tmp_entry != NULL && tmp_entry->id != id)        tmp_entry=tmp_entry->next;    return tmp_entry;}/****************************************************   find_first_timer_queue_entry_of_id_and_flag----------------------------------------------------Returns the first timer queue entry with a matchingID and flag****************************************************/struct timer_queue_entry * find_first_timer_queue_entry_of_id_and_flag(u_int32_t id, unsigned char flags){    struct timer_queue_entry *tmp_entry;    tmp_entry=timer_queue;    while (tmp_entry != NULL && tmp_entry->id != id && tmp_entry->flags!=flags)        tmp_entry=tmp_entry->next;    return tmp_entry;}/****************************************************   delete_timer_queue_entry_of_id----------------------------------------------------Deletes the first entry with a matching id****************************************************/void delete_timer_queue_entry_of_id(u_int32_t id, unsigned char flags){    struct timer_queue_entry *tmp_entry;    struct timer_queue_entry *prev_entry;    struct timer_queue_entry *dead_entry;    tmp_entry=timer_queue;    prev_entry=NULL;    while (tmp_entry != NULL)    {        if (tmp_entry->id == id && tmp_entry->flags == flags)        {            if (prev_entry==NULL)                timer_queue=tmp_entry->next;            else                prev_entry->next=tmp_entry->next;            dead_entry=tmp_entry;            tmp_entry=tmp_entry->next;            kfree(dead_entry->data);            kfree(dead_entry);        }        else        {            prev_entry=tmp_entry;            tmp_entry=tmp_entry->next;        }    }    update_timer_queue();}/****************************************************   delete_timer_queue_entry----------------------------------------------------Deletes the entry from the timer queue. Youhave to do this so the linked list is not broken****************************************************/int delete_timer_queue_entry(struct timer_queue_entry *dead_entry){    struct timer_queue_entry *tmp_entry;    struct timer_queue_entry *prev_entry;    /* Is first element */    tmp_entry=timer_queue;    prev_entry=NULL;    while (tmp_entry!=NULL && tmp_entry!=dead_entry)    {        prev_entry=tmp_entry;        tmp_entry=tmp_entry->next;    }    if (tmp_entry==NULL)        return 1;    if (prev_entry==NULL)        timer_queue=tmp_entry->next;    else        prev_entry->next=tmp_entry->next;    //kfree(tmp_entry->data);    kfree(tmp_entry);    //update_timer_queue();    return 0;}/****************************************************   remove_first_timer_queue_entry----------------------------------------------------Removes the first timer queue entry****************************************************/void remove_first_timer_queue_entry(){    struct timer_queue_entry *dead_entry;    if (timer_queue!=NULL)    {        dead_entry=timer_queue;        timer_queue=timer_queue->next;        kfree(dead_entry);    }}/****************************************************   find_first_timer_queue_entry_due----------------------------------------------------Returns the first entry in the queue that has a timethat is lower than the argument ie. the first elementif the argument is greater than its tv value.****************************************************/struct timer_queue_entry *find_first_timer_queue_entry_due(u_int64_t tv){    if (timer_queue != NULL)    {        /* If pqe's time is in teh interval */        if ((timer_queue->tv) < tv)            return timer_queue;    }    return NULL;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人福利视频网站| 91精品欧美福利在线观看| 欧美日韩综合在线免费观看| 欧美sm美女调教| 亚洲一区二区美女| 91麻豆免费看| 中文一区一区三区高中清不卡| 日本三级亚洲精品| 在线精品视频免费播放| 中文字幕亚洲综合久久菠萝蜜| 精品在线播放午夜| 欧美刺激午夜性久久久久久久| 亚洲va中文字幕| 欧美图区在线视频| 亚洲欧美在线aaa| 成人免费三级在线| 久久久午夜精品理论片中文字幕| 免费观看久久久4p| 日韩一级片在线观看| 天天影视涩香欲综合网| 欧美日韩aaaaaa| 视频精品一区二区| 56国语精品自产拍在线观看| 性久久久久久久久| 欧美精品免费视频| 五月天一区二区| 欧美日韩国产小视频在线观看| 亚洲午夜一区二区| 欧美日韩日日夜夜| 日本人妖一区二区| 精品国产精品一区二区夜夜嗨| 日本欧美一区二区| 精品国产区一区| 国产精品 欧美精品| 国产精品久久久久久久久久久免费看| 不卡免费追剧大全电视剧网站| 欧美国产在线观看| 99re亚洲国产精品| 亚洲专区一二三| 在线电影欧美成精品| 美国十次综合导航| 久久久久久免费网| 色综合视频在线观看| 亚洲一区二区在线观看视频| 欧美福利视频一区| 国产精品中文字幕日韩精品| 国产精品人成在线观看免费| 91玉足脚交白嫩脚丫在线播放| 亚洲精品国产一区二区三区四区在线 | 日韩丝袜美女视频| 精品一区二区精品| 国产精品久久综合| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 亚洲国产精品成人综合| 99久久婷婷国产精品综合| 亚洲一区二区三区四区在线观看 | 亚洲欧美一区二区三区久本道91 | 日韩精品欧美成人高清一区二区| 日韩精品专区在线影院重磅| 国产福利一区二区三区视频在线| 亚洲美女在线国产| 精品国产免费人成在线观看| 成人福利视频网站| 免费成人美女在线观看| 国产精品对白交换视频 | 中文字幕二三区不卡| 欧美亚男人的天堂| 国产精品1024久久| 三级精品在线观看| 国产精品久久久久影院老司 | 久久电影国产免费久久电影| 国产色产综合色产在线视频| 91福利国产成人精品照片| 捆绑调教美女网站视频一区| 亚洲精品久久久蜜桃| 久久精品亚洲乱码伦伦中文| 欧美色精品天天在线观看视频| 国产成人av一区二区三区在线 | 欧美精品一二三| 国产成人精品亚洲午夜麻豆| 日韩国产精品91| 一区二区三区国产| 久久精品一区二区三区不卡| 91精品国产91热久久久做人人| 99国产精品久久久久久久久久久| 国产在线观看一区二区| 日韩av一区二区在线影视| 亚洲女人的天堂| 国产精品午夜电影| 久久综合精品国产一区二区三区| 欧美疯狂做受xxxx富婆| 91国偷自产一区二区三区观看| 波多野结衣的一区二区三区| 国产馆精品极品| 精品一区二区三区在线视频| 人禽交欧美网站| 亚洲大片在线观看| 亚洲第一久久影院| 亚洲综合色自拍一区| 亚洲欧洲日韩一区二区三区| 国产精品私人影院| 国产欧美精品一区二区三区四区| 久久综合久久鬼色| 精品国产乱码久久久久久牛牛| 日韩视频在线一区二区| 欧美一级高清大全免费观看| 欧美精品 国产精品| 欧美精品一卡两卡| 欧美日韩一区二区三区四区五区| 91成人国产精品| 精品视频一区二区不卡| 欧美日精品一区视频| 欧美日本免费一区二区三区| 欧美色图第一页| 884aa四虎影成人精品一区| 欧美乱熟臀69xxxxxx| 欧美理论在线播放| 日韩视频免费观看高清完整版在线观看 | 久久国产精品一区二区| 久久99国产精品成人| 久久99精品国产.久久久久久| 免费高清在线视频一区·| 激情六月婷婷综合| 高清beeg欧美| 一本久久a久久精品亚洲| 欧美羞羞免费网站| 欧美一区二区三区公司| 欧美精品一区二区三区在线播放| 久久久久久一级片| 综合久久久久综合| 亚洲成人一二三| 九九热在线视频观看这里只有精品| 国精产品一区一区三区mba视频| 国产成人精品1024| 在线观看一区日韩| 日韩精品一区二区三区swag| 国产视频亚洲色图| 一区二区三区不卡在线观看| 日本欧美大码aⅴ在线播放| 国产在线一区二区综合免费视频| 国产91对白在线观看九色| 91美女片黄在线| 91麻豆精品国产综合久久久久久| 久久久久久久免费视频了| 亚洲视频每日更新| 日韩国产欧美在线视频| 成人综合婷婷国产精品久久免费| 欧美亚州韩日在线看免费版国语版| 日韩一区二区三区电影 | 久久午夜羞羞影院免费观看| 亚洲欧洲国产日韩| 日本亚洲电影天堂| 91色porny在线视频| 欧美一区二区美女| 亚洲人成亚洲人成在线观看图片| 日韩专区在线视频| 99久久777色| 久久蜜桃香蕉精品一区二区三区| 18涩涩午夜精品.www| 美女网站色91| 日本韩国视频一区二区| 国产亚洲综合av| 蜜桃视频在线观看一区二区| a4yy欧美一区二区三区| 亚洲精品在线一区二区| 亚洲电影你懂得| 高清不卡在线观看| 日韩精品一区二区在线| 亚洲国产成人精品视频| 99久久免费国产| 久久精品水蜜桃av综合天堂| 亚洲高清免费一级二级三级| voyeur盗摄精品| 国产免费久久精品| 激情综合色播激情啊| 欧美一级电影网站| 午夜精品福利视频网站| 欧洲av一区二区嗯嗯嗯啊| 国产精品久久精品日日| 国产精品1区2区| 欧美电影免费观看完整版| 天涯成人国产亚洲精品一区av| 91久久香蕉国产日韩欧美9色| 国产精品免费av| 福利一区福利二区| 欧美激情一区二区在线| 国产一区二区久久| 久久久久久久久久看片| 激情文学综合丁香| 亚洲精品一区二区三区四区高清 | a级高清视频欧美日韩| 国产精品免费久久| 成人精品视频一区二区三区尤物| 日韩欧美在线观看一区二区三区| 日韩精品五月天| 日韩一级大片在线| 久久91精品久久久久久秒播| 日韩女同互慰一区二区| 国产揄拍国内精品对白| 国产性天天综合网|