#include <node.h>
Inheritance diagram for Node:


Public Member Functions | |
| Node (void) | |
| ~Node () | |
| int | address () |
| int | nodeid () |
| bool | exist_namchan () const |
| virtual int | command (int argc, const char *const *argv) |
| virtual void | namlog (const char *fmt,...) |
| NsObject * | intf_to_target (int32_t) |
| void | insert (struct node_head *head) |
| Node * | nextnode () |
| const struct if_head & | ifhead () const |
| const struct linklist_head & | linklisthead () const |
| void | addNeighbor (Node *node) |
| void | route_notify (RoutingModule *rtm) |
| void | unreg_route_notify (RoutingModule *rtm) |
| void | add_route (char *dst, NsObject *target) |
| void | delete_route (char *dst, NsObject *nullagent) |
| void | set_table_size (int nn) |
| void | set_table_size (int level, int csize) |
| EnergyModel * | energy_model () |
| Location * | location () |
| Node (void) | |
| void | Update (void) |
| void | UpdateNeighbors (void) |
| void | Dump (void) |
| Node (nodeid_t id) | |
| Node (const Node &n) | |
| virtual | ~Node () |
| virtual const NodeWeight_t | NextAdj (const NodeWeight_t &) |
| virtual void | AddAdj (nodeid_t a, int w=1) |
| virtual NixPair_t | GetNix (nodeid_t) |
| virtual Nixl_t | GetNixl () |
| virtual nodeid_t | GetNeighbor (Nix_t) |
Static Public Member Functions | |
| Node * | get_node_by_address (nsaddr_t) |
Public Attributes | |
| neighbor_list_node * | neighbor_list_ |
| double | time_arrival |
| double | time_transition |
| int | route_changes |
| int | link_changes |
| Neighbor * | neighbor |
| EdgeVec_t | m_Adj |
| nodeid_t | m_id |
Static Public Attributes | |
| node_head | nodehead_ |
Protected Member Functions | |
| LIST_ENTRY (Node) entry | |
| void | namdump () |
Protected Attributes | |
| int | address_ |
| int | nodeid_ |
| Tcl_Channel | namChan_ |
| if_head | ifhead_ |
| linklist_head | linklisthead_ |
| RoutingModule * | rtnotif_ |
| EnergyModel * | energy_model_ |
| Location * | location_ |
Static Protected Attributes | |
| char | nwrk_ [NODE_NAMLOG_BUFSZ] |
Private Member Functions | |
| void | RandomPosition (void) |
| void | RandomDestination (void) |
| void | RandomSpeed (void) |
| LIST_HEAD (traj, setdest) traj | |
Private Attributes | |
| u_int32_t | index |
| vector | position |
| vector | destination |
| vector | direction |
| double | speed |
| double | time_update |
Static Private Attributes | |
| u_int32_t | NodeIndex = 0 |
Friends | |
| void | ReadInMovementPattern (void) |
|
|
Definition at line 105 of file node.cc. References ifhead_, insert(), linklisthead_, LIST_INIT, neighbor_list_, NixRoutingUsed, and nodehead_.
00105 : 00106 address_(-1), nodeid_ (-1), namChan_(0), 00107 rtnotif_(NULL), 00108 #ifdef HAVE_STL 00109 nixnode_(NULL), 00110 #endif //HAVE_STL 00111 energy_model_(NULL), location_(NULL) 00112 { 00113 LIST_INIT(&ifhead_); 00114 LIST_INIT(&linklisthead_); 00115 insert(&(Node::nodehead_)); // insert self into static list of nodes 00116 #ifdef HAVE_STL 00117 // Mods for Nix-Vector routing 00118 if (NixRoutingUsed < 0) { 00119 // Find out if nix routing is in use 00120 Tcl& tcl = Tcl::instance(); 00121 tcl.evalf("Simulator set nix-routing"); 00122 tcl.resultAs(&NixRoutingUsed); 00123 } 00124 if (NixRoutingUsed) { 00125 // Create the NixNode pointer 00126 if(0)printf("Nix routing in use, creating NixNode\n"); 00127 nixnode_ = new NixNode(); 00128 } 00129 #endif //HAVE_STL 00130 neighbor_list_ = NULL; 00131 } |
Here is the call graph for this function:

|
|
Definition at line 133 of file node.cc. References LIST_REMOVE.
00134 {
00135 LIST_REMOVE(this, entry);
00136 }
|
|
|
|
|
|
Definition at line 46 of file tnode.h.
00046 : RNode(id) { }; |
|
|
Definition at line 47 of file tnode.h. References RNode::m_id.
|
|
|
Definition at line 48 of file tnode.h.
00048 { };
|
|
||||||||||||
|
Reimplemented from ParentNode. Definition at line 241 of file node.cc. References RoutingModule::add_route(), and rtnotif_.
|
Here is the call graph for this function:

|
||||||||||||
|
Reimplemented from RNode. |
|
|
Definition at line 262 of file node.cc. References neighbor_list_, neighbor_list_node::next, nodeid(), and neighbor_list_node::nodeid. Referenced by 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 }
|
Here is the call graph for this function:

|
|
Reimplemented from ParentNode. Definition at line 131 of file node.h. References address_. Referenced by ARPTable::arpinput(), ARPTable::arpresolve(), PushbackAgent::command(), God::command(), SatRouteObject::compute_topology(), GridKeeper::dump(), SatNode::dumpSats(), SatChannel::find_peer_mac_addr(), SatTrace::format(), GridKeeper::get_neighbors(), LinkHandoffMgr::get_peer_linkhead(), PositionHandler::handle(), GridHandler::handle(), SatLinkHandoffMgr::handoff(), TermLinkHandoffMgr::handoff(), WebTrafPool::launchReq(), EmpWebTrafSession::launchReq(), SatRouteObject::populate_routing_tables(), and EmpFtpTrafSession::sendFile().
00131 { return address_;}
|
|
||||||||||||
|
Reimplemented in MobileNode, and SatNode. Definition at line 139 of file node.cc. References addNeighbor(), address_, energy_model_, LinkHead::insertlink(), Address::instance(), linklisthead_, namChan_, nodeid_, and Address::str2addr(). Referenced by SatNode::command(), and MobileNode::command().
00140 {
00141 Tcl& tcl = Tcl::instance();
00142 if (argc == 2) {
00143 #ifdef HAVE_STL
00144 // Mods for Nix-Vector Routing
00145 if(strcmp(argv[1], "populate-objects") == 0) {
00146 if (nixnode_) {
00147 nixnode_->PopulateObjects();
00148 }
00149 return TCL_OK;
00150 }
00151 // End mods for Nix-Vector routing
00152 #endif // HAVE_STL
00153 if(strcmp(argv[1], "address?") == 0) {
00154 tcl.resultf("%d", address_);
00155 return TCL_OK;
00156 }
00157
00158
00159 } else if (argc == 3) {
00160 #ifdef HAVE_STL
00161 // Mods for Nix-Vector Routing
00162 if (strcmp(argv[1], "get-nix-vector") == 0) {
00163 if (nixnode_) {
00164 nixnode_->GetNixVector(atol(argv[2]));
00165 }
00166 return TCL_OK;
00167 }
00168 #endif //HAVE_STL
00169 if (strcmp(argv[1], "set-neighbor") == 0) {
00170 #ifdef HAVE_STL
00171 if (nixnode_) {
00172 nixnode_->AddAdj(atol(argv[2]));
00173 }
00174 #endif //HAVE_STL
00175 return(TCL_OK);
00176 }
00177 if (strcmp(argv[1], "addr") == 0) {
00178 address_ = Address::instance().str2addr(argv[2]);
00179 #ifdef HAVE_STL
00180 if (nixnode_) {
00181 nixnode_->Id(address_);
00182 }
00183 #endif //HAVE_STL
00184 return TCL_OK;
00185 // End mods for Nix-Vector routing
00186 } else if (strcmp(argv[1], "nodeid") == 0) {
00187 nodeid_ = atoi(argv[2]);
00188 return TCL_OK;
00189 } else if(strcmp(argv[1], "addlinkhead") == 0) {
00190 LinkHead* slhp = (LinkHead*)TclObject::lookup(argv[2]);
00191 if (slhp == 0)
00192 return TCL_ERROR;
00193 slhp->insertlink(&linklisthead_);
00194 return TCL_OK;
00195 } else if (strcmp(argv[1], "addenergymodel") == 0) {
00196 energy_model_=(EnergyModel*)TclObject::lookup(argv[2]);
00197 if(!energy_model_)
00198 return TCL_ERROR;
00199 return TCL_OK;
00200 } else if (strcmp(argv[1], "namattach") == 0) {
00201 int mode;
00202 namChan_ = Tcl_GetChannel(tcl.interp(), (char*)argv[2],
00203 &mode);
00204 if (namChan_ == 0) {
00205 tcl.resultf("node: can't attach %s", argv[2]);
00206 return (TCL_ERROR);
00207 }
00208 return (TCL_OK);
00209 } else if (strcmp(argv[1], "add-neighbor") == 0) {
00210 Node * node = (Node *)TclObject::lookup(argv[2]);
00211 if (node == 0) {
00212 tcl.resultf("Invalid node %s", argv[2]);
00213 return (TCL_ERROR);
00214 }
00215 addNeighbor(node);
00216 return TCL_OK;
00217 }
00218 }
00219 return ParentNode::command(argc,argv);
00220 }
|
Here is the call graph for this function:

|
||||||||||||
|
Reimplemented from ParentNode. Definition at line 247 of file node.cc. References RoutingModule::delete_route(), and rtnotif_.
00247 {
00248 if (rtnotif_)
00249 rtnotif_->delete_route(dst, nullagent);
00250 }
|
Here is the call graph for this function:

|
|
Definition at line 624 of file calcdest.cc. References destination, direction, Neighbor::index, index, neighbor, NODES, position, Neighbor::reachable, speed, time_arrival, time_transition, time_update, u_int32_t, vector::X, vector::Y, and vector::Z. Referenced by dumpall().
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 (%x), Reachable: %d, Transition Time: %.2f\n",
00641 m->index, (int) m, m->reachable, m->time_transition);
00642 }
00643 }
|
|
|
Definition at line 192 of file node.h. References energy_model_. Referenced by MobileNode::command(), God::CountAliveNode(), WirelessPhy::em(), EnergyTimer::EnergyTimer(), EnergyTimer::expire(), CMUTrace::format_mac(), CMUTrace::format_rtp(), God::IsNeighbor(), GAFAgent::myttl(), CMUTrace::nam_format(), CMUTrace::node_energy(), GAFAgent::node_off(), GAFAgent::node_on(), MacTdma::radioSwitch(), Mac802_11::recv_timer(), Mac802_11::send(), OmniMcastAgent::Terminate(), FloodingAgent::Terminate(), and DiffusionAgent::Terminate().
00192 { return energy_model_; }
|
|
|
Definition at line 133 of file node.h. References namChan_. Referenced by EnergyModel::set_node_sleep().
00133 { return (namChan_ != 0); }
|
|
|
Definition at line 315 of file node.cc. References address_, and nextnode(). Referenced by CMUTrace::format_mac(), CMUTrace::format_rtp(), GAFAgent::GAFAgent(), CMUTrace::nam_format(), and CMUTrace::node_energy().
|
Here is the call graph for this function:

|
|
|
|
|
Reimplemented from RNode. |
|
|
Reimplemented in NixNode. |
|
|
Definition at line 148 of file node.h. References ifhead_. Referenced by GAFAgent::myttl(), GAFAgent::node_off(), GAFAgent::node_on(), and Channel::sendUp().
00148 { return ifhead_; }
|
|
|
Definition at line 141 of file node.h. References LIST_INSERT_HEAD. Referenced by Node().
00141 {
00142 LIST_INSERT_HEAD(head, this, entry);
00143 }
|
|
|
Definition at line 305 of file node.cc. References LinkHead::label(), 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:

|
|
Definition at line 149 of file node.h. References linklisthead_. Referenced by SatRouteObject::compute_topology(), LinkHandoffMgr::get_peer_next_linkhead(), SatLinkHandoffMgr::handoff(), and TermLinkHandoffMgr::handoff().
00149 {
00150 return linklisthead_;
00151 }
|
|
|
|
|
||||||||||||
|
|
|
|
Definition at line 193 of file node.h. References location_.
00193 { return location_; }
|
|
|
Definition at line 281 of file node.cc. References abort(), namChan_, NODE_NAMLOG_BUFSZ, and nwrk_. Referenced by namlog(), and MobileNode::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:

|
||||||||||||
|
Definition at line 270 of file node.cc. References namChan_, namdump(), and nwrk_.
|
Here is the call graph for this function:

|
|
Reimplemented from RNode. |
|
|
Reimplemented in MobileNode. Definition at line 144 of file node.h. Referenced by SatRouteObject::compute_topology(), SatNode::dumpSats(), SatTrace::format(), get_node_by_address(), TermLinkHandoffMgr::handoff(), and SatRouteObject::populate_routing_tables().
00144 { return entry.le_next; }
|
|
|
Reimplemented from ParentNode. Definition at line 132 of file node.h. References nodeid_. Referenced by addNeighbor(), PushbackAgent::calculateLowerBound(), WebTrafPool::command(), PushbackAgent::command(), CMUTrace::format_mac(), WebServer::get_nid(), PushbackAgent::getQID(), PushbackAgent::identifyAggregate(), 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_;}
|
|
|
Definition at line 409 of file calcdest.cc. References destination, MAXX, MAXY, position, uniform(), vector::X, vector::Y, and vector::Z.
00410 {
00411 destination.X = uniform() * MAXX;
00412 destination.Y = uniform() * MAXY;
00413 destination.Z = 0.0;
00414 assert(destination != position);
00415 }
|
Here is the call graph for this function:

|
|
Definition at line 400 of file calcdest.cc. References MAXX, MAXY, position, uniform(), vector::X, vector::Y, and vector::Z.
|
Here is the call graph for this function:

|
|
Definition at line 418 of file calcdest.cc. References MAXSPEED, speed, and uniform().
|
Here is the call graph for this function:

|
|
Definition at line 222 of file node.cc. References RoutingModule::route_notify(), and 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:

|
||||||||||||
|
Reimplemented from ParentNode. Definition at line 257 of file node.cc. References 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:

|
|
Reimplemented from ParentNode. Definition at line 252 of file node.cc. References 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:

|
|
Definition at line 229 of file node.cc. References RoutingModule::next_rtm_, 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().
|
Here is the call graph for this function:

|
|
Definition at line 427 of file calcdest.cc. References destination, direction, vector::length(), LIST_NEXT, LIST_REMOVE, MAXTIME, position, speed, TIME, time_arrival, time_transition, time_update, vector::X, vector::Y, and vector::Z. Referenced by main().
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:

|
|
Definition at line 472 of file calcdest.cc. References direction, Neighbor::index, index, vector::length(), link_changes, LinkChangeCount, max, min, neighbor, NodeList, NODES, position, RANGE, Neighbor::reachable, ROUND_ERROR, speed, t1, TIME, time_transition, Neighbor::time_transition, u_int32_t, vector::X, vector::Y, and vector::Z. Referenced by main().
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:

|
|
Definition at line 176 of file calcdest.cc.
00177 {
00178 char buf[256];
00179 u_int n;
00180 double x,y,z,t,s;
00181 struct setdest *setdest;
00182
00183 while (!feof(in_file)) {
00184
00185 fgets(buf, sizeof(buf), in_file);
00186 fprintf(out_file, "%s", buf);
00187 if (*buf == '#') continue;
00188 if (*buf == '\n') continue;
00189
00190 /* check to see if we need data from the line */
00191 if (2 == sscanf(buf,"$node_(%d) set Z_ %lf", &n, &z))
00192 {
00193 assert(n < NODES);
00194 NodeList[n].position.Z = z;
00195 }
00196 else if (2 == sscanf(buf,"$node_(%d) set X_ %lf", &n, &x))
00197 {
00198 assert(n < NODES);
00199 NodeList[n].position.X = x;
00200 }
00201 else if (2 == sscanf(buf,"$node_(%d) set Y_ %lf", &n, &y))
00202 {
00203 assert(n < NODES);
00204 NodeList[n].position.Y = y;
00205 }
00206 else if (5 == sscanf(buf,"$ns_ at %lf \"$node_(%d) setdest %lf %lf %lf\"",
00207 &t, &n, &x, &y, &s))
00208 {
00209 assert(n < NODES);
00210 assert(t <= MAXTIME);
00211 setdest = (struct setdest *)malloc(sizeof(*setdest));
00212 assert(setdest);
00213 setdest->X = x; setdest->Y = y; setdest->Z = 0;
00214 setdest->time = t;
00215 setdest->speed = s;
00216 if (NodeList[n].traj.lh_first
00217 && t > NodeList[n].traj.lh_first->time)
00218 {
00219 printf("setdest's must be in anti-chronological order in input file!\n");
00220 printf("failed on node %d\n",n);
00221 exit(-1);
00222 }
00223 LIST_INSERT_HEAD(&NodeList[n].traj,setdest,traj);
00224 }
00225 else
00226 {
00227 printf("unparsable line: '%s'", buf);
00228 continue;
00229 }
00230 }
00231 fflush(out_file);
00232 }
|
|
|
Reimplemented from ParentNode. Definition at line 169 of file node.h. Referenced by address(), MobileNode::bound_position(), command(), MobileNode::command(), MobileNode::dump(), get_node_by_address(), PositionHandler::handle(), MobileNode::log_energy(), MobileNode::log_movement(), MobileNode::random_destination(), MobileNode::set_destination(), MobileNode::start(), and MobileNode::update_position(). |
|
|
Definition at line 96 of file setdest.h. Referenced by Dump(), RandomDestination(), and Update(). |
|
|
Definition at line 97 of file setdest.h. Referenced by Dump(), Update(), and UpdateNeighbors(). |
|
|
Definition at line 195 of file node.h. Referenced by command(), energy_model(), and MobileNode::log_energy(). |
|
|
Definition at line 179 of file node.h. Referenced by SatNode::command(), MobileNode::command(), MobileNode::dump(), ifhead(), MobileNode::MobileNode(), and Node(). |
|
|
Definition at line 93 of file setdest.h. Referenced by Dump(), and UpdateNeighbors(). |
|
|
Definition at line 86 of file setdest.h. Referenced by UpdateNeighbors(). |
|
|
Definition at line 180 of file node.h. Referenced by command(), SatNode::dumpSats(), intf_to_target(), linklisthead(), and Node(). |
|
|
Definition at line 199 of file node.h. Referenced by location(). |
|
|
|
|
|
Definition at line 42 of file rnode.h. Referenced by NixNode::Id(), and Node(). |
|
|
Definition at line 173 of file node.h. Referenced by command(), exist_namchan(), namdump(), namlog(), and MobileNode::set_destination(). |
|
|
Definition at line 108 of file setdest.h. Referenced by ComputeW(), Dump(), and UpdateNeighbors(). |
|
|
Definition at line 154 of file node.h. Referenced by addNeighbor(), LoggingDataStruct::LoggingDataStruct(), and Node(). |
|
|
Definition at line 140 of file node.h. Referenced by SatRouteObject::compute_topology(), SatNode::dumpSats(), SatTrace::format(), TermLinkHandoffMgr::handoff(), Node(), and SatRouteObject::populate_routing_tables(). |
|
|
Reimplemented from ParentNode. Definition at line 170 of file node.h. Referenced by command(), nodeid(), and MobileNode::set_destination(). |
|
|
Definition at line 262 of file setdest2.cc. |
|
|
Definition at line 100 of file node.cc. Referenced by namdump(), namlog(), and MobileNode::set_destination(). |
|
|
Definition at line 95 of file setdest.h. Referenced by Dump(), RandomDestination(), RandomPosition(), ReadInMovementPattern(), Update(), and UpdateNeighbors(). |
|
|
Definition at line 85 of file setdest.h. Referenced by show_diffs(). |
|
|
Definition at line 183 of file node.h. Referenced by add_route(), delete_route(), route_notify(), set_table_size(), and unreg_route_notify(). |
|
|
Definition at line 99 of file setdest.h. Referenced by Dump(), RandomSpeed(), Update(), and UpdateNeighbors(). |
|
|
|
|
|
Definition at line 82 of file setdest.h. Referenced by Dump(), main(), Update(), and UpdateNeighbors(). |
|
|
|
1.3.3