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

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

?? router.cc

?? In this implementation of AntNet-3.0 one could get the behavior of both algorithms through a simple
?? CC
?? 第 1 頁 / 共 4 頁
字號:
// -*- C++ -*-
// Copyright (C) 2003 Leherstuh f黵 Betrieb System/ Verteilte System, 
// Universitaet Dortmund 
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

// Author: Muddassar Farooq
// Informatik III, Universitaet Dortmund
// Germany

//-------------------------------------------------------------
// file: router.cpp
//        (part of AntNet Routing Simulation)
//-------------------------------------------------------------


#include <stdio.h>
#include "router.h"

Define_Module( Router );


Router::Router(const char *name, cModule *parentmodule,	unsigned stacksize)
	:cSimpleModule(name, parentmodule, stacksize)
{

	sequenceNumber = 0;
	timerID = 0; 
	packetCount = 0;
	linkCost = 1.0; // we are just interested in the connectivity
}

Router::~Router()
{
	
	// please ensure that we delete all packetbuffer entries to
	// avoid memory leak

	while( !timerQueue.empty())
	{
		cMessage *temp = (cMessage *) timerQueue.pop();
		timerContextInfo *tempContext = (timerContextInfo *) temp->contextPointer();
		delete tempContext;
		delete temp;
	};

	while( !commandQueue.empty())
	{
		cMessage *temp = (cMessage *) commandQueue.pop();
		delete temp;

	};


	pIter iter;
	for(iter = destGate.begin(); iter != destGate.end(); ++iter)
	{

		pairNumber *sPtr = (pairNumber*) *iter;
		delete sPtr;
	};

	delete[] sendNormalQueue; // at the moment no receive queue
	delete[] sendPriorityQueue; // just for backward ants 


	delete[] sendNormalAndForwardAnt;
	delete[] sendBackwardAnt;
	delete[] msgServiced;

	if(logResults)
	{
		delete[] queueLenPackets; 
		delete[] queueingTime;
		delete[] queueDrops;
	
		delete[] queueDelayPackets;
	}

		// Different variables that help in processing packets
	delete[] numPacketsToSend;
	delete[] numPacketsToSendDropped;

}


void Router::initialize()
{
	dataRate = par("dataRate"); //in simplenet 10Mb/sec
	myAddress = par("address");
	cPar queueLength = par("queueSize");
	numStations = par("numStations");

	
	int messageLength = (int) par("messageLength");
	double txTime =  (double) (messageLength * BYTE) / dataRate;

	topologyDiscovered = false;
	probabilisticRouting = par("probabilisticRouting");

	numNodes = par("numStations");

	startTime = (double) par("startTime");
	endTime = (double) par("endTime");

	qWeightFactor = (double) par("qWeightFactor");
	
	debug = true;

	logResults = par("logResults");
	const char *statModulePath = par("statModulePath");
	cModule *tmp1 = simulation.moduleByPath(statModulePath);
	sPtr= check_and_cast<statistics *> (tmp1);	


	WATCH(debug);

	
	fsm.setName("fsm");


	timerQueue.setName("timerQueue");
	commandQueue.setName("commandQueue");


	queueMaxLen = (int) queueLength;

	resendAttempts = par("resendAttempts");
	timeValues.helloTimeOutValue = par("helloTimeOutValue");
	timeValues.topologyUpdatePeriod = par("topologyUpdatePeriod");
	timeValues.waitHelloReplyTime = par("waitHelloReplyTime");

	tcb.state = INIT_S;

	msgServiced = NULL;

	startUpMessage = new cMessage("StartUpMessage",START_UP_MESSAGE);
	scheduleAt(0.0 , startUpMessage);

	
}

void Router::handleMessage(cMessage *msg)
{

		/** Now we really implement the real routing algorithm. Since we
	    start with a very simple model, hence our first algorithm
	    is link State Routing, a variant of OSPF. We represent the
	    topology of the network in a graph. We will implement
	    following steps

	   1. A router first discovers its neighbors and their network addresses
	   2. Measures the delay cost to each of its neighbors
	   3. Start normal ant algorithm
	**/
	
	//  first message a router sends after coming up is to send hello 
	//  message


	simtime_t time = simTime();

	if( time > startTime && time < endTime) //router down
	{
		if(dynamic_cast<samplePacket *> (msg) != NULL)  
		{
			samplePacket *dPacket = (samplePacket*) msg;
			int destination = dPacket->getDestAddress();

			if(destination == myAddress)
			{
				sPtr->incrTotalBitsUndeliverable();
				
			}
			else
			{
					sPtr->incrTotalBitsLost();
			}
			delete dPacket;

		}
		else if(dynamic_cast<Ant *> (msg) != NULL)
		{
			delete msg;
		}

	}
	else
	{

		FSM_Switch( fsm )
		{
			case FSM_Exit(INIT):
				// switch to send Hello Packet State
				analyzeEvent(msg);
				performExitInitActions(msg);
				break;

			case FSM_Exit(SENT_HELLO_PACKET):
				analyzeEvent(msg);
				performActionsInSentHelloState(msg);
				break;

			case FSM_Exit(NORMAL):
				analyzeEvent(msg);
				performActionsInNormalState(msg);
				break;

		} 
	}
}

void Router::analyzeEvent(cMessage *msg)
{
	
	switch(msg->kind())
	{
		case NETLAYER_HELLO_PACKET:
			tcb.event = NETLAYER_HELLO_PACKET_EVENT;
			break;
		
		case NETLAYER_HELLO_REPLY_PACKET:
			tcb.event = NETLAYER_HELLO_REPLY_PACKET_EVENT;
			break;

		case HELLO_RESEND_TIMER:
			tcb.event = HELLO_RESEND_TIMER_EVENT;
			break;
		
 		case NETLAYER_DATA_PACKET:
			tcb.event = NETLAYER_DATA_PACKET_EVENT;
			break;

		case NETLAYER_BACKWARD_ANT:
			tcb.event = NETLAYER_BACKWARD_ANT_EVENT;
			break;

		case NETLAYER_FORWARD_ANT:
			tcb.event = NETLAYER_FORWARD_ANT_EVENT;
			break;
		
		case START_UP_MESSAGE:
			tcb.event = START_UP_MESSAGE_EVENT;
			break;
		
		
		case TOPOLOGY_UPDATING_TIMER:
			tcb.event = TOPOLOGY_UPDATING_TIMER_EVENT;
			break;
		
		case NEIGHBOR_DISCOVERED_COM:
			tcb.event = NEIGHBOR_DISCOVERED_EVENT;
			break;

		case EOT_TIMER:
			tcb.event = END_OF_TRANSMISSION_EVENT;
		
		default:
			if( msg->kind() >= SEND_NORMAL_PACKET_COM && msg->kind() < SEND_BACKWARD_ANT_COM)
			{
				tcb.event = SEND_NORMAL_PACKET_EVENT;
			}
			else if( msg->kind() >= SEND_BACKWARD_ANT_COM)
			{
				tcb.event = SEND_BACKWARD_ANT_EVENT;
			}
			else
			{
				if(debug) ev<<"Unknown event:  " << msg->kind() << endl;
				error("Unknow event in AnyalyzeEvent:");
			}
			break;
	}
}

void Router::performExitInitActions(cMessage *msg)
{

	switch(tcb.event)
	{
		case START_UP_MESSAGE_EVENT:
			sendHelloPacket();
			tcb.state = SENT_HELLO_PACKET_S;
			neighborDiscovered = new cMessage("NeighborDiscovered", NEIGHBOR_DISCOVERED_COM);
			scheduleAt(simTime()+ timeValues.waitHelloReplyTime, neighborDiscovered);

			topologyUpdateTimer = new cMessage("topologyTimer", TOPOLOGY_UPDATING_TIMER);
			scheduleAt(simTime()+ timeValues.topologyUpdatePeriod, topologyUpdateTimer);

			tcb.state = SENT_HELLO_PACKET_S;
			FSM_Goto(fsm, SENT_HELLO_PACKET);
			break;

		default:
			if(debug)
			{
				ev << "In INIT state received: " << tcb.event << endl;
				ev << "Ignoring case: not handeled in switch(INIT)";
			}
			break;
	}
}

void Router::performActionsInSentHelloState(cMessage *msg)
{
	int address;
	int index;

	switch(tcb.event)
	{

		case NETLAYER_HELLO_PACKET_EVENT:
			if(debug) ev << "Hello packet received in sentHello" << endl;
			address = processHelloAndReplyMessage((helloAndReplyMessage *) msg);
			break;

		case NETLAYER_HELLO_REPLY_PACKET_EVENT:
			if(debug) ev << "Hello Reply Packet Received in sentHello" << endl;
			processHelloAndReplyMessage((helloAndReplyMessage *) msg);
			break;

	
		case HELLO_RESEND_TIMER_EVENT:
			if(debug) ev << "Hello TimeOut in Sent Hello State" << endl;

			// we will retransmit this message five time
			retransmitHelloMessageForThisTimerMessage(msg);
			break;

		case NEIGHBOR_DISCOVERED_EVENT:

			deleteAllTimerEventsForThisID( (int) HELLO_RESEND_TIMER);
			tcb.state = NORMAL_S;
			topologyDiscovered = true;
			initializeQueues();
			FSM_Goto(fsm, NORMAL);
			break;


		case NETLAYER_DATA_PACKET_EVENT:
			if(debug) ev << "Data Packet Received in sentHello" << endl;
			handleDataPackets((samplePacket*) msg);
			break;

		case SEND_NORMAL_PACKET_EVENT:
			if(debug) ev << "Send Normal Packet Received in sentHello" << endl;
			index = msg->kind() - SEND_NORMAL_PACKET_COM;
			handleMessageQueue(msg, index);
			break;
		

		case NETLAYER_FORWARD_ANT_EVENT:
			if(debug) ev << "Forward Ant Received in sentHello" << endl;
			handleForwardAnt((Ant *) msg);

			break;

		case NETLAYER_BACKWARD_ANT_EVENT:
			if(debug) ev << "Backward Ant Received in sentHello" << endl;
			handleBackwardAnt((Ant *) msg);
			break;

		case SEND_BACKWARD_ANT_EVENT:
			if(debug) ev << "Send Backward Ant Event received in sentHello" << endl;
			index = msg->kind() - SEND_BACKWARD_ANT_COM;
			handleBackwardAntMessageQueue( (Ant *) msg, index);
			break;

		default:
			if(debug) ev << "In sentHello State received: " << tcb.event << endl;
			error("Unexpected Event: Case Not Handeled");
			break;
	}
}

void Router::performActionsInNormalState(cMessage *msg)
{
	int address;
	int index;

	switch(tcb.event)
	{

		case NETLAYER_HELLO_PACKET_EVENT:
			if(debug) ev << "Hello Packet Received in Normal State" << endl;
			address = processHelloAndReplyMessage((helloAndReplyMessage *) msg);
			sendHelloPacket(address);
			neighborDiscovered = new cMessage("NeighborDiscovered", NEIGHBOR_DISCOVERED_COM);
			scheduleAt(simTime()+ timeValues.waitHelloReplyTime, neighborDiscovered);
			break;
		
		case NETLAYER_HELLO_REPLY_PACKET_EVENT:
			if(debug) ev << "Hello Reply Packet Received in sentHello" << endl;
			processHelloAndReplyMessage((helloAndReplyMessage *) msg);
			break;

		
		case HELLO_RESEND_TIMER_EVENT:
			if(debug) ev << "Hello TimeOut in Normal State" << endl;

			// we will retransmit this message five time
			retransmitHelloMessageForThisTimerMessage(msg);
			break;

		case NEIGHBOR_DISCOVERED_EVENT:
			tcb.state = NORMAL_S;
			initializeQueues();
			FSM_Goto(fsm, NORMAL);
			break;


		case TOPOLOGY_UPDATING_TIMER_EVENT:
			if(debug) ev << "Topology Update in Normal State" << endl;
			sendHelloPacket();
			tcb.state = SENT_HELLO_PACKET_S;

			topologyUpdateTimer = new cMessage("topologyTimer", TOPOLOGY_UPDATING_TIMER);
			scheduleAt(simTime()+ timeValues.topologyUpdatePeriod, topologyUpdateTimer);

			sendHelloMsg = new cMessage("sendHelloPacket", SEND_HELLO_PACKET_COM);
			scheduleAt(simTime()+ timeValues.waitHelloReplyTime, sendHelloMsg);

			FSM_Goto(fsm, SENT_HELLO_PACKET);

			break;
		
 		case NETLAYER_DATA_PACKET_EVENT:
			if(debug) ev << "Data Packet Received in Normal State" << endl;
			handleDataPackets((samplePacket*) msg);
			break;


		case SEND_NORMAL_PACKET_EVENT:
			if(debug) ev << "Send Normal Packet Received in Normal State" << endl;
			index = msg->kind() - SEND_NORMAL_PACKET_COM;
			handleMessageQueue(msg, index);
			break;


		case NETLAYER_FORWARD_ANT_EVENT:
			if(debug) ev << "Forward Ant Received in Normal" << endl;
			handleForwardAnt((Ant *) msg);
			break;

		case NETLAYER_BACKWARD_ANT_EVENT:
			if(debug) ev << "Backward Ant Received in Normal" << endl;
			handleBackwardAnt((Ant *) msg);
			break;

		case SEND_BACKWARD_ANT_EVENT:
			if(debug) ev << "Send Backward Ant Event received in Normal" << endl;
			index = msg->kind() - SEND_BACKWARD_ANT_COM;
			handleBackwardAntMessageQueue( (Ant *) msg, index);
			break;


		
		default:
			if(debug) ev << "In Normal State received: " << tcb.event << endl;
			ev << "Current State is" << tcb.state << endl;
			error("Unexpected Event: Case Not Handeled");
			break;
	}
}

void Router::sendHelloPacket()
{

	char msgname[70];

	// We need to find out which ports are connected to another routers 
	// and then send hello message on all of these ports

	cGate *outTempGate = gate("out");
	int vectorSize = outTempGate->size();

	for(int i=0; i<vectorSize; i++)
	{
		cGate *outRouterGate = gate("out", i); //access each gate of router
		int gateIDtoNode = outRouterGate->id();
		if(outRouterGate->isConnected())
		{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成va人片在线观看| av中文字幕亚洲| 国产成人免费视频一区| 99九九99九九九视频精品| 91视频免费播放| 欧美一二三四在线| 国产精品视频第一区| 亚洲综合另类小说| 激情综合网激情| 色婷婷综合在线| 日韩视频一区二区三区在线播放| 久久精品夜色噜噜亚洲a∨ | 精品一区二区三区久久| 成人做爰69片免费看网站| 欧美日韩黄色一区二区| 国产精品天干天干在线综合| 一区二区三区在线影院| 美女视频第一区二区三区免费观看网站| 极品美女销魂一区二区三区免费| 91麻豆国产福利在线观看| 久久婷婷国产综合精品青草| 一区二区三区在线视频观看 | 欧美精品粉嫩高潮一区二区| 国产喷白浆一区二区三区| 亚洲人成在线播放网站岛国| 日韩成人午夜电影| 99久久99久久精品免费看蜜桃 | 久久综合资源网| 午夜精品久久久久久久 | 国产精品免费看片| 日韩av电影免费观看高清完整版 | 91精品国产综合久久精品性色| 中文字幕乱码久久午夜不卡 | 欧美日韩免费在线视频| 国产精品嫩草久久久久| 久久精品国产亚洲一区二区三区| 欧美午夜影院一区| 最近日韩中文字幕| 国产成人啪午夜精品网站男同| 欧美一区二区三区的| 一区二区三区四区乱视频| 成人综合日日夜夜| 欧美精品一区二区久久久| |精品福利一区二区三区| 久久福利资源站| 91精品久久久久久久99蜜桃 | 久久久精品国产免费观看同学| 亚洲国产另类av| 91传媒视频在线播放| 国产精品久久久久影视| 国产精品18久久久久久久网站| 日韩美一区二区三区| 日本一区中文字幕 | 久久久久久久综合色一本| 麻豆精品久久久| 日韩一二三区视频| 麻豆免费精品视频| 欧美一区二区三区在线观看视频| 婷婷一区二区三区| 在线播放中文一区| 蜜桃视频在线观看一区二区| 欧美福利视频导航| 亚洲精品国产无天堂网2021| 9i在线看片成人免费| 亚洲伦在线观看| 在线国产电影不卡| 视频在线观看一区二区三区| 欧美电影影音先锋| 九九国产精品视频| 国产精品无人区| 一本一道久久a久久精品| 亚洲一区在线观看免费 | 91啪在线观看| 午夜伊人狠狠久久| 日韩精品在线一区| 国产99久久久国产精品| 亚洲欧美日本在线| 欧美日韩在线三区| 久久成人免费网站| 椎名由奈av一区二区三区| 欧美精品一区二区在线观看| 成人免费va视频| 亚洲一二三区不卡| 精品欧美一区二区三区精品久久| 国产最新精品免费| 亚洲婷婷综合久久一本伊一区| 色婷婷av一区二区三区之一色屋| 五月天丁香久久| 国产丝袜在线精品| 欧美日韩在线播放| 国产高清在线精品| 亚洲精选视频在线| 精品乱人伦小说| 色综合久久综合| 国产毛片精品视频| 亚洲国产成人av好男人在线观看| 日韩欧美高清一区| 99久久久久免费精品国产| 亚洲午夜视频在线观看| 91精品国产欧美一区二区成人| 国产sm精品调教视频网站| 亚洲va国产天堂va久久en| 国产女人水真多18毛片18精品视频 | 成人av在线资源| 免费一区二区视频| 亚洲天堂成人网| 国产亚洲va综合人人澡精品| 99久久精品国产精品久久| 久久国产综合精品| 午夜精品视频在线观看| 精品久久久久久亚洲综合网| 91免费看视频| 国产成人综合在线播放| 日韩成人免费看| 亚洲综合自拍偷拍| 国产精品网站在线| 婷婷一区二区三区| 日韩伦理电影网| 国产调教视频一区| 精品国产成人系列| 欧美一区二区三区四区五区| 色域天天综合网| 99综合影院在线| 国产成人精品aa毛片| 亚洲美女免费在线| 国产精品国产自产拍在线| 久久久综合九色合综国产精品| 91精品国产综合久久小美女| 欧美性高清videossexo| 国产一区欧美二区| 奇米精品一区二区三区在线观看一 | 蜜桃视频一区二区三区在线观看| 一区二区三区丝袜| 伊人色综合久久天天人手人婷| 久久精品人人做人人综合| 精品日韩一区二区三区| 欧美日韩中文国产| 欧美图片一区二区三区| 99re成人精品视频| 国产在线精品不卡| 国产一区二区在线电影| 国产精一区二区三区| 国产xxx精品视频大全| 国产精品一二三区在线| 国产麻豆午夜三级精品| 成人一级片在线观看| av不卡免费电影| 91久久线看在观草草青青| 91国产丝袜在线播放| 欧美群妇大交群的观看方式| 欧美久久一二区| 日韩一级片在线播放| 欧美一区二区视频在线观看2020| 91精品国产综合久久久蜜臀粉嫩| 91精品国产色综合久久不卡电影| 日韩一二三区不卡| 久久精品人人做人人综合| 国产精品福利一区二区| 亚洲国产精品人人做人人爽| 天天影视涩香欲综合网| 韩国三级在线一区| 91伊人久久大香线蕉| 色综合天天狠狠| 555www色欧美视频| 国产欧美一区视频| 亚洲一区二区精品视频| 成人免费视频一区二区| 91精品免费在线| 亚洲一本大道在线| 99久久99久久精品免费看蜜桃| 欧美成人乱码一区二区三区| 夜夜精品视频一区二区| 成人av免费在线| 久久午夜色播影院免费高清| 亚洲成人午夜影院| 一本大道av伊人久久综合| 国产人久久人人人人爽| 另类小说视频一区二区| 欧美视频完全免费看| 亚洲免费看黄网站| 成人综合激情网| 久久这里只有精品6| 久久精品国产亚洲a| 7777精品久久久大香线蕉| 一区二区三区在线看| 97久久超碰国产精品| 国产欧美一区二区三区沐欲| 激情综合五月天| 精品日韩在线观看| 蜜臀精品一区二区三区在线观看| 欧美午夜电影网| 一区二区免费在线播放| 99精品视频在线观看免费| 国产精品污污网站在线观看| 国产二区国产一区在线观看| 久久一日本道色综合| 国产精品综合在线视频| 久久久久久久久伊人| 国内精品免费在线观看| 26uuu精品一区二区|