⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rmst_filter.hh

📁 跑leach需要的
💻 HH
字号:
//// rmst_filter.hh  : RmstFilter Class// authors         : Fred Stann//// Include file for RmstFilter - Reliable Multi-Segment Transport//// Copyright (C) 2003 by the University of Southern California// $Id: rmst_filter.hh,v 1.2 2003/07/10 21:18:57 haldar Exp $//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License,// version 2, as published by the Free Software Foundation.//// 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.////#ifndef RMST_FILTER_HH#define RMST_FILTER_HH#include <sys/types.h>#include <map>#include <list>#include "diffapp.hh"#include "rmst.hh"#define RMST_FILTER_PRIORITY 190// Union to convert pkt_num & rdm_id into a 64 bit keyunion LlToInt {  int64_t ll_val_;  int int_val_[2];};// Exploratory message log.  Keep track of the last hop of every// new exploratory message. Then when one is reinforced we can// identify the "back-channel" that is the reverse gradient from// sink to source.typedef struct _ExpLog{  int rmst_no_;  int32_t last_hop_;} ExpLog;typedef map<int64_t, ExpLog> Key2ExpLog;typedef struct _SendMsgData{  int rmst_no_;  int last_frag_sent_;  int exp_base_;} SendMsgData;typedef list<SendMsgData> SendList;typedef struct _NakMsgData{  int rmst_no_;  int frag_no_;} NakMsgData;typedef list<NakMsgData> NakList;typedef list<int32_t> Blacklist;class RmstFilter;// Method to be called when a message matches rmst-filter attributes.class RmstFilterCallback: public FilterCallback {public:  RmstFilter *app_;                     // initialzed in setupFilter  void recv(Message *msg, handle h);};class RmstFilter : public DiffApp {public:#ifdef NS_DIFFUSION  RmstFilter();  int command(int argc, const char*const* argv);#else  RmstFilter(int argc, char **argv);#endif // NS_DIFFUSION    virtual ~RmstFilter(){};  void run();  void recv(Message *msg, handle h);  int processTimer(int rmst_no, int timer_type);private:  handle filter_handle_;     // filter handle  RmstFilterCallback *fcb_;  // filter callback routine  handle setupFilter();    // routine that adds filter  handle stat_timer_handle_;  // Message Processing  bool processMessage(Message *msg);  void processCtrlMessage(Message *msg);  Rmst* syncLocalCache(Message *msg);  void sendRmstToSink(Rmst *rmst_ptr);  void sendAckToSource(Rmst *rmst_ptr);  void sendExpReqUpstream(Rmst *rmst_ptr);  void sendContToSource(Rmst *rmst_ptr);  void setupNak(int rmst_id);  void cleanUpRmst(Rmst *rmst_ptr);  void processExpReq(Rmst *rmst_ptr, int frag_no);  Key2ExpLog exp_map_;  Int2Rmst rmst_map_;  SendList send_list_;  bool send_timer_active_;  handle send_timer_handle_;  int exp_gap_;  NakList nak_list_;  Blacklist black_list_;  int rdm_id_;  int pkt_count_;  bool local_sink_;  bool caching_mode_;  u_int16_t local_sink_port_;  NRAttrVec *interest_attrs_;  struct timeval last_data_rec_;  struct timeval last_sink_time_;};// Define Timer Types#define WATCHDOG_TIMER   1#define SEND_TIMER       2#define ACK_TIMER        3#define CLEANUP_TIMER    4// Define timer intervals. These intervals dictate how fast you send// packets through the sensor net, how often you check for holes,// how often you clean up cache residue, how frequently a source// prompts for a missing ACK. These parameters can be application// tuned. The send timer in particular can be altered depending on// the presence of a backpressure mechanism.// SEND_INTERVAL - Gap between initiating the sending of a fragment.// WATCHDOG_INTERVAL - How often we look for holes (missing fragments).// ACK_INTERVAL - How long we wait for an ACK after sending last fragment//                before re-sending the last fragment.// CLEANUP_INTERVAL - How often we clean up our cache.// The time is in milliseconds.#define SEND_INTERVAL 2000#define WATCHDOG_INTERVAL 10000#define ACK_INTERVAL 20000#define CLEANUP_INTERVAL 90000// Define time intervals used to make decisions.// These are application tunable.// These times are in seconds.#define RMST_BLACKLIST_WAIT 3600#define NAK_RESPONSE_WAIT 10#define NEXT_FRAG_WAIT 15#define ACK_WAIT 30#define LONG_CLEANUP_WAIT 90#define SHORT_CLEANUP_WAIT 30#define SINK_REFRESH_WAIT 120// Define the threshold at which a node blacklists an incoming link.// It is the percentage of upstream packets sent that are actually// received. If a node gets less than this percentage, the link// is blacklisted.#define BLACKLIST_THRESHOLD .60class RmstTimeout: public TimerCallback {public:  RmstTimeout(RmstFilter *rmst_flt, int no, int type);  int expire();  RmstFilter *filter_;  int rmst_no_;  int timer_type_;};// Define Send Timer Actions#define DELETE_FROM_QUEUE    1#define SEND_NEXT_FRAG       2#define DO_NOTHING           3#endif // RMST_FILTER_HH

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -