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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rreq.c

?? linux 下的aodv實現(xiàn)源代碼
?? C
字號:
/*               Kernel AODV  v2.1National Institute of Standards and Technology               Luke Klein-Berndt-----------------------------------------------------  Version 2.1 new features:     * Much more stable!     * Added locks around important areas     * Multihop Internet gatewaying now works     * Multicast hack added     * 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 "rreq.h"/****************************************************   rreq----------------------------------------------------Handles the generation of RREQ and recieving****************************************************/extern u_int32_t g_broadcast_ip;extern struct route_table_entry *g_my_entry;extern u_int32_t g_my_ip;void convert_rreq_to_host(struct rreq *tmp_rreq){    tmp_rreq->rreq_id=ntohl(tmp_rreq->rreq_id);    tmp_rreq->dst_seq=ntohl(tmp_rreq->dst_seq);    tmp_rreq->src_seq=ntohl(tmp_rreq->src_seq);}void convert_rreq_to_network(struct rreq *tmp_rreq){    tmp_rreq->rreq_id=htonl(tmp_rreq->rreq_id);    tmp_rreq->dst_seq=htonl(tmp_rreq->dst_seq);    tmp_rreq->src_seq=htonl(tmp_rreq->src_seq);}/****************************************************   recv_rreq----------------------------------------------------Handles the recieving of RREQs****************************************************/int recv_rreq(struct event_queue_entry *working_packet){    struct rreq *working_rreq;    struct interface_list_entry *tmp_interface;    struct rreq       *out_rreq;  /* Forwarded RREQ */    struct route_table_entry   *tmp_entry;       /* Routing table entry */    struct flood_id_queue_entry *tmp_rreq_id;    u_int64_t          current_time;  /* Current time */    int size_out;    /* Update the hop count */    char src_ip[16];    char dst_ip[16];    working_rreq=working_packet->data;    convert_rreq_to_host(working_rreq);    //find what interface the packet was recived on    tmp_interface=find_interface_by_dev(working_packet->dev);    if (tmp_interface==NULL)    {        printk (KERN_WARNING "AODV: Recieved on a RREQ from an unrecognized interface.\n");        return -ENODEV;    }    /* Look in the route request list to see if the node has       already received this request. */    tmp_rreq_id = find_flood_id_queue_entry(working_rreq->src_ip, working_rreq->rreq_id);    /* Check if an entry in the route request list was found, and if it's       still valid. If there is a valid entry, this request shouldn't be       checked. */    if (tmp_rreq_id != NULL)     {        return 0;    }    tmp_entry=find_route_table_entry(working_rreq->src_ip);        if ((tmp_entry!=NULL) && (tmp_entry->next_hop!=working_packet->src_ip))            {	strcpy(src_ip,inet_ntoa(working_rreq->src_ip));	strcpy(dst_ip,inet_ntoa(working_rreq->dst_ip));	//	printk("To: %s src: %s RREQ_ID: %u, expires: %d\n",src_ip,dst_ip,working_rreq->rreq_id,tmp_entry->lifetime-getcurrtime());	return -EHOSTDOWN;      }    /* Have not received this RREQ within BCAST_ID_SAVE time */    /* Add this RREQ to the list for further checks */    current_time = getcurrtime(); /* Get the current time */    if (insert_flood_id_queue_entry(working_rreq->src_ip, working_rreq->dst_ip,working_rreq->rreq_id, current_time + PATH_TRAVERSAL_TIME) == 1)      {        /* Couldn't add the entry, ignore and continue */      }    working_rreq->hop_count=working_rreq->hop_count+1;    /* UPDATE REVERSE */    update_route_entry(working_rreq->src_ip,  working_packet->src_ip, working_rreq->hop_count, working_rreq->src_seq, working_packet->dev);    tmp_entry = find_route_table_entry(working_rreq->dst_ip);    /* Test to see if we should send a RREP AKA we have or are the desired route*/    if ((working_rreq->dst_ip == tmp_interface->ip) || 	(tmp_entry != NULL && tmp_entry->route_valid && tmp_entry->route_seq_valid) )    {      /* The node already had a valid route to the destination */              if (working_rreq->u || seq_less_or_equal(working_rreq->dst_seq,tmp_entry->dst_seq ))	  {	    /*Check to see if only the destination should reply */	                if (!working_rreq->d || (find_interface_by_ip(working_rreq->dst_ip)!=NULL))	      {		                //If the RREQ is addressed to us and we have the same Seq as the RREQ we up our Seq by one                if ((find_interface_by_ip(working_rreq->dst_ip)!=NULL) && (working_rreq->dst_seq>=tmp_entry->dst_seq))		  {                    tmp_entry->dst_seq=working_rreq->dst_seq+1;		  }                strcpy(src_ip,inet_ntoa(working_rreq->src_ip));                strcpy(dst_ip,inet_ntoa(working_rreq->dst_ip));                printk(KERN_INFO "AODV: Generating RREP -  src: %s dst: %s \n",src_ip,dst_ip);                /* Call for gen_rrep to send a Route Reply */                gen_rrep(working_rreq->src_ip,working_rreq->dst_ip,working_packet->src_ip,working_rreq->dst_seq,working_rreq->g);                return 0;            }        }    }#ifdef AODV_GATEWAY    if (!adhoc_subnet_test(working_rreq->dst_ip))      {	printk("Gatewaying for address: %s \n", inet_ntoa( working_rreq->dst_ip ));	if (tmp_entry == NULL)	  {	    tmp_entry = create_route_table_entry();	    /*lock table*/	    if (tmp_entry==NULL) // Thanks to M. Musuvathi for catching this!	      return -ENOMEM;	    tmp_entry->dst_ip = working_rreq->dst_ip;	    tmp_entry->next_hop = g_my_ip;	    tmp_entry->dev= g_my_entry->dev;	    tmp_entry->dst_seq = 1;	    tmp_entry->route_valid = 1;	    tmp_entry->route_seq_valid = 1;	    tmp_entry->rreq_id = 0;	    tmp_entry->hop_count = 20;	    tmp_entry->lifetime = getcurrtime() + 5000;	  }	else	  {	    tmp_entry->dst_seq++;	  }	gen_rrep(working_rreq->src_ip,working_rreq->dst_ip,working_packet->src_ip,working_rreq->dst_seq,0);	return 0;      }#endif    /* The node didn't have a valid route to the destination */    if ((working_packet->ttl) <=1)    {        return -ETIMEDOUT;    }    if ((out_rreq = (struct rreq*) kmalloc(sizeof (struct rreq),GFP_ATOMIC)) == NULL)      {        printk(KERN_WARNING "AODV: Error creating a new RREQ\n");        /* Failed to allocate memory for forwarded RREQ */        return -ENOMEM;    }    size_out=sizeof(struct rreq);    /* Set the RREQ structure */    out_rreq->type = 1;    out_rreq->j = working_rreq->j;    out_rreq->r = working_rreq->r;    out_rreq->g = working_rreq->g;    out_rreq->d = working_rreq->d;    out_rreq->u = working_rreq->u;    out_rreq->reserved = 0;    out_rreq->hop_count = working_rreq->hop_count;    out_rreq->dst_ip = working_rreq->dst_ip;    out_rreq->src_ip = working_rreq->src_ip;    //we want it to be network byte order    out_rreq->src_seq = htonl(working_rreq->src_seq);    out_rreq->rreq_id = htonl(working_rreq->rreq_id);    /* Set the right sequence number */    if (tmp_entry!=NULL)    {        if (seq_greater(working_rreq->dst_seq, tmp_entry->dst_seq))            out_rreq->dst_seq=htonl(working_rreq->dst_seq);        else            out_rreq->dst_seq=htonl(tmp_entry->dst_seq);    }    else        out_rreq->dst_seq = htonl(working_rreq->dst_seq);    /* Call send_datagram to send and forward the RREQ */    local_broadcast(working_packet->ttl-1, out_rreq, sizeof(struct rreq));    kfree(out_rreq);    return 0;}/****************************************************   gen_rreq----------------------------------------------------Generates a RREQ! wahhooo!****************************************************/int gen_rreq(u_int32_t src_ip, u_int32_t dst_ip){    struct route_table_entry *tmp_entry;    struct rreq *out_rreq, *timer_rreq;    u_int8_t  out_ttl;    /* Do not send rreq to the same host again if its already in the timer queue */    if (find_first_timer_queue_entry_of_id_and_flag(dst_ip,EVENT_RREQ) != NULL)        return 0;    /* Allocate memory for the rreq message */    if ((out_rreq = (struct rreq*) kmalloc(sizeof(struct rreq),GFP_ATOMIC)) == NULL)    {        printk(KERN_WARNING "AODV: Can't allocate new rreq\n");        return -ENOMEM;    }    /* Allocate memory for the timer queue position for the rreq */    if ((timer_rreq = kmalloc(sizeof(struct rreq),GFP_ATOMIC))==NULL)    {        printk("AODV: Can't allocate for a new timer queue position\n");	kfree(out_rreq);        /* Couldn't allocate memory */        return -ENOMEM;    }    /* Get routing table entry for destination */    tmp_entry = find_route_table_entry(dst_ip);    if (tmp_entry == NULL)    {        /* Entry does not exist -> set to initial values*/        out_rreq->dst_seq = 0;        out_rreq->u = TRUE;        out_ttl =  TTL_START;    }    else    {        /* Entry does exist -> get value from rt */        out_rreq->dst_seq = htonl(tmp_entry->dst_seq);        if (tmp_entry->route_seq_valid)        {            out_rreq->u=FALSE;        }        else        {            out_rreq->u=TRUE;        }        out_ttl =  tmp_entry->hop_count + TTL_INCREMENT;    }    /* Get routing table entry for source, when this is ourself this one should always exist*/    tmp_entry = (find_interface_by_ip(src_ip))->route_entry;    if (tmp_entry == NULL)    {        printk(KERN_WARNING "AODV: Can't get route to self\n");	kfree(out_rreq);	kfree(timer_rreq);        return -EHOSTUNREACH;    }    /* Get our own sequence number */    (tmp_entry->rreq_id)++;    tmp_entry->dst_seq=tmp_entry->dst_seq+1;    out_rreq->src_seq = htonl(tmp_entry->dst_seq);    out_rreq->rreq_id = htonl(tmp_entry->rreq_id);    /* Fill in the package */    out_rreq->dst_ip = dst_ip;    out_rreq->src_ip = src_ip;    out_rreq->type = 1;    out_rreq->hop_count = htonl(0);    out_rreq->j = 0;    out_rreq->r = 0;    out_rreq->d = 0;    out_rreq->reserved = 0;    out_rreq->second_reserved = 0;    out_rreq->g=1;    /* Get the broadcast address and ttl right */    //    if (insert_flood_id_queue_entry(out_rreq->src_ip, out_rreq->dst_ip,out_rreq->rreq_id, getcurrtime() + 2* out_ttl * NODE_TRAVERSAL_TIME) == 1)    if (insert_flood_id_queue_entry(out_rreq->src_ip, out_rreq->dst_ip,out_rreq->rreq_id, getcurrtime() + 2 * NET_TRAVERSAL_TIME) < 0)    {      kfree(out_rreq);      kfree(timer_rreq);      printk(KERN_WARNING "AODV: Can't add to broadcast list\n");      return -ENOMEM;    }    memcpy(timer_rreq,out_rreq,sizeof(struct rreq));    out_ttl=10;    //    insert_timer_queue_entry(getcurrtime() + NET_TRAVERSAL_TIME,timer_rreq, sizeof(struct rreq),out_rreq->dst_ip,0,out_ttl, EVENT_RREQ);    insert_timer_queue_entry(getcurrtime() + NET_TRAVERSAL_TIME,timer_rreq, sizeof(struct rreq),out_rreq->dst_ip,RREQ_RETRIES,out_ttl, EVENT_RREQ);    update_timer_queue();    //local_broadcast(out_ttl,out_rreq,sizeof(struct rreq));    local_broadcast(10,out_rreq,sizeof(struct rreq));    kfree(out_rreq);    return 0;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区在线免费观看| 国产婷婷精品av在线| 精品一区二区三区免费| 国产精品私房写真福利视频| 欧美精品久久一区二区三区| 99久久久久久99| 久久99久久99小草精品免视看| 亚洲免费看黄网站| 久久天天做天天爱综合色| 一本到一区二区三区| 国产精品伊人色| 日韩国产一二三区| 亚洲你懂的在线视频| 国产欧美日韩激情| 欧美videofree性高清杂交| 欧美艳星brazzers| 97久久精品人人做人人爽50路 | 亚洲免费av在线| 久久久午夜精品| 4438x亚洲最大成人网| 91国偷自产一区二区开放时间| 高清shemale亚洲人妖| 免费观看日韩av| 午夜精品久久久久久| 亚洲美女少妇撒尿| 国产精品天干天干在线综合| 精品区一区二区| 欧美一区二区三区在线| 欧美日韩精品一区二区| 欧洲精品一区二区| 91网页版在线| 91网上在线视频| 91在线视频网址| 91免费版在线| fc2成人免费人成在线观看播放| 国产乱码精品1区2区3区| 久久99深爱久久99精品| 麻豆精品视频在线| 美女免费视频一区二区| 奇米色777欧美一区二区| 日韩一区精品字幕| 婷婷开心激情综合| 日韩电影在线观看电影| 免费在线观看一区二区三区| 另类小说综合欧美亚洲| 美腿丝袜亚洲综合| 精品一区中文字幕| 国产精品一区二区三区网站| 国产伦精品一区二区三区免费迷| 国产酒店精品激情| 国产成人在线视频网站| 不卡的看片网站| 色综合天天综合色综合av| 在线一区二区三区四区五区| 91成人在线免费观看| 欧美日韩国产综合一区二区| 91精品蜜臀在线一区尤物| 欧美成人伊人久久综合网| 久久午夜色播影院免费高清| 国产精品视频第一区| 亚洲精品久久嫩草网站秘色| 调教+趴+乳夹+国产+精品| 蜜桃在线一区二区三区| 国产成人综合自拍| 色一情一伦一子一伦一区| 欧美精品九九99久久| 精品国产三级电影在线观看| 欧美激情中文不卡| 亚洲精选免费视频| 日韩电影在线一区二区三区| 国模大尺度一区二区三区| 不卡的电视剧免费网站有什么| 日本二三区不卡| 欧美一区二区三区色| 久久精品亚洲精品国产欧美| 亚洲人成在线观看一区二区| 日韩av一级电影| 成人永久看片免费视频天堂| 色呦呦日韩精品| 精品国产露脸精彩对白| 亚洲视频 欧洲视频| 免费观看日韩av| 94-欧美-setu| 日韩一级完整毛片| 国产精品久99| 蜜桃免费网站一区二区三区| caoporn国产精品| 欧美一区二区三区在线电影 | 中文字幕一区二区三区av| 日韩国产在线一| 成人黄色av电影| 日韩一区二区免费电影| 亚洲精品视频在线看| 国产一区二区网址| 欧美另类变人与禽xxxxx| 国产精品另类一区| 麻豆久久久久久久| 一本色道久久综合精品竹菊| 精品久久久久一区| 亚洲午夜三级在线| www.欧美日韩国产在线| 精品国产乱码久久久久久影片| 一二三四社区欧美黄| 成人精品gif动图一区| 精品免费视频.| 午夜激情一区二区| 91亚洲午夜精品久久久久久| 久久综合成人精品亚洲另类欧美| 亚洲国产视频a| 成人99免费视频| 久久久久久久久伊人| 日韩成人精品在线观看| 色偷偷久久一区二区三区| 久久久精品国产99久久精品芒果| 亚洲v中文字幕| 一本大道av一区二区在线播放| 日本一区二区成人| 国产一区二区三区国产| 欧美大片顶级少妇| 日日摸夜夜添夜夜添国产精品| 欧美最猛性xxxxx直播| 亚洲欧美一区二区三区孕妇| 国产**成人网毛片九色 | 粗大黑人巨茎大战欧美成人| 精品国产成人在线影院 | 亚洲成人av电影在线| 91看片淫黄大片一级在线观看| 国产欧美一区二区三区在线看蜜臀| 久久99精品国产.久久久久久| 91精品欧美一区二区三区综合在 | 成人黄色av电影| 日本一区二区免费在线| 国产乱人伦偷精品视频不卡| 久久综合色8888| 精品一二线国产| 欧美精品一区二区三区视频| 精品一区二区在线看| 久久综合成人精品亚洲另类欧美| 精品一区二区久久| 精品国产一区久久| 国产精品996| 中文字幕高清不卡| 99久久精品免费| 一区二区三区精品在线观看| 色久综合一二码| 亚洲地区一二三色| 欧美日韩精品电影| 日产精品久久久久久久性色| 日韩亚洲电影在线| 国产精品一区免费在线观看| 国产精品婷婷午夜在线观看| 97成人超碰视| 亚洲电影第三页| 欧美一区二区三区小说| 狠狠色狠狠色综合日日91app| 日本一区二区综合亚洲| 99麻豆久久久国产精品免费| 亚洲精品成人悠悠色影视| 欧美日韩中文一区| 午夜欧美大尺度福利影院在线看| 91精品婷婷国产综合久久| 国产又黄又大久久| 中文字幕中文字幕在线一区 | 久久精品一区二区三区不卡牛牛| 成人免费看黄yyy456| 亚洲资源在线观看| 欧美成人伊人久久综合网| 国产69精品久久99不卡| 亚洲视频在线一区观看| 欧美日韩国产高清一区二区| 麻豆精品国产91久久久久久| 国产精品午夜久久| 欧美亚洲自拍偷拍| 国产在线不卡一区| 亚洲三级免费观看| 91精品国产入口| 成人av资源网站| 日韩激情一二三区| 国产精品九色蝌蚪自拍| 欧美精品色一区二区三区| 国产传媒欧美日韩成人| 亚洲成a天堂v人片| 久久精品人人做人人爽97| 一本大道av一区二区在线播放 | 成人精品国产一区二区4080| 亚洲综合成人在线| 亚洲精品一区二区三区精华液| 91免费观看视频| 美腿丝袜亚洲一区| 亚洲乱码国产乱码精品精的特点| 欧美成人艳星乳罩| 在线观看精品一区| 国产精品亚洲专一区二区三区| 亚洲一区二区高清| 国产色产综合色产在线视频 | 亚洲日本一区二区| 精品裸体舞一区二区三区| 欧美性xxxxxxxx| jlzzjlzz国产精品久久| 久久精品国产精品青草|