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

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

?? dsdv.cc

?? RSA algorithm implementation is given
?? CC
字號:
/* *   User Space DSDV Implementation * *   Binita Gupta *   University of Illinois at Urbana Champaign *    *   Email: binita@uiuc.edu *    * *   This software is Open Source under the GNU General Public License * * ******************************************* * *       General Description: *      ---------------------- *      *     This file defines all the functions of dsdv class. This is the main file *     which implements most of the dadv logic. * * * * *       Internal Procedures: *        * * * * 	 External Procedures: *       * ********************************************* * */#include "common.h"#include "externDec.h"void	process_dsdv_handler();void	rebootHandler_stub(void *data);void	updateHandler_stub(void *data);void	periodicHandler_stub(void *data);void	global_handler(int type);void 	sigint_timer_handler(int type);void	traffic_handler();/* main dsdv initailize function */void dsdv::dsdv_init(char *interface){	struct sockaddr_in my_addr;	if(check_root() == -1)	{		cout<< "You must be root to run this program" << endl;		exit(1);	}	dsdvSock.createSock(interface, &my_addr);	register_handler_function(dsdvSock.getSock(),process_dsdv_handler );	if (get_interface_ip(dsdvSock.getSock(), interface, &my_addr) == -1)	{	      cout << "Error getting Interface IP" << endl;	      exit(1);	}	/* open socket for communication with kernel routing table */	ksock = init_krtsocket();	if(ksock == -1)	  {			cout << "Error Initializing kernel socket" << endl;		exit(1);	  }	rTableForward.init_KRT();	rTableBroadcast.init_RT();	lastFullDumpTime = 0;	is_broadcast = false;	/* TRAFFIC */	traffic_sock = open_and_bind_sock();	if(traffic_sock < 0)	{		cout <<"Error opening traffic socket " << endl;		exit(1);	}	register_handler_function(traffic_sock, traffic_handler );	sprintf(logfile_name,"%s%s%s",LOGFILE_NAME,"_",getDotIP(g_my_ip));		return; }/* TRAFFIC */void	traffic_handler(){	dsdvOb.process_traffic_data();}void	dsdv::process_traffic_data(){	if(read(traffic_sock,&traffic_data,sizeof(traffic_data)) < 0)	{		perror("Error in reading from traffic");	}	#ifdef DEBUG	cout << "dsdv:process_traffic_data: data read is " << traffic_data << endl;#endif		if(traffic_data == START_SIMULATION)	{		/* start counting the routing overhead */	}	else if (traffic_data == STOP_SIMULATION)	{		if((dsdv_log_file = fopen(logfile_name,"a")) == NULL)		{			perror("Error opening log file");			exit(1);		}		fprintf(dsdv_log_file,"Routing Overhead is %d\n",routing_overhead_in_bytes);		routing_overhead_in_bytes=0;		traffic_data = NO_SIMULATION;		fclose(dsdv_log_file);	}		}void	dsdv::register_handler_function(int fd, hfunc_t fun){	handlers[handler_cnt].fd = fd;	handlers[handler_cnt].func = fun;	handler_cnt++;	return;}void	process_dsdv_handler(){	dsdvOb.process_dsdv();}void	dsdv::process_dsdv(){	int length;	u_int32_t	src;	length = dsdvSock.readFromSock(&src);	processRecvMsg(src);}void	dsdv::processRecvMsg(u_int32_t src){	DSDV_Msg	*dsdv_msg;	dsdv_msg = (DSDV_Msg*)recvBuffer;#ifdef DEBUG	cout << "dsdv:processRecvMsg: entered " << endl;#endif	if(src == g_my_ip)	{#ifdef DEBUG		cout << "dsdv: processREcvMsg: ignore message from the local node " << endl;#endif		return;	}		switch(dsdv_msg->type){		case DSDV_PERIODIC_UPDATE:			processPeriodicUpdate(src);			break;		default:#ifdef DEBUG			cout << "dsdv: processRecvMsg: default case" << endl;#endif			break;	}	return;}void	dsdv::processPeriodicUpdate(u_int32_t src){#ifdef DEBUG		cout << "dsdv:processPeriodicUpdate: not during reboot " << endl;#endif		updateMessage	umsg;		umsg.createMessage(recvBuffer);#ifdef DEBUG		umsg.printUpdate();#endif		umsg.applyUpdates(src);		if( (!duringReboot) && is_broadcast)		{			is_broadcast=false;			broadcastRTable();		}}/* main dsdv daemon function - takes interface name as the input parameter*/int dsdv::dsdv_daemon(char *interface){#ifdef DEBUG	cout << "Entered Dsdv_Daemon" << endl;#endif	registerSignal();	/* start all relevant timers here */	setRebootTimer();	setPeriodicTimer();	/* do initialization */	dsdv_init(interface);	mainDaemonLoop();	return 0;}void	dsdv::setRebootTimer(){	struct timerData	tData;	tData.type = REBOOT_TIMER;	tData.data = 0;		timer_Q.set_timer_first(DELETE_PERIOD, rebootHandler_stub, (void *)&tData);	return;}void	rebootHandler_stub(void *data){	dsdvOb.rebootHandler();}void	dsdv::rebootHandler(){#ifdef DEBUG	cout << "rebootHandler: entered" << endl;#endif	duringReboot = false;	/* do the first broadcast */	/* check if the local seq num is odd, make it the next even value */	if((localSeqNum%2)==1)	{		localSeqNum++;		rTableForward.setLocalSeqNum();		rTableBroadcast.setLocalSeqNum();	}	broadcastRTable();	startUpdateTimer();}void	dsdv::startUpdateTimer(){	struct timerData	tData;	tData.type = PERIODIC_UPDATE_TIMER;	tData.data = 0;		timer_Q.set_timer(PERIODIC_UPDATE_INTERVAL, updateHandler_stub, (void *)&tData);	return;}void	updateHandler_stub(void *data){	dsdvOb.updateHandler();}void	dsdv::updateHandler(){	/* do a broadcast here */	/* since this is a periodic update, increment the seq num */	rTableForward.incrementLocalSeqNum();	rTableBroadcast.incrementLocalSeqNum();	broadcastRTable();	/*reset the update timer */	struct timerData	tData;	tData.type = PERIODIC_UPDATE_TIMER;	tData.data = 0;		timer_Q.set_timer(PERIODIC_UPDATE_INTERVAL, updateHandler_stub, (void *)&tData);	return;}                                                                      void	dsdv::setPeriodicTimer(){	struct timerData	tData;	tData.type = BROKEN_LINK_TIMER;	tData.data = 0;		timer_Q.set_timer(BROKEN_LINK_TIMER_INTERVAL, periodicHandler_stub, (void *)&tData);	return;}void	periodicHandler_stub(void *data){	dsdvOb.periodicHandler();	return;}void 	dsdv::periodicHandler(){	bool	doBroadcast=false;#ifdef DEBUG	cout << "periodicHandler: add a periodic timer " << endl;#endif	/* insert new periodic timer entry */	struct	timerData	tData;	tData.type = BROKEN_LINK_TIMER;	tData.data = 0;	timer_Q.timer_add(BROKEN_LINK_TIMER_INTERVAL, periodicHandler_stub, (void *)&tData);	/* this timer acts as periodic timer for refreshing route table entries */	doBroadcast = rTableForward.refreshEntries();	if(doBroadcast && (!duringReboot))	{		/* this is a triggered broadcast ..		 * don't need to sync routing tables here */		broadcastRTable();	}	return;}void	dsdv::mainDaemonLoop(){	int nfds=0, ret;	fd_set	rbits, rfds;#ifdef DEBUG	cout << "mainDaemonLoop Entered " << endl;#endif	FD_ZERO(&rbits);	for(int i=0; i< handler_cnt; i++)	{		FD_SET(handlers[i].fd,&rbits);		if(handlers[i].fd >= nfds)			nfds = handlers[i].fd +1;	}	while(1)	{		memcpy((char *)&rfds, (char *)&rbits, sizeof(rbits));		if( (ret = select(nfds, &rfds, NULL, NULL, NULL)) < 0)		{#ifdef DEBUG			cout << "Error in select " << endl;#endif		}		else		{			for(int i=0;i<handler_cnt;i++)			{				if(FD_ISSET(handlers[i].fd, &rfds))				{					(*handlers[i].func)();				}			}		}	}	return;}int	dsdv::registerSignal(){	signal(SIGALRM,global_handler);	signal(SIGINT,sigint_timer_handler);	return 0;}void	global_handler(int type){	dsdvOb.handler(type);}void	dsdv::handler(int type){	timer_Q.scheduleTimer();}void 	sigint_timer_handler(int type){	dsdvOb.sigint_handler(type);}void	dsdv::sigint_handler(int type){	free(recvBuffer);	free(sendBuffer);	exit(1);}void	dsdv::settling_time_handler(void *data){	struct	timerData	*tData;	u_int32_t	dst;	tData = (struct timerData *)data;	dst=tData->data;	/* since this is an update after settling time period..	 * sync both the routing tables */	rTableForward.syncRTables(dst);	broadcastRTable();	return;}/* this takes care of broadcast routing updates */void dsdv::broadcastRTable(){	bool full_dump=false;	u_int32_t	len;#ifdef DEBUG	cout << "broadcastRtable: Entered" << endl;#endif		full_dump = isFullDumpNeeded();	updateMessage	umsg;	rTableBroadcast.generateUpdateMessage(&umsg,full_dump);	len = 4*(1+3*umsg.getEntriesCnt());	umsg.copyIntoBuf(sendBuffer);#ifdef DEBUG	cout << "dsdv:broadcast message is" << endl;	umsg.printUpdate();#endif	/* send the broadcast list to the network */	send_datagram(sendBuffer,len);	return;}bool	dsdv::isFullDumpNeeded(){	u_int8_t	num_changed_entries=0;	u_int64_t	currtime=getcurrtime();	if(lastFullDumpTime == 0)	{		lastFullDumpTime=currtime;#ifdef DEBUG		cout << "dsdv:isFullDumpneeded: do full dump " << endl;#endif		return true;	}	else	{		num_changed_entries = rTableBroadcast.getChangedEntriesCnt();		if((num_changed_entries > (FULL_DUMP_FACTOR * rTableBroadcast.getSize())) || 		((currtime - lastFullDumpTime) > MAX_FULL_DUMP_TIMEOUT))		{			lastFullDumpTime=currtime;#ifdef DEBUG			cout << "dsdv:isFullDumpneeded: do full dump " << endl;#endif			return true;		}	}	return false;}	/* This function actually writes the periodic update packets out to the wire... * it calls above function to generate the sending buffer*/void dsdv::send_datagram(void *data_buf, int data_len){	struct sockaddr_in	their_addr;	int		len;#ifdef DEBUG	cout << "send_datagram: Entered" << endl;#endif	bzero((void *)&their_addr,sizeof(struct sockaddr_in));	/* send it out to the broadcast address */	their_addr.sin_family = AF_INET;  	their_addr.sin_port = htons(DSDVPORT);  	their_addr.sin_addr.s_addr = BROADCAST_ADDR;  	bzero(&(their_addr.sin_zero), 8);	if(traffic_data == START_SIMULATION)		routing_overhead_in_bytes +=data_len;	if ( (len = sendto(dsdvSock.getSock(),data_buf,data_len,0,(sockaddr *) &their_addr, sizeof(struct sockaddr)) ) < 0)	{		perror("Error in sendto");	}#ifdef DEBUG	cout<< "send_datagram: num of bytes sent is   " << len << endl;#endif	return;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美在线不卡一区| 久久精品无码一区二区三区| 蜜桃av一区二区在线观看| 中文字幕成人av| 亚洲国产精品成人综合 | 欧美性受极品xxxx喷水| 91免费视频网| 成人91在线观看| 91网上在线视频| 久久综合99re88久久爱| 久久久www免费人成精品| 国产欧美日韩卡一| 樱桃国产成人精品视频| 亚洲免费av网站| 一二三四区精品视频| 午夜欧美2019年伦理| 美女任你摸久久| 欧美日韩中文字幕精品| 欧美肥妇毛茸茸| 精品剧情v国产在线观看在线| 精品日产卡一卡二卡麻豆| 亚洲成av人片在线观看无码| 久草精品在线观看| 盗摄精品av一区二区三区| av不卡在线播放| 欧美日韩另类一区| 久久综合狠狠综合| 狠狠久久亚洲欧美| 色综合天天综合网天天看片| 欧美日韩一级大片网址| 亚洲欧美日本在线| 欧洲精品中文字幕| 亚洲精品日韩专区silk| 在线观看区一区二| 亚洲一区在线视频| 高清不卡一区二区在线| 欧美日韩久久一区二区| 天天色综合成人网| 日韩三级在线免费观看| 日韩毛片视频在线看| 日本va欧美va欧美va精品| 丁香网亚洲国际| 国产精品欧美经典| 免费人成精品欧美精品| 日韩精品一区在线| 亚洲国产日韩综合久久精品| 国产成人高清视频| 精品久久久久久久久久久久久久久| 日本麻豆一区二区三区视频| 91福利在线看| 国产精品美女久久久久久| 99re这里只有精品6| 精品国产1区二区| 免费在线观看一区二区三区| 日韩精品一区二| fc2成人免费人成在线观看播放| 亚洲欧美日韩国产另类专区 | 欧美va亚洲va在线观看蝴蝶网| 久久成人综合网| 91精品国产色综合久久不卡蜜臀| 日韩理论在线观看| 91精品国产综合久久久久久久久久 | 欧美a一区二区| 精品国产一二三| 91色.com| 激情深爱一区二区| 亚洲精品中文字幕在线观看| 日韩精品中文字幕在线不卡尤物| 成人涩涩免费视频| 调教+趴+乳夹+国产+精品| 国产精品丝袜一区| 在线播放国产精品二区一二区四区| 久久成人免费电影| 中文字幕日本不卡| 97超碰欧美中文字幕| 日韩va欧美va亚洲va久久| 国产精品欧美久久久久一区二区| 欧美三级在线播放| 国产成人av电影| 免费精品视频在线| 一区二区三区四区视频精品免费 | 亚洲久本草在线中文字幕| 日韩视频123| 欧洲亚洲国产日韩| 大陆成人av片| 久久99国产精品免费| 亚洲一卡二卡三卡四卡无卡久久| 久久久精品tv| 欧美大片顶级少妇| 制服丝袜在线91| 91黄色免费版| 91网站在线播放| 国产99久久久国产精品潘金| 老司机免费视频一区二区三区| 一区二区三区国产| 国产精品无遮挡| 精品国产91亚洲一区二区三区婷婷| 欧美三日本三级三级在线播放| 99re这里只有精品视频首页| 风流少妇一区二区| 狠狠色丁香久久婷婷综合丁香| 日韩国产精品久久久久久亚洲| 亚洲一区影音先锋| 一区二区三区四区乱视频| 综合激情成人伊人| 综合中文字幕亚洲| 日韩美女啊v在线免费观看| 国产精品美女一区二区| 亚洲国产高清不卡| 欧美激情一区二区三区不卡 | 一区二区三区精品| 亚洲欧美一区二区三区孕妇| 国产精品免费久久| 日韩理论片中文av| 亚洲黄色录像片| 亚洲妇女屁股眼交7| 天堂影院一区二区| 中文字幕二三区不卡| 国产精品夫妻自拍| 91麻豆精品国产| 日韩一区二区电影在线| 欧美大肚乱孕交hd孕妇| 日韩欧美123| 国产视频一区二区在线| 国产日韩欧美在线一区| 亚洲欧美在线视频观看| 亚洲裸体在线观看| 亚洲一区二区影院| 视频一区中文字幕国产| 精品无人码麻豆乱码1区2区| 国产精品一区二区91| 石原莉奈在线亚洲二区| 欧美aaa在线| 国产成人av一区二区三区在线| 不卡的av在线| 欧美日韩视频在线第一区| 日韩精品一区二区三区中文精品| 精品乱人伦小说| 国产精品毛片高清在线完整版| 亚洲美女精品一区| 日韩电影在线观看网站| 国产精品一区一区三区| 色综合久久久久综合99| 97超碰欧美中文字幕| 欧美精品久久一区二区三区| 日韩精品一区二| 亚洲免费在线视频一区 二区| 婷婷久久综合九色综合绿巨人| 国内精品免费**视频| 91猫先生在线| 精品国精品国产尤物美女| 国产精品短视频| 视频在线在亚洲| 99在线精品观看| 欧美大胆一级视频| 一区二区三区国产精品| 国产精品资源站在线| 欧美综合在线视频| 久久久久久久久久美女| 亚洲国产另类av| 国产黑丝在线一区二区三区| 欧美日韩中字一区| 国产精品美女久久久久久久| 日韩激情一二三区| 91啪在线观看| 26uuu精品一区二区三区四区在线| 亚洲综合小说图片| 粉嫩绯色av一区二区在线观看| 911精品产国品一二三产区| 国产女同性恋一区二区| 九九精品视频在线看| 在线中文字幕一区| 欧美韩国日本一区| 另类综合日韩欧美亚洲| 欧美三级电影一区| 亚洲人成影院在线观看| 国产东北露脸精品视频| 日韩欧美视频一区| 污片在线观看一区二区| 色婷婷激情久久| 国产精品久久久久久户外露出 | 亚洲色图视频网| 暴力调教一区二区三区| 久久综合99re88久久爱| 精品一区二区三区免费播放| 制服丝袜av成人在线看| 亚洲图片欧美综合| 欧美性色黄大片| 亚洲一区二区在线观看视频| 91看片淫黄大片一级| 亚洲视频一区二区免费在线观看| 成人综合婷婷国产精品久久蜜臀| 精品久久久久一区二区国产| 麻豆精品一区二区三区| 日韩视频在线观看一区二区| 日韩avvvv在线播放| 欧美一区二区三区性视频| 日日摸夜夜添夜夜添精品视频| 欧美三级日韩三级| 首页国产欧美日韩丝袜|