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

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

?? shr.h

?? 大名鼎鼎的傳感器網(wǎng)絡仿真實驗室平臺SENSE
?? H
?? 第 1 頁 / 共 4 頁
字號:
/************************************************************************* *   @<title> Self Healing Routing </title>@ * *   @<!-- Copyright 2006, 2003 Mark Lisee, 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.-->@ * *************************************************************************/#ifndef _shr_h_#define _shr_h_#include <map>#include <list>#define	MWL_DOUBLE_DELAYconst int	MWLTimeoutMultiplier = 10;#ifdef	SHR_PRINT#define shrDoPrint	(true)#define	shrPrint(x)	 printf x#else	//SHR_PRINT#define	shrPrint(x)#define	shrDoPrint	(false)#endif	//SHR_PRINTtemplate <class PLD>struct SHR_Struct{  enum PktType { REQUEST, REPLY, DATA, ACK, HELLO };  enum AckType { AT_Destination, AT_Intermediate };  // RREQ: type + src_addr + dst_addr + seq_number + hop  enum { REQUEST_SIZE = 3 * sizeof(int) + 2 * ether_addr_t::LENGTH };  // RREP: type + src_addr + dst_addr + seq_number + 2 * hop  enum { REPLY_SIZE = 4 * sizeof(int) + 4 * ether_addr_t::LENGTH };  // DATA: type + src_addr + dst_addr + seq_number + 2* hop   enum { DATA_SIZE = 4 * sizeof(int) + 4 * ether_addr_t::LENGTH };  // ACK: type + ACK Type + src_addr + dst_addr + seq_number  enum { ACK_SIZE = 3 * sizeof(int) + 2 * ether_addr_t::LENGTH };  // HELLO: type + src_addr + dest_addr + hopCount  enum { HELLO_SIZE = 2 * sizeof( int) + 2 * ether_addr_t::LENGTH };      struct hdr_struct  {    PktType	type;    AckType	ackType;    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;    unsigned int actual_hop;    unsigned int expected_hop;    unsigned int max_hop;    double	delay;    int		ackIndex;    int		pktDelayIndex;    bool	canceled;    int		resend;    bool	suboptimal;    bool	newSeqNumber;    int		helloData;    Path	path;    bool dump(std::string& str) const;  };  typedef PLD payload_t;  typedef smart_packet_t<hdr_struct,PLD> packet_t;};/*** Array to keep track of how many packets required a certain number of hop** counts to reach the destination.*/#define	HCArraySize	(20+1)enum SHRBackOff{  SHRBackOff_SSR = 1,  SHRBackOff_SHR = 2,  SHRBackOff_Incorrect = 3};/*** 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 SHR : public TypeII, public SHR_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;      // statistics  int		SentPackets;  int		SentSuboptimal;  int		CanceledPackets;  int		CanceledSuboptimal;  int		RecvPackets;  int		RecvUniPackets;  int		RecvDataPackets;  double	TotalDelay;  int		TotalSamples;  int		TotalHop;  int		HopCounts[ HCArraySize];  Timer <trigger_t> transitionTimer;	// time it takes to go from sense to send  inport void	TransitionTimer( trigger_t &);  packet_t	*transitionPkt;		// pkt to be sent when timer expires  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);  // This is called when the power manager wakes up the node.  inport void	from_pm_node_up();  outport void		cancel();  outport void		to_transport( payload_t &pld);  outport void		to_mac( packet_t *pkt, unsigned int size,				double backoff);  InfiTimer <SHR_Struct<PLD>::packet_t *> ackTimer;  inport inline void	AckTimer( packet_t *pkt, unsigned int index);/*** These methods must be defined even though they aren't used with the radio** model. This is due to a limitation of the cxx utility.**** This timer schedules the first HELLO packet that is generated when a node** comes back. Events on this timer should be scheduled only as a result of** parsing the configuration file.*/ private:  Timer <trigger_t> helloTimer; public:  inport inline void	HelloTimer( trigger_t &);/*** The public interface to schedule a HELLO packet.*/ public:  void		scheduleHELLO( double time);  void		Start();  void		Stop();  void		clearStats();		SHR();  virtual	~SHR();  int		getHCFromCostTable( int addr);  void		dumpStatic( FILE *fp, int indent, int offset) const;  void		dumpCacheStatic( FILE *fp, int indent, int offset) const;  void		dump( FILE *fp, int indent, int offset) const;  void		dumpCostTable( FILE *fp, int indent, int offset) const;  void		generateHELLO();  static void		setSlotWidth( double);  static double		getSlotWidth();  static void		setTransitionTime( double);  static double		getTransitionTime();  static void		setBackOff( SHRBackOff);  static SHRBackOff	getBackOff();  static void		setContinuousBackOff( bool);  static bool		getContinuousBackOff();  static void		setRouteRepair( int);  static void		setVisualizer( Visualizer *ptr);	 private:  enum UpdateType {Lower, Always, Hello};  bool		updateHopCountInCache( ether_addr_t src,				       unsigned int hopCount, UpdateType,				       const char *, packet_t *pkt); protected:  static SHRBackOff	backOff;  static bool		continuousBackOff;  static double		slotWidth;  static double		transitionTime;  static bool		RouteRepairEnabled;  static Visualizer	*visualizer;  void		CancelPacket( ether_addr_t& src, unsigned int seq_number);  void		SendPacket( packet_t *pkt);  void		AssignSeqNumber( packet_t *pkt);  void		SendToMac( packet_t *pkt);  void		SendAck( ether_addr_t, ether_addr_t, ether_addr_t, unsigned int,			 simtime_t, bool fromDest);  void		CheckBuffer( ether_addr_t, unsigned int);  void		AddToSendQueue( packet_t *pkt);  void		forwardAsFlood( 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		*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, bool fromDest);  void		*createHelloPkt( ether_addr_t dest_addr, int hopCount);  bool		m_mac_busy;                  // if the mac layer is busy  unsigned int	m_seq_number;        // current sequence number  typedef std::list<packet_t* > packet_queue_t;  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 force, bool print);    static void		setCounter( int);    static int		getCounter();    void		dumpStatic( FILE *fp, int indent, int offset) const;    void		dump( FILE *fp, int dest, int indent, int offset) const;  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;     private:  void		receiveAck( packet_t *ackPkt);  void		receiveDataRep( packet_t *rcvdPkt);  void		receiveHelloPacket( packet_t *pkt);  void		*getFromAckList( packet_t *rcvdPkt);  void		removeFromAckList( packet_t *pktToRemove, bool cancelTimer);  void		doRouteRepair( packet_t *pktFromList, packet_t *rcvdPkt);  static bool	doubleMsgPrinted;  packet_queue_t m_send_queue;  packet_queue_t m_ack_list;  packet_t	*m_active_packet; public:  InfiTimer <SHR_Struct<PLD>::packet_t *> pktDelayTimer;  inport inline void	PktDelayTimer( packet_t *pkt, unsigned int index); private:  packet_queue_t m_delay_list;};template <class PLD> SHRBackOff	SHR<PLD>::backOff;template <class PLD> bool	SHR<PLD>::continuousBackOff;template <class PLD> double	SHR<PLD>::slotWidth;template <class PLD> double	SHR<PLD>::transitionTime;template <class PLD> bool	SHR<PLD>::RouteRepairEnabled;template <class PLD> int	SHR<PLD>::seq_number_t::maxCounter = 1;template <class PLD> bool	SHR<PLD>::doubleMsgPrinted = false;template <class PLD> Visualizer	*SHR<PLD>::visualizer = NULL;template <class PLD>void SHR<PLD>::setVisualizer(  Visualizer	*ptr){  visualizer = ptr;  return;}template <class PLD>int SHR<PLD>::seq_number_t::getCounter(){  return maxCounter;}template <class PLD>void SHR<PLD>::seq_number_t::setCounter(  int	newCounter){  maxCounter = newCounter;  return;}template <class PLD>unsigned int SHR<PLD>::seq_number_t::hopCount() const{  switch( state)  {    case Initial:      return 0;    case Steady:    case Changing:      return currentHC;    default:      assert( 0);	// something really bad happened      return 0;  }}template <class PLD>void SHR<PLD>::seq_number_t::hopCount(  unsigned int	newHC,  bool		force,	// if true, then don't go through count  bool		print){  switch( state)  {    case Initial:      currentHC = newHC;      updateCtr = maxCounter;      state = Steady;      if( print) printf( "\n");      break;    case Steady:      if( newHC != currentHC)      {	if( force == true || maxCounter < 2)		// single step, so don't use state Changing	  currentHC = newHC;	else	{	  --updateCtr;	  pendingHC = newHC;	  state = Changing;	  if( print) printf( " start change");	}      }      if( print) printf( "\n");      break;    case Changing:			// only happens if maxCounter >= 2      if( force == true)      {	state = Steady;	currentHC = newHC;	updateCtr = maxCounter;	if( print) printf( " forced\n");      }      else 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 *SHR<PLD>::createBasicPkt(){  packet_t	*newPkt = packet_t::alloc();  // type, ack_type, addresses set by caller  newPkt->hdr.seq_number = 0xFFFFFFFF;  // size set by caller  newPkt->hdr.send_time = SimTime();  newPkt->hdr.actual_hop = 1;  newPkt->hdr.expected_hop = 0;  newPkt->hdr.max_hop = 1;  newPkt->hdr.delay = 0.0;  newPkt->hdr.ackIndex = 0;  newPkt->hdr.pktDelayIndex = 0;  newPkt->hdr.canceled = false;  newPkt->hdr.resend = 0;  newPkt->hdr.suboptimal = false;  newPkt->hdr.newSeqNumber = false;  return newPkt;}/*** There is no delay when the source sends an packet.** This method isn't called when a packet is forwarded. Instead, the incoming** packet is copied to make the outgoing packet.*/template <class PLD>void *SHR<PLD>::createDataPkt(  payload_t	&pld,  ether_addr_t	dst,  unsigned int	size){  packet_t	*newPkt = (packet_t *) createBasicPkt();  newPkt->hdr.type = DATA;  newPkt->hdr.size = size + DATA_SIZE;  newPkt->hdr.src_addr = MyEtherAddr;  newPkt->hdr.dst_addr = dst;  newPkt->hdr.cur_addr = MyEtherAddr;  newPkt->hdr.pre_addr = MyEtherAddr;  newPkt->hdr.newSeqNumber = true;  newPkt->pld = pld;  return newPkt;}template <class PLD>void *SHR<PLD>::createRequestPkt(  ether_addr_t	dst){  packet_t	*newPkt = (packet_t *) createBasicPkt();  newPkt->hdr.type = REQUEST;  newPkt->hdr.size = REQUEST_SIZE;  newPkt->hdr.expected_hop  =  1;  newPkt->hdr.max_hop = TimeToLive;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国一区二区三区| 蜜桃精品在线观看| 成人18视频在线播放| 久久老女人爱爱| 国产精品一二二区| 日韩一区欧美小说| 91免费看`日韩一区二区| 亚洲精品一二三| 在线一区二区视频| 日韩高清不卡在线| 精品国产第一区二区三区观看体验| 精品亚洲免费视频| 最新成人av在线| 欧美日韩在线三区| 国产在线视频一区二区| 国产精品视频第一区| 日本福利一区二区| 久久99久久99| 亚洲女与黑人做爰| 欧美成人激情免费网| 成人免费福利片| 亚洲国产视频在线| 国产日韩欧美精品在线| 色噜噜狠狠色综合欧洲selulu| 婷婷开心激情综合| 欧美激情一区二区三区在线| 91成人国产精品| 国产一区二区剧情av在线| 亚洲欧美视频一区| 精品国内片67194| 欧美综合一区二区| 国产美女视频91| 亚洲国产视频a| 欧美激情一区二区三区蜜桃视频 | 精品女同一区二区| 色综合色狠狠综合色| 美洲天堂一区二卡三卡四卡视频| 国产偷v国产偷v亚洲高清| 欧美三级午夜理伦三级中视频| 国产麻豆视频精品| 日韩精品乱码av一区二区| 中文字幕中文字幕一区二区| 亚洲v中文字幕| 欧美国产日本韩| 日韩欧美黄色影院| 91久久人澡人人添人人爽欧美| 激情成人综合网| 亚洲国产欧美一区二区三区丁香婷| 亚洲美女偷拍久久| 日韩亚洲欧美在线观看| 色先锋资源久久综合| 国产一区不卡在线| 丝袜美腿亚洲综合| 亚洲综合小说图片| 综合分类小说区另类春色亚洲小说欧美| 欧美一区二区三区在线观看| 色哟哟一区二区| 成人av电影在线网| 国产成人激情av| 久久av老司机精品网站导航| 五月综合激情婷婷六月色窝| 亚洲天堂成人网| 国产精品日日摸夜夜摸av| 久久久久国产精品麻豆ai换脸| 欧美一区二区视频在线观看2022| 91国偷自产一区二区三区成为亚洲经典 | 日韩无一区二区| 欧美日韩成人综合天天影院| 91日韩精品一区| www.66久久| www.欧美色图| aaa欧美日韩| 成人av综合在线| 成人三级在线视频| www.av精品| 91麻豆国产福利在线观看| 不卡的av网站| 99久久婷婷国产综合精品| 成人精品小蝌蚪| 99久久精品免费| 91浏览器在线视频| 欧美系列日韩一区| 欧美丰满美乳xxx高潮www| 91精品国产入口| 日韩一区二区三区在线视频| 日韩一区二区三区免费看| 欧美一区二区三区思思人| 日韩一级成人av| 精品国产三级a在线观看| 久久综合久久综合九色| 日本一区二区视频在线| 亚洲柠檬福利资源导航| 亚洲一区二区三区在线看| 亚洲r级在线视频| 青青草一区二区三区| 国产伦精一区二区三区| 成人免费av资源| 色播五月激情综合网| 欧美另类videos死尸| 欧美videossexotv100| 久久久久免费观看| 亚洲欧美一区二区三区极速播放| 亚洲二区视频在线| 国模无码大尺度一区二区三区| 国产成人综合视频| 色噜噜夜夜夜综合网| 日韩视频免费直播| 欧美极品aⅴ影院| 亚洲午夜久久久久久久久久久 | 中文字幕在线不卡一区| 亚洲福利一二三区| 国产一本一道久久香蕉| 色爱区综合激月婷婷| 欧美mv日韩mv国产网站app| 亚洲欧美影音先锋| 麻豆精品新av中文字幕| 成人av电影在线网| 欧美一级爆毛片| 中文字幕一区三区| 理论片日本一区| 91视频www| www一区二区| 亚洲国产成人av| 国产福利一区二区三区| 欧美日韩精品二区第二页| 国产亚洲精品超碰| 午夜一区二区三区视频| 成人综合婷婷国产精品久久 | 制服丝袜亚洲色图| 国产精品妹子av| 裸体健美xxxx欧美裸体表演| 91视频国产观看| 久久久综合视频| 麻豆极品一区二区三区| 色婷婷亚洲一区二区三区| 26uuu国产一区二区三区| 亚洲成a天堂v人片| 97久久超碰国产精品| 久久久噜噜噜久久人人看| 亚洲bt欧美bt精品777| 波多野结衣亚洲| 精品国产网站在线观看| 视频一区在线视频| 91国偷自产一区二区开放时间 | 色偷偷久久人人79超碰人人澡| 久久综合久久99| 日本不卡中文字幕| 欧美日韩综合不卡| 亚洲中国最大av网站| www.欧美精品一二区| 久久久美女毛片| 国产在线看一区| 欧美电影免费提供在线观看| 日本中文字幕不卡| 99视频有精品| 欧美激情一区二区| 国产成人av电影在线| 精品国产网站在线观看| 精品一区免费av| 一区视频在线播放| 国产婷婷精品av在线| 国产精品影视网| 国产午夜精品一区二区| 国产成人av一区二区三区在线 | 日本成人超碰在线观看| 91精品视频网| 日韩电影一二三区| 91精品国产综合久久精品性色| 五月综合激情网| 69成人精品免费视频| 日韩激情在线观看| 日韩一区二区三区在线| 免播放器亚洲一区| 精品日本一线二线三线不卡| 久久99热狠狠色一区二区| 日韩一区和二区| 卡一卡二国产精品| 久久久久久99精品| 成人自拍视频在线| 中文字幕一区二区在线播放| 99久久精品免费观看| 又紧又大又爽精品一区二区| 91官网在线观看| 亚洲国产成人tv| 日韩免费高清av| 国产精品一区二区三区四区| 久久久久国产精品人| 不卡免费追剧大全电视剧网站| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲欧洲av色图| 色成人在线视频| 青娱乐精品视频| 国产夜色精品一区二区av| av在线播放一区二区三区| 中文字幕一区二区三区在线播放| 91黄视频在线观看| 国内精品伊人久久久久av一坑 | 亚洲bt欧美bt精品777| 精品蜜桃在线看| av一本久道久久综合久久鬼色|