MobileNode Class Reference

#include <mobilenode.h>

Inheritance diagram for MobileNode:

Node RNode ParentNode nodehead_ TclObject Collaboration diagram for MobileNode:

Collaboration graph
[legend]

Detailed Description

Definition at line 120 of file mobilenode.h.

Public Member Functions

void add_route (char *dst, NsObject *target)
virtual void AddAdj (nodeid_t a, int w=1)
void addNeighbor (Node *node)
int address ()
int base_stn ()
virtual int command (int argc, const char *const *argv)
void delete_route (char *dst, NsObject *nullagent)
double destX ()
double destY ()
double distance (MobileNode *)
void Dump (void)
void dump (void)
double dX ()
double dY ()
double dZ ()
EnergyModelenergy_model ()
bool exist_namchan () const
void getLoc (double *x, double *y, double *z)
virtual nodeid_t GetNeighbor (Nix_t)
virtual NixPair_t GetNix (nodeid_t)
virtual Nixl_t GetNixl ()
double getUpdateTime ()
void getVelo (double *dx, double *dy, double *dz)
virtual void idle_energy_patch (float, float)
const struct if_head & ifhead () const
void insert (struct node_head *head)
NsObjectintf_to_target (int32_t)
const struct linklist_head & linklisthead () const
Locationlocation ()
void log_energy (int)
 MobileNode ()
virtual void namlog (const char *fmt,...)
MobileNode *& next ()
virtual const NodeWeight_t NextAdj (const NodeWeight_t &)
MobileNodenextnode ()
int nodeid ()
double propdelay (MobileNode *)
double radius ()
void route_notify (RoutingModule *rtm)
void set_base_stn (int addr)
void set_table_size (int level, int csize)
void set_table_size (int nn)
double speed ()
void start (void)
void unreg_route_notify (RoutingModule *rtm)
void Update (void)
void update_position ()
void UpdateNeighbors (void)
double X ()
double Y ()
double Z ()

Static Public Member Functions

static Nodeget_node_by_address (nsaddr_t)

Data Fields

int link_changes
EdgeVec_t m_Adj
nodeid_t m_id
Neighborneighbor
neighbor_list_nodeneighbor_list_
MobileNodenextX_
MobileNodeprevX_
int route_changes
double time_arrival
double time_transition

Static Public Attributes

static struct node_head nodehead_

Protected Member Functions

 LIST_ENTRY (Node) entry
void log_movement ()
void namdump ()
void random_destination ()
void random_direction ()
void random_speed ()
int set_destination (double x, double y, double speed)

Protected Attributes

int address_
double destX_
double destY_
double dX_
double dY_
double dZ_
EnergyModelenergy_model_
if_head ifhead_
linklist_head linklisthead_
Locationlocation_
Tcl_Channel namChan_
MobileNodenext_
int nodeid_
PositionHandler pos_handle_
Event pos_intr_
double position_update_interval_
double position_update_time_
double radius_
RoutingModulertnotif_
double speed_
double X_
double Y_
double Z_

Static Protected Attributes

static char nwrk_ [NODE_NAMLOG_BUFSZ]

Private Member Functions

void bound_position ()
int initialized ()
 LIST_ENTRY (MobileNode) link_
void random_position ()

Private Attributes

int base_stn_
Tracelog_target_
int random_motion_
TopographyT_

Friends

class PositionHandler


Constructor & Destructor Documentation

MobileNode::MobileNode  ) 
 

Definition at line 118 of file mobilenode.cc.

References base_stn_, destX_, destY_, dX_, dY_, dZ_, Node::ifhead_, LIST_INIT, LIST_INSERT_HEAD, log_target_, MN_POSITION_UPDATE_INTERVAL, next_, position_update_interval_, position_update_time_, radius_, random_motion_, speed_, T_, X_, Y_, and Z_.

00118                            : 
00119     pos_handle_(this)
00120 {
00121     X_ = Y_ = Z_ = speed_ = 0.0;
00122     dX_ = dY_ = dZ_ = 0.0;
00123     destX_ = destY_ = 0.0;
00124 
00125     random_motion_ = 0;
00126     base_stn_ = -1;
00127     T_ = 0;
00128 
00129     log_target_ = 0;
00130     next_ = 0;
00131     radius_ = 0;
00132 
00133     position_update_interval_ = MN_POSITION_UPDATE_INTERVAL;
00134     position_update_time_ = 0.0;
00135     
00136 
00137     LIST_INSERT_HEAD(&nodehead, this, link_);   // node list
00138     LIST_INIT(&ifhead_);                // interface list
00139     bind("X_", &X_);
00140     bind("Y_", &Y_);
00141     bind("Z_", &Z_);
00142     bind("speed_", &speed_);
00143     
00144 }


Member Function Documentation

void Node::add_route char *  dst,
NsObject target
[virtual, inherited]
 

Reimplemented from ParentNode.

Definition at line 241 of file node.cc.

References RoutingModule::add_route(), and Node::rtnotif_.

00241                                                 {
00242     if (rtnotif_)
00243         rtnotif_->add_route(dst, target);
00244 }

Here is the call graph for this function:

virtual void Node::AddAdj nodeid_t  a,
int  w = 1
[virtual, inherited]
 

Reimplemented from RNode.

void Node::addNeighbor Node node  )  [inherited]
 

Definition at line 262 of file node.cc.

References Node::neighbor, Node::neighbor_list_, neighbor_list_node::next, and neighbor_list_node::nodeid.

Referenced by Node::command().

00262                                       {
00263 
00264     neighbor_list_node* nlistItem = (neighbor_list_node *)malloc(sizeof(neighbor_list_node));
00265     nlistItem->nodeid = neighbor->nodeid();
00266     nlistItem->next = neighbor_list_;
00267     neighbor_list_=nlistItem; 
00268 }

int Node::address  )  [inline, virtual, inherited]
 

Reimplemented from ParentNode.

Definition at line 131 of file node.h.

Referenced by ARPTable::arpinput(), ARPTable::arpresolve(), SctpAgent::command(), PushbackAgent::command(), God::command(), SatRouteObject::compute_topology(), GridKeeper::dump(), SatNode::dumpSats(), GridKeeper::get_neighbors(), LinkHandoffMgr::get_peer_linkhead(), GridHandler::handle(), WebTrafPool::launchReq(), SatRouteObject::populate_routing_tables(), and EmpFtpTrafSession::sendFile().

00131 { return address_;}

int MobileNode::base_stn  )  [inline]
 

Definition at line 137 of file mobilenode.h.

References base_stn_.

Referenced by DSDV_Agent::forwardPacket(), DSRAgent::handlePktWithoutSR(), and DSRAgent::sendOutPacketWithRoute().

00137 { return base_stn_;}

void MobileNode::bound_position  )  [private]
 

Definition at line 367 of file mobilenode.cc.

References Node::address_, Topography::lowerX(), Topography::lowerY(), T_, Topography::upperX(), Topography::upperY(), X_, and Y_.

00368 {
00369     double minX;
00370     double maxX;
00371     double minY;
00372     double maxY;
00373     int recheck = 1;
00374 
00375     assert(T_ != 0);
00376 
00377     minX = T_->lowerX();
00378     maxX = T_->upperX();
00379     minY = T_->lowerY();
00380     maxY = T_->upperY();
00381 
00382     while (recheck) {
00383         recheck = 0;
00384         if (X_ < minX) {
00385             X_ = minX + (minX - X_);
00386             recheck = 1;
00387         }
00388         if (X_ > maxX) {
00389             X_ = maxX - (X_ - maxX);
00390             recheck = 1;
00391         }
00392         if (Y_ < minY) {
00393             Y_ = minY + (minY - Y_);
00394             recheck = 1;
00395         }
00396         if (Y_ > maxY) {
00397             Y_ = maxY- (Y_ - maxY);
00398             recheck = 1;
00399         }
00400         if (recheck) {
00401             fprintf(stderr, "Adjust position of node %d\n",address_);
00402         }
00403     }
00404 }

Here is the call graph for this function:

int MobileNode::command int  argc,
const char *const *  argv
[virtual]
 

Reimplemented from Node.

Definition at line 147 of file mobilenode.cc.

References __PRETTY_FUNCTION__, EnergyModel::adaptivefidelity(), Node::address_, EnergyModel::afe(), base_stn_, Node::command(), God::ComputeRoute(), Node::energy_model(), idle_energy_patch(), Node::ifhead_, Phy::insertnode(), God::instance(), log_energy(), log_movement(), log_target_, EnergyModel::max_inroute_time(), EnergyModel::maxttl(), EnergyModel::node_on(), EnergyModel::powersavingflag(), radius_, random_motion_, set_destination(), AdaptiveFidelityEntity::set_sleepseed(), AdaptiveFidelityEntity::set_sleeptime(), EnergyModel::setenergy(), Phy::setnode(), start(), EnergyModel::start_powersaving(), T_, EnergyModel::total_rcvtime(), EnergyModel::total_sleeptime(), EnergyModel::total_sndtime(), and update_position().

00148 {
00149     Tcl& tcl = Tcl::instance();
00150     if(argc == 2) {
00151         if(strcmp(argv[1], "start") == 0) {
00152                 start();
00153             return TCL_OK;
00154         } else if(strcmp(argv[1], "log-movement") == 0) {
00155 #ifdef DEBUG
00156                         fprintf(stderr,
00157                                 "%d - %s: calling update_position()\n",
00158                                 address_, __PRETTY_FUNCTION__);
00159 #endif
00160                 update_position();
00161                 log_movement();
00162             return TCL_OK;
00163         } else if(strcmp(argv[1], "log-energy") == 0) {
00164             log_energy(1);
00165             return TCL_OK;
00166         } else if(strcmp(argv[1], "powersaving") == 0) {
00167             energy_model()->powersavingflag() = 1;
00168             energy_model()->start_powersaving();
00169             return TCL_OK;
00170         } else if(strcmp(argv[1], "adaptivefidelity") == 0) {
00171             energy_model()->adaptivefidelity() = 1;
00172             energy_model()->powersavingflag() = 1;
00173             energy_model()->start_powersaving();
00174             return TCL_OK;
00175         } else if (strcmp(argv[1], "energy") == 0) {
00176             Tcl& tcl = Tcl::instance();
00177             tcl.resultf("%f", energy_model()->energy());
00178             return TCL_OK;
00179         } else if (strcmp(argv[1], "adjustenergy") == 0) {
00180             // assume every 10 sec schedule and 1.15 W 
00181             // idle energy consumption. needs to be
00182             // parameterized.
00183             idle_energy_patch(10, 1.15);
00184             energy_model()->total_sndtime() = 0;
00185             energy_model()->total_rcvtime() = 0;
00186             energy_model()->total_sleeptime() = 0;
00187             return TCL_OK;
00188         } else if (strcmp(argv[1], "on") == 0) {
00189             energy_model()->node_on() = true;
00190             tcl.evalf("%s set netif_(0)", name_);
00191             const char *str = tcl.result();
00192             tcl.evalf("%s NodeOn", str);
00193             God::instance()->ComputeRoute();
00194             return TCL_OK;
00195         } else if (strcmp(argv[1], "off") == 0) {
00196             energy_model()->node_on() = false;
00197             tcl.evalf("%s set netif_(0)", name_);
00198             const char *str = tcl.result();
00199             tcl.evalf("%s NodeOff", str);
00200             tcl.evalf("%s set ragent_", name_);
00201             str = tcl.result();
00202             tcl.evalf("%s reset-state", str);
00203             God::instance()->ComputeRoute();
00204                 return TCL_OK;
00205         } else if (strcmp(argv[1], "shutdown") == 0) {
00206             // set node state
00207             //Phy *p;
00208             energy_model()->node_on() = false;
00209             
00210             //p = ifhead().lh_first;
00211             //if (p) ((WirelessPhy *)p)->node_off();
00212             return TCL_OK;
00213         } else if (strcmp(argv[1], "startup") == 0) {
00214             energy_model()->node_on() = true;
00215             return TCL_OK;
00216         }
00217     
00218     } else if(argc == 3) {
00219         if(strcmp(argv[1], "addif") == 0) {
00220             WiredPhy* phyp = (WiredPhy*)TclObject::lookup(argv[2]);
00221             if(phyp == 0)
00222                 return TCL_ERROR;
00223             phyp->insertnode(&ifhead_);
00224             phyp->setnode(this);
00225             return TCL_OK;
00226         } else if (strcmp(argv[1], "setsleeptime") == 0) {
00227             energy_model()->afe()->set_sleeptime(atof(argv[2]));
00228             energy_model()->afe()->set_sleepseed(atof(argv[2]));
00229             return TCL_OK;
00230         } else if (strcmp(argv[1], "setenergy") == 0) {
00231             energy_model()->setenergy(atof(argv[2]));
00232             return TCL_OK;
00233         } else if (strcmp(argv[1], "settalive") == 0) {
00234             energy_model()->max_inroute_time() = atof(argv[2]);
00235             return TCL_OK;
00236         } else if (strcmp(argv[1], "maxttl") == 0) {
00237             energy_model()->maxttl() = atoi(argv[2]);
00238             return TCL_OK;
00239         } else if(strcmp(argv[1], "radius") == 0) {
00240                         radius_ = strtod(argv[2],NULL);
00241                         return TCL_OK;
00242                 } else if(strcmp(argv[1], "random-motion") == 0) {
00243             random_motion_ = atoi(argv[2]);
00244             return TCL_OK;
00245         } else if(strcmp(argv[1], "addif") == 0) {
00246             WirelessPhy *n = (WirelessPhy*)
00247                 TclObject::lookup(argv[2]);
00248             if(n == 0)
00249                 return TCL_ERROR;
00250             n->insertnode(&ifhead_);
00251             n->setnode(this);
00252             return TCL_OK;
00253         } else if(strcmp(argv[1], "topography") == 0) {
00254             T_ = (Topography*) TclObject::lookup(argv[2]);
00255             if (T_ == 0)
00256                 return TCL_ERROR;
00257             return TCL_OK;
00258         } else if(strcmp(argv[1], "log-target") == 0) {
00259             log_target_ = (Trace*) TclObject::lookup(argv[2]);
00260             if (log_target_ == 0)
00261                 return TCL_ERROR;
00262             return TCL_OK;
00263         } else if (strcmp(argv[1],"base-station") == 0) {
00264             base_stn_ = atoi(argv[2]);
00265             if(base_stn_ == -1)
00266                 return TCL_ERROR;
00267             return TCL_OK;
00268         } 
00269     } else if (argc == 4) {
00270         if (strcmp(argv[1], "idleenergy") == 0) {
00271             idle_energy_patch(atof(argv[2]),atof(argv[3]));
00272             return TCL_OK;
00273         }
00274     } else if (argc == 5) {
00275         if (strcmp(argv[1], "setdest") == 0) { 
00276             /* <mobilenode> setdest <X> <Y> <speed> */
00277 #ifdef DEBUG
00278             fprintf(stderr, "%d - %s: calling set_destination()\n",
00279                 address_, __FUNCTION__);
00280 #endif
00281   
00282             if (set_destination(atof(argv[2]), atof(argv[3]), 
00283                         atof(argv[4])) < 0)
00284                 return TCL_ERROR;
00285             return TCL_OK;
00286         }
00287     }
00288     return Node::command(argc, argv);
00289 }

Here is the call graph for this function:

void Node::delete_route char *  dst,
NsObject nullagent
[virtual, inherited]
 

Reimplemented from ParentNode.

Definition at line 247 of file node.cc.

References RoutingModule::delete_route(), and Node::rtnotif_.

00247                                                       {
00248     if (rtnotif_)
00249         rtnotif_->delete_route(dst, nullagent);
00250 }

Here is the call graph for this function:

double MobileNode::destX  )  [inline]
 

Definition at line 150 of file mobilenode.h.

References destX_.

Referenced by GridKeeper::new_moves().

00150 { return destX_; }

double MobileNode::destY  )  [inline]
 

Definition at line 151 of file mobilenode.h.

References destY_.

Referenced by GridKeeper::new_moves().

00151 { return destY_; }

double MobileNode::distance MobileNode  ) 
 

Definition at line 584 of file mobilenode.cc.

References update_position(), X_, Y_, and Z_.

Referenced by propdelay().

00585 {
00586     update_position();      // update my position
00587     m->update_position();       // update m's position
00588 
00589         double Xpos = (X_ - m->X_) * (X_ - m->X_);
00590         double Ypos = (Y_ - m->Y_) * (Y_ - m->Y_);
00591     double Zpos = (Z_ - m->Z_) * (Z_ - m->Z_);
00592 
00593         return sqrt(Xpos + Ypos + Zpos);
00594 }

Here is the call graph for this function:

void Node::Dump void   )  [inherited]
 

Definition at line 624 of file calcdest.cc.

References Node::destination, Node::direction, Neighbor::index, Node::index, Node::neighbor, Node::position, Neighbor::reachable, Node::speed, Node::time_arrival, Node::time_transition, Node::time_update, vector::X, vector::Y, and vector::Z.

00625 {
00626     Neighbor *m;
00627     u_int32_t i;
00628 
00629     fprintf(stdout,
00630         "Node: %d\tpos: (%.2f, %.2f, %.2f) dst: (%.2f, %.2f, %.2f)\n",
00631         index, position.X, position.Y, position.Z,
00632         destination.X, destination.Y, destination.Z);
00633     fprintf(stdout, "\tdir: (%.2f, %.2f, %.2f) speed: %.2f\n",
00634         direction.X, direction.Y, direction.Z, speed);
00635     fprintf(stdout, "\tArrival: %.2f, Update: %.2f, Transition: %.2f\n",
00636         time_arrival, time_update, time_transition);
00637 
00638     for(i = 1; i < NODES; i++) {
00639         m = &neighbor[i];
00640         fprintf(stdout, "\tNeighbor: %d (%lx), Reachable: %d, Transition Time: %.2f\n",
00641             m->index, (long) m, m->reachable, m->time_transition);
00642     }
00643 }

void MobileNode::dump void   ) 
 

Definition at line 296 of file mobilenode.cc.

References Node::address_, Phy::dump(), Node::ifhead_, and Phy::nextnode().

00297 {
00298     Phy *n;
00299     fprintf(stdout, "Index: %d\n", address_);
00300     fprintf(stdout, "Network Interface List\n");
00301     for(n = ifhead_.lh_first; n; n = n->nextnode() )
00302         n->dump();  
00303     fprintf(stdout, "--------------------------------------------------\n");
00304 }

Here is the call graph for this function:

double MobileNode::dX  )  [inline]
 

Definition at line 147 of file mobilenode.h.

References dX_.

Referenced by GridKeeper::new_moves().

00147 { return dX_; }

double MobileNode::dY  )  [inline]
 

Definition at line 148 of file mobilenode.h.

References dY_.

Referenced by GridKeeper::new_moves().

00148 { return dY_; }

double MobileNode::dZ  )  [inline]
 

Definition at line 149 of file mobilenode.h.

References dZ_.

00149 { return dZ_; }

EnergyModel* Node::energy_model  )  [inline, inherited]
 

Definition at line 192 of file node.h.

Referenced by command(), WirelessPhy::em(), EnergyTimer::EnergyTimer(), EnergyTimer::expire(), CMUTrace::format_mac_common(), CMUTrace::format_rtp(), GAFAgent::myttl(), CMUTrace::nam_format(), CMUTrace::node_energy(), GAFAgent::node_off(), GAFAgent::node_on(), Phy802_15_4::recv(), Mac802_15_4::recv(), Mac802_11::send(), and Mac802_15_4::sendDown().

00192 { return energy_model_; }

bool Node::exist_namchan  )  const [inline, inherited]
 

Definition at line 133 of file node.h.

Referenced by EnergyModel::set_node_sleep().

00133 { return (namChan_ != 0); }

Node * Node::get_node_by_address nsaddr_t   )  [static, inherited]
 

Definition at line 315 of file node.cc.

References Node::address_, Node::nextnode(), and Node::Node().

Referenced by CMUTrace::format_mac_common(), CMUTrace::format_rtp(), GAFAgent::GAFAgent(), CMUTrace::nam_format(), and CMUTrace::node_energy().

00316 {
00317     Node * tnode = nodehead_.lh_first;
00318     for (; tnode; tnode = tnode->nextnode()) {
00319         if (tnode->address_ == id ) {
00320             return (tnode);
00321         }
00322     }
00323     return NULL;
00324 }

Here is the call graph for this function:

void MobileNode::getLoc double *  x,
double *  y,
double *  z
[inline]
 

Definition at line 130 of file mobilenode.h.

References update_position(), X_, Y_, and Z_.

Referenced by GeoRoutingFilter::getNodeLocation(), TwoRayGround::Pr(), Shadowing::Pr(), ShadowingVis::Pr(), FreeSpace::Pr(), LandmarkAgent::startUp(), and FloodAgent::startUp().

00130                                                             {
00131         update_position();  *x = X_; *y = Y_; *z = Z_;
00132     }

Here is the call graph for this function:

virtual nodeid_t RNode::GetNeighbor Nix_t   )  [virtual, inherited]
 

virtual NixPair_t Node::GetNix nodeid_t   )  [virtual, inherited]
 

Reimplemented from RNode.

virtual Nixl_t RNode::GetNixl  )  [virtual, inherited]
 

Reimplemented in NixNode.

double MobileNode::getUpdateTime  )  [inline]
 

Definition at line 153 of file mobilenode.h.

References position_update_time_.

00153 { return position_update_time_; }

void MobileNode::getVelo double *  dx,
double *  dy,
double *  dz
[inline]
 

Definition at line 133 of file mobilenode.h.

References dX_, dY_, and speed_.

00133                                                                 {
00134         *dx = dX_ * speed_; *dy = dY_ * speed_; *dz = 0.0;
00135     }

void MobileNode::idle_energy_patch float  ,
float 
[virtual]
 

Definition at line 603 of file mobilenode.cc.

Referenced by command().

00604 {
00605 }

const struct if_head& Node::ifhead  )  const [inline, inherited]
 

Definition at line 148 of file node.h.

Referenced by GAFAgent::myttl(), GAFAgent::node_off(), GAFAgent::node_on(), and WirelessChannel::sendUp().

00148 { return ifhead_; }

int MobileNode::initialized  )  [inline, private]
 

Definition at line 211 of file mobilenode.h.

References log_target_, Topography::lowerX(), Topography::lowerY(), T_, Topography::upperX(), Topography::upperY(), X_, and Y_.

Referenced by set_destination(), and start().

00211                              {
00212         return (T_ && log_target_ &&
00213             X_ >= T_->lowerX() && X_ <= T_->upperX() &&
00214             Y_ >= T_->lowerY() && Y_ <= T_->upperY());
00215     }

Here is the call graph for this function:

void Node::insert struct node_head *  head  )  [inline, inherited]
 

Definition at line 141 of file node.h.

References LIST_INSERT_HEAD.

Referenced by Node::Node().

00141                                                {
00142         LIST_INSERT_HEAD(head, this, entry);
00143     }

NsObject * Node::intf_to_target int32_t   )  [inherited]
 

Definition at line 305 of file node.cc.

References LinkHead::label(), Node::linklisthead_, and LinkHead::nextlinkhead().

00306 {
00307     LinkHead *lhp = linklisthead_.lh_first;
00308     for (; lhp; lhp = lhp->nextlinkhead()) 
00309         if (label == lhp->label())
00310             return ((NsObject*) lhp);
00311     return NULL;
00312 }

Here is the call graph for this function:

const struct linklist_head& Node::linklisthead  )  const [inline, inherited]
 

Definition at line 149 of file node.h.

Referenced by SatRouteObject::compute_topology(), LinkHandoffMgr::get_peer_next_linkhead(), SatLinkHandoffMgr::handoff(), and TermLinkHandoffMgr::handoff().

00149                                                             { 
00150         return linklisthead_; 
00151     }

Node::LIST_ENTRY Node   )  [protected, inherited]
 

MobileNode::LIST_ENTRY MobileNode   )  [private]
 

Location* Node::location  )  [inline, inherited]
 

Definition at line 193 of file node.h.

00193 { return location_; }

void MobileNode::log_energy int   ) 
 

Definition at line 345 of file mobilenode.cc.

References Node::address_, BaseTrace::buffer(), Scheduler::clock(), BaseTrace::dump(), EnergyModel::energy(), Node::energy_model_, Scheduler::instance(), log_target_, and Trace::pt_.

Referenced by command().

00346 {
00347     if (!log_target_) 
00348         return;
00349     Scheduler &s = Scheduler::instance();
00350     if (flag) {
00351         sprintf(log_target_->pt_->buffer(),"N -t %f -n %d -e %f", s.clock(),
00352             address_, energy_model_->energy()); 
00353     } else {
00354         sprintf(log_target_->pt_->buffer(),"N -t %f -n %d -e 0 ", s.clock(),
00355             address_); 
00356     }
00357     log_target_->pt_->dump();
00358 }

Here is the call graph for this function:

void MobileNode::log_movement  )  [protected]
 

Definition at line 331 of file mobilenode.cc.

References Node::address_, BaseTrace::buffer(), Scheduler::clock(), destX_, destY_, BaseTrace::dump(), Scheduler::instance(), log_target_, Trace::pt_, speed_, X_, Y_, and Z_.

Referenced by command(), set_destination(), and start().

00332 {
00333         if (!log_target_) 
00334         return;
00335 
00336     Scheduler& s = Scheduler::instance();
00337     sprintf(log_target_->pt_->buffer(),
00338         "M %.5f %d (%.2f, %.2f, %.2f), (%.2f, %.2f), %.2f",
00339         s.clock(), address_, X_, Y_, Z_, destX_, destY_, speed_);
00340     log_target_->pt_->dump();
00341 }

Here is the call graph for this function:

void Node::namdump  )  [protected, inherited]
 

Definition at line 281 of file node.cc.

References abort(), Node::namChan_, NODE_NAMLOG_BUFSZ, and Node::nwrk_.

Referenced by Node::namlog(), and set_destination().

00282 {
00283         int n = 0;
00284         /* Otherwise nwrk_ isn't initialized */
00285     n = strlen(nwrk_);
00286     if (n >= NODE_NAMLOG_BUFSZ-1) {
00287         fprintf(stderr, 
00288             "Node::namdump() exceeds buffer size. Bail out.\n");
00289         abort();
00290     }
00291     if (n > 0) {
00292         /*
00293          * tack on a newline (temporarily) instead
00294          * of doing two writes
00295          */
00296         nwrk_[n] = '\n';
00297         nwrk_[n + 1] = 0;
00298         (void)Tcl_Write(namChan_, nwrk_, n + 1);
00299         nwrk_[n] = 0;
00300     }
00301 }

Here is the call graph for this function:

void Node::namlog const char *  fmt,
  ...
[virtual, inherited]
 

Definition at line 270 of file node.cc.

References Node::namChan_, Node::namdump(), and Node::nwrk_.

00271 {
00272     // Don't do anything if we don't have a log file.
00273     if (namChan_ == 0) 
00274         return;
00275     va_list ap;
00276     va_start(ap, fmt);
00277     vsprintf(nwrk_, fmt, ap);
00278     namdump();
00279 }

Here is the call graph for this function:

MobileNode*& MobileNode::next  )  [inline]
 

Definition at line 142 of file mobilenode.h.

References next_.

Referenced by GridKeeper::command(), GridKeeper::dump(), GridKeeper::get_neighbors(), and GridHandler::handle().

00142 { return next_; }

virtual const NodeWeight_t Node::NextAdj const NodeWeight_t  )  [virtual, inherited]
 

Reimplemented from RNode.

MobileNode* MobileNode::nextnode  )  [inline]
 

Reimplemented from Node.

Definition at line 136 of file mobilenode.h.

00136 { return link_.le_next; }

int Node::nodeid  )  [inline, virtual, inherited]
 

Reimplemented from ParentNode.

Definition at line 132 of file node.h.

Referenced by PushbackAgent::calculateLowerBound(), PushbackAgent::command(), PushbackAgent::getQID(), LoggingDataStruct::LoggingDataStruct(), CMUTrace::nam_format(), PushbackAgent::printMsg(), PushbackAgent::processPushbackStatus(), PushbackAgent::pushbackCancel(), PushbackAgent::pushbackCheck(), PushbackAgent::pushbackRefresh(), PushbackAgent::pushbackStatus(), PushbackAgent::refreshUpstreamLimits(), and PushbackQueue::timeout().

00132 { return nodeid_;}

double MobileNode::propdelay MobileNode  ) 
 

Definition at line 597 of file mobilenode.cc.

References distance(), and SPEED_OF_LIGHT.

Referenced by WirelessChannel::get_pdelay(), CMUTrace::nam_format(), and WirelessChannel::sendUp().

00598 {
00599     return distance(m) / SPEED_OF_LIGHT;
00600 }

Here is the call graph for this function:

double MobileNode::radius  )  [inline]
 

Definition at line 152 of file mobilenode.h.

References radius_.

Referenced by GridKeeper::get_neighbors().

00152 { return radius_; }

void MobileNode::random_destination  )  [protected]
 

Definition at line 516 of file mobilenode.cc.

References Node::address_, random_speed(), set_destination(), speed_, T_, Random::uniform(), Topography::upperX(), and Topography::upperY().

Referenced by start().

00517 {
00518     if (T_ == 0) {
00519         fprintf(stderr, "No TOPOLOGY assigned\n");
00520         exit(1);
00521     }
00522 
00523     random_speed();
00524 #ifdef DEBUG
00525         fprintf(stderr, "%d - %s: calling set_destination()\n",
00526                 address_, __FUNCTION__);
00527 #endif
00528     (void) set_destination(Random::uniform() * T_->upperX(),
00529                                Random::uniform() * T_->upperY(),
00530                                speed_);
00531 }

Here is the call graph for this function:

void MobileNode::random_direction  )  [protected]
 

Definition at line 534 of file mobilenode.cc.

References dX_, dY_, dZ_, Topography::lowerX(), Topography::lowerY(), Random::random(), Topography::resol(), T_, Random::uniform(), Topography::upperX(), Topography::upperY(), X_, and Y_.

00535 {
00536     /* this code isn't used anymore -dam 1/22/98 */
00537     double len;
00538 
00539     dX_ = (double) Random::random();
00540     dY_ = (double) Random::random();
00541 
00542     len = sqrt( (dX_ * dX_) + (dY_ * dY_) );
00543 
00544     dX_ /= len;
00545     dY_ /= len;
00546     dZ_ = 0.0;              // we're not flying...
00547 
00548     /*
00549      * Determine the sign of each component of the
00550      * direction vector.
00551      */
00552     if (X_ > (T_->upperX() - 2*T_->resol())) {
00553         if (dX_ > 0) 
00554             dX_ = -dX_;
00555     } else if (X_ < (T_->lowerX() + 2*T_->resol())) {
00556         if (dX_ < 0) 
00557             dX_ = -dX_;
00558     } else if (Random::uniform() <= 0.5) {
00559         dX_ = -dX_;
00560     }
00561 
00562     if (Y_ > (T_->upperY() - 2*T_->resol())) {
00563         if (dY_ > 0) 
00564             dY_ = -dY_;
00565     } else if (Y_ < (T_->lowerY() + 2*T_->resol())) {
00566         if (dY_ < 0) 
00567             dY_ = -dY_;
00568     } else if(Random::uniform() <= 0.5) {
00569         dY_ = -dY_;
00570     }
00571 #if 0
00572     fprintf(stderr, "Location: (%f, %f), Direction: (%f, %f)\n",
00573         X_, Y_, dX_, dY_);
00574 #endif
00575 }

Here is the call graph for this function:

void MobileNode::random_position  )  [private]
 

Definition at line 501 of file mobilenode.cc.

References Topography::height(), position_update_time_, T_, Random::uniform(), Topography::upperX(), Topography::upperY(), X_, Y_, and Z_.

Referenced by start().

00502 {
00503     if (T_ == 0) {
00504         fprintf(stderr, "No TOPOLOGY assigned\n");
00505         exit(1);
00506     }
00507 
00508     X_ = Random::uniform() * T_->upperX();
00509     Y_ = Random::uniform() * T_->upperY();
00510     Z_ = T_->height(X_, Y_);
00511 
00512     position_update_time_ = 0.0;
00513 }

Here is the call graph for this function:

void MobileNode::random_speed  )  [protected]
 

Definition at line 578 of file mobilenode.cc.

References MAX_SPEED, speed_, and Random::uniform().

Referenced by random_destination().

00579 {
00580     speed_ = Random::uniform() * MAX_SPEED;
00581 }

Here is the call graph for this function:

void Node::route_notify RoutingModule rtm  )  [inherited]
 

Definition at line 222 of file node.cc.

References RoutingModule::route_notify(), and Node::rtnotif_.

Referenced by VcRoutingModule::command(), ManualRoutingModule::command(), HierRoutingModule::command(), McastRoutingModule::command(), QSRoutingModule::command(), SourceRoutingModule::command(), BaseRoutingModule::command(), and MPLSModule::command().

00222                                           {
00223     if (rtnotif_ == NULL)
00224         rtnotif_ = rtm;
00225     else
00226         rtnotif_->route_notify(rtm);
00227 }

Here is the call graph for this function:

void MobileNode::set_base_stn int  addr  )  [inline]
 

Definition at line 138 of file mobilenode.h.

References base_stn_.

Referenced by MIPMHAgent::recv().

00138 { base_stn_ = addr; }

int MobileNode::set_destination double  x,
double  y,
double  speed
[protected]
 

Definition at line 407 of file mobilenode.cc.

References Node::address_, Scheduler::clock(), destX_, destY_, dX_, dY_, dZ_, initialized(), GridKeeper::instance(), Scheduler::instance(), log_movement(), Topography::lowerX(), Topography::lowerY(), Node::namChan_, Node::namdump(), Node::nodeid_, Node::nwrk_, position_update_time_, speed_, T_, update_position(), Topography::upperX(), Topography::upperY(), X_, and Y_.

Referenced by command(), and random_destination().

00408 {
00409     assert(initialized());
00410 
00411     if(x >= T_->upperX() || x <= T_->lowerX())
00412         return -1;
00413     if(y >= T_->upperY() || y <= T_->lowerY())
00414         return -1;
00415     
00416     update_position();  // figure out where we are now
00417     
00418     destX_ = x;
00419     destY_ = y;
00420     speed_ = s;
00421     
00422     dX_ = destX_ - X_;
00423     dY_ = destY_ - Y_;
00424     dZ_ = 0.0;      // this isn't used, since flying isn't allowed
00425 
00426     if (destX_ != X_ || destY_ != Y_) {
00427         // normalize dx, dy to unit len
00428         double len = sqrt( (dX_ * dX_) + (dY_ * dY_) );
00429         dX_ /= len;
00430         dY_ /= len;
00431     }
00432   
00433     position_update_time_ = Scheduler::instance().clock();
00434 
00435 #ifdef DEBUG
00436     fprintf(stderr, "%d - %s: calling log_movement()\n", 
00437         address_, __FUNCTION__);
00438 #endif
00439     log_movement();
00440 
00441     /* update gridkeeper */
00442     if (GridKeeper::instance()){
00443         GridKeeper* gp =  GridKeeper::instance();
00444         gp-> new_moves(this);
00445     }                     
00446 
00447     if (namChan_ != 0) {
00448         sprintf(nwrk_,     
00449             "n -t %f -s %d -x %f -y %f -U %f -V %f -T %f",
00450             Scheduler::instance().clock(),
00451             nodeid_,
00452             X_, Y_,
00453             speed_ * dX_, speed_ * dY_,
00454             ((speed_*dX_) != 0) ? 
00455                 (destX_-X_)/(speed_*dX_) : speed_*dX_
00456             );   
00457         namdump();         
00458     }
00459     return 0;
00460 }

Here is the call graph for this function:

void Node::set_table_size int  level,
int  csize
[virtual, inherited]
 

Reimplemented from ParentNode.

Definition at line 257 of file node.cc.

References Node::rtnotif_, and RoutingModule::set_table_size().

00257                                               {
00258     if (rtnotif_)
00259         rtnotif_->set_table_size(level, csize);
00260 }

Here is the call graph for this function:

void Node::set_table_size int  nn  )  [virtual, inherited]
 

Reimplemented from ParentNode.

Definition at line 252 of file node.cc.

References Node::rtnotif_, and RoutingModule::set_table_size().

00252                                 {
00253     if (rtnotif_)
00254         rtnotif_->set_table_size(nn);
00255 }

Here is the call graph for this function:

double MobileNode::speed  )  [inline]
 

Definition at line 146 of file mobilenode.h.

References speed_.

Referenced by GridKeeper::new_moves().

00146 { return speed_; }

void MobileNode::start void   ) 
 

Definition at line 310 of file mobilenode.cc.

References __PRETTY_FUNCTION__, Node::address_, initialized(), Scheduler::instance(), log_movement(), pos_handle_, pos_intr_, position_update_interval_, random_destination(), random_motion_, random_position(), and Scheduler::schedule().

Referenced by command().

00311 {
00312     Scheduler& s = Scheduler::instance();
00313 
00314     if(random_motion_ == 0) {
00315         log_movement();
00316         return;
00317     }
00318 
00319     assert(initialized());
00320 
00321     random_position();
00322 #ifdef DEBUG
00323         fprintf(stderr, "%d - %s: calling random_destination()\n",
00324                 address_, __PRETTY_FUNCTION__);
00325 #endif
00326     random_destination();
00327     s.schedule(&pos_handle_, &pos_intr_, position_update_interval_);
00328 }

Here is the call graph for this function:

void Node::unreg_route_notify RoutingModule rtm  )  [inherited]
 

Definition at line 229 of file node.cc.

References RoutingModule::next_rtm_, Node::rtnotif_, and RoutingModule::unreg_route_notify().

Referenced by VcRoutingModule::command(), ManualRoutingModule::command(), HierRoutingModule::command(), McastRoutingModule::command(), QSRoutingModule::command(), SourceRoutingModule::command(), BaseRoutingModule::command(), and MPLSModule::command().

00229                                                 {
00230     if (rtnotif_) {
00231         if (rtnotif_ == rtm) {
00232             //RoutingModule *tmp = rtnotif_;
00233             rtnotif_= rtnotif_->next_rtm_;
00234             //free (tmp);
00235         }
00236         else
00237             rtnotif_->unreg_route_notify(rtm);
00238     }
00239 }

Here is the call graph for this function:

void Node::Update void   )  [inherited]
 

Definition at line 427 of file calcdest.cc.

References Node::destination, Node::direction, vector::length(), LIST_NEXT, LIST_REMOVE, MAXTIME, Node::position, setdest::speed, Node::speed, TIME, Node::time_arrival, Node::time_transition, Node::time_update, setdest::X, vector::X, setdest::Y, vector::Y, and vector::Z.

00428 {
00429         struct setdest *setdest = traj.lh_first;
00430 
00431     position += (speed * (TIME - time_update)) * direction;
00432 
00433     if(TIME == time_arrival) {
00434 
00435       if (NULL == setdest) 
00436         {
00437           destination = position;
00438           direction.X = direction.Y = direction.Z = 0.0;
00439           speed = 0.0;
00440           time_arrival = MAXTIME + 1;
00441         } 
00442       else 
00443         {
00444           vector v;
00445           destination.X = setdest->X;
00446           destination.Y = setdest->Y;
00447           speed = setdest->speed;
00448           if (0.0 == speed)
00449         { // it's a pause at the current location
00450           if (LIST_NEXT(setdest,traj))
00451             time_arrival = LIST_NEXT(setdest,traj)->time;
00452           else
00453             time_arrival = MAXTIME + 1;
00454         }
00455           else 
00456         { // we're moving somewhere, when do we get there?
00457           v = destination - position;
00458           direction = v / v.length();
00459           time_arrival = TIME + v.length() / speed;
00460         }
00461           LIST_REMOVE(setdest,traj);
00462           free(setdest);
00463         }
00464     }
00465 
00466     time_update = TIME;
00467     time_transition = 0.0;
00468 }

Here is the call graph for this function:

void MobileNode::update_position  ) 
 

Definition at line 465 of file mobilenode.cc.

References Node::address_, Scheduler::clock(), destX_, destY_, dX_, dY_, Scheduler::instance(), position_update_time_, speed_, T_, Topography::updateNodesList(), X_, Y_, and Z_.

Referenced by command(), distance(), GridKeeper::get_neighbors(), getLoc(), and set_destination().

00466 {
00467     double now = Scheduler::instance().clock();
00468     double interval = now - position_update_time_;
00469     double oldX = X_;
00470     //double oldY = Y_;
00471 
00472     if ((interval == 0.0)&&(position_update_time_!=0))
00473         return;         // ^^^ for list-based imprvmnt 
00474 
00475 
00476     // CHECK, IF THE SPEED IS 0, THEN SKIP, but usually it's not 0
00477     X_ += dX_ * (speed_ * interval);
00478     Y_ += dY_ * (speed_ * interval);
00479 
00480     if ((dX_ > 0 && X_ > destX_) || (dX_ < 0 && X_ < destX_))
00481       X_ = destX_;      // correct overshoot (slow? XXX)
00482     if ((dY_ > 0 && Y_ > destY_) || (dY_ < 0 && Y_ < destY_))
00483       Y_ = destY_;      // correct overshoot (slow? XXX)
00484     
00485     /* list based improvement */
00486     if(oldX != X_)// || oldY != Y_)
00487         T_->updateNodesList(this, oldX);//, oldY);
00488     // COMMENTED BY -VAL- // bound_position();
00489 
00490     // COMMENTED BY -VAL- // Z_ = T_->height(X_, Y_);
00491 
00492 #if 0
00493     fprintf(stderr, "Node: %d, X: %6.2f, Y: %6.2f, Z: %6.2f, time: %f\n",
00494         address_, X_, Y_, Z_, now);
00495 #endif
00496     position_update_time_ = now;
00497 }

Here is the call graph for this function:

void Node::UpdateNeighbors void   )  [inherited]
 

Definition at line 472 of file calcdest.cc.

References a, b, Node::direction, Node::index, vector::length(), m1, m2, Node::neighbor, NodeList, Node::position, RANGE, ROUND_ERROR, SANITY_CHECKS, Node::speed, and TIME.

00473 {
00474     static Node *n2;
00475     static Neighbor *m1, *m2;
00476     static vector D, B, v1, v2;
00477     static double a, b, c, t1, t2, Q;
00478     static u_int32_t i, reachable;
00479 
00480     v1 = speed * direction;
00481 
00482     /*
00483      *  Only need to go from INDEX --> N for each one since links
00484      *  are symmetric.
00485      */
00486     for(i = index+1; i < NODES; i++) {
00487 
00488         m1 = &neighbor[i];
00489         n2 = &NodeList[i];
00490         m2 = &n2->neighbor[index];
00491 
00492         assert(i == m1->index);
00493         assert(m1->index == n2->index);
00494         assert(index == m2->index);
00495                 assert(m1->reachable == m2->reachable);
00496 
00497                 reachable = m1->reachable;
00498 
00499         /* ==================================================
00500            Determine Reachability
00501            ================================================== */
00502         {   vector d = position - n2->position;
00503 
00504             if(d.length() < RANGE) {
00505 #ifdef SANITY_CHECKS
00506                 if(TIME > 0.0 && m1->reachable == 0)
00507                     assert(RANGE - d.length() < ROUND_ERROR);
00508 #endif
00509                 m1->reachable = m2->reachable = 1;
00510             }
00511             // Boundary condition handled below.
00512             else {
00513 #ifdef SANITY_CHECKS
00514                 if(TIME > 0.0 && m1->reachable == 1)
00515                     assert(d.length() - RANGE < ROUND_ERROR);
00516 #endif
00517                 m1->reachable = m2->reachable = 0;
00518             }
00519 #ifdef DEBUG
00520                         fprintf(stdout, "# %.6f (%d, %d) %.2fm\n",
00521                                 TIME, index, m1->index, d.length());
00522 #endif
00523         }
00524 
00525         /* ==================================================
00526            Determine Next Event Time
00527            ================================================== */
00528         v2 = n2->speed * n2->direction;
00529 
00530         D = v2 - v1;
00531         B = n2->position - position;
00532 
00533         a = (D.X * D.X) + (D.Y * D.Y) + (D.Z * D.Z);
00534         b = 2 * ((D.X * B.X) + (D.Y * B.Y) + (D.Z * B.Z));
00535         c = (B.X * B.X) + (B.Y * B.Y) + (B.Z * B.Z) - (RANGE * RANGE);
00536 
00537         if(a == 0.0) {
00538             /*
00539              *  No Finite Solution
00540              */
00541             m1->time_transition= 0.0;
00542             m2->time_transition= 0.0;
00543             goto  next;
00544         }
00545 
00546         Q = b * b - 4 * a * c;
00547         if(Q < 0.0) {
00548             /*
00549              *  No real roots.
00550              */
00551             m1->time_transition = 0.0;
00552             m2->time_transition = 0.0;
00553             goto next;
00554         }
00555         Q = sqrt(Q);
00556 
00557         t1 = (-b + Q) / (2 * a);
00558         t2 = (-b - Q) / (2 * a);
00559 
00560         // Stupid Rounding/Boundary Cases
00561         if(t1 > 0.0 && t1 < ROUND_ERROR) t1 = 0.0;
00562         if(t1 < 0.0 && -t1 < ROUND_ERROR) t1 = 0.0;
00563         if(t2 > 0.0 && t2 < ROUND_ERROR) t2 = 0.0;
00564         if(t2 < 0.0 && -t2 < ROUND_ERROR) t2 = 0.0;
00565 
00566         if(t1 < 0.0 && t2 < 0.0) {
00567             /*
00568              *  No "future" time solution.
00569              */
00570             m1->time_transition = 0.0;
00571             m2->time_transition = 0.0;
00572             goto next;
00573         }
00574 
00575         /*
00576          * Boundary conditions.
00577          */
00578         if((t1 == 0.0 && t2 > 0.0) || (t2 == 0.0 && t1 > 0.0)) {
00579             m1->reachable = m2->reachable = 1;
00580             m1->time_transition = m2->time_transition = TIME + max(t1, t2);
00581         }
00582         else if((t1 == 0.0 && t2 < 0.0) || (t2 == 0.0 && t1 < 0.0)) {
00583             m1->reachable = m2->reachable = 0;
00584             m1->time_transition = m2->time_transition = 0.0;
00585         }
00586 
00587         /*
00588          * Non-boundary conditions.
00589          */
00590         else if(t1 > 0.0 && t2 > 0.0) {
00591             m1->time_transition = TIME + min(t1, t2);
00592             m2->time_transition = TIME + min(t1, t2);
00593         }
00594         else if(t1 > 0.0) {
00595             m1->time_transition = TIME + t1;
00596             m2->time_transition = TIME + t1;
00597         }
00598         else {
00599             m1->time_transition = TIME + t2;
00600             m2->time_transition = TIME + t2;
00601         }
00602 
00603         /* ==================================================
00604            Update the transition times for both NODEs.
00605            ================================================== */
00606         if(time_transition == 0.0 || (m1->time_transition &&
00607            time_transition > m1->time_transition)) {
00608             time_transition = m1->time_transition;
00609         }
00610         if(n2->time_transition == 0.0 || (m2->time_transition &&
00611            n2->time_transition > m2->time_transition)) {
00612             n2->time_transition = m2->time_transition;
00613         }
00614         next:
00615                 if(reachable != m1->reachable && TIME > 0.0) {
00616                         LinkChangeCount++;
00617                         link_changes++;
00618                         n2->link_changes++;
00619                 }
00620     }
00621 }

Here is the call graph for this function:

double MobileNode::X  )  [inline]
 

Definition at line 143 of file mobilenode.h.

References X_.

Referenced by GridKeeper::command(), GridKeeper::get_neighbors(), WirelessChannel::getAffectedNodes(), GridKeeper::new_moves(), WirelessChannel::sortLists(), and WirelessChannel::updateNodesList().

00143 { return X_; }

double MobileNode::Y  )  [inline]
 

Definition at line 144 of file mobilenode.h.

References Y_.

Referenced by GridKeeper::command(), GridKeeper::get_neighbors(), WirelessChannel::getAffectedNodes(), and GridKeeper::new_moves().

00144 { return Y_; }

double MobileNode::Z  )  [inline]
 

Definition at line 145 of file mobilenode.h.

References Z_.

00145 { return Z_; }


Friends And Related Function Documentation

friend class PositionHandler [friend]
 

Definition at line 122 of file mobilenode.h.


Field Documentation

int Node::address_ [protected, inherited]
 

Reimplemented from ParentNode.

Definition at line 169 of file node.h.

Referenced by bound_position(), Node::command(), command(), dump(), Node::get_node_by_address(), log_energy(), log_movement(), random_destination(), set_destination(), start(), and update_position().

int MobileNode::base_stn_ [private]
 

Definition at line 237 of file mobilenode.h.

Referenced by base_stn(), command(), MobileNode(), and set_base_stn().

double MobileNode::destX_ [protected]
 

Definition at line 191 of file mobilenode.h.

Referenced by destX(), log_movement(), MobileNode(), set_destination(), and update_position().

double MobileNode::destY_ [protected]
 

Definition at line 192 of file mobilenode.h.

Referenced by destY(), log_movement(), MobileNode(), set_destination(), and update_position().

double MobileNode::dX_ [protected]
 

Definition at line 186 of file mobilenode.h.

Referenced by dX(), getVelo(), MobileNode(), random_direction(), set_destination(), and update_position().

double MobileNode::dY_ [protected]
 

Definition at line 187 of file mobilenode.h.

Referenced by dY(), getVelo(), MobileNode(), random_direction(), set_destination(), and update_position().

double MobileNode::dZ_ [protected]
 

Definition at line 188 of file mobilenode.h.

Referenced by dZ(), MobileNode(), random_direction(), and set_destination().

EnergyModel* Node::energy_model_ [protected, inherited]
 

Definition at line 195 of file node.h.

Referenced by Node::command(), and log_energy().

struct if_head Node::ifhead_ [protected, inherited]
 

Definition at line 179 of file node.h.

Referenced by SatNode::command(), command(), dump(), MobileNode(), and Node::Node().

int Node::link_changes [inherited]
 

Definition at line 86 of file setdest.h.

struct linklist_head Node::linklisthead_ [protected, inherited]
 

Definition at line 180 of file node.h.

Referenced by Node::command(), Node::intf_to_target(), and Node::Node().

Location* Node::location_ [protected, inherited]
 

Definition at line 199 of file node.h.

Trace* MobileNode::log_target_ [private]
 

Definition at line 233 of file mobilenode.h.

Referenced by command(), initialized(), log_energy(), log_movement(), and MobileNode().

EdgeVec_t Node::m_Adj [inherited]
 

Definition at line 82 of file tnode.h.

nodeid_t RNode::m_id [inherited]
 

Definition at line 42 of file rnode.h.

Referenced by NixNode::Id().

Tcl_Channel Node::namChan_ [protected, inherited]
 

Definition at line 173 of file node.h.

Referenced by Node::command(), Node::namdump(), Node::namlog(), and set_destination().

Neighbor* Node::neighbor [inherited]
 

Definition at line 109 of file setdest.h.

Referenced by Node::addNeighbor(), Node::Dump(), and Node::UpdateNeighbors().

neighbor_list_node* Node::neighbor_list_ [inherited]
 

Definition at line 154 of file node.h.

Referenced by Node::addNeighbor(), LoggingDataStruct::LoggingDataStruct(), and Node::Node().

MobileNode* MobileNode::next_ [protected]
 

Definition at line 197 of file mobilenode.h.

Referenced by MobileNode(), and next().

MobileNode* MobileNode::nextX_
 

Definition at line 162 of file mobilenode.h.

Referenced by WirelessChannel::addNodeToList(), WirelessChannel::getAffectedNodes(), WirelessChannel::removeNodeFromList(), WirelessChannel::sortLists(), and WirelessChannel::updateNodesList().

struct node_head Node::nodehead_ [static, inherited]
 

Definition at line 140 of file node.h.

Referenced by SatRouteObject::compute_topology(), SatNode::dumpSats(), Node::Node(), and SatRouteObject::populate_routing_tables().

int Node::nodeid_ [protected, inherited]
 

Reimplemented from ParentNode.

Definition at line 170 of file node.h.

Referenced by Node::command(), and set_destination().

char Node::nwrk_ [static, protected, inherited]
 

Definition at line 176 of file node.h.

Referenced by Node::namdump(), Node::namlog(), and set_destination().

PositionHandler MobileNode::pos_handle_ [protected]
 

Definition at line 201 of file mobilenode.h.

Referenced by start().

Event MobileNode::pos_intr_ [protected]
 

Definition at line 202 of file mobilenode.h.

Referenced by start().

double MobileNode::position_update_interval_ [protected]
 

Definition at line 170 of file mobilenode.h.

Referenced by MobileNode(), and start().

double MobileNode::position_update_time_ [protected]
 

Definition at line 169 of file mobilenode.h.

Referenced by getUpdateTime(), MobileNode(), random_position(), set_destination(), and update_position().

MobileNode* MobileNode::prevX_
 

Definition at line 163 of file mobilenode.h.

Referenced by WirelessChannel::addNodeToList(), WirelessChannel::getAffectedNodes(), WirelessChannel::removeNodeFromList(), WirelessChannel::sortLists(), and WirelessChannel::updateNodesList().

double MobileNode::radius_ [protected]
 

Definition at line 198 of file mobilenode.h.

Referenced by command(), MobileNode(), and radius().

int MobileNode::random_motion_ [private]
 

Definition at line 218 of file mobilenode.h.

Referenced by command(), MobileNode(), and start().

int Node::route_changes [inherited]
 

Definition at line 85 of file setdest.h.

Referenced by show_diffs().

RoutingModule* Node::rtnotif_ [protected, inherited]
 

Definition at line 183 of file node.h.

Referenced by Node::add_route(), Node::delete_route(), Node::route_notify(), Node::set_table_size(), and Node::unreg_route_notify().

double MobileNode::speed_ [protected]
 

Definition at line 179 of file mobilenode.h.

Referenced by getVelo(), log_movement(), MobileNode(), random_destination(), random_speed(), set_destination(), speed(), and update_position().

Topography* MobileNode::T_ [private]
 

Definition at line 229 of file mobilenode.h.

Referenced by bound_position(), command(), initialized(), MobileNode(), random_destination(), random_direction(), random_position(), set_destination(), and update_position().

double Node::time_arrival [inherited]
 

Definition at line 81 of file setdest.h.

Referenced by Node::Dump(), and Node::Update().

double Node::time_transition [inherited]
 

Definition at line 82 of file setdest.h.

Referenced by Node::Dump(), main(), and Node::Update().

double MobileNode::X_ [protected]
 

Definition at line 176 of file mobilenode.h.

Referenced by bound_position(), distance(), getLoc(), initialized(), log_movement(), MobileNode(), random_direction(), random_position(), set_destination(), update_position(), and X().

double MobileNode::Y_ [protected]
 

Definition at line 177 of file mobilenode.h.

Referenced by bound_position(), distance(), getLoc(), initialized(), log_movement(), MobileNode(), random_direction(), random_position(), set_destination(), update_position(), and Y().

double MobileNode::Z_ [protected]
 

Definition at line 178 of file mobilenode.h.

Referenced by distance(), getLoc(), log_movement(), MobileNode(), random_position(), update_position(), and Z().


The documentation for this class was generated from the following files:
Generated on Tue Mar 6 17:21:13 2007 for ns2 Network Simulator 2.29 by  doxygen 1.4.6