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

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

?? address_areq.c

?? 支持IPv6的adov路由協(xié)議(本人修改后)
?? C
字號:
#include "address_areq.h"#include "address_arep.h"#include "address_conf.h"#include "defs.h"#include "ipv6_utils.h"#include "aodv_timeout.h"#include "timer_queue.h"#include "aodv_socket.h"#include "debug.h"#include "params.h"//extern struct in6_addr gateway_mcast_addr;struct areq_record *areq_record_head;struct areq_blacklist *areq_blacklist_head;AREQ *areq_create(struct in6_addr  req_addr){	AREQ *areq;                                                                                                                             	areq = (AREQ *) aodv_socket_new_msg();	areq->type = AODV_AREQ;	areq->code=0;	areq->checksum=0;/*to be coded!*/	areq->hcnt = 0;	areq->res1=0;	areq->res2=0;	copy_in6_addr(&areq->request_addr,&req_addr);                                                                                                                             	/* Immediately before a node originates a AREQ flood it must increment its sequence number... */	areq->seqno = htonl(areq_info.seqno);	areq->id=htonl(areq_info.id);	DEBUG(LOG_DEBUG, 0, "areq_create: Assembled AREQ %s", ip6_to_str(req_addr));	#ifdef DEBUG_OUTPUT    	log_pkt_fields((AODV_msg *) areq);	#endif	return areq;}void areq_send(struct in6_addr req_addr,int ttl){	AREQ *areq;	int i;                                                                                                                             	/* Broadcast on all interfaces */    	for (i = 0; i < MAX_NR_INTERFACES; i++) {        	if (!DEV_NR(i).enabled)            		continue;        	areq = areq_create(req_addr);        printf("areq_send!!!  i=%d ifname:%s\n",i,DEV_NR(i).ifname);        aodv_socket_send((AODV_msg *) areq,ipv6_multicast_addr, AREQ_SIZE, ttl,&DEV_NR(i));	areq_record_insert(areq->request_addr, ntohl(areq->seqno));	}}void areq_forward(AREQ *areq, int ttl){	int i;        printf("areq forward!!!\n");	/* FORWARD the RREQ if the TTL allows it. */	DEBUG(LOG_INFO, 0, "forwarding AREQ requst_ip=%s, areq_id=%lu",          ip6_to_str(areq->req_addr), ntohl(areq->id));                                                                                                                             	/* Queue the received message in the send buffer */	areq = (AREQ *) aodv_socket_queue_msg((AODV_msg *) areq, AREQ_SIZE);        areq->hcnt++;                                                                                                                             	/* Send out on all interfaces */	for (i = 0; i < MAX_NR_INTERFACES; i++) {        	if (!DEV_NR(i).enabled)            		continue;        	aodv_socket_send((AODV_msg *) areq,ipv6_multicast_addr, AREQ_SIZE, ttl,&DEV_NR(i));	}}void areq_process(AREQ *areq, int areqlen, struct in6_addr ip_src,struct in6_addr ip_dst, 			int ip_ttl, unsigned int ifindex){	rt_table_t *rev_rt;	struct in6_addr req_addr;	u_int32_t areq_seqno,areq_id,life;	int ttl;	areq_id = ntohl(areq->id);	copy_in6_addr(&req_addr, &areq->request_addr);	areq_seqno = ntohl(areq->seqno);	ttl=++(areq->hcnt);	/* Ignore AREQ's that originated from this node. Either we do this	or we buffer our own sent AREQ's as we do with others we receive. */    	//if (memcmp(&ip_src, &(DEV_IFINDEX(ifindex).ipaddr), sizeof(struct in6_addr)) ==0)	if(to_my_address(ip_src)){		printf("This areq is generated by myself,don't forward again!\n");		return;	}	if (areqlen < (int) AREQ_SIZE) {		log(LOG_WARNING, 0,	    		"areq_process: IP data field too short (%u bytes) from %s to %s,request %s", 			areqlen, ip6_to_str(ip_src), ip6_to_str(ip_dst),ip6_to_str(req_addr));		return;	}	DEBUG(LOG_DEBUG, 0,"AREQ_process: ip_src=%s request_dest=%s",		ip6_to_str(ip_src),ip6_to_str(req_addr));	/* Ignore already processed AREQs. */	if (areq_record_find(req_addr, areq_seqno))		return;	/* Now buffer this AREQ so that we don't process a similar AREQ we get within PATH_TRAVERSAL_TIME. */	areq_record_insert(req_addr, areq_seqno);	#ifdef DEBUG_OUTPUT	log_pkt_fields((AODV_msg *) areq);	#endif		//if(memcmp(&req_addr,&(DEV_IFINDEX(ifindex).ipaddr),sizeof(struct in6_addr))==0){	if(to_my_address(req_addr)){		arep_send(req_addr,areq_seqno,areq_id,ip_src,ttl);		return;	}	/* The intermediate node always creates or updates a REVERSE ROUTE entry to the source of the AREQ. */	rev_rt = rt_table_find(req_addr);	life =TEMP_ROUTE_LIFETIME;	if (rev_rt == NULL) {		DEBUG(LOG_DEBUG, 0, "areq_process: rev_rt = NULL; route not found,insert temporary one");		rev_rt = rt_table_insert(req_addr, ip_src, areq->hcnt + 1,				 areq_seqno, life, TEMP, ifindex);		areq_blacklist_insert(req_addr,areq_id);	} else {	if((rev_rt->flags==TEMP)&&areq_blacklist_find(req_addr,areq_seqno))	 /* OK, interested entry found. But we update only if either:                                                                                                                                        (i) the Sequence Number in the AREQ is higher than           the destination sequence number of the Request IP Address           in the route table, or                                                                                                                                        (ii) the sequence numbers are equal, but the hop count as           specified by the AREQ, plus one, is now smaller than the existing           hop count in the routing table.         */		if (((areq_seqno > rev_rt->dest_seqno) ||			(areq_seqno == rev_rt->dest_seqno &&(areq->hcnt + 1) < rev_rt->hcnt)))			rev_rt = rt_table_update(rev_rt,ip_src,areq->hcnt+1,areq_seqno, life, TEMP);		else			return;	else		if((rev_rt->flags==TEMP)||(rev_rt->hcnt!=INFTY)){			arep_send(req_addr,areq_seqno,areq_id,ip_src,ttl);			return;		}	}	/* FORWARD the AREQ if the TTL allows it. */	if (ip_ttl > 1) {	DEBUG(LOG_INFO, 0, "areq_process: forwarding AREQ rreq_addr=%s, areq_id=%lu",	      ip6_to_str(req_addr), areq_id);	ip_ttl--;	areq_forward(areq,ip_ttl);    	}}/*duplicated address detect*/void dup_addr_detect(){	int ttl;	printf("duplicated address detect %d\n",4-areq_info.retries);	ttl=NET_DIAMETER;	areq_info.areq_timer.handler=arep_wait_timeout;	areq_info.areq_timer.data=NULL;	timer_add_msec(&areq_info.areq_timer,ADDRESS_DISCOVERY_TIME);	areq_send(areq_info.request_addr,ttl);}	struct areq_record *areq_record_insert(struct in6_addr req_addr,u_int32_t areq_seqno){	struct areq_record *areq_pkt;	/* First check if this areq packet is already buffered */	areq_pkt = areq_record_find(req_addr,areq_seqno);	if (areq_pkt)	return areq_pkt;	if ((areq_pkt =(struct areq_record *) malloc(sizeof(struct areq_record))) < 0) {		fprintf(stderr, "areq_record_insert: Malloc failed!!!\n");		exit(-1);    	}	memcpy(&areq_pkt->req_addr, &req_addr, sizeof(struct in6_addr));	areq_pkt->seqno = areq_seqno;	areq_pkt->rec_timer.handler = areq_record_timeout;	areq_pkt->rec_timer.data = areq_pkt;	areq_pkt->next = areq_record_head;	areq_record_head = areq_pkt;	DEBUG(LOG_INFO, 0, "Buffering AREQ %s areq_seqno=%lu time=%u",		ip6_to_str(req_addr), areq_seqno, PATH_TRAVERSAL_TIME);	timer_add_msec(&areq_pkt->rec_timer, PATH_TRAVERSAL_TIME); 	return areq_pkt;}struct areq_record *areq_record_find(struct in6_addr req_addr,u_int32_t areq_seqno){	struct areq_record *areq_pkt;	areq_pkt = areq_record_head;	while (areq_pkt) {		if ( (memcmp(&areq_pkt->req_addr, &req_addr, sizeof(struct in6_addr)) == 0) 			&& (areq_pkt->seqno == areq_seqno))				return areq_pkt;		areq_pkt = areq_pkt->next;	}	return NULL;}int areq_record_remove(struct in6_addr req_addr, u_int32_t areq_seqno){	struct areq_record *curr, *prev;	prev = NULL;	curr = areq_record_head;	while (curr){		if ( (memcmp(&curr->req_addr, &req_addr, sizeof(struct in6_addr)) == 0)			&& (curr->seqno == areq_seqno)){			if (prev == NULL)				areq_record_head = curr->next;			else				prev->next = curr->next;			free(curr);			return 0;		}		prev = curr;		curr = curr->next; 	}	return -1;}struct areq_blacklist *areq_blacklist_insert(struct in6_addr req_addr,u_int32_t areq_id){	struct areq_blacklist *bl_entry;	/* First check if this areq packet is already buffered */	bl_entry = areq_blacklist_find(req_addr,areq_id);	if (bl_entry)		return bl_entry;	if ((bl_entry = (struct areq_blacklist *) malloc(sizeof(struct areq_blacklist))) < 0) {		fprintf(stderr, "rreq_blacklist_insert: Malloc failed!!!\n");		exit(-1);    	}    	memcpy(&bl_entry->req_addr, &req_addr, sizeof(struct in6_addr));	bl_entry->id=areq_id;	bl_entry->bl_timer.handler = areq_blacklist_timeout;	bl_entry->bl_timer.data = bl_entry;	bl_entry->next = areq_blacklist_head;	areq_blacklist_head = bl_entry;	timer_add_msec(&bl_entry->bl_timer, AREQ_BLACKLIST_TIMEOUT);	return bl_entry;}struct areq_blacklist *areq_blacklist_find(struct in6_addr req_addr,u_int32_t areq_id){	struct areq_blacklist *bl_entry;	bl_entry = areq_blacklist_head;	while (bl_entry){        	if (memcmp(&bl_entry->req_addr, &req_addr, sizeof(struct in6_addr)) == 0			&&(bl_entry->id==areq_id))			return bl_entry;		bl_entry = bl_entry->next;	}	return NULL;}int areq_blacklist_remove(struct in6_addr req_addr,u_int32_t areq_id){	struct areq_blacklist *curr, *prev;	prev = NULL;	curr = areq_blacklist_head;	while (curr){        	if ((memcmp(&curr->req_addr, &req_addr, sizeof(struct in6_addr)) == 0)			&&(curr->id=areq_id)){			if (prev == NULL)				areq_blacklist_head = curr->next;			else				prev->next = curr->next;	    		free(curr);	    		return 0;	  	}	prev = curr;	curr = curr->next;	}	return -1;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线免费观看视频一区| 免费观看91视频大全| 久久色中文字幕| 91精品综合久久久久久| 在线视频综合导航| 91福利精品视频| 欧美亚一区二区| 色综合色综合色综合色综合色综合 | 尤物av一区二区| 亚洲女人小视频在线观看| 国产精品传媒视频| 亚洲另类在线视频| 亚洲狠狠爱一区二区三区| 亚洲一区二区欧美日韩| 亚洲精品久久7777| 亚瑟在线精品视频| 免费成人在线观看| 国产精品一区二区免费不卡 | 91在线视频免费观看| 91亚洲精华国产精华精华液| 97久久超碰国产精品| 欧美色男人天堂| 欧美成人精精品一区二区频| 国产精品嫩草影院com| 亚洲女女做受ⅹxx高潮| 日韩成人一区二区| 国产精品综合在线视频| 成人激情免费网站| 欧美日韩三级一区| 精品国产1区2区3区| 国产视频一区二区三区在线观看 | 欧美三级乱人伦电影| 欧美一二三四区在线| 国产欧美一区二区三区鸳鸯浴 | 国产精一区二区三区| 91在线免费视频观看| 正在播放亚洲一区| 亚洲精品一区二区三区99| 亚洲视频网在线直播| 狠狠色综合日日| 成人精品国产免费网站| 欧美日韩精品一区二区| 中文字幕一区三区| 免费精品视频在线| 91丨porny丨在线| 久久亚洲精品国产精品紫薇| 亚洲国产综合视频在线观看| 国产成人精品1024| 日韩三级av在线播放| 亚洲乱码国产乱码精品精可以看| 国产在线精品一区二区| 欧美日韩精品欧美日韩精品| 国产精品久久综合| 国产一区二区电影| 日韩一区二区在线免费观看| 一区二区三区高清| 成人黄色综合网站| 国产丝袜在线精品| 日韩专区一卡二卡| 日本乱人伦aⅴ精品| 国产精品天干天干在线综合| 久久草av在线| 日韩免费一区二区三区在线播放| 亚洲综合999| 色94色欧美sute亚洲线路一久| 国产精品久久久久久久久动漫| 国产一区二三区| 2019国产精品| 国产自产视频一区二区三区| 欧美成人高清电影在线| 青青草国产成人av片免费| 欧美日韩精品久久久| 亚洲国产精品久久不卡毛片| 日本久久电影网| 一区二区三区中文字幕电影| 色综合激情久久| 亚洲综合一区二区三区| 日本二三区不卡| 亚洲一区二区成人在线观看| 色综合久久中文综合久久牛| 亚洲毛片av在线| 在线观看日韩高清av| 艳妇臀荡乳欲伦亚洲一区| 色94色欧美sute亚洲13| 亚洲成a人片综合在线| 69堂精品视频| 精品无码三级在线观看视频| 久久这里只精品最新地址| 国产精品18久久久久久久久 | 972aa.com艺术欧美| 亚洲人成亚洲人成在线观看图片| 91麻豆免费观看| 午夜av电影一区| 久久综合国产精品| 91一区二区在线| 五月激情六月综合| 久久色中文字幕| 色综合网色综合| 免费视频最近日韩| 国产精品乱子久久久久| 色婷婷久久综合| 蜜臀av性久久久久蜜臀aⅴ四虎| 精品99999| 在线精品视频一区二区三四| 蜜乳av一区二区三区| 欧美精彩视频一区二区三区| 在线精品视频小说1| 激情国产一区二区| 亚洲卡通动漫在线| 欧美成人性战久久| 91亚洲国产成人精品一区二区三 | thepron国产精品| 午夜电影一区二区| 国产精品日产欧美久久久久| 欧美日韩一级片网站| 国产成人午夜高潮毛片| 午夜精品久久久久久久99水蜜桃| 精品国产一区a| 在线亚洲免费视频| 国产高清不卡二三区| 亚洲第一狼人社区| 国产精品久线观看视频| 这里只有精品电影| 色屁屁一区二区| 盗摄精品av一区二区三区| 丝袜美腿亚洲一区二区图片| 中文字幕电影一区| 日韩欧美在线影院| 欧美丝袜自拍制服另类| av电影在线不卡| 懂色av一区二区三区免费观看 | 成人v精品蜜桃久久一区| 香蕉成人伊视频在线观看| 日本一区二区免费在线观看视频 | 欧美一级日韩免费不卡| 91免费视频网| 99精品久久99久久久久| 国产精品综合一区二区三区| 轻轻草成人在线| 亚洲大片在线观看| 亚洲精品久久7777| 99国产精品久| 精品一区二区三区日韩| 亚洲精品高清在线| 国产精品久久久久久一区二区三区| 日韩欧美国产不卡| 日韩午夜在线观看视频| 在线免费av一区| 日本高清不卡视频| 91美女片黄在线| 高清成人在线观看| 国模无码大尺度一区二区三区| 五月开心婷婷久久| 日韩国产精品91| 丝袜国产日韩另类美女| 亚洲国产一二三| 亚洲欧美成aⅴ人在线观看| 国产精品久久久久天堂| 国产精品久久毛片a| 中文字幕不卡在线观看| 日本一区二区三区视频视频| 国产精品私房写真福利视频| 久久久久国产精品厨房| 欧美国产精品一区二区三区| 成人欧美一区二区三区视频网页| 中文字幕一区二区三区精华液| 国产精品久久久久9999吃药| 亚洲男女毛片无遮挡| 亚洲午夜在线电影| 久久精品久久久精品美女| 麻豆视频观看网址久久| 久久99精品久久久久婷婷| 国产999精品久久久久久绿帽| 菠萝蜜视频在线观看一区| 在线一区二区三区四区五区 | 欧美一级生活片| 久久青草欧美一区二区三区| 亚洲欧美在线视频| 亚洲电影你懂得| 国产伦精一区二区三区| av一区二区三区在线| 欧美日本韩国一区二区三区视频| 日韩视频在线你懂得| 久久精品亚洲一区二区三区浴池 | fc2成人免费人成在线观看播放 | 国产精品天干天干在观线| 亚洲综合在线五月| 国产自产v一区二区三区c| 不卡的电视剧免费网站有什么| 欧美日韩视频第一区| 久久综合五月天婷婷伊人| 亚洲精品成人在线| 毛片av一区二区| 色丁香久综合在线久综合在线观看| 日韩欧美激情一区| 一区二区三区精密机械公司| 国产成人综合自拍| 91超碰这里只有精品国产| 亚洲丝袜另类动漫二区| 国产呦萝稀缺另类资源|