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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ashr.h

?? 大名鼎鼎的傳感器網(wǎng)絡(luò)仿真實驗室平臺SENSE
?? H
?? 第 1 頁 / 共 4 頁
字號:
/************************************************************************* *   @<title> Autonomic Self-Healing Routing </title>@ * *   @<!-- Copyright 2006 Mark Lisee, Joel Branch, Gilbert (Gang) Chen, *   Boleslaw K. Szymanski and Rensselaer Polytechnic Institute. *    *   Copyright 2003 Gilbert (Gang) Chen, Boleslaw K. Szymanski *   and Rensselaer Polytechnic Institute. All worldwide rights *   reserved.  A license to use, copy, modify and distribute this *   software for non-commercial research purposes only is hereby *   granted, provided that this copyright notice and accompanying *   disclaimer is not modified or removed from the software. * *   DISCLAIMER: The software is distributed "AS IS" without any *   express or implied warranty, including but not limited to, any *   implied warranties of merchantability or fitness for a particular *   purpose or any warranty of non-infringement of any current or *   pending patent rights. The authors of the software make no *   representations about the suitability of this software for any *   particular purpose. The entire risk as to the quality and *   performance of the software is with the user. Should the software *   prove defective, the user assumes the cost of all necessary *   servicing, repair or correction. In particular, neither Rensselaer *   Polytechnic Institute, nor the authors of the software are liable *   for any indirect, special, consequential, or incidental damages *   related to the software, to the maximum extent the law *   permits.-->@ * *************************************************************************//*** Modifications from rr.h** - replaced lambda by slotting** - Added T1, T2 & T3 time periods**   - code to gather statistics**   - code to set # slots per period from command line** - Added handling of collision packet**   - new packet type & field in header changed from int to enum**   - Transmission is scheduled when a collision is detected** - Added # slots to packet header**   - I added this when I thought it would be required for v2. It no longer**     is, but it's staying** - Sender may modify its hop count based on slot during which response is**   sent.*/#ifndef SSRv02_h#define SSRv02_h#include <map>#include <list>#ifdef	MWL_PRINT//#define mwlDoPrint	(SimTime() > 1400. && SimTime() < 1500.)//#define	mwlPrint(x)	 if( mwlDoPrint) printf x#define mwlDoPrint	(true)#define	mwlPrint(x)	 printf x#else	//MWL_PRINT#define	mwlPrint(x)#define	mwlDoPrint	(false)#endif	//MWL_PRINTtemplate <class PLD>struct SSRv02_Struct{  enum PktType { REQUEST, REPLY, DATA, ACK, COLL, HELLO, BACKUP};  // REQUEST: type + src_addr + dst_addr + seq_number + hop  enum { REQUEST_SIZE = 3 * sizeof(int) + 2 * ether_addr_t::LENGTH };  // REPLY: type + src_addr + dst_addr + seq_number + 2 * hop + flag  enum { REPLY_SIZE = 4 * sizeof(int) + 4 * ether_addr_t::LENGTH + sizeof( bool) };  // DATA: type + src_addr + dst_addr + seq_number + 2 * hop + flag  enum { DATA_SIZE = 4 * sizeof(int) + 4 * ether_addr_t::LENGTH + sizeof( bool) };  // ACK: type + src_addr + dst_addr + seq_number  enum { ACK_SIZE = 3 * sizeof(int) + 2 * ether_addr_t::LENGTH };  // COLL: type + src_addr + dst_addr + seq_number + slot number  enum { COLL_SIZE = 3 * sizeof(int) + 2 * ether_addr_t::LENGTH };  // BACKUP: type + src_addr + dst_addr + seq_number  enum { BACKUP_SIZE = 2 * sizeof(int) + 2 * ether_addr_t::LENGTH };  // HELLO: type + src_addr + dst_addr + seq_number + hop count  enum { HELLO_SIZE = 3 * sizeof(int) + 2 * ether_addr_t::LENGTH };      struct hdr_struct  {    PktType	type;    ether_addr_t src_addr;    ether_addr_t dst_addr;    ether_addr_t cur_addr;    ether_addr_t pre_addr;    unsigned int seq_number;    unsigned int size;    double	send_time;	// time received from transport    double	xmit_start_time;	// time sent to mac layer    double	xmit_end_time;		// time sent to mac layer    unsigned int actual_hop;    unsigned int expected_hop;    unsigned int max_hop;    double	delay;    int		t1Index;	// id of endT1Timer    int		t2Index;	// id of endT2Timer//mwl    int		t3Index;	// id of endT3Timer    int		collIndex;	// id of endCollTimer    bool	canceled;    int		resend;    int		numSlots;	// k, the number of slots in T2    int		slotNumber;    bool	collDetected;    bool	collPktSent;    bool	t3Flag;		// if true, nodes may forward this pkt in T3#ifdef VISUAL_ROUTE#ifndef VR_SIZE#define VR_SIZE 20#endif    path_t<VR_SIZE> path;#endif    bool dump(std::string& str) const;  };  typedef PLD payload_t;  typedef smart_packet_t<hdr_struct,PLD> packet_t;};#define	HCArraySize		(20+1)#define	MaxT2Slots		100#define	DefaultNumT2Slots	3#define MaxT3Slots		10#define	DefaultNumT3Slots	2/*** The AckWindow is a period of time during which only Acks from intermediate** nodes are sent. This prevents the Acks from colliding with packets that are** being forwarded. Note that the destination sends its Ack as a normal packet,** i.e. after the AckWindow. This is because when node N forwards a packet, it** causes node N-1 to send an Ack (during the AckWindow) and N+1 to forward the** packet (after the AckWindow).*/template <class PLD>component SSRv02 : public TypeII, public SSRv02_Struct<PLD>{ public:  ether_addr_t	MyEtherAddr;  simtime_t	ForwardDelay;  double	RXThresh;  bool		DumpPackets;  double	AckWindow;	// see comment above  int		MaxResend;  unsigned int	TimeToLive;  unsigned int	AdditionalHop;      int		SentPackets;  int		RecvPackets;  int		RecvUniPackets;  double	TotalDelay;  int		TotalSamples;  int		TotalHop;  int		RecvDataPackets;  int		HopCounts[ HCArraySize];  int		T1PktsSent;  int		T2PktsSent[ MaxT2Slots];  int		T3PktsSent[ MaxT3Slots];  int		T3AbnormalPktsSent;  int		DropPkts;		// # times h_table > h_pkt+n  int		T1Collisions;  int		T2Collisions[ MaxT2Slots];  int		T3Collisions[ MaxT3Slots];  int		IgnoreCollisions;	// collision after end of T3  int		T1PktsRcvd[2];  int		T2PktsRcvd[2][ MaxT2Slots];  int		T3PktsRcvd[2][ MaxT3Slots];  int		T4PktsRcvd[2];//mwl  int		OtherPktsRcvd[2];  int		CanceledPktsRcvd[2];  int		BadAddrPktsRcvd[2];  int		WrongHopPktsRcvd[2];  static const char	*pktRcvdName[2];  typedef std::list<packet_t* > packet_queue_t;/*** Fields that support the transition timer.** This timer simulates the amount of time it takes the hardware to transition** from sensing the carrier to actually transmitting a packet.*/  Timer <trigger_t> transitionTimer;  packet_t	*transitionPkt;		// pkt to be sent when timer expires  inport void	TransitionTimer( trigger_t &);/*** When a COLL packet is sent, the original packet is added to the** m_collPktsSent_queue. A list of collision packets is required to properly** implement BACKUP messages.**** In some situations, a timer is required to remove packets from the queue.** For example, N1 sends a packet. N2 forwards it, but N1 detects it as a** collision when there is no interference at N2. (N1 could be located between** the two nodes.) In this case, N1 will schedule a COLL. If the COLL** is received by N2 after N3 has forwarded the packet, the COLL packet will be** ignored. In this case, the original packet needs to be removed from N1.*/  InfiTimer <SSRv02_Struct<PLD>::packet_t*> endCollTimer;  inport void	EndCollTimer( packet_t *pkt, unsigned int index);  packet_queue_t	m_collPktsSent_queue;	// pkts for which a COLL packet has been sent/*** Fields that support the timers that expire at the ends of T1, T2 & T3.*/  InfiTimer <SSRv02_Struct<PLD>::packet_t*> endT1Timer;  InfiTimer <SSRv02_Struct<PLD>::packet_t*> endT2Timer;//mwl  InfiTimer <SSRv02_Struct<PLD>::packet_t*> endT3Timer;  inport void	EndT1Timer( packet_t *pkt, unsigned int index);  inport void	EndT2Timer( packet_t *pkt, unsigned int index);//mwl  inport void	EndT3Timer( packet_t *pkt, unsigned int index);  packet_queue_t	m_T3_queue;	// packets w/ t3 timer pending/*** Connections to transport (layer above) and mac (layer below)*/  inport inline void	from_transport( payload_t& pld, ether_addr_t& dst,					unsigned int size);  inport inline void	from_mac_data( packet_t* pkt, double power);  inport inline void	from_mac_ack( bool errflag);  inport inline void	from_mac_recv_recv_coll( packet_t *pkt1, packet_t *pkt2);  outport void		cancel();  outport void		to_transport( payload_t& pld );  outport void		to_mac( packet_t* pkt, unsigned int size,				double backoff);  void		Start();  void		Stop();		SSRv02();  virtual	~SSRv02();  int		mwlGetHC( int addr);/*** Added static members for slot width, transition timer and back off*/  static void		setSlotWidth( double);  static double		getSlotWidth();  static void		setTransitionTime( double);  static double		getTransitionTime();  static void		setNumT2Slots( int);  static int		getNumT2Slots();  static void		setNumT3Slots( int);  static int		getNumT3Slots();	 private:  void		updateHopCountInCache( ether_addr_t src,				       unsigned int hopCount, bool always,				       const char *, packet_t *pkt); protected:  static double		slotWidth;  static double		transitionTime;  static int		numT2Slots;  static int		numT3Slots;  void		CancelPacket( ether_addr_t& src, unsigned int seq_number);  void		CancelRetransmission( ether_addr_t& src, unsigned int seq);  void		SendPacket( packet_t *p, bool new_seq = true);  void		ForwardPacket( packet_t *p);  void		SendToMac( packet_t *pkt);  void		SendAck( ether_addr_t, ether_addr_t, ether_addr_t,			 unsigned int, simtime_t);  void		CheckBuffer( ether_addr_t, unsigned int);  void		sendCollisionPacket( packet_t *pkt);  void		receiveCollisionPacket( packet_t *pkt);  void		receiveHelloPacket( packet_t *pkt);  void		receiveBackupPacket( packet_t *pkt);  void		receiveAckPacket( packet_t *pkt);  void		receiveReqRepDataPacket( packet_t *pkt);  bool		determineAckStatus( packet_t *pkt);  void		performAck( packet_t *pkt);    // these return pointers to packet_t, but I wasn't able to figure out  // how to avoid compiler errors, therefore cast them to void *  void		*createBasicPkt();  void		*createDataPkt( payload_t &pld, ether_addr_t dst,				unsigned int size);  void		*createT3Pkt( packet_t *pkt);  void		*createRequestPkt( ether_addr_t dst);  void		*createReplyPkt( ether_addr_t src, unsigned int expectedHop);  void		*createAckPkt( ether_addr_t src_addr, ether_addr_t cur_addr,			       ether_addr_t pre_addr, unsigned int seq_number,			       simtime_t delay);  void		*createCollPkt( packet_t *pkt);  void		*createBackupPkt( packet_t *pkt);  void		*createHelloPkt();  bool		m_mac_busy;		// if the mac layer is busy  unsigned int	m_seq_number;		// current sequence number  packet_queue_t	m_send_queue;	// list of packets to send  packet_t	*m_active_packet;  class seq_number_t      {       public:	seq_number_t () : state( Initial), current(0), bits(0u) {}	bool check(int n)	    {	      if( n + (int)sizeof(unsigned long) <= current )		return true;	      if ( n > current )	      {		bits = bits << (n - current);		current = n;	      }	    	      unsigned long flag = 1 << (current - n);	      unsigned long r = flag & bits;	      bits |= flag;	      return r;	    }	unsigned int	hopCount() const;	void		hopCount( unsigned int newHC, bool print);       private:	unsigned int	currentHC;	unsigned int	pendingHC;	enum { Initial, Steady, Changing}	state;	int		updateCtr;	int		current;	uint32_t	bits;	static int	maxCounter;      };/******************************************************************* * For each source, we must maintain a @seq_number_t@ object, so we better * keep them in a map. *******************************************************************/  typedef std::map<ether_addr_t, seq_number_t, ether_addr_t::compare> cache_t;  cache_t	m_seq_cache;  packet_queue_t m_data_buffer;      void		recvPktAtDest( packet_t *pkt, cache_t::iterator iter);};template <class PLD> double	SSRv02<PLD>::slotWidth = 0.010;template <class PLD> double	SSRv02<PLD>::transitionTime = 0.0001;template <class PLD> int	SSRv02<PLD>::numT2Slots = DefaultNumT2Slots;template <class PLD> int	SSRv02<PLD>::numT3Slots = DefaultNumT3Slots;template <class PLD> const char	*SSRv02<PLD>::pktRcvdName[2] = {"REP", "DAT"};template <class PLD> int	SSRv02<PLD>::seq_number_t::maxCounter = 2;template <class PLD>unsigned int SSRv02<PLD>::seq_number_t::hopCount() const{  switch( state)  {    case Initial:      return 99;    case Steady:    case Changing:      return currentHC;    default:      assert( 0);	// something really bad happened      return 0;  }}template <class PLD>void SSRv02<PLD>::seq_number_t::hopCount(  unsigned int	newHC,  bool		print){  switch( state)  {    case Initial:      currentHC = newHC;      updateCtr = maxCounter;      state = Steady;      break;    case Steady:      if( newHC != currentHC)      {	--updateCtr;	pendingHC = newHC;	state = Changing;	if( print) printf( " start change\n");      }      break;    case Changing:      if( newHC == currentHC)      {	if( ++updateCtr == maxCounter)	{	  state = Steady;	  if( print) printf(" back out of change\n");	}	else	  if( print) printf(" reversing\n");      }      else if( newHC == pendingHC)      {	if( --updateCtr == 0)	{	  currentHC = newHC;	  updateCtr = maxCounter;	  state = Steady;	  if( print) printf(" end change\n");	}	else	  if( print) printf(" still changing\n");      }      else	// newHC is neither the old nor new HC      {	pendingHC = newHC;	if( print) printf(" new HC during change\n");      }      break;    default:      assert( 0);	// something really bad happened  }  return;}template <class PLD>void SSRv02<PLD>::setSlotWidth(  double	sw){  slotWidth = sw;  return;}template <class PLD>double SSRv02<PLD>::getSlotWidth(){  return slotWidth;}template <class PLD>void SSRv02<PLD>::setTransitionTime(  double	tt){  transitionTime = tt;  return;}template <class PLD>double SSRv02<PLD>::getTransitionTime(){  return transitionTime;}template <class PLD>void SSRv02<PLD>::setNumT2Slots(  int		num){  numT2Slots = num;  return;}template <class PLD>int SSRv02<PLD>::getNumT2Slots(){  return numT2Slots;}template <class PLD>void SSRv02<PLD>::setNumT3Slots(  int		num){  numT3Slots = num;  return;}template <class PLD>int SSRv02<PLD>::getNumT3Slots(){  return numT3Slots;}template <class PLD>void *SSRv02<PLD>::createBasicPkt(){  packet_t	*newPkt = packet_t::alloc();  newPkt->hdr.send_time = SimTime();  newPkt->hdr.actual_hop = 1;  newPkt->hdr.resend = 0;  newPkt->hdr.seq_number = 0;  newPkt->hdr.numSlots = numT2Slots;  newPkt->hdr.collDetected = false;  newPkt->hdr.collPktSent = false;  newPkt->hdr.slotNumber = 0;  newPkt->hdr.delay = 0.0;  newPkt->hdr.t1Index = 12345;		//mwl  newPkt->hdr.t2Index = 12345;		//mwl

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩二区三区四区| 亚洲国产精品ⅴa在线观看| 色综合久久天天综合网| 97精品国产露脸对白| 欧美在线播放高清精品| 91精品国产综合久久久久久| 精品福利一区二区三区免费视频| 国产欧美在线观看一区| 亚洲成av人在线观看| 国产精品1区2区3区在线观看| 成人精品视频一区二区三区尤物| 色哟哟一区二区在线观看| 一区二区三区免费在线观看| 免费的成人av| 在线精品视频一区二区| 亚洲大片精品永久免费| 91精品国产一区二区三区香蕉| 成人免费在线观看入口| 日本 国产 欧美色综合| 久久久久久久性| 免费一区二区视频| 久久综合狠狠综合久久激情| 奇米影视7777精品一区二区| 久久久久一区二区三区四区| 99久久伊人精品| 精品国产伦理网| 国产精品一区专区| 中文字幕精品三区| 欧美日本韩国一区二区三区视频| 国产精品国产成人国产三级| 成人性生交大合| 亚洲午夜精品17c| 欧美视频完全免费看| 亚洲乱码中文字幕综合| 91在线码无精品| 99精品久久只有精品| 偷窥少妇高潮呻吟av久久免费| 欧洲人成人精品| 国产一区二区三区久久悠悠色av| 日韩视频在线永久播放| 午夜a成v人精品| 中文av一区特黄| 北岛玲一区二区三区四区| 亚洲午夜电影在线| 中文字幕精品三区| 欧美不卡123| 国产精品中文字幕一区二区三区| 伊人婷婷欧美激情| 2021中文字幕一区亚洲| 欧美性生活影院| 成人福利视频在线看| 日韩一区有码在线| 久久综合精品国产一区二区三区| 欧美午夜免费电影| 99久久精品国产一区二区三区| 日本成人在线视频网站| 樱花影视一区二区| 国产精品免费aⅴ片在线观看| 日韩一卡二卡三卡国产欧美| 欧美综合天天夜夜久久| 懂色av噜噜一区二区三区av| 亚洲欧美日本在线| 欧美伦理电影网| 国产在线国偷精品产拍免费yy | 欧美在线高清视频| 成人网在线播放| 国产精品一区二区在线播放| 日韩电影免费在线| 日韩精品一二三| 久久这里都是精品| 欧美videos中文字幕| 欧美情侣在线播放| 欧美日韩一区中文字幕| 精彩视频一区二区三区| 日韩欧美久久一区| 91免费国产视频网站| 日韩福利视频网| 午夜精品视频一区| 日本va欧美va精品发布| 视频一区国产视频| 午夜精品久久久久久久久久| 亚洲曰韩产成在线| 亚洲国产激情av| 久久精品免费在线观看| 欧美另类一区二区三区| 欧美日韩电影一区| 91麻豆精品国产91久久久资源速度| 欧美午夜理伦三级在线观看| 欧美性大战久久久| 91精品在线免费| 欧美r级在线观看| 精品国产123| 国产欧美日韩综合精品一区二区| 久久综合九色综合97婷婷女人| 久久久不卡影院| 最新中文字幕一区二区三区| 亚洲人成网站在线| 亚洲综合色区另类av| 日韩专区中文字幕一区二区| 久久国产三级精品| 天天综合天天做天天综合| 免费人成精品欧美精品| 捆绑调教美女网站视频一区| 国内欧美视频一区二区 | 石原莉奈在线亚洲三区| 麻豆精品视频在线观看免费| 亚洲成人自拍偷拍| 人人超碰91尤物精品国产| 国产精品99久久久久久有的能看| 成人听书哪个软件好| 在线精品视频免费观看| 91精品国产综合久久精品图片| 精品日韩一区二区| 亚洲欧美乱综合| 六月丁香婷婷久久| 91免费国产在线| 日韩欧美一卡二卡| 日韩美女视频一区二区| 国产精品久久夜| 五月天一区二区| 高清不卡在线观看| 欧美一a一片一级一片| 精品日韩一区二区三区| 亚洲欧美乱综合| 国产一区二区精品久久99| 欧美在线999| 久久久久久久久久久久久夜| 亚洲综合偷拍欧美一区色| 国产成人亚洲综合a∨猫咪| av亚洲产国偷v产偷v自拍| 欧美人狂配大交3d怪物一区| 久久九九久久九九| 亚洲一二三四在线| 国产电影一区二区三区| 在线一区二区三区四区五区| 欧美亚洲禁片免费| 欧美国产日本韩| 免费成人在线观看视频| 欧美综合亚洲图片综合区| 国产欧美一区二区三区网站 | 爽好久久久欧美精品| 97国产一区二区| 2020日本不卡一区二区视频| 亚洲自拍偷拍欧美| av中文字幕在线不卡| 久久久精品欧美丰满| 青青草成人在线观看| 欧美视频三区在线播放| 亚洲欧洲av色图| 成人午夜精品在线| 久久精品一区二区三区不卡| 天堂精品中文字幕在线| 欧美无乱码久久久免费午夜一区| ㊣最新国产の精品bt伙计久久| 国产不卡高清在线观看视频| 欧美不卡一区二区三区| 蜜臀av一区二区在线观看| 91精品国产综合久久久蜜臀粉嫩| 一区二区欧美国产| 色综合天天综合网天天看片| 欧美精品在欧美一区二区少妇| 日韩一区在线免费观看| jlzzjlzz国产精品久久| 国产日韩三级在线| 国产传媒欧美日韩成人| 久久久精品影视| 国产91精品一区二区麻豆亚洲| 久久精品综合网| 成人妖精视频yjsp地址| 中文字幕永久在线不卡| 不卡在线视频中文字幕| 综合婷婷亚洲小说| 色婷婷综合激情| 亚洲成人av福利| 91精品国产综合久久久蜜臀图片| 婷婷综合另类小说色区| 这里只有精品99re| 久久精品99国产精品日本| 欧美草草影院在线视频| 国产电影一区二区三区| 国产精品免费久久| 在线免费精品视频| 日韩电影在线看| 久久影音资源网| 成人福利视频在线| 亚洲一区二区三区中文字幕在线| 欧美午夜电影一区| 免费成人小视频| 国产亚洲一区二区在线观看| aaa欧美色吧激情视频| 亚洲一二三区在线观看| 欧美精品123区| 国产做a爰片久久毛片| 中文字幕欧美一| 欧美日韩在线观看一区二区 | 亚洲制服丝袜av| 日韩欧美一二三四区| 国产精品一二三区| 一区二区三区小说| 日韩欧美二区三区|