#include <flooding.h>
Inheritance diagram for FloodingAgent:


Definition at line 110 of file flooding.h.
Public Member Functions | |
| nsaddr_t & | addr () |
| virtual void | attachApp (Application *app) |
| virtual void | close () |
| int | command (int argc, const char *const *argv) |
| virtual void | connect (nsaddr_t dst) |
| nsaddr_t & | daddr () |
| virtual void | debug (const char *fmt,...) |
| nsaddr_t & | dport () |
| virtual void | drop (Packet *p) |
| FloodingAgent () | |
| packet_t | get_pkttype () |
| int | isdebug () const |
| virtual void | listen () |
| nsaddr_t & | port () |
| virtual void | recv (Packet *p, const char *s) |
| void | recv (Packet *, Handler *) |
| void | recvOnly (Packet *) |
| virtual void | send (int nbytes) |
| virtual void | send (int sz, AppData *data) |
| void | send (Packet *p, Handler *h) |
| virtual void | sendmsg (int nbytes, const char *flags=0) |
| virtual void | sendmsg (int sz, AppData *, const char *flags=0) |
| virtual void | sendto (int nbytes, const char *flags, ns_addr_t dst) |
| virtual void | sendto (int nbytes, const char *flags, nsaddr_t dst) |
| virtual void | sendto (int sz, AppData *, const char *flags, ns_addr_t dst) |
| virtual void | sendto (int sz, AppData *, const char *flags, nsaddr_t dst) |
| void | set_pkttype (packet_t pkttype) |
| void | setDropTarget (NsObject *dt) |
| virtual int & | size () |
| void | target (NsObject *target) |
| NsObject * | target () |
| virtual void | timeout (int tno) |
Data Fields | |
| Flooding_Entry | routing_table [MAX_DATA_TYPE] |
Protected Member Functions | |
| void | addAgentTrace (const char *name) |
| Packet * | allocpkt (int) const |
| Packet * | allocpkt () const |
| void | ConsiderNew (Packet *pkt) |
| Packet * | create_packet () |
| void | DataForSink (Packet *pkt) |
| virtual int | delay_bind_dispatch (const char *varName, const char *localName, TclObject *tracer) |
| virtual void | delay_bind_init_all () |
| void | deleteAgentTrace () |
| virtual void | drop (Packet *p, const char *s) |
| void | dumpTracedVars () |
| void | handle (Event *) |
| virtual void | idle () |
| void | initpkt (Packet *) const |
| void | insertOldValue (TracedVar *v, const char *value) |
| OldValue * | lookupOldValue (TracedVar *v) |
| void | MACprepare (Packet *pkt) |
| void | MACsend (Packet *pkt, Time delay=0) |
| void | monitorAgentTrace () |
| Packet * | prepare_message (unsigned int dtype, ns_addr_t to_addr, int msg_type) |
| virtual void | recvBytes (int bytes) |
| void | reset () |
| void | send_to_dmux (Packet *pkt, Handler *h) |
| void | StopSource () |
| void | Terminate () |
| virtual void | trace (TracedVar *v) |
| void | trace (char *fmt,...) |
| virtual void | trace_event (char *eventtype) |
Protected Attributes | |
| Application * | app_ |
| Tcl_Channel | channel_ |
| int | debug_ |
| int | defttl_ |
| NsObject * | drop_ |
| ns_addr_t | dst_ |
| EventTrace * | et_ |
| int | fid_ |
| int | flags_ |
| ns_addr_t | here_ |
| NsObject * | ll |
| Node * | node |
| OldValue * | oldValueList_ |
| int | pk_count |
| Pkt_Hash_Table | PktTable |
| NsObject * | port_dmux |
| int | prio_ |
| int | size_ |
| NsObject * | target_ |
| char * | traceName_ |
| Trace * | tracetarget |
| packet_t | type_ |
Static Protected Attributes | |
| static int | uidcnt_ |
|
|
Definition at line 93 of file flooding.cc. References pk_count, Connector::target_, and tracetarget. 00093 : Agent(PT_DIFF) 00094 { 00095 // Initialize variables. 00096 00097 pk_count = 0; 00098 target_ = 0; 00099 node = NULL; 00100 tracetarget = NULL; 00101 }
|
|
|
Definition at line 326 of file agent.cc. References ns_addr_t::addr_, Agent::channel_, Scheduler::clock(), Agent::dst_, Agent::here_, Scheduler::instance(), TIME_FORMAT, and Agent::traceName_. Referenced by Agent::command(). 00327 { 00328 char wrk[256]; 00329 int n; 00330 double curTime = (&Scheduler::instance() == NULL ? 0 : 00331 Scheduler::instance().clock()); 00332 00333 sprintf(wrk, "a -t "TIME_FORMAT" -s %d -d %d -n %s", 00334 curTime, here_.addr_, dst_.addr_, name); 00335 n = strlen(wrk); 00336 wrk[n] = '\n'; 00337 wrk[n+1] = 0; 00338 if (channel_) 00339 (void)Tcl_Write(channel_, wrk, n+1); 00340 // keep agent trace name 00341 if (traceName_ != NULL) 00342 delete[] traceName_; 00343 traceName_ = new char[strlen(name)+1]; 00344 strcpy(traceName_, name); 00345 }
Here is the call graph for this function: ![]() |
|
|
|
Definition at line 528 of file agent.cc. References Packet::allocdata(), and Agent::allocpkt(). 00529 { 00530 Packet* p = allocpkt(); 00531 00532 if (n > 0) 00533 p->allocdata(n); 00534 00535 return(p); 00536 }
Here is the call graph for this function: ![]() |
|
|
|
Definition at line 372 of file agent.cc. References Agent::app_. Referenced by WormApp::command(), HttpMInvalCache::command(), Application::command(), TcpApp::TcpApp(), and TcpApp::~TcpApp(). 00373 { 00374 app_ = app; 00375 }
|
|
|
Reimplemented in FullTcpAgent. Definition at line 377 of file agent.cc. Referenced by Agent::command().
|
|
||||||||||||
|
Reimplemented from Agent. Definition at line 365 of file flooding.cc. References Agent::command(), port_dmux, reset(), StopSource(), Terminate(), THIS_NODE, and tracetarget. 00366 { 00367 Tcl& tcl = Tcl::instance(); 00368 00369 if (argc == 2) { 00370 00371 if (strcasecmp(argv[1], "reset-state")==0) { 00372 00373 reset(); 00374 return TCL_OK; 00375 } 00376 00377 if (strcasecmp(argv[1], "reset")==0) { 00378 00379 return Agent::command(argc, argv); 00380 } 00381 00382 if (strcasecmp(argv[1], "start")==0) { 00383 return TCL_OK; 00384 } 00385 00386 if (strcasecmp(argv[1], "stop")==0) { 00387 return TCL_OK; 00388 } 00389 00390 if (strcasecmp(argv[1], "terminate")==0) { 00391 Terminate(); 00392 return TCL_OK; 00393 } 00394 00395 if (strcasecmp(argv[1], "stop-source")==0) { 00396 StopSource(); 00397 return TCL_OK; 00398 } 00399 00400 } else if (argc == 3) { 00401 00402 if (strcasecmp(argv[1], "on-node")==0) { 00403 node = (Node *)tcl.lookup(argv[2]); 00404 return TCL_OK; 00405 } 00406 00407 if (strcasecmp(argv[1], "add-ll") == 0) { 00408 00409 TclObject *obj; 00410 00411 if ( (obj = TclObject::lookup(argv[2])) == 0) { 00412 fprintf(stderr, "Flooding Node: %d lookup of %s failed\n", THIS_NODE, 00413 argv[2]); 00414 return TCL_ERROR; 00415 } 00416 ll = (NsObject *) obj; 00417 00418 return TCL_OK; 00419 } 00420 00421 if (strcasecmp (argv[1], "tracetarget") == 0) { 00422 TclObject *obj; 00423 if ((obj = TclObject::lookup (argv[2])) == 0) { 00424 fprintf (stderr, "%s: %s lookup of %s failed\n", __FILE__, argv[1], 00425 argv[2]); 00426 return TCL_ERROR; 00427 } 00428 00429 tracetarget = (Trace *) obj; 00430 return TCL_OK; 00431 } 00432 00433 if (strcasecmp(argv[1], "port-dmux") == 0) { 00434 00435 TclObject *obj; 00436 00437 if ( (obj = TclObject::lookup(argv[2])) == 0) { 00438 fprintf(stderr, "Flooding Node: %d lookup of %s failed\n", THIS_NODE, 00439 argv[2]); 00440 return TCL_ERROR; 00441 } 00442 port_dmux = (NsObject *) obj; 00443 return TCL_OK; 00444 } 00445 00446 } 00447 00448 return Agent::command(argc, argv); 00449 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 389 of file agent.cc. Referenced by Agent::command().
|
|
|
Definition at line 129 of file flooding.cc. References God::AddSink(), God::AddSource(), AGT_ADDR, PrvCurPtr::cur, DATA, DATA_READY, DATA_REQUEST, hdr_cdiff::data_type, DataForSink(), hdr_cdiff::forward_agent_id, Packet::free(), Pkt_Hash_Table::GetHash(), HDR_CDIFF, God::instance(), INTEREST, INTF_FIND, INTF_INSERT, JITTER, MACprepare(), MACsend(), hdr_cdiff::mess_type, Agent_List::next, ORIGINAL, hdr_cdiff::pk_num, PktTable, prepare_message(), hdr_cdiff::report_rate, routing_table, send_to_dmux(), hdr_cdiff::sender_id, Flooding_Entry::source, THIS_NODE, and Random::uniform(). Referenced by recv(). 00130 { 00131 hdr_cdiff* dfh = HDR_CDIFF(pkt); 00132 unsigned char msg_type = dfh->mess_type; 00133 unsigned int dtype = dfh->data_type; 00134 00135 Pkt_Hash_Entry *hashPtr; 00136 Agent_List *agentPtr; 00137 PrvCurPtr RetVal; 00138 nsaddr_t from_nodeID, forward_nodeID; 00139 00140 Packet *gen_pkt; 00141 hdr_cdiff *gen_dfh; 00142 00143 switch (msg_type) { 00144 case INTEREST : 00145 00146 hashPtr = PktTable.GetHash(dfh->sender_id, dfh->pk_num); 00147 00148 // Check if it comes from sink agent of this node 00149 // If so we have to keep it in sink list 00150 00151 from_nodeID = (dfh->sender_id).addr_; 00152 forward_nodeID = (dfh->forward_agent_id).addr_; 00153 00154 00155 if (THIS_NODE == from_nodeID) { 00156 00157 // It's from a sink on this node. 00158 // Is it already in list ? 00159 00160 RetVal = INTF_FIND(routing_table[dtype].sink, dfh->sender_id); 00161 if (RetVal.cur == NULL) { 00162 // No, it's not. 00163 agentPtr = new Agent_List; 00164 AGT_ADDR(agentPtr) = dfh->sender_id; 00165 INTF_INSERT(routing_table[dtype].sink, agentPtr); 00166 00167 God::instance()->AddSink(dtype, THIS_NODE); 00168 } 00169 } 00170 00171 Packet::free(pkt); 00172 return; 00173 00174 00175 case DATA_READY : 00176 00177 // put source_agent in source list of routing table 00178 00179 agentPtr = new Agent_List; 00180 AGT_ADDR(agentPtr) = dfh->sender_id; 00181 agentPtr->next = routing_table[dtype].source; 00182 routing_table[dtype].source = agentPtr; 00183 00184 God::instance()->AddSource(dtype, (dfh->sender_id).addr_); 00185 00186 gen_pkt = prepare_message(dtype, dfh->sender_id, DATA_REQUEST); 00187 gen_dfh = HDR_CDIFF(gen_pkt); 00188 gen_dfh->report_rate = ORIGINAL; 00189 send_to_dmux(gen_pkt, 0); 00190 Packet::free(pkt); 00191 return; 00192 00193 00194 case DATA : 00195 00196 DataForSink(pkt); 00197 00198 MACprepare(pkt); 00199 MACsend(pkt, JITTER*Random::uniform(1.0)); 00200 return; 00201 00202 00203 default : 00204 00205 Packet::free(pkt); 00206 break; 00207 } 00208 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 243 of file flooding.cc. References Agent::allocpkt(), HDR_CDIFF, HDR_CMN, NOW, hdr_cmn::size(), and hdr_cdiff::ts_. Referenced by prepare_message(). 00244 { 00245 Packet *pkt = allocpkt(); 00246 00247 if (pkt==NULL) return NULL; 00248 00249 hdr_cmn* cmh = HDR_CMN(pkt); 00250 cmh->size() = 36; 00251 00252 hdr_cdiff* dfh = HDR_CDIFF(pkt); 00253 dfh->ts_ = NOW; 00254 return pkt; 00255 }
Here is the call graph for this function: ![]() |
|
|
|
Definition at line 323 of file flooding.cc. References AGENT_NEXT, AGT_ADDR, Packet::copy(), hdr_cdiff::data_type, hdr_ip::dst_, hdr_cdiff::forward_agent_id, HDR_CDIFF, HDR_IP, Agent::here_, hdr_cdiff::next_nodes, NODE_ADDR, hdr_cdiff::num_next, routing_table, and send_to_dmux(). Referenced by ConsiderNew(). 00324 { 00325 hdr_cdiff *dfh = HDR_CDIFF(pkt); 00326 unsigned int dtype = dfh->data_type; 00327 Agent_List *cur_agent; 00328 Packet *cur_pkt; 00329 hdr_cdiff *cur_dfh; 00330 hdr_ip *cur_iph; 00331 00332 00333 for (cur_agent= (routing_table[dtype]).sink; cur_agent != NULL; 00334 cur_agent= AGENT_NEXT(cur_agent) ) { 00335 00336 cur_pkt = pkt->copy(); 00337 cur_iph = HDR_IP(cur_pkt); 00338 cur_iph->dst_ = AGT_ADDR(cur_agent); 00339 00340 cur_dfh = HDR_CDIFF(cur_pkt); 00341 cur_dfh->forward_agent_id = here_; 00342 cur_dfh->num_next = 1; 00343 cur_dfh->next_nodes[0] = NODE_ADDR(cur_agent); 00344 00345 send_to_dmux(cur_pkt, 0); 00346 } 00347 }
Here is the call graph for this function: ![]() |
|
||||||||||||
|
Definition at line 102 of file object.cc. References NsObject::debug_. 00103 { 00104 if (!debug_) 00105 return; 00106 va_list ap; 00107 va_start(ap, fmt); 00108 vprintf(fmt, ap); 00109 }
|
|
||||||||||||||||
|
Reimplemented from NsObject. Reimplemented in BayFullTcpAgent, LDPAgent, HbAfterRtoSctpAgent, MfrHbAfterRtoSctpAgent, MfrTimestampSctpAgent, MultipleFastRtxSctpAgent, NewRenoSctpAgent, TimestampSctpAgent, SctpAgent, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, VegasTcpAgent, XcpAgent, and XcpSink. Definition at line 93 of file agent.cc. References ns_addr_t::addr_, Agent::defttl_, NsObject::delay_bind_dispatch(), Agent::dst_, Agent::fid_, Agent::flags_, Agent::here_, ns_addr_t::port_, and Agent::prio_. Referenced by XcpSink::delay_bind_dispatch(), TcpAgent::delay_bind_dispatch(), TcpSink::delay_bind_dispatch(), SctpAgent::delay_bind_dispatch(), and LDPAgent::delay_bind_dispatch(). 00094 { 00095 if (delay_bind(varName, localName, "agent_addr_", (int*)&(here_.addr_), tracer)) return TCL_OK; 00096 if (delay_bind(varName, localName, "agent_port_", (int*)&(here_.port_), tracer)) return TCL_OK; 00097 if (delay_bind(varName, localName, "dst_addr_", (int*)&(dst_.addr_), tracer)) return TCL_OK; 00098 if (delay_bind(varName, localName, "dst_port_", (int*)&(dst_.port_), tracer)) return TCL_OK; 00099 if (delay_bind(varName, localName, "fid_", (int*)&fid_, tracer)) return TCL_OK; 00100 if (delay_bind(varName, localName, "prio_", (int*)&prio_, tracer)) return TCL_OK; 00101 if (delay_bind(varName, localName, "flags_", (int*)&flags_, tracer)) return TCL_OK; 00102 if (delay_bind(varName, localName, "ttl_", &defttl_, tracer)) return TCL_OK; 00103 if (delay_bind(varName, localName, "class_", (int*)&fid_, tracer)) return TCL_OK; 00104 return Connector::delay_bind_dispatch(varName, localName, tracer); 00105 }
Here is the call graph for this function: ![]() |
|
|
Reimplemented from NsObject. Reimplemented in BayFullTcpAgent, LDPAgent, HbAfterRtoSctpAgent, MfrHbAfterRtoSctpAgent, MfrTimestampSctpAgent, MultipleFastRtxSctpAgent, NewRenoSctpAgent, TimestampSctpAgent, SctpAgent, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, VegasTcpAgent, XcpAgent, and XcpSink. Definition at line 78 of file agent.cc. References NsObject::delay_bind_init_all(). Referenced by XcpSink::delay_bind_init_all(), TcpAgent::delay_bind_init_all(), TcpSink::delay_bind_init_all(), SctpAgent::delay_bind_init_all(), and LDPAgent::delay_bind_init_all(). 00079 { 00080 delay_bind_init_one("agent_addr_"); 00081 delay_bind_init_one("agent_port_"); 00082 delay_bind_init_one("dst_addr_"); 00083 delay_bind_init_one("dst_port_"); 00084 delay_bind_init_one("fid_"); 00085 delay_bind_init_one("prio_"); 00086 delay_bind_init_one("flags_"); 00087 delay_bind_init_one("ttl_"); 00088 delay_bind_init_one("class_"); 00089 Connector::delay_bind_init_all(); 00090 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 222 of file agent.cc. References ns_addr_t::addr_, Agent::dst_, Agent::flushAVar(), Agent::here_, Scheduler::instance(), TIME_FORMAT, and Agent::traceName_. Referenced by Agent::command(). 00223 { 00224 char wrk[256]; 00225 00226 // XXX we don't know InstVar outside of Tcl! Is there any 00227 // tracedvars hidden in InstVar? If so, shall we have a tclclInt.h? 00228 TracedVar* var = tracedvar_; 00229 for ( ; var != 0; var = var->next_) 00230 flushAVar(var); 00231 00232 // we need to flush all var values to trace file, 00233 // so nam can do backtracing 00234 sprintf(wrk, "a -t "TIME_FORMAT" -s %d -d %d -n %s -x", 00235 Scheduler::instance().clock(), here_.addr_, 00236 dst_.addr_, traceName_); 00237 if (traceName_ != NULL) 00238 delete[] traceName_; 00239 traceName_ = NULL; 00240 }
Here is the call graph for this function: ![]() |
|
|
||||||||||||
|
Definition at line 114 of file connector.cc. References Connector::drop_, Packet::free(), and NsObject::recv(). 00115 { 00116 if (drop_ != 0) 00117 drop_->recv(p, s); 00118 else 00119 Packet::free(p); 00120 }
Here is the call graph for this function: ![]() |
|
|
|
|
|
|
Definition at line 104 of file agent.h. References Agent::type_. 00104 { return type_; }
|
|
|
Implements Handler. Reimplemented in LinkDelay, LL, AckRecons, and Snoop. Definition at line 91 of file object.cc. References NsObject::recv().
Here is the call graph for this function: ![]() |
|
|
Definition at line 363 of file agent.cc. References Agent::app_, and Application::resume(). Referenced by FullTcpAgent::foutput(), XcpAgent::output(), TcpAgent::output(), RFC793eduTcpAgent::output(), QSNewRenoTcpAgent::output(), IntTcpAgent::output(), BayFullTcpAgent::output(), UdpAgent::sendmsg(), SA_Agent::sendmsg(), RTPAgent::sendmsg(), MessagePassingAgent::sendmsg(), TPAgent::sendto(), and MessagePassingAgent::sendto().
Here is the call graph for this function: ![]() |
|
|
Definition at line 456 of file agent.cc. References hdr_nv::access(), hdr_flags::access(), hdr_ip::access(), hdr_cmn::access(), ns_addr_t::addr_, Scheduler::clock(), hdr_flags::cong_action_, hdr_ip::daddr(), Agent::defttl_, hdr_cmn::direction(), hdr_ip::dport(), Agent::dst_, hdr_flags::ecn_, hdr_flags::ecn_capable_, hdr_flags::ecn_to_echo_, hdr_flags::eln_, hdr_cmn::error(), Agent::fid_, hdr_ip::flowid(), hdr_flags::fs_, NixNode::GetNixVector(), NixNode::GetNodeObject(), hdr_nv::h_used, Agent::here_, hdr_cmn::iface(), Scheduler::instance(), hdr_flags::no_ts_, hdr_cmn::NONE, hdr_nv::nv(), hdr_ip::offset(), hdr_nv::offset(), ns_addr_t::port_, hdr_flags::pri_, hdr_ip::prio(), Agent::prio_, hdr_cmn::ptype(), hdr_flags::qs_, NixVec::Reset(), hdr_ip::saddr(), hdr_cmn::size(), Agent::size_, hdr_ip::sport(), hdr_cmn::timestamp(), hdr_ip::ttl(), Agent::type_, hdr_cmn::uid(), Agent::uidcnt_, UNKN_IFACE, and iface_literal::value(). Referenced by Agent::allocpkt(), and PingResponder::recv(). 00457 { 00458 hdr_cmn* ch = hdr_cmn::access(p); 00459 ch->uid() = uidcnt_++; 00460 ch->ptype() = type_; 00461 ch->size() = size_; 00462 ch->timestamp() = Scheduler::instance().clock(); 00463 ch->iface() = UNKN_IFACE.value(); // from packet.h (agent is local) 00464 ch->direction() = hdr_cmn::NONE; 00465 00466 ch->error() = 0; /* pkt not corrupt to start with */ 00467 00468 hdr_ip* iph = hdr_ip::access(p); 00469 iph->saddr() = here_.addr_; 00470 iph->sport() = here_.port_; 00471 iph->daddr() = dst_.addr_; 00472 iph->dport() = dst_.port_; 00473 00474 //DEBUG 00475 //if (dst_ != -1) 00476 // printf("pl break\n"); 00477 00478 iph->flowid() = fid_; 00479 iph->prio() = prio_; 00480 iph->ttl() = defttl_; 00481 00482 hdr_flags* hf = hdr_flags::access(p); 00483 hf->ecn_capable_ = 0; 00484 hf->ecn_ = 0; 00485 hf->eln_ = 0; 00486 hf->ecn_to_echo_ = 0; 00487 hf->fs_ = 0; 00488 hf->no_ts_ = 0; 00489 hf->pri_ = 0; 00490 hf->cong_action_ = 0; 00491 hf->qs_ = 0; 00492 #ifdef HAVE_STL 00493 00494 hdr_nv* nv = hdr_nv::access(p); 00495 if (0) 00496 printf("Off hdr_nv %d, ip_hdr %d myaddr %d\n", 00497 hdr_nv::offset(), hdr_ip::offset(), here_.addr_); 00498 NixNode* pNixNode = NixNode::GetNodeObject(here_.addr_); 00499 if (0) 00500 printf("Node Object %p\n", pNixNode); 00501 if (pNixNode) { 00502 // If we get non-null, indicates nixvector routing in use 00503 // Delete any left over nv in the packet 00504 // Get a nixvector to the target (may create new) 00505 NixVec* pNv = pNixNode->GetNixVector(dst_.addr_); 00506 pNv->Reset(); 00507 nv->nv() = pNv; // And set the nixvec in the packet 00508 nv->h_used = 0; // And reset used portion to 0 00509 } 00510 #endif //HAVE_STL 00511 }
Here is the call graph for this function: ![]() |
|
||||||||||||
|
Definition at line 250 of file agent.cc. References min, OldValue::next_, Agent::oldValueList_, TRACEVAR_MAXVALUELENGTH, OldValue::val_, and OldValue::var_. Referenced by Agent::trace(). 00251 { 00252 OldValue *p = new OldValue; 00253 assert(p != NULL); 00254 strncpy(p->val_, value, min(strlen(value)+1, TRACEVAR_MAXVALUELENGTH)); 00255 p->var_ = v; 00256 p->next_ = NULL; 00257 if (oldValueList_ == NULL) 00258 oldValueList_ = p; 00259 else { 00260 p->next_ = oldValueList_; 00261 oldValueList_ = p; 00262 } 00263 }
|
|
|
Definition at line 61 of file object.h. References NsObject::debug_. 00061 { return debug_; }
|
|
|
Reimplemented in BayFullTcpAgent, RapAgent, and FullTcpAgent. Definition at line 381 of file agent.cc. Referenced by Agent::command().
|
|
|
Definition at line 242 of file agent.cc. References OldValue::next_, Agent::oldValueList_, and OldValue::var_. Referenced by Agent::trace(). 00243 { 00244 OldValue *p = oldValueList_; 00245 while ((p != NULL) && (p->var_ != v)) 00246 p = p->next_; 00247 return p; 00248 }
|
|
|
Definition at line 287 of file flooding.cc. References ns_addr_t::addr_, hdr_cmn::addr_type(), hdr_cmn::direction(), hdr_cmn::DOWN, hdr_ip::dst_, hdr_cdiff::forward_agent_id, HDR_CDIFF, HDR_CMN, HDR_IP, Agent::here_, MAC_BROADCAST, hdr_cmn::next_hop(), hdr_cdiff::next_nodes, NS_AF_ILINK, hdr_cdiff::num_next, ns_addr_t::port_, ROUTING_PORT, hdr_ip::src_, and hdr_cmn::xmit_failure_. Referenced by ConsiderNew(). 00288 { 00289 hdr_cdiff* dfh = HDR_CDIFF(pkt); 00290 hdr_cmn* cmh = HDR_CMN(pkt); 00291 hdr_ip* iph = HDR_IP(pkt); 00292 00293 dfh->forward_agent_id = here_; 00294 00295 cmh->xmit_failure_ = 0; 00296 cmh->next_hop() = MAC_BROADCAST; 00297 cmh->addr_type() = NS_AF_ILINK; 00298 cmh->direction() = hdr_cmn::DOWN; 00299 00300 iph->src_ = here_; 00301 iph->dst_.addr_ = MAC_BROADCAST; 00302 iph->dst_.port_ = ROUTING_PORT; 00303 00304 dfh->num_next = 1; 00305 dfh->next_nodes[0] = MAC_BROADCAST; 00306 }
Here is the call graph for this function: ![]() |
|
||||||||||||
|
Definition at line 309 of file flooding.cc. References DATA, God::data_pkt_size, HDR_CDIFF, HDR_CMN, Scheduler::instance(), God::instance(), hdr_cdiff::mess_type, hdr_cdiff::num_next, Scheduler::schedule(), and hdr_cmn::size(). Referenced by ConsiderNew(). 00310 { 00311 hdr_cmn* cmh = HDR_CMN(pkt); 00312 hdr_cdiff* dfh = HDR_CDIFF(pkt); 00313 00314 if (dfh->mess_type == DATA) 00315 cmh->size() = (God::instance()->data_pkt_size) + 4*(dfh->num_next - 1); 00316 else 00317 cmh->size() = 36 + 4*(dfh->num_next -1); 00318 00319 Scheduler::instance().schedule(ll, pkt, delay); 00320 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 310 of file agent.cc. References ns_addr_t::addr_, Agent::channel_, Scheduler::clock(), Agent::here_, Scheduler::instance(), TIME_FORMAT, and Agent::traceName_. Referenced by Agent::command(). 00311 { 00312 char wrk[256]; 00313 int n; 00314 double curTime = (&Scheduler::instance() == NULL ? 0 : 00315 Scheduler::instance().clock()); 00316 00317 sprintf(wrk, "v -t "TIME_FORMAT" -e monitor_agent %d %s", 00318 curTime, here_.addr_, traceName_); 00319 n = strlen(wrk); 00320 wrk[n] = '\n'; 00321 wrk[n+1] = 0; 00322 if (channel_) 00323 (void)Tcl_Write(channel_, wrk, n+1); 00324 }
Here is the call graph for this function: ![]() |
|
|
||||||||||||||||
|
Definition at line 258 of file flooding.cc. References ns_addr_t::addr_, create_packet(), hdr_cdiff::data_type, hdr_ip::dst_, hdr_cdiff::forward_agent_id, HDR_CDIFF, HDR_IP, Agent::here_, hdr_cdiff::mess_type, hdr_cdiff::next_nodes, NOW, hdr_cdiff::num_next, pk_count, hdr_cdiff::pk_num, hdr_cdiff::sender_id, hdr_ip::src_, and hdr_cdiff::ts_. Referenced by ConsiderNew(). 00260 { 00261 Packet *pkt; 00262 hdr_cdiff *dfh; 00263 hdr_ip *iph; 00264 00265 pkt = create_packet(); 00266 dfh = HDR_CDIFF(pkt); 00267 iph = HDR_IP(pkt); 00268 00269 dfh->mess_type = msg_type; 00270 dfh->pk_num = pk_count; 00271 pk_count++; 00272 dfh->sender_id = here_; 00273 dfh->data_type = dtype; 00274 dfh->forward_agent_id = here_; 00275 00276 dfh->ts_ = NOW; 00277 dfh->num_next = 1; 00278 dfh->next_nodes[0] = to_addr.addr_; 00279 00280 iph->src_ = here_; 00281 iph->dst_ = to_addr; 00282 00283 return pkt; 00284 }
Here is the call graph for this function: ![]() |
|
||||||||||||
|
Reimplemented in CMUTrace. Definition at line 96 of file object.cc. References Packet::free(). 00097 { 00098 Packet::free(p); 00099 }
Here is the call graph for this function: ![]() |
|
||||||||||||
|
Reimplemented from Agent. Definition at line 104 of file flooding.cc. References ConsiderNew(), Packet::free(), Pkt_Hash_Table::GetHash(), HDR_CDIFF, hdr_cdiff::pk_num, PktTable, Pkt_Hash_Table::put_in_hash(), and hdr_cdiff::sender_id. 00105 { 00106 hdr_cdiff* dfh = HDR_CDIFF(packet); 00107 00108 // Packet Hash Table is used to keep info about experienced pkts. 00109 00110 Pkt_Hash_Entry *hashPtr= PktTable.GetHash(dfh->sender_id, dfh->pk_num); 00111 00112 // Received this packet before ? 00113 00114 if (hashPtr != NULL) { 00115 Packet::free(packet); 00116 return; 00117 } 00118 00119 // Never receive it before ? Put in hash table. 00120 00121 PktTable.put_in_hash(dfh); 00122 00123 // Take action for a new pkt. 00124 00125 ConsiderNew(packet); 00126 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 354 of file agent.cc. References Agent::app_, and Application::recv(). Referenced by TcpAsymSink::recv(). 00355 { 00356 if (app_) 00357 app_->recv(nbytes); 00358 }
Here is the call graph for this function: ![]() |
|
|
Reimplemented from NsObject. Definition at line 78 of file agent.h.
|
|
|
Reimplemented from NsObject. Definition at line 211 of file flooding.cc. References MAX_DATA_TYPE, PktTable, Pkt_Hash_Table::reset(), and routing_table. Referenced by command(). 00212 { 00213 PktTable.reset(); 00214 00215 for (int i=0; i<MAX_DATA_TYPE; i++) { 00216 routing_table[i].reset(); 00217 } 00218 }
Here is the call graph for this function: ![]() |
|
|
Reimplemented in SRMAgent. Definition at line 91 of file agent.h. References Agent::sendmsg(). 00091 { sendmsg(nbytes); }
Here is the call graph for this function: ![]() |
|
||||||||||||
|
Reimplemented in HttpInvalAgent. Definition at line 84 of file agent.h. References Agent::sendmsg(). 00084 { sendmsg(sz, data, 0); }
Here is the call graph for this function: ![]() |
|
||||||||||||
|
||||||||||||
|
Definition at line 127 of file flooding.h. References port_dmux, and NsObject::recv(). Referenced by ConsiderNew(), and DataForSink().
Here is the call graph for this function: ![]() |
|
||||||||||||
|
Reimplemented in SA_Agent, RTPAgent, UdpAgent, MessagePassingAgent, LmsSender, SRMAgent, SctpAgent, FullTcpAgent, TcpAgent, TfrcAgent, and SimpleTcpAgent. Definition at line 407 of file agent.cc.
|
|
||||||||||||||||
|
Reimplemented in UdpAgent, and MessagePassingAgent. Definition at line 400 of file agent.cc. References abort(). Referenced by Agent::command(), Application::send(), Agent::send(), TrafficTrace::timeout(), TelnetApp::timeout(), SctpApp1::timeout(), EXPOO_Traffic::timeout(), and CBR_PP_Traffic::timeout(). 00401 { 00402 fprintf(stderr, 00403 "Agent::sendmsg(int, AppData*, const char*) not implemented\n"); 00404 abort(); 00405 }
Here is the call graph for this function: ![]() |
|
||||||||||||||||
|
Reimplemented in MessagePassingAgent. |
|
||||||||||||||||
|
|
|
||||||||||||||||||||
|
Reimplemented in MessagePassingAgent. Definition at line 420 of file agent.cc.
|
|
||||||||||||||||||||
|
Definition at line 411 of file agent.cc. References abort(). Referenced by Agent::command(), AnWormApp::probe(), and DnhWormApp::send_probe(). 00413 { 00414 fprintf(stderr, 00415 "Agent::sendmsg(int, AppData*, const char*) not implemented\n"); 00416 abort(); 00417 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 103 of file agent.h. References Agent::type_. Referenced by Agent::command(), RA_Traffic::init(), POO_Traffic::init(), EXPOO_Traffic::init(), and CBR_PP_Traffic::init(). 00103 { type_ = pkttype; }
|
|
|
Definition at line 51 of file connector.h. References Connector::drop_. Referenced by XCPWrapQ::command(). 00051 {drop_ = dt; }
|
|
|
Reimplemented in FullTcpAgent. Definition at line 98 of file agent.h. References Agent::size_. Referenced by rtProtoDV::command(), RLM_Sender::command(), imepAgent::getResponseListSize(), LandmarkAgent::makeUpdate(), Agent::recv(), SSMSRMAgent::send_glb_sess(), SSMSRMAgent::send_loc_sess(), SSMSRMAgent::send_rep_sess(), SRMAgent::send_sess(), TelnetApp::timeout(), and SctpApp1::timeout(). 00098 { return size_; }
|
|
|
Definition at line 231 of file flooding.cc. References AGENT_NEXT, AGT_ADDR, DATA_STOP, MAX_DATA_TYPE, routing_table, and SEND_MESSAGE. Referenced by command(). 00232 { 00233 Agent_List *cur; 00234 00235 for (int i=0; i<MAX_DATA_TYPE; i++) { 00236 for (cur=routing_table[i].source; cur!=NULL; cur=AGENT_NEXT(cur) ) { 00237 SEND_MESSAGE(i, AGT_ADDR(cur), DATA_STOP); 00238 } 00239 } 00240 }
|
|
|
Definition at line 49 of file connector.h. References Connector::target(), and Connector::target_.
Here is the call graph for this function: ![]() |
|
|
Definition at line 48 of file connector.h. References Connector::target_. Referenced by JoBS::assignRateDropsADC(), FQ::deque(), MIPMHAgent::reg(), MIPBSAgent::send_ads(), and Connector::target(). 00048 { return target_; }
|
|
|
Definition at line 221 of file flooding.cc. References THIS_NODE. Referenced by command(). 00222 { 00223 #ifdef DEBUG_OUTPUT 00224 printf("node %d: remaining energy %f, initial energy %f\n", THIS_NODE, 00225 node->energy_model()->energy(), 00226 node->energy_model()->initialenergy() ); 00227 #endif 00228 }
|
|
|
Reimplemented in SA_Agent, RTPAgent, FtpClientAgent, BayFullTcpAgent, SinkAgent, RLM_Sender, MIPBSAgent, MIPMHAgent, RapAgent, RTCPAgent, TcpAsymSink, FackTcpAgent, FullTcpAgent, QSNewRenoTcpAgent, RBPVegasTcpAgent, RBPRenoTcpAgent, SackRHTcpAgent, Sack1TcpAgent, TcpSessionAgent, DelAckSink, TcpAgent, RenoTcpAgent, VegasTcpAgent, and SimpleTcpAgent. Definition at line 347 of file agent.cc. Referenced by SimpleTimer::expire().
|
|
|
Reimplemented in SctpAgent, and TcpAgent. Definition at line 266 of file agent.cc. References ns_addr_t::addr_, Agent::channel_, Agent::dst_, Agent::here_, Agent::insertOldValue(), Scheduler::instance(), Agent::lookupOldValue(), min, TIME_FORMAT, Agent::traceName_, TRACEVAR_MAXVALUELENGTH, and OldValue::val_. Referenced by TcpAgent::trace(). 00267 { 00268 if (channel_ == 0) 00269 return; 00270 char wrk[256], value[128]; 00271 int n; 00272 00273 // XXX we need to keep track of old values. What's the best way? 00274 v->value(value, 128); 00275 00276 // XXX hack: how do I know ns has not started yet? 00277 // if there's nothing in value, return 00278 static int started = 0; 00279 if (!started) { 00280 Tcl::instance().evalc("[Simulator instance] is-started"); 00281 if (Tcl::instance().result()[0] == '0') 00282 // Simulator not started, do nothing 00283 return; 00284 // remember for next time (so we don't always have to call to tcl) 00285 started = 1; 00286 }; 00287 00288 OldValue *ov = lookupOldValue(v); 00289 if (ov != NULL) { 00290 sprintf(wrk, 00291 "f -t "TIME_FORMAT" -s %d -d %d -n %s -a %s -v %s -o %s -T v", 00292 Scheduler::instance().clock(), here_.addr_, 00293 dst_.addr_, v->name(), traceName_, value, ov->val_); 00294 strncpy(ov->val_, 00295 value, 00296 min(strlen(value)+1, TRACEVAR_MAXVALUELENGTH)); 00297 } else { 00298 // if there is value, insert it into old value list 00299 sprintf(wrk, "f -t "TIME_FORMAT" -s %d -d %d -n %s -a %s -v %s -T v", 00300 Scheduler::instance().clock(), here_.addr_, 00301 dst_.addr_, v->name(), traceName_, value); 00302 insertOldValue(v, value); 00303 } 00304 n = strlen(wrk); 00305 wrk[n] = '\n'; 00306 wrk[n+1] = 0; 00307 (void)Tcl_Write(channel_, wrk, n+1); 00308 }
Here is the call graph for this function: ![]() |
|
||||||||||||
|
Definition at line 350 of file flooding.cc. References BaseTrace::buffer(), BaseTrace::dump(), Trace::pt_, and tracetarget. 00351 { 00352 va_list ap; 00353 00354 if (!tracetarget) 00355 return; 00356 00357 va_start (ap, fmt); 00358 vsprintf (tracetarget->pt_->buffer(), fmt, ap); 00359 tracetarget->pt_->dump (); 00360 va_end (ap); 00361 }
Here is the call graph for this function: ![]() |
|
|
Reimplemented in TcpAgent. Definition at line 149 of file agent.h.
|
|
|
Reimplemented in BayFullTcpAgent. Definition at line 137 of file agent.h. Referenced by Agent::attachApp(), Agent::idle(), RapAgent::IpgTimeout(), UdpAgent::recv(), TPAgent::recv(), SimpleTcpAgent::recv(), RapAgent::recv(), MessagePassingAgent::recv(), HttpInvalAgent::recv(), Agent::recv(), and Agent::recvBytes(). |
|
|
|
Reimplemented in FECModel, FloodAgent, and LandmarkAgent. Definition at line 66 of file object.h. Referenced by REDQueue::command(), RedPDQueue::command(), PushbackQueue::command(), NsObject::debug(), NsObject::delay_bind_dispatch(), PushbackQueue::enque(), NsObject::isdebug(), NsObject::NsObject(), TfrcAgent::recv(), PushbackQueue::reportDrop(), SctpAgent::Reset(), REDQueue::reset(), DropTail::shrink_queue(), and Delayer::try_send(). |
|
|
Definition at line 124 of file agent.h. Referenced by Agent::delay_bind_dispatch(), and Agent::initpkt(). |
|
|
Definition at line 59 of file connector.h. Referenced by XCPWrapQ::command(), Connector::command(), Connector::drop(), ErrorModel::recv(), and Connector::setDropTarget(). |
|
|
Reimplemented in AckRecons. Definition at line 118 of file agent.h. Referenced by Agent::addAgentTrace(), Agent::daddr(), Agent::delay_bind_dispatch(), Agent::deleteAgentTrace(), Agent::dport(), DSRProto::DSRProto(), Agent::flushAVar(), Agent::initpkt(), SRMAgent::recv(), SSMSRMAgent::recv(), NatAgent::recv(), SRMAgent::sendmsg(), PushbackAgent::sendMsg(), and Agent::trace(). |
|
|
Definition at line 148 of file agent.h. Referenced by TcpAgent::command(), and TcpAgent::trace_event(). |
|
|
Definition at line 121 of file agent.h. Referenced by Agent::delay_bind_dispatch(), AbsTcpAgent::flowid(), Agent::initpkt(), CtrMcastEncap::recv(), Sack1TcpAgent::timeout(), and TcpAgent::trace_event(). |
|
|
Reimplemented in BayFullTcpAgent, RapAgent, and FullTcpAgent. Definition at line 123 of file agent.h. Referenced by Agent::delay_bind_dispatch(). |
|
|
|
Definition at line 124 of file flooding.h. |
|
|
Definition at line 122 of file flooding.h. |
|
|
Definition at line 135 of file agent.h. Referenced by Agent::insertOldValue(), Agent::lookupOldValue(), and Agent::~Agent(). |
|
|
Definition at line 119 of file flooding.h. Referenced by FloodingAgent(), and prepare_message(). |
|
|
Definition at line 120 of file flooding.h. Referenced by ConsiderNew(), recv(), and reset(). |
|
|
Definition at line 125 of file flooding.h. Referenced by command(), and send_to_dmux(). |
|
|
Definition at line 122 of file agent.h. Referenced by Agent::delay_bind_dispatch(), and Agent::initpkt(). |
|
|
Definition at line 116 of file flooding.h. Referenced by ConsiderNew(), DataForSink(), reset(), and StopSource(). |
|
|
|
|
Definition at line 134 of file agent.h. Referenced by Agent::addAgentTrace(), Agent::command(), Agent::deleteAgentTrace(), Agent::flushAVar(), Agent::monitorAgentTrace(), and Agent::trace(). |
|
|
Definition at line 123 of file flooding.h. Referenced by command(), FloodingAgent(), and trace(). |
|
|
Definition at line 120 of file agent.h. Referenced by Agent::get_pkttype(), Agent::initpkt(), FullTcpAgent::listen(), BayFullTcpAgent::listen(), RapAgent::SendAck(), SRMAgent::sendmsg(), RapAgent::SendPacket(), Agent::set_pkttype(), and XcpAgent::XcpAgent(). |
|
|
Definition at line 131 of file agent.h. Referenced by imepAgent::handlerControlTimer(), Agent::initpkt(), imepAgent::sendAck(), imepAgent::sendBeacon(), toraAgent::sendCLR(), imepAgent::sendHello(), toraAgent::sendQRY(), and toraAgent::sendUPD(). |
1.4.6