Professional Documents
Culture Documents
Code Available
GPSR
Geographic Routing http://www.icir.org/bkarp/gpsr/gpsr.html
GRID
Geographic Location Service http://pdos.lcs.mit.edu/grid/
Greedy Forwarding
Source: GPSR
Perimeter Forwarding
Source: GPSR
GPSR Code
ns-2.1b6 gpsr/{gpsr.cc,h}: GPSR routing agent gpsr/paper-cmu.tcl: TCL script (parameter setting) tcl/mobility/gpsr.tcl: TCL library locdbase.{cc,h}: Location database modify ip.h, packet.h, cmu-trace.cc, and Makefile.in
GPSR Code
packet.h: PT_GPSR cmu-trace.cc:
case PT_GPSR: format_msg(p, offset);
ip.h:
double dx_, dy_, dz_; //destination position
locdbase.{cc,h}
class LocDbase : public NsObject { public: LocDbase(); ~LocDbase(); MobileNode *nlookup(int); protected: void recv(Packet *, Handler *) { }; int command(int argc, const char * const * argv); private: // lookup table MobileNode **table_; int nn_; };
LocDbase Commands
int command(int argc, const char * const * argv) nnodes number of nodes register address(id) node object
gpsr.h
class GPSR_Agent : public Tap, public Agent class hdr_gpsr class NeighbEnt class NeighbTable class GPSR_BeaconTimer class GPSR_LastPeriTimer class GPSR_PlanarTimer
class hdr_gpsr
static int offset_ int mode_ int currhop_ PeriEnt hops_[MAX_PERI_HOPS_STATIC] struct PeriEnt peript_ nsaddr_t periptip_[3] int nhops_
Packet Types
#define GPSRH_DATA_GREEDY 0
// greedy mode data packet
#define GPSRH_DATA_PERI 1
// perimeter mode data packet
#define GPSRH_PPROBE 2
// perimeter probe packet
#define GPSRH_BEACON 3
// liveness beacon packet
gpsr.cc
int GPSR_Agent::command(int argc, const char *const *argv) node node object ldb ldb object install-tap mac object add-ifq ifq object start-gpsr
gpsr.cc
void GPSR_Agent::recv(Packet *p, Handler *)
{ if ((src == mn_->address()) && (cmh->num_forwards() == 0)) { // packet I am originating? Add header fields & forward if ((src == mn_->address()) && (gpsrh->mode_ == GPSRH_DATA_GREEDY)) { // packet I sent before? Drop if (iph->dport_ == GPSR_PORT) { // GPSR Beacon else forwardPacket(p); }
Packet Receiving
Packet I am originating?
GPSR Beacon?
Data Packet?
Drop
Process
Forward
gpsr.cc
void GPSR_Agent::forwardPacket(Packet *p, int rtxflag = 0)
{ switch(gpsrh->mode_) case GPSRH_DATA_GREEDY: case GPSRH_DATA_PERI: cmh->direction_ = -1; // send packet down the stack target_->recv(p, (Handler *)0); }
tcl/mobility/gpsr.tcl
GPSR TCL library functions proc create-gpsr-routing-agent { node id } proc gpsr-create-mobile-node { id args }
TCL Scripts
Setting parameters Create topography and god Create mobile nodes and configure Create GPSR agents and attach to nodes Mobility scenarios Traffic scenarios
Setting Parameters
val(ragent) Agent/GPSR Agent/GPSR set bint_ 3.0 Agent/GPSR set bdesync_ 0.5 Agent/GPSR set bexp_ 15.0 Agent/GPSR set use_mac_ 1 Agent/GPSR set use_peri_ 1 Agent/GPSR set peri_proact_ 0 Agent/GPSR set use_planar_ 1 Agent/GPSR set use_implicit_beacon_ 1
Some Tips
MobileNode::getLoc(double *x, double *y, double *z)
mn->getLoc(&x, &y, &z);
Tx power setdest
ns-2.1b6 to ns-2.1b9
hdr_ip *iph = (hdr_ip *) p->access (off_ip_); change to: hdr_ip *iph = hdr_ip::access(p); AF_INET -> NS_AF_INET addr_, sport_, dport_ -> addr(), sport(), dport()