亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美日韩精品一区二区三区四区| 精品第一国产综合精品aⅴ| 欧美浪妇xxxx高跟鞋交| 久久久久久久综合| 一区二区不卡在线播放| 精品一区二区三区在线播放| 不卡视频免费播放| 91精品国产免费| 一区二区三区美女视频| 国产精品18久久久久| 欧美日韩一区二区三区不卡| 国产精品热久久久久夜色精品三区| 视频一区在线播放| 色综合天天视频在线观看| 久久综合国产精品| 婷婷激情综合网| 欧美性三三影院| 国产精品久久久久9999吃药| 久久精品72免费观看| 欧美日韩高清一区二区不卡| 一区二区三区在线观看动漫| 成人高清av在线| 国产亚洲短视频| 国内精品伊人久久久久av一坑| 欧美日韩1区2区| 一区二区三区中文字幕精品精品 | 欧美亚洲国产一区在线观看网站| 2023国产精华国产精品| 日韩福利电影在线观看| 欧美亚洲综合在线| 一区二区三区四区国产精品| 91丨九色丨蝌蚪富婆spa| 国产精品动漫网站| 99麻豆久久久国产精品免费| 国产精品乱子久久久久| 国产69精品久久777的优势| 国产校园另类小说区| 国产精品一品二品| 国产精品污网站| 成人精品视频一区二区三区尤物| 日本一区二区视频在线观看| 成人午夜激情片| 国产精品久久久久婷婷| 成人黄色小视频| 亚洲视频一区在线| 在线观看网站黄不卡| 亚洲一级电影视频| 91精品啪在线观看国产60岁| 日本欧美在线看| 精品国产精品一区二区夜夜嗨| 韩国三级中文字幕hd久久精品| 久久综合久久鬼色| 91啪九色porn原创视频在线观看| 亚洲激情网站免费观看| 9191成人精品久久| 国产激情一区二区三区| 亚洲人午夜精品天堂一二香蕉| 欧美色倩网站大全免费| 日韩在线一区二区| 久久精品人人做人人综合| 成人激情免费电影网址| 亚洲成人精品影院| 久久日韩精品一区二区五区| 成人av动漫网站| 亚洲成a人在线观看| 精品成人在线观看| 91偷拍与自偷拍精品| 婷婷成人激情在线网| 国产三区在线成人av| 欧洲一区二区三区在线| 日本成人中文字幕在线视频| 欧美高清在线一区二区| 欧洲精品中文字幕| 精品一区二区在线观看| 亚洲天天做日日做天天谢日日欢 | 婷婷综合久久一区二区三区| 亚洲精品一区二区三区蜜桃下载| 99精品欧美一区二区三区小说| 午夜精品久久久久影视| 国产人伦精品一区二区| 欧美日韩中文另类| 成人福利在线看| 日本不卡的三区四区五区| 国产精品私房写真福利视频| 91精品国产综合久久久久久久久久 | 奇米色777欧美一区二区| 国产精品初高中害羞小美女文| 91精品国产色综合久久不卡电影 | 国产a精品视频| 午夜婷婷国产麻豆精品| 欧美高清在线精品一区| 日韩视频一区在线观看| 在线观看不卡一区| 波多野结衣中文字幕一区二区三区| 日韩成人一级大片| 一个色妞综合视频在线观看| 中文字幕欧美区| 精品卡一卡二卡三卡四在线| 欧美亚洲综合另类| 99视频精品全部免费在线| 国产乱子轮精品视频| 午夜一区二区三区在线观看| 亚洲人成亚洲人成在线观看图片| 久久久www成人免费无遮挡大片| 4438成人网| 欧美日韩在线播| 一本色道久久综合亚洲精品按摩| 成人听书哪个软件好| 精品在线播放午夜| 男女性色大片免费观看一区二区| 亚洲午夜激情网站| 亚洲美女屁股眼交| 亚洲男帅同性gay1069| 中文字幕日本不卡| 成人欧美一区二区三区白人| 国产日韩欧美在线一区| 久久亚洲一区二区三区明星换脸| 日韩欧美中文字幕公布| 欧美一区二区三区爱爱| 日韩亚洲欧美在线| 日韩丝袜美女视频| 日韩视频免费观看高清完整版在线观看| 91福利视频久久久久| 欧美日韩免费观看一区二区三区| 欧美亚洲精品一区| 欧美日本韩国一区二区三区视频| 欧美三级一区二区| 4438亚洲最大| 精品国产免费视频| 国产亚洲精品7777| 国产精品福利一区| 亚洲免费在线电影| 午夜精品成人在线| 美女脱光内衣内裤视频久久影院| 免费在线观看视频一区| 国内精品久久久久影院一蜜桃| 国产精品一区二区黑丝| 99re这里只有精品视频首页| 日本丰满少妇一区二区三区| 欧美精品xxxxbbbb| 26uuu欧美日本| 国产精品乱码妇女bbbb| ...av二区三区久久精品| 亚洲电影一区二区| 国产又粗又猛又爽又黄91精品| 成人免费视频一区| 欧美日韩国产一级片| 日韩一区二区三区av| 国产精品日日摸夜夜摸av| 亚洲一区免费观看| 国产精品资源网| 91久久线看在观草草青青| 91精品国产综合久久久久| 国产亚洲欧美在线| 亚洲永久精品国产| 国内精品国产成人| 在线观看91视频| 国产日韩综合av| 日韩高清一区在线| 成人18精品视频| 欧美一区日本一区韩国一区| 中文字幕日韩欧美一区二区三区| 三级欧美韩日大片在线看| 成人激情av网| 日韩午夜av电影| 亚洲免费在线观看视频| 亚洲另类在线视频| 亚洲aaa精品| eeuss鲁片一区二区三区在线观看| 欧美专区亚洲专区| 91视频xxxx| 国产喂奶挤奶一区二区三区| 亚洲色图19p| 极品少妇一区二区| 91精品国产综合久久精品麻豆| 欧美激情综合网| 韩国女主播一区二区三区| 国产黄色精品视频| 日韩欧美一二三区| 亚洲综合激情另类小说区| 国产真实精品久久二三区| 制服丝袜在线91| 亚洲色欲色欲www在线观看| 精品一区二区日韩| 色综合久久中文字幕综合网| 国产欧美综合在线| 免费观看在线色综合| 91久久精品网| 一卡二卡欧美日韩| 成人精品小蝌蚪| 精品国产污污免费网站入口 | 欧美性生交片4| 久久综合九色综合欧美亚洲| 亚洲成在线观看| 国产成人在线看| 精品国产不卡一区二区三区| 婷婷久久综合九色综合绿巨人| 激情综合网最新| 久久久精品免费免费| 免费看黄色91|