📄 hgpsrouter.h
字号:
#ifndef hgpsrouter_h#define hgpsrouter_h#define MAX_RT_ENTRIES 200#define MAX_NEXTHOP 15#define HGPS_ROUTER_STARTUP_JITTER 0.1#define MAX_ADJ_GRID 30#define BROADCAST_INTEVAL 2.0#define NEIGHBOR_TIMEOUT_INTEVAL 2*BROADCAST_INTEVAL+0.1#define RADIO_PROPAGATION 250#include "hdr_hgps.h"#include "hgpsagent.h"#include "locserver.h"class LocServer;class HGPSRouterPeriodicHandler;class HGPSAgent;struct nexthop_entry { nsaddr_t next_node; double x; double y; double lastupdate_time; int dist; double speed; //nsaddr_t dst; nexthop_entry *prev; nexthop_entry *next; };struct route_entry{ location loc; nsaddr_t dst; nexthop_entry *next_hop; double lastupdate_time;};class HGPSRouter { public: void start(); void sleep(); /* return the next hop to reach loc*/ nsaddr_t getNextHop(location loc, nsaddr_t prev_hop); nsaddr_t getNextHopFromNT(nsaddr_t dst, location &hisloc); nsaddr_t getNextHopNode(route_entry &rnt); nsaddr_t getBestNextHopNode(route_entry &rnt); struct nexthop_entry *getNextHopNode(nexthop_entry *&nexthop); bool outdatedNeighbor(nexthop_entry *next_hop, double now);// void recvRoutingUpdate(Packet *pkt); void addUpdateEntry(location loc,nsaddr_t next_hop,double x, double y,nsaddr_t dst, int distance, double speed); void deleteEntry(nsaddr_t dst); void deleteEntry(nsaddr_t fromnode, nsaddr_t tonode); /*simplified implemention of HGPS router, assume square dense networks*/ /*i keep track of what are the smallest grids I could reach, in 1 hop, in 2 hops */ void broadcastOneHopRT(); //called when an route update packet arrives void recvNeighborUpdate(Packet *p); //set a location server void setLocServer(LocServer *s); //send out a packet with location information in it void sendOutPktWithLocation(Packet *&packet, double delay, bool checkNT); void sendOutPktWithLocation(Packet *&packet, double delay, bool checkNT, bool invoke_loc_server); //failure feedback void xmitFailed(Packet *pkt); HGPSRouter(HGPSAgent *a); ~HGPSRouter(); struct route_entry nt[MAX_RT_ENTRIES]; protected: //i'm using a lousy implementation of arrays.. //change that to a hashtable maybe? //struct route_entry twohopnt[MAX_RT_ENTRIES]; struct route_entry rt_1[MAX_ADJ_GRID]; //struct route_entry rt_2[MAX_ADJ_GRID]; //a bunch of variables HGPSRouterPeriodicHandler *router_periodic_handler; Event *router_periodic_event; HGPSAgent *parent; LocServer *locserver; friend void HGPS_XmitFailureCallback(Packet *pkt, void *data);};class HGPSRouterPeriodicHandler : public Handler { public: HGPSRouterPeriodicHandler(HGPSRouter *r); void handle(Event *e); private: HGPSRouter *myrouter;};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -