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

📄 geo-routing.hh

📁 定向扩散路由协议
💻 HH
字号:
//// geo-routing.hh  : GEAR Include File// authors         : Yan Yu and Fabio Silva//// Copyright (C) 2000-2002 by the University of Southern California// Copyright (C) 2000-2002 by the University of California// $Id: geo-routing.hh,v 1.9 2002/08/16 22:40:44 fabio 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 _GEO_ROUTING_HH_#define _GEO_ROUTING_HH_#ifdef HAVE_CONFIG_H#include "config.h"#endif // HAVE_CONFIG_H#include <list>#ifdef HAVE_HASH_MAP#include <hash_map>#else#ifdef HAVE_EXT_HASH_MAP#include <ext/hash_map>#endif // HAVE_EXT_HASH_MAP#endif // HAVE_HASH_MAP#ifdef NS_DIFFUSION#include <mobilenode.h>#endif // NS_DIFFUSION#include "geo-attr.hh"#include "geo-tools.hh"#include "diffapp.hh"// Filter priorities for pre-processing and post-processing. The// gradient's filter priority has to be in between these two values in// order for GEAR to work properly#define GEOROUTING_PRE_FILTER_PRIORITY  8#define GEOROUTING_POST_FILTER_PRIORITY 2// Values used for defining timers#define BEACON_REQUEST_TIMER 150#define NEIGHBOR_TIMER       151// Energy values for GEAR#define	GEO_INITIAL_ENERGY          1#define	GEO_UNIT_ENERGY_FOR_SEND    0.001#define	GEO_UNIT_ENERGY_FOR_RECV    0.001// Various beacon typesenum geo_beacons {  GEO_REQUEST = 1, // Beacon request. Nodes should send a beacon reply		   // in response  GEO_REPLY,       // Beacon reply. Sent in response to a beacon		   // request. It also includes an heuristic value if		   // requested on the beacon request  GEO_UPDATE       // Includes updates to a particular heuristic value		   // (for a given destination). It is send only if		   // the new value is sufficiently different from the		   // previous one};// Various actions taken when forwarding interestsenum geo_actions {  BROADCAST = 0,      // We are inside the target region, broadcast		      // packet  BROADCAST_SUPPRESS, // All our neighbors are outside the target		      // region, we should not forward this interest		      // message  OUTSIDE_REGION      // We are still outside the target region,		      // continue forwarding this interest message		      // towards the region using unicast};#define	GEO_BEACON_REPLY_PERIOD	    100 // Sends at most one					// beacon_reply message every					// GEO_BEACON_REPLY_PERIOS					// seconds#define GEO_NEIGHBOR_DELAY        30000 // In milli-seconds#define GEO_BEACON_REQUEST_CHECK_PERIOD 100000 // In milli-seconds#define GEO_NEIGHBOR_UPDATE                300 // In seconds#define GEO_NEIGHBOR_REQUEST_PERIOD (10 * GEO_NEIGHBOR_UPDATE) // In seconds#define GEO_NEIGHBOR_EXPIRED (5 * GEO_NEIGHBOR_UPDATE) // In seconds,					               // this is how					               // long a					               // neighbor					               // entry will					               // last before					               // being					               // deleted// These values tell GEAR how much time to wait before sending a// beacon reply in response to a beacon request message#define GEO_BEACON_REPLY_DELAY   1500 // (msec) between receive and forward#define GEO_BEACON_REPLY_JITTER  1000 // (msec) jitter// These values tell GEAR how much to wait before sending a beacon// request or a beacon update message#define GEO_BEACON_DELAY   400 // (msec) between receive and forward#define GEO_BEACON_JITTER  200 // (msec) jitter#define	INITIAL_ENERGY		1#define	DEFAULT_VALID_PERIOD	10#define UNICAST_ORIGINAL 1#define	BROADCAST_TYPE   2#define	MAX_INT          10000#define MAX_PATH_LEN     200class TimerType {public:  TimerType(int which_timer) : which_timer_(which_timer)  {    param_ = NULL;  };  ~TimerType() {};  int which_timer_;  void *param_;};class Region {public:  void operator= (Region p) {center_ = p.center_; radius_ = p.radius_;}  void output()  {    center_.output();    DiffPrint(DEBUG_IMPORTANT, "-%f", radius_);  }  GeoLocation center_;  double radius_;};class GeoHeader {public:  int16_t pkt_type_;  // BROADCAST or UNICAST_ORIGINAL  int16_t path_len_;  Region dst_region_;}; class PktHeader {public:  int32_t pkt_num_;  int32_t rdm_id_;  int32_t prev_hop_;  int pkt_type_;  int path_len_;  Region dst_region_;};class NeighborEntry {public:  NeighborEntry(int32_t id, double longitude, double latitude,		double remaining_energy) :  id_(id), longitude_(longitude), latitude_(latitude),  remaining_energy_(remaining_energy){    valid_period_ = DEFAULT_VALID_PERIOD;    GetTime(&tv_);  }  int32_t id_;  double longitude_;  double latitude_;  double remaining_energy_;  struct timeval tv_;  double valid_period_; // in seconds};class GeoRoutingFilter;typedef list<NeighborEntry *> NeighborList;typedef list<PktHeader *> PacketList; class GeoFilterReceive : public FilterCallback {public:  GeoFilterReceive(GeoRoutingFilter *app) : app_(app) {};  void recv(Message *msg, handle h);  GeoRoutingFilter *app_;};class GeoTimerReceive : public TimerCallbacks {public:  GeoTimerReceive(GeoRoutingFilter *app) : app_(app) {};  int expire(handle hdl, void *p);  void del(void *p);  GeoRoutingFilter *app_;};class GeoRoutingFilter : public DiffApp {public:#ifdef NS_DIFFUSION  GeoRoutingFilter(const char *mnode);  int command(int argc, const char*const* argv);#else  GeoRoutingFilter(int argc, char **argv);#endif // NS_DIFFUSION  virtual ~GeoRoutingFilter()  {    // Nothing but exit  };  void run();  void recv(Message *msg, handle h);  int processTimers(handle hdl, void *p);protected:  // General Variables  handle pre_filter_handle_;  handle post_filter_handle_;  int pkt_count_;  int rdm_id_;  // Keep track when last beacon reply was sent  struct timeval last_beacon_reply_tv_;  // Keep track when last beacon request was sent  struct timeval last_neighbor_request_tv_;    // Statistical data: location and remaining energy level  double geo_longitude_;  double geo_latitude_;  int num_pkt_sent_;  int num_pkt_recv_;  double initial_energy_;  double unit_energy_for_send_;  double unit_energy_for_recv_;  // List of all known neighbors, containing their location and energy  // information  NeighborList neighbors_list_;  // List of messages currently being processed  PacketList message_list_;  // Forwarding table  HeuristicValueTable h_value_table_;  LearnedCostTable learned_cost_table_;    // Receive Callback for the filter  GeoFilterReceive *filter_callback_;  GeoTimerReceive *timer_callback_;  // Setup the filter  handle setupPostFilter();  handle setupPreFilter();  // Message Processing functions  void preProcessFilter(Message *msg);  void postProcessFilter(Message *msg);  // Timers  void messageTimeout(Message *msg);  void interestTimeout(Message *msg);  void beaconTimeout();  void neighborTimeout();    // Message processing functions  PktHeader * preProcessMessage(Message *msg);  PktHeader * stripOutHeader(Message *msg);  PktHeader * retrievePacketHeader(Message *msg);  bool extractLocation(Message *msg,		       float *longitude_min, float *longitude_max,		       float *latitude_min, float *latitude_max);  GeoHeader * restoreGeoHeader(PktHeader *pkt_header, Message *msg);  void takeOutAttr(NRAttrVec *attrs, int32_t key);  // Neighbors related functions  NeighborEntry * findNeighbor(int32_t neighbor_id);  void updateNeighbor(int32_t neighbor_id, double neighbor_longitude,		      double neighbor_latitude, double neighbor_energy);  bool checkNeighbors();  void sendNeighborRequest();  // Energy related functions  double remainingEnergy() {return INITIAL_ENERGY;}  // Cost estimation related functions  double retrieveLearnedCost(int neighbor_id, GeoLocation dst);  double estimateCost(int neighbor_id, GeoLocation dst);  // Routing related functions  int32_t findNextHop(GeoHeader *geo_header, bool greedy);  int floodInsideRegion(GeoHeader *geo_header);  double retrieveHeuristicValue(GeoLocation dst);  void broadcastHeuristicValue(GeoLocation dst, double new_heuristic_value);  // GetNodeLocation --> This will move to the library in the future  void getNodeLocation(double *longitude, double *latitude);#ifdef NS_DIFFUSION  // This will also go away in the future  MobileNode *node_;#endif // NS_DIFFUSION};#endif // !_GEO_ROUTING_HH_

⌨️ 快捷键说明

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