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

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

?? aodv.cpp

?? OMNET++仿真三色算法的源碼,三色算法是無線傳感器中一個典型的分簇算法
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
#include "h/aodv.h"#include "h/aodvCostants.h"#define max(a,b) (a>b ? a : b)Define_Module_Like(AODV,Routing);//****************** costructors and destructors of secondary objects ****************AODV::~AODV(){}WaitingPkt::WaitingPkt(){};WaitingPkt::~WaitingPkt(){};OldReqs::OldReqs(){};OldReqs::~OldReqs(){};PrecursorElement::PrecursorElement(){};PrecursorElement::~PrecursorElement(){};BlackListElement::BlackListElement(){};BlackListElement::~BlackListElement(){};WaitingRREP::WaitingRREP(){};WaitingRREP::~WaitingRREP(){};RouteTableElement::RouteTableElement(){};RouteTableElement::~RouteTableElement(){};PartialStat::PartialStat(double lat, double th)
{
	latencySum = lat;
	throughSum = th;
	samples = 1;
};PartialStat::~PartialStat(){};Statistics::Statistics(){	hopsSum = 0;	deliveredDataMsg = 0;	sendDataMsg = 0;	sentCtrlPkt =0;	sentDataPkt =0;	maxHop =0;}Statistics::~Statistics(){};//function used by  queue.inset  to set up a oredered queueint compareFunc(cObject* a, cObject *b){	RouteTableElement* l = (RouteTableElement*)a;	RouteTableElement* r = (RouteTableElement*)b;	return ( l->destId - r->destId);}//***********************************************************************************void AODV::initialize(){	d("AODV protocol simulator based on the IEEE-MANET Internet Draft  v.10");	//initialize the local variables	sequenceNumber = 0;	//counter to generate unique  RREQs	reqId = 0;	//	pktHistogram.setName("paket kind histogram");	pktHistogram.setRange(0,13);	hopsHistogram.setName("hops number histogram");	hopsHistogram.setRange(1,20);	//give to the queue the sorting capability	routeTab.setup(compareFunc);	//let some vars to be editable from the TkEnv environment	WATCH(sequenceNumber);	WATCH(statistics.sentCtrlPkt);	//schedule the first message tho initialize the send hello chain	helloEvent  = new cMessage("sendHello",MK_SEND_HELLO,0,P_SEND_HELLO);	scheduleAt(simTime()+0.5, helloEvent);}void AODV::handleMessage(cMessage *msg){  cMessage* reply = NULL;  d("HANDLE message routine");  if (msg->arrivedOn("fromApp") )  {	 d("messasge arrived from app");	  reply = sendData(msg);	  broadcast(reply);	  delete msg;  }  else  {	 //collect the message kind	 pktHistogram.collect( msg->kind() );  	 switch(msg->kind())	 {	 case MK_SEND_HELLO:		 d("sendHello");		 reply = generateHELLOmsg();		 broadcast(reply);		 break;	 case MK_DELETE:		 /*		  * Note that the Lifetime field in the		  * routing table plays a dual role		  *  -- for an active route it is the		  *  expiry time, and for an invalid		  *  route it is the deletion time.		  *  If a data packet is received for an		  *  invalid route, the Lifetime field is		  *  updated to current time plus		  *  DELETE_PERIOD.		  */		d("delete");		 reply = handleDelete(msg);		 broadcast(reply);		 break;	 case HELLO:		d("hello");		 //AODV specification says that the HELLO messages		 //are a spcial kind of RREP msg.		 //For semplicity I've chosen to treat		 //them as a different kind of message.		 handleHELLO(msg);		 delete msg;		 break;	 case MK_FLUSH:		d("flush");		 //A RREQ has been timed out		 //so do what has to be done		 reply = handleFlush(msg);		 broadcast(reply);		 break;	 case RREQ: 		 d("rreq "<<msg->name());		 reply = handleRREQ(msg);		 //if the message received need a reply		 //then send it to the mac module that will		 //care about sending it around		 broadcast(reply);		 delete msg;		 break;	 case RREP:		 d("rrep");		reply = handleRREP(msg);		broadcast(reply);		delete msg;		break;	case RERR:		d("rerr");		reply = handleRERR(msg);		broadcast(reply);		delete msg;		break;	case DATA:		d("data");		reply = handleData(msg);		broadcast(reply);		delete msg;		break;	case RREP_ACK:		d("ack");		handleACK(msg);		delete msg;		break;	case MK_ESP_ACK:		d("esp_ack");		reply = handleESP_ACK(msg);		broadcast(reply);		break;	case MK_BLK_LIST:		d("black list");		handleBLK_LIST(msg);		delete msg;		break;	 }  }}void AODV::finish(){	//I will write on a file instead of usa recordScalar() beacuse of a bug in this	//function that rewrites the file on each run	FILE* fout = fopen("collectedData.dat","a");	dd("Hosts number..........."<< (int)parentModule()->par("numHost"));	dd("Sent control pakets...."<<statistics.sentCtrlPkt);	dd("Sent data pakets......."<<statistics.sentDataPkt);	dd("Delivered data pakets.."<<statistics.deliveredDataMsg);	if(statistics.deliveredDataMsg > 0)		dd("Hops Avarage..........."<<statistics.hopsSum / statistics.deliveredDataMsg );		PartialStat* cell;		fprintf(fout,"Hosts number:............... %d\n",(int)parentModule()->par("numHost"));		fprintf(fout,"Sent control pakets......... %d\n",statistics.sentCtrlPkt);		fprintf(fout,"Sent data pakets............ %d\n",statistics.sentDataPkt);		fprintf(fout,"Delivered data pakets....... %d\n",statistics.deliveredDataMsg);		for(int i=0; i<= statistics.maxHop; i++)		{			cell = (PartialStat*) statistics.hopsV[i];			if(cell)			{				fprintf(fout,"Per-Hop throughput misured... %d	%.0f\n",i, cell->throughSum/cell->samples);				dd("Per-Hop throughput misured..."<<i<<" "<<cell->throughSum / cell->samples);				fprintf(fout,"Per-Hop latency misured..... %d	%.6f\n",i, cell->latencySum / cell->samples);				dd("Per-Hop latency misured....."<<i<<" "<<cell->latencySum / cell->samples);			}		}		if(statistics.deliveredDataMsg > 0)			fprintf(fout,"Hops Avarage................ %d\n",statistics.hopsSum / statistics.deliveredDataMsg);		fclose(fout);}void AODV::broadcast(cMessage* reply){	if(reply !=NULL)	{		int ttl;		d("send to mac:"<<reply->name()<<" "<<reply->kind());		ttl = (int) reply->par("ttl")-1;		if( ttl >= 0 )		{			reply->par("ttl") = ttl;			reply->par("hopCount") = 1+ (int)reply->par("hopCount");			//add the source parmeter that is common to all the messages			if(reply->hasPar("source"))				reply->par("source") = (int)parentModule()->id();			else				reply->addPar("source") = (int)parentModule()->id();			send(reply,"toMac"); // FIXME it is illegal to send a msg object and keep referencing it!!! -Andras			//send Hello only when helloEvent is extracted from the FES (event queue)			//or the message(like data) do not make the route			//table to be refreshed			if((reply->kind() != HELLO) && (reply->kind() != DATA) )				if (helloEvent->isScheduled() )					cancelEvent( helloEvent );			//only control packets make the other nodes refresh			//their route			if( reply->kind() != DATA)			scheduleAt(simTime()+HELLO_INTERVAL,helloEvent );			if( (reply->kind() == RREQ) || (reply->kind() == RREP) ||  		    	    (reply->kind() == RERR) || (reply->kind() == RREP_ACK) )					statistics.sentCtrlPkt ++;		}		else		{			d("ttl espired! the msg will not be sent:");			delete reply;		}	}}void AODV::waitForAck(cMessage* msg){		d("waitForAck");		//schedule a trigger to simulate an ACK failure		WaitingRREP* e = new WaitingRREP();		e->destId = (int) msg->par("originator");		e->nextHopId = (int) msg->par("mac");		e->trials = 1;		//pointer to the rreq message		e->rreqMsg = new cMessage(*msg);		//trigger		e->espireEvent = new cMessage("rrep ack espired",MK_ESP_ACK,0,P_ESP_ACK);		//pointer to the RREP  entry in that has failed to arrive		e->espireEvent->addPar("element") = (WaitingRREP*) e;		waitingRrep.insert( (WaitingRREP*) e);		scheduleAt(simTime()+ NEXT_HOP_WAIT, e->espireEvent);}cMessage* AODV::handleESP_ACK(cMessage* msg){	bool done = false;	WaitingRREP*e = NULL;	d("handle MK_ESP_ACK");	//ugly but it is the only way...	e =  (WaitingRREP*) (cObject*) msg->par("element");	d("RREP ACK timed out (the ack message is not arrived) check out what's to be done");	e->trials++;	if(e->trials > RREP_RETRIES)	{		d("no more trials left...put the neig. in the black list");		//flush the RREP buffer!		waitingRrep.remove(e);		//add the node to the black list		BlackListElement* b = new BlackListElement();		b->id = e->nextHopId;		b->removeEvent = new cMessage("remove from B.L.",MK_BLK_LIST,0,P_BLK_LIST);		b->removeEvent->addPar("node") = (cObject*) b;		blackList.insert( (BlackListElement*) b );		//scehdule the node removal from the blacklist		scheduleAt(simTime()+BLACKLIST_TIMEOUT,b->removeEvent);		//delete the message here because it has to be deleted only in this case		delete msg;		//msg is stored in e so I have to delete it here rather than before		delete e;		return NULL;	}	else	{		d("there are more chance left");		//retrasmit the stored rrep		cMessage* rrep = new cMessage(*e->rreqMsg);		//schedule the next ack time out event		scheduleAt(simTime()+ NEXT_HOP_WAIT, e->espireEvent);		return rrep;	}}void AODV::handleBLK_LIST(cMessage* msg){	d("hanldle black list");	BlackListElement* e = (BlackListElement*)(cObject*) msg->par("node");	blackList.remove(e);	delete e;}bool AODV::isInBlackList(int node){	cQueue :: Iterator iter(blackList,1);	bool found = false;	BlackListElement* e = NULL;	d("isInBlackList");	while( ( !iter.end() ) && ( !found ) )	{		e = (BlackListElement*) iter();		if(e->id == node)		{			found = true;		}		else iter++;	}	return found;}cMessage* AODV::sendData(cMessage* msg){	RouteTableElement *e = NULL;	d("sendData");	//check for a route	e = findNode(msg->par("dest") );	if( (e == NULL) || (e->active==false))	{		cMessage* reply;		//bufferize the request while look for a route,		//returns the event that has to be scheduled to		//menage the retrasmit RREQ event		reply = bufferize(msg->par("dest"),msg->length());		if(reply !=NULL)		{			//schedule the RREQ failure			scheduleAt(simTime()+ 2 * TTL_START * NODE_TRAVERSAL_TIME , reply);			reply = generateRREQmsg(e,msg->par("dest"),TTL_START);			//remember the rreq  			addNewReq(reply);			//return the RREQ message that wil be sent out			return reply;		}		else		{	d("RREQ not generated");			return reply;		}	}	else	{		//add all the params that are needed		cMessage* m = generateDATAmsg(e,msg->length());		d("want to send data to a known destination "<<msg->par("dest"));		statistics.sentDataPkt ++;		return m;	};}cMessage* AODV::bufferize(int dest,int pktSize){	bool found = false;	WaitingPkt* p = NULL;	d("bufferize");	for(cQueue:: Iterator iter(pktBuffer,1); !iter.end(); iter++)	{		p = (WaitingPkt*) iter();		if(p->dest == dest)		{			//if there is a RREQ at work just add a new pkt			p->pktNum++;			return NULL;		}	}	//this is a new paket : create the message that	//make the RREQ msg to be timed-out and reseded	p = new WaitingPkt;	p->dest = dest;	p->trial = 1;	p->pktNum = 1;	p->pktSize = pktSize;	//RREQ time out trigger	p->deleteEvent = new cMessage("RREQ time out",MK_FLUSH,P_FLUSH);	p->deleteEvent->addPar("dest") = dest;	p->deleteEvent->addPar("ttl") = TTL_START;	pktBuffer.insert(p);	return p->deleteEvent;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲亚洲精品在线| 中日韩av电影| 国产精品久久久久久久久晋中| 亚洲男同性视频| 韩国精品免费视频| 69堂国产成人免费视频| 樱花影视一区二区| 国产成人精品www牛牛影视| 这里是久久伊人| 亚洲免费观看高清在线观看| 韩国一区二区视频| 欧美一区二区三区公司| 夜夜嗨av一区二区三区中文字幕| 国产精品456| 欧美一区二区三区日韩视频| 亚洲国产综合色| 一本到三区不卡视频| 国产视频一区不卡| 国产一区二区三区香蕉| 欧美不卡视频一区| 男男gaygay亚洲| 欧美精品少妇一区二区三区| 一区二区在线观看视频| 91在线精品一区二区三区| 国产清纯在线一区二区www| 日产精品久久久久久久性色| 成人理论电影网| 中文字幕高清一区| 不卡的看片网站| 中文字幕巨乱亚洲| 99久久99久久精品国产片果冻| 中文字幕二三区不卡| av一区二区三区在线| 中文字幕欧美三区| 91丨九色丨蝌蚪富婆spa| 自拍视频在线观看一区二区| 99麻豆久久久国产精品免费 | 成人18视频在线播放| 久久久久久久网| 波多野结衣在线aⅴ中文字幕不卡| 国产清纯白嫩初高生在线观看91 | 2021中文字幕一区亚洲| 国产麻豆精品theporn| 久久品道一品道久久精品| 国产一区二区在线影院| 中文字幕免费观看一区| 9i看片成人免费高清| 一个色综合网站| 91精品在线免费| 精东粉嫩av免费一区二区三区 | 日韩免费一区二区三区在线播放| 美女网站在线免费欧美精品| 精品国偷自产国产一区| 国产精品1区2区| 亚洲人成伊人成综合网小说| 欧美日本国产视频| 韩国欧美国产一区| 亚洲女同女同女同女同女同69| 欧美视频一区二区三区在线观看| 日本欧美韩国一区三区| 久久免费精品国产久精品久久久久| 成人性生交大片免费看中文| 一区二区三区四区不卡在线| 日韩一级黄色大片| www.在线欧美| 三级成人在线视频| 国产欧美精品在线观看| 欧美午夜电影在线播放| 国产在线播放一区二区三区| 一区二区三区资源| 精品久久久久久久久久久久包黑料 | 亚洲成人1区2区| 久久久噜噜噜久久中文字幕色伊伊 | 国产一区不卡视频| 亚洲免费观看在线视频| 精品久久久久久久久久久久包黑料 | 国产精品美女久久久久久久久久久| 欧美性受xxxx黑人xyx| 国产一区二区三区综合| 午夜欧美2019年伦理| 国产午夜一区二区三区| 欧美日韩黄色影视| 成人av在线播放网址| 麻豆视频一区二区| 亚洲最快最全在线视频| 国产性天天综合网| 日韩欧美国产1| 欧美性受极品xxxx喷水| 波多野结衣亚洲一区| 黄页视频在线91| 丝袜美腿亚洲色图| 一区二区三区欧美亚洲| 中文字幕精品—区二区四季| 日韩美女在线视频| 在线不卡免费av| 欧美性感一类影片在线播放| aaa亚洲精品| 国产成人av一区二区三区在线观看| 爽爽淫人综合网网站| 一区二区三区中文字幕精品精品| 国产精品视频一区二区三区不卡| 欧美mv日韩mv国产网站app| 欧美日韩国产综合一区二区| 色欧美日韩亚洲| 99久久er热在这里只有精品15 | 国产一区二区三区免费播放| 日本不卡不码高清免费观看| 亚洲地区一二三色| 亚洲成人动漫av| 午夜精品影院在线观看| 午夜久久福利影院| 日本午夜一本久久久综合| 亚洲国产欧美日韩另类综合| 亚洲综合区在线| 一区二区高清免费观看影视大全| 亚洲天堂免费在线观看视频| 亚洲日本免费电影| 亚洲激情成人在线| 亚洲综合在线五月| 免费在线观看一区二区三区| 免费亚洲电影在线| 久久不见久久见免费视频1| 国产呦萝稀缺另类资源| 国产aⅴ综合色| av亚洲精华国产精华精华| 成人av手机在线观看| 91日韩在线专区| 91精品福利在线| 欧美人与性动xxxx| 欧美成人bangbros| 精品国产91洋老外米糕| 欧美极品xxx| 亚洲乱码中文字幕综合| 午夜精品久久久久影视| 麻豆91在线观看| 成人综合婷婷国产精品久久蜜臀 | 亚洲欧美日韩在线| 亚洲福利视频三区| 国模少妇一区二区三区| av在线不卡电影| 在线电影欧美成精品| 国产性天天综合网| 一区二区免费看| 国产一区二区主播在线| 91久久精品日日躁夜夜躁欧美| 在线成人午夜影院| 亚洲国产精品t66y| 天堂资源在线中文精品| 国产精品一区二区在线看| av影院午夜一区| 日韩三级免费观看| 成人欧美一区二区三区白人| 日韩经典一区二区| 9色porny自拍视频一区二区| 日韩一区二区精品在线观看| 欧美高清一级片在线观看| 日本在线播放一区二区三区| 成人激情免费视频| 日韩欧美你懂的| 亚洲欧美日韩人成在线播放| 日韩av一二三| 99在线精品视频| 精品久久国产字幕高潮| 亚洲综合一区二区三区| 风间由美性色一区二区三区| 欧美美女视频在线观看| 国产精品二三区| 国产精品综合av一区二区国产馆| 欧美图片一区二区三区| 日本一二三不卡| 国产在线不卡一区| 日韩欧美专区在线| 亚洲福利电影网| 91在线丨porny丨国产| 久久亚洲私人国产精品va媚药| 亚洲动漫第一页| 99久久精品免费看国产 | 亚洲精品免费在线观看| 国产一区二区视频在线| 7777精品伊人久久久大香线蕉| 一区二区三区四区视频精品免费| 国产成人一区在线| 久久综合色天天久久综合图片| 日日骚欧美日韩| 欧美丝袜第三区| 亚洲在线成人精品| 色综合久久中文字幕综合网| 欧美激情在线一区二区| 国产一区二区电影| 久久美女艺术照精彩视频福利播放 | 成人性生交大片免费看视频在线 | 亚洲国产视频一区二区| 99久久久无码国产精品| 中文字幕 久热精品 视频在线| 国模无码大尺度一区二区三区| 欧美变态tickling挠脚心| 久久97超碰国产精品超碰| 欧美一区二区三区婷婷月色| 五月婷婷激情综合网| 4438x成人网最大色成网站|