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

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

?? mobileip.c

?? 無線網絡研究中
?? C
字號:
#include <sys/types.h>#include <sys/select.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/file.h>#include <unistd.h>#include <sys/ioctl.h>#include <net/if.h>#include <string.h>#include <stdio.h>#include <sys/param.h>#define SERV_PORT 5678//the port opened for server#define DEL_PORT  5555//the port the send the delSTAMsg#define MAXLEN 1024//the max length for read or write data once////////////////////////////////////////////////////////////////#define STYLE_RegMsg 0x04             #define MSG_WRONG	 -1#define MSG_REG    0///////////////////////////////////////////////////////////////////typedef struct tunnel{                          //the struct of tunnel	unsigned long sta_addr;	unsigned long opposite_addr;	struct tunnel *next;}TUNNEL, *TunnelList;typedef struct tunnel_counter{                  //the struct to compute the tunnel number	int counter;	unsigned long opposite_addr;	struct tunnel_counter *next;}COUNTER, *CounterList;#define TUNNEL_SIZE sizeof(TUNNEL)#define COUNTER_SIZE sizeof(COUNTER)//////////////////////////////////////////////////////////////////////////////////struct RegMsg{                          //the register message struct form proxy	int code;	unsigned long sta_addr;	unsigned long regAgent_addr;};struct delSTAMsg{                      //the message struct to send to old tunnel's opposite sopt	int code;	unsigned long sta_addr;};/////////////////////////////////////////////////////////////////////////////////////////the global variableTunnelList Tlist;         CounterList Clist;///////////////////////////////////////////////////////////////////////////////////////////int check_msg(char *buf);               //to check if the message is register messagevoid create_tunnellist(struct tunnel *L);   //to create the tunnel listvoid create_counterlist(CounterList L); //to create the counter listvoid delTlistNode(TunnelList pList,unsigned long sta,unsigned long tunnel_opp);void delClistNode(CounterList pList,unsigned long tunnel_opp);void addTlistNode(TunnelList pList,unsigned long sta,unsigned long tunnel_opp);void addClistNode(CounterList pList,unsigned long tunnel_opp);//void updateTlistNode(TunnelList &pList,unsigned long sta,unsigned long tunnel_opp);//void updateClistNode(CounterList &pList,unsigned long tunnel_opp);int delOldTunnel(unsigned long tunnel_opp);  //to delete the old tunnel of staint createNewTunnel(unsigned long tunnel_opp); //to create new tunnel of staint searchStaTunnel(TunnelList pList,unsigned long sta,unsigned long tunnel_opp);//to search the tunnel relate to this sta                                                                unsigned long searchSta(TunnelList pList,unsigned long sta);  //to search the old tunnel of specific staint searchCounter(CounterList pList,unsigned long tunnel_opp);  //to search the counter list which opposite spot is thisvoid addCounter(CounterList pList,unsigned long tunnel_opp);    //add 1 to the counter of specific tunnelint delCounter(CounterList pList,unsigned long tunnel_opp);    //delete 1 to the counter of specific tunnelint sendDelStaMsg(unsigned long sta,unsigned long tunnel_opp); //send the delete message to the opposite spot of this tunnelint isLocAddr(unsigned long tunnel_opp);     //to check if the opposite of this tunnel is localhost///////////////////////////////////////////////////////////////////////int isLocAddr(unsigned long tunnel_opp){	int sockfd;   struct ifreq ifr;   struct sockaddr_in sin;  	if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) 	{ 		printf("socket error\n"); 		exit(1);	}   //get the IP address in address structure   memset(&sin,0,sizeof(sin));  memset(&ifr, 0, sizeof(ifr)); 	strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name)-1); 	if (ioctl(sockfd, SIOCGIFADDR, &ifr) < 0) 	{ 		printf("ioctl SIOCGIFADDR error\n"); 		exit(1); 	} 	//check IP address from address structure to string format 	memcpy(&sin,(struct sockaddr_in*)&ifr.ifr_addr,sizeof(ifr.ifr_addr)); 	if(sin.sin_addr.s_addr==tunnel_opp)		return 0; 	else		return -1;}//-------------------------------------------------------------------------------int sendDelStaMsg(unsigned long sta,unsigned long tunnel_opp){	int sock;	int len;	struct sockaddr_in agent_addr;	struct delSTAMsg delmsg;	char buf[MAXLEN];		memset(&delmsg,0,sizeof(delmsg));	delmsg.code=0x05;	delmsg.sta_addr=sta;		memset(buf,0,MAXLEN);	memcpy(buf,&delmsg,sizeof(delmsg));		bzero(&agent_addr,sizeof(agent_addr));	agent_addr.sin_family=AF_INET;	agent_addr.sin_port=htons(DEL_PORT);	agent_addr.sin_addr.s_addr=tunnel_opp;		sock=socket(AF_INET,SOCK_DGRAM,0);		if(sock<0)	{		printf("socket create error\n");		exit(1);	}		else		sendto(sock,buf,MAXLEN,0,(struct sockaddr*)&agent_addr,sizeof(agent_addr));}//----------------------------------------------------------------------------int delCounter(CounterList pList,unsigned long tunnel_opp){	CounterList p;	CounterList current;	p=pList;	current=pList->next;	while(current!=NULL)	{		if(current->opposite_addr==tunnel_opp)		{			current->counter-=1;			if(current->counter==0)				return 0;			else				return (current->counter);		}		else		{			p=current;			current=current->next;		}	}	if(current==NULL)		printf("the tunnel can't be finded to minus 1 to the counter\n");}//--------------------------------------------------------------------------void addCounter(CounterList pList,unsigned long tunnel_opp){	CounterList p,current;	p=pList;	current=pList->next;	while(current!=NULL)	{		if(current->opposite_addr==tunnel_opp)			current->counter+=1;		else			{				p=current;				current=current->next;			}	}	if(current==NULL)		printf("the tunnel can't be finded to add counter\n");}//--------------------------------------------------------------------------------------int searchCounter(CounterList pList,unsigned long tunnel_opp){	CounterList p,current;	p=pList;	current=pList->next;	while(current!=NULL)	{		if(current->opposite_addr==tunnel_opp)			return 0;		else			{				p=current;				current=current->next;			}	}	if(current==NULL)		return -1;}//---------------------------------------------------------------------------unsigned long searchSta(TunnelList pList,unsigned long sta){	TunnelList p,current;	p=pList;	current=pList->next;	while(current!=NULL)	{		if(current->sta_addr==sta)			return (current->opposite_addr);		else			{				p=current;				current=current->next;			}				}	if(current==NULL)		return 0;}//------------------------------------------------------------------------------int searchStaTunnel(TunnelList pList,unsigned long sta,unsigned long tunnel_opp){	TunnelList p,current;	p=pList;	current=pList->next;	while(current!=NULL)	{		if((current->sta_addr==sta)&&(current->opposite_addr==tunnel_opp))			return 0;		else			{				p=current;				current=current->next;			}	}	if(current==NULL)		return -1;}//---------------------------------------------------------------------------int createNewTunnel(unsigned long tunnel_opp){	unsigned long tunnel_head;             //how to get the value?	unsigned long tunnel_end;              //how to get the value?	struct in_addr inaddr1,inaddr2;	char *head_ip, *end_ip;	char netmask[30];                      //how to get it?	char buf[1024];		memset(buf,0,1024);	memset(&inaddr1,0,sizeof(inaddr1));	memset(&inaddr2,0,sizeof(inaddr2));		inaddr1.s_addr=tunnel_head;	inaddr2.s_addr=tunnel_end;		head_ip=(char*)inet_ntoa(inaddr1);	end_ip=(char*)inet_ntoa(inaddr2);		system("insmod ipip.o");	sprintf(buf,"ifconfig tunl0 %s pointopoint %s",head_ip,end_ip);	system(buf);	memset(buf,0,1024);	sprintf(buf,"ifconfig tunl0 netmask %s",netmask);	system(buf);	memset(buf,0,1024);	sprintf("route add head_ip %s",head_ip);	system(buf);	}//------------------------------------------------------------------------------int delOldTunnel(unsigned long tunnel_opp){	system("ifconfig tunl0 down");}//----------------------------------------------------------------------------void addClistNode(CounterList pList,unsigned long tunnel_opp){	CounterList p,current;	p=pList;		current=(CounterList)malloc(COUNTER_SIZE);	current->next=NULL;	current->counter=1;	current->opposite_addr=tunnel_opp;		while(p->next!=NULL)		p=p->next;		p->next=current;}//----------------------------------------------------------------------------void addTlistNode(TunnelList pList,unsigned long sta,unsigned long tunnel_opp){	TunnelList p,current;	p=pList;		current=(TunnelList)malloc(TUNNEL_SIZE);	current->next=NULL;	current->sta_addr=sta;	current->opposite_addr=tunnel_opp;		while(p->next!=NULL)		p=p->next;		p->next=current;}//--------------------------------------------------------------------------void delClistNode(CounterList pList,unsigned long tunnel_opp){	CounterList p,current;	p=pList;	current=pList->next;	while(current!=NULL)	{		if(current->opposite_addr==tunnel_opp)		{			p->next=current->next;			free(current);		}		else		{			p=current;			current=current->next;		}	}	if(current==NULL)		printf("delete the counter node error!\n");}//---------------------------------------------------------------------------void delTlistNode(TunnelList pList,unsigned long sta,unsigned long tunnel_opp){	TunnelList p,current;	p=pList;	current=pList->next;	while(current!=NULL)	{		if((current->sta_addr==sta)&&(current->opposite_addr==tunnel_opp))		{			p->next=current->next;			free(current);		}		else		{			p=current;			current=current->next;		}	}	if(current==NULL)		printf("delete tunnel node error!\n");}//----------------------------------------------------------------------void create_counterlist(CounterList L){	L=(CounterList)malloc(COUNTER_SIZE);	L->next=NULL;}//-----------------------------------------------------------------------void create_tunnellist(TunnelList L){	L=(TunnelList)malloc(TUNNEL_SIZE);	L->next=NULL;}//--------------------------------------------------------------------------int check_msg(char *buf){	if(buf[0]==STYLE_RegMsg)			return 0;	else		return -1;	}/////////////////////////////////////////////////////////////////////TunnelList tunnel;CounterList counter;int main(int argc,char ** argv){	int maxfd;	int listen_fd;             	int sock_test;	int msg_style;	fd_set readset,writeset;	int recv_len,recv_n;              	char recvs[MAXLEN];	char sends[MAXLEN];	struct sockaddr_in serv_addr,recv_addr;	int nonBlock;   //the variable to set socket non-blocked		struct RegMsg *p_regMsg;	struct tunnel *tunnel_head,*tunnel_now,*tunnel_last;	struct tunnel_counter * counter_head,*counter_now,*counter_last;		unsigned long opposite_tunnel;		///////////////////////////////////////////initialize the variables	msg_style=-1;		recv_len=0;	recv_n=0;		nonBlock=1;	memset(recvs,0,	MAXLEN);	memset(sends,0,MAXLEN);		/////////////////////////////////////////////////////////////////	create_tunnellist(tunnel);	create_counterlist(counter);//////////////////////////////////////////////////////////////////////////	listen_fd=socket(AF_INET,SOCK_DGRAM,0);		if(listen_fd<0)	{		printf("socket() failed with error!\n");		exit(1);	}	serv_addr.sin_family=AF_INET;	serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);	serv_addr.sin_port=htons(SERV_PORT);	bzero(&(serv_addr.sin_zero),8);	sock_test=bind(listen_fd,(struct sockaddr*)&serv_addr,sizeof(struct sockaddr));	if(sock_test<0)	{		printf("bind() failed with error!\n");		exit(1);	}		//set the listen socket listen_fd as nonblock socket	ioctl(listen_fd,FIONBIO,&nonBlock);			//now set the parameter of select()	if(maxfd<listen_fd)		maxfd=listen_fd;		while(1)	{		FD_ZERO(&readset);		FD_ZERO(&writeset);		FD_SET(listen_fd,&readset);				select(maxfd+1,&readset,NULL,NULL,NULL);		if(FD_ISSET(listen_fd,&readset))		{  		memset(recvs,0,MAXLEN);	  		recv_len=sizeof(recv_addr);  		bzero(&recv_addr,sizeof(recv_addr));  					recv_n=recvfrom(listen_fd,recvs,MAXLEN,0,(struct sockaddr*)&recv_addr,&recv_len);						if(recv_n<0)			{				printf("recvfrom error!\n");				exit(1);			}			else			{	      msg_style=check_msg(recvs);	      if(MSG_REG==msg_style)	      {	      	p_regMsg=(struct RegMsg *)recvs;	      	if(searchStaTunnel(tunnel,p_regMsg->sta_addr,p_regMsg->regAgent_addr)==-1)//the tunnel to this sta don't exist	      	{	      		opposite_tunnel=searchSta(tunnel,p_regMsg->sta_addr);	      		if(opposite_tunnel>0)      //find the old tunnel of this sta	      		{	      			if(delCounter(counter,p_regMsg->regAgent_addr)==0)	      				delOldTunnel(p_regMsg->regAgent_addr);	      			sendDelStaMsg(p_regMsg->sta_addr,p_regMsg->regAgent_addr);	      					      		}	      		if(isLocAddr(p_regMsg->regAgent_addr)<0)        //it's not local address	      		{	      			if(searchCounter(counter,p_regMsg->regAgent_addr)==-1) //not exist 	      				createNewTunnel(p_regMsg->regAgent_addr);	      			addCounter(counter,p_regMsg->regAgent_addr);	      		}		      	}	      		     	}		  }//else		}//if	}//while	close(listen_fd);	return;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品二三区| 国产一区二区三区美女| 激情久久五月天| 91蜜桃婷婷狠狠久久综合9色| 51精品久久久久久久蜜臀| 久久久精品欧美丰满| 成人黄色777网| 日韩欧美亚洲一区二区| 亚洲精品乱码久久久久久| 激情综合色丁香一区二区| 欧美亚洲高清一区二区三区不卡| 国产农村妇女毛片精品久久麻豆 | 欧美日韩性生活| 国产免费观看久久| 精品在线免费观看| 欧美精品久久久久久久多人混战 | 国产精品福利在线播放| 国产一区二区三区精品欧美日韩一区二区三区 | 制服.丝袜.亚洲.另类.中文| 国产精品丝袜黑色高跟| 国产一区二区精品久久91| 欧美一区二区视频免费观看| 亚洲线精品一区二区三区八戒| 99re亚洲国产精品| 国产精品国产三级国产| 成人性色生活片| 国产日韩欧美不卡| 国产成人在线视频免费播放| 26uuu久久综合| 国产在线一区二区综合免费视频| 91精品福利在线一区二区三区 | 精品久久免费看| 理论电影国产精品| 欧美r级在线观看| 麻豆一区二区三| 精品国产乱码久久久久久牛牛| 久久电影国产免费久久电影| 日韩欧美国产午夜精品| 视频一区免费在线观看| 欧美一级高清片| 国产做a爰片久久毛片| 久久蜜桃av一区精品变态类天堂| 国产乱码字幕精品高清av| 久久婷婷综合激情| 成人精品gif动图一区| 国产精品嫩草99a| 在线免费精品视频| 日本午夜一区二区| 久久在线观看免费| 成人开心网精品视频| 亚洲日本中文字幕区| 欧美主播一区二区三区| 日韩av一二三| 亚洲自拍偷拍欧美| 色婷婷精品大视频在线蜜桃视频| 亚洲国产综合人成综合网站| 91麻豆精品国产自产在线观看一区| 久久精品72免费观看| 久久久久免费观看| 91国偷自产一区二区使用方法| 亚洲第一成人在线| 欧美xxxx老人做受| www.日韩精品| 亚洲18色成人| 日本一区二区不卡视频| 欧美午夜精品理论片a级按摩| 免费成人美女在线观看.| 中文字幕不卡在线观看| 欧美日韩激情一区二区三区| 国产一区二区三区av电影| 亚洲精品一二三区| 欧美mv和日韩mv的网站| 成人短视频下载| 青青草97国产精品免费观看 | 精品国产伦一区二区三区观看方式| 粉嫩嫩av羞羞动漫久久久| 亚洲第一综合色| 国产丝袜欧美中文另类| 91精品久久久久久蜜臀| 99久久精品免费精品国产| 免播放器亚洲一区| 亚洲人成7777| 久久精品无码一区二区三区| 欧美午夜精品久久久久久孕妇 | 狠狠v欧美v日韩v亚洲ⅴ| 中文字幕综合网| 久久一夜天堂av一区二区三区| 欧美在线免费播放| 成人国产在线观看| 国产成人日日夜夜| 玖玖九九国产精品| 秋霞午夜av一区二区三区| 亚洲制服丝袜在线| 中文字幕永久在线不卡| 日本一区二区三区dvd视频在线 | 欧美日韩综合一区| 波多野结衣的一区二区三区| 激情综合色播五月| 视频在线观看91| 亚洲一区在线观看视频| 1区2区3区精品视频| 国产日本欧洲亚洲| 精品久久久网站| 精品美女一区二区| 欧美日韩一区二区电影| 在线免费观看日本一区| 99久久久国产精品| a级精品国产片在线观看| 成人免费观看男女羞羞视频| 国产乱码精品一区二区三区忘忧草 | 91一区一区三区| 成人蜜臀av电影| 欧美精品一区二区三区久久久| 正在播放亚洲一区| 91精品福利在线一区二区三区| 欧美精品丝袜久久久中文字幕| 欧美性生交片4| 欧美日韩情趣电影| 欧美二区乱c少妇| 日韩一区二区三区免费看| 日韩欧美资源站| 久久久久青草大香线综合精品| 欧美xxxxxxxx| 久久久久久免费毛片精品| 国产亚洲一区二区三区在线观看| 久久久国产综合精品女国产盗摄| 久久久美女毛片| 1区2区3区欧美| 亚洲国产精品久久人人爱| 偷拍日韩校园综合在线| 免费成人av在线| 黑人精品欧美一区二区蜜桃| 大胆亚洲人体视频| 91亚洲精品久久久蜜桃网站| 欧美视频三区在线播放| 欧美一区二区性放荡片| 久久精品欧美日韩精品| 亚洲欧美激情插| 日韩电影一区二区三区| 福利一区福利二区| 91精品福利在线| 欧美一二三区精品| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产午夜精品福利| 亚洲男同1069视频| 毛片一区二区三区| 成人高清视频免费观看| 欧美精品电影在线播放| 久久婷婷综合激情| 亚洲一二三专区| 国产精品一区二区久激情瑜伽| 色94色欧美sute亚洲13| 欧美电视剧在线观看完整版| 亚洲欧洲精品天堂一级| 热久久国产精品| 91丨九色porny丨蝌蚪| 欧美一区二区三区白人| 国产精品久久久久久户外露出| 亚洲午夜精品在线| 国产福利视频一区二区三区| 欧美亚男人的天堂| 国产精品欧美经典| 久久精品国产一区二区| 一道本成人在线| 国产午夜亚洲精品午夜鲁丝片 | 91麻豆精品久久久久蜜臀| 亚洲国产精品传媒在线观看| 丝袜亚洲另类丝袜在线| 成人高清av在线| www国产精品av| 日韩和欧美的一区| 91蜜桃免费观看视频| 久久久亚洲精华液精华液精华液| 亚洲成人免费看| 色综合天天综合狠狠| 久久这里只精品最新地址| 日韩av一级片| 欧美美女bb生活片| 中文字幕在线观看一区| 国产精品一区二区在线播放 | 国产制服丝袜一区| 91精品在线一区二区| 性做久久久久久免费观看| 色婷婷综合久久久中文一区二区| 亚洲成人动漫在线观看| av资源站一区| 国产精品美日韩| 成人午夜伦理影院| www日韩大片| 国产美女av一区二区三区| 日韩欧美国产小视频| 青青草国产成人av片免费| 7777精品伊人久久久大香线蕉经典版下载 | 成人黄色小视频| 亚洲国产精品ⅴa在线观看| 国内成人自拍视频| 精品成人a区在线观看| 国产一区二区三区黄视频 | 亚洲一区二区在线免费看| 99久久久国产精品|