Inheritance diagram for PingResponder:


Definition at line 58 of file ping_responder.cc.
Public Member Functions | |
| nsaddr_t & | addr () |
| virtual void | attachApp (Application *app) |
| virtual void | close () |
| virtual void | connect (nsaddr_t dst) |
| nsaddr_t & | daddr () |
| virtual void | debug (const char *fmt,...) |
| nsaddr_t & | dport () |
| virtual void | drop (Packet *p) |
| packet_t | get_pkttype () |
| int | isdebug () const |
| virtual void | listen () |
| PingResponder () | |
| 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) |
Protected Member Functions | |
| void | addAgentTrace (const char *name) |
| Packet * | allocpkt (int) const |
| Packet * | allocpkt () const |
| int | command (int argc, const char *const *argv) |
| 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 | monitorAgentTrace () |
| virtual void | recvBytes (int bytes) |
| void | reflect (ip *) |
| virtual void | reset () |
| virtual void | trace (TracedVar *v) |
| virtual void | trace_event (char *eventtype) |
| icmp * | validate (int, ip *) |
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_ |
| OldValue * | oldValueList_ |
| int | prio_ |
| int | size_ |
| NsObject * | target_ |
| char * | traceName_ |
| packet_t | type_ |
Static Protected Attributes | |
| static int | uidcnt_ |
|
|
Definition at line 60 of file ping_responder.cc.
|
|
|
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 Connector. Reimplemented in SA_Agent, AODV, PingAgent, RTPAgent, UdpAgent, FtpClientAgent, FtpSrvrAgent, BayFullTcpAgent, Encapsulator, IvsReceiver, MessageAgent, MessagePassingAgent, TPAgent, DiffusionRate, SinkAgent, DiffusionAgent, FloodingAgent, OmniMcastAgent, DSDV_Agent, DSRProto, DSRAgent, IcmpAgent, NatAgent, TCPDestNat, TCPSrcNat, TCPSrcDestNat, TapAgent, TCPTapAgent, GAFAgent, imepAgent, rtProtoLS, CtrMcastEncap, CtrMcastDecap, LmsAgent, LmsReceiver, LmsSender, mcastControlAgent, RLM_Sender, RLM_Receiver, SSMSRMAgent, SRMAgent, DumbAgent, MIPBSAgent, MIPMHAgent, LDPAgent, PingAgent, PushbackAgent, QSAgent, RapAgent, rtProtoDV, SatRouteAgent, SctpAgent, FloodAgent, LandmarkAgent, SensorQueryAgent, SRAgent, AckRecons, RTCPAgent, SAack_Agent, AbsTcpAgent, FullTcpAgent, IntTcpAgent, TcpSessionAgent, TcpSink, TcpAgent, TfrcSinkAgent, TfrcAgent, LossMonitor, toraAgent, SimpleTcpAgent, and XcpSink. Definition at line 120 of file agent.cc. References Agent::addAgentTrace(), Agent::channel_, Agent::close(), Connector::command(), Agent::connect(), Agent::deleteAgentTrace(), Agent::listen(), Agent::monitorAgentTrace(), Agent::sendmsg(), Agent::sendto(), Agent::set_pkttype(), and Agent::traceName_. Referenced by XcpSink::command(), UdpAgent::command(), TPAgent::command(), toraAgent::command(), TfrcAgent::command(), TfrcSinkAgent::command(), TcpAgent::command(), TcpSink::command(), AbsTcpAgent::command(), TapAgent::command(), SRAgent::command(), SensorQueryAgent::command(), SctpAgent::command(), SatRouteAgent::command(), SAack_Agent::command(), SA_Agent::command(), rtProtoDV::command(), RTPAgent::command(), RTCPAgent::command(), RLM_Receiver::command(), RLM_Sender::command(), RapAgent::command(), QSAgent::command(), PushbackAgent::command(), PingAgent::command(), OmniMcastAgent::command(), NatAgent::command(), MIPMHAgent::command(), MIPBSAgent::command(), MessagePassingAgent::command(), mcastControlAgent::command(), LossMonitor::command(), LmsSender::command(), LmsReceiver::command(), LmsAgent::command(), LDPAgent::command(), imepAgent::command(), IcmpAgent::command(), GAFAgent::command(), FtpSrvrAgent::command(), FtpClientAgent::command(), FloodingAgent::command(), FloodAgent::command(), Encapsulator::command(), DumbAgent::command(), DSRAgent::command(), DSRProto::command(), DSDV_Agent::command(), DiffusionAgent::command(), SinkAgent::command(), CtrMcastDecap::command(), CtrMcastEncap::command(), AODV::command(), and AckRecons::command(). 00121 { 00122 Tcl& tcl = Tcl::instance(); 00123 if (argc == 2) { 00124 if (strcmp(argv[1], "delete-agent-trace") == 0) { 00125 if ((traceName_ == 0) || (channel_ == 0)) 00126 return (TCL_OK); 00127 deleteAgentTrace(); 00128 return (TCL_OK); 00129 } else if (strcmp(argv[1], "show-monitor") == 0) { 00130 if ((traceName_ == 0) || (channel_ == 0)) 00131 return (TCL_OK); 00132 monitorAgentTrace(); 00133 return (TCL_OK); 00134 } else if (strcmp(argv[1], "close") == 0) { 00135 close(); 00136 return (TCL_OK); 00137 } else if (strcmp(argv[1], "listen") == 0) { 00138 listen(); 00139 return (TCL_OK); 00140 } else if (strcmp(argv[1], "dump-namtracedvars") == 0) { 00141 enum_tracedVars(); 00142 return (TCL_OK); 00143 } 00144 00145 } 00146 else if (argc == 3) { 00147 if (strcmp(argv[1], "attach") == 0) { 00148 int mode; 00149 const char* id = argv[2]; 00150 channel_ = Tcl_GetChannel(tcl.interp(), (char*)id, &mode); 00151 if (channel_ == 0) { 00152 tcl.resultf("trace: can't attach %s for writing", id); 00153 return (TCL_ERROR); 00154 } 00155 return (TCL_OK); 00156 } else if (strcmp(argv[1], "add-agent-trace") == 0) { 00157 // we need to write nam traces and set agent trace name 00158 if (channel_ == 0) { 00159 tcl.resultf("agent %s: no trace file attached", name_); 00160 return (TCL_OK); 00161 } 00162 addAgentTrace(argv[2]); 00163 return (TCL_OK); 00164 } else if (strcmp(argv[1], "connect") == 0) { 00165 connect((nsaddr_t)atoi(argv[2])); 00166 return (TCL_OK); 00167 } else if (strcmp(argv[1], "send") == 0) { 00168 sendmsg(atoi(argv[2])); 00169 return (TCL_OK); 00170 } else if (strcmp(argv[1], "set_pkttype") == 0) { 00171 set_pkttype(packet_t(atoi(argv[2]))); 00172 return (TCL_OK); 00173 } 00174 } 00175 else if (argc == 4) { 00176 if (strcmp(argv[1], "sendmsg") == 0) { 00177 sendmsg(atoi(argv[2]), argv[3]); 00178 return (TCL_OK); 00179 } 00180 } 00181 else if (argc == 5) { 00182 if (strcmp(argv[1], "sendto") == 0) { 00183 sendto(atoi(argv[2]), argv[3], (nsaddr_t)atoi(argv[4])); 00184 return (TCL_OK); 00185 } 00186 } 00187 if (strcmp(argv[1], "tracevar") == 0) { 00188 // wrapper of TclObject's trace command, because some tcl 00189 // agents (e.g. srm) uses it. 00190 const char* args[4]; 00191 char tmp[6]; 00192 strcpy(tmp, "trace"); 00193 args[0] = argv[0]; 00194 args[1] = tmp; 00195 args[2] = argv[2]; 00196 if (argc > 3) 00197 args[3] = argv[3]; 00198 return (Connector::command(argc, args)); 00199 } 00200 return (Connector::command(argc, argv)); 00201 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 389 of file agent.cc. Referenced by Agent::command().
|
|
|
||||||||||||
|
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 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 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: ![]() |
|
|
||||||||||||
|
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 82 of file ping_responder.cc. References Packet::accessdata(), Packet::free(), HDR_CMN, Agent::initpkt(), Scheduler::instance(), Internet::print_ip(), NsObject::recv(), reflect(), hdr_cmn::size(), Connector::target_, and validate(). 00083 { 00084 hdr_cmn *ch = HDR_CMN(pkt); 00085 int psize = ch->size(); 00086 u_char* payload = pkt->accessdata(); 00087 00088 if (payload == NULL) { 00089 fprintf(stderr, "%f: PingResponder(%s): recv NULL data area\n", 00090 Scheduler::instance().clock(), name()); 00091 Packet::free(pkt); 00092 return; 00093 } 00094 00095 /* 00096 * assume here that the data area contains an IP header! 00097 */ 00098 00099 icmp* icmph; 00100 if ((icmph = validate(psize, (ip*) payload)) == NULL) { 00101 Internet::print_ip((ip*) payload); 00102 Packet::free(pkt); 00103 return; 00104 } 00105 00106 00107 /* 00108 * tasks: change icmp type to echo-reply, recompute IP hdr cksum, 00109 * recompute ICMP cksum 00110 */ 00111 00112 icmph->icmp_type = ICMP_ECHOREPLY; 00113 reflect((ip*) payload); // like kernel routine icmp_reflect() 00114 00115 /* 00116 * set up simulator packet to go to the correct place 00117 */ 00118 00119 Agent::initpkt(pkt); 00120 ch->size() = psize; // will have been overwrittin by initpkt 00121 00122 target_->recv(pkt); 00123 return; 00124 }
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.
|
|
|
Definition at line 231 of file ping_responder.cc. References Agent::daddr(), and Internet::in_cksum(). Referenced by recv(). 00232 { 00233 in_addr daddr = iph->ip_dst; 00234 int iplen = ntohs(iph->ip_len); 00235 int iphlen = (*((char*)iph) & 0x0f) << 2; 00236 00237 /* swap src and dest IP addresses on IP header */ 00238 iph->ip_dst = iph->ip_src; 00239 iph->ip_src = daddr; 00240 iph->ip_sum = 0; 00241 iph->ip_sum = Internet::in_cksum((u_short*) iph, iphlen); 00242 00243 /* recompute the icmp cksum */ 00244 icmp* icp = (icmp*)(iph + 1); // just past standard IP header 00245 icp->icmp_cksum = 0; 00246 icp->icmp_cksum = Internet::in_cksum((u_short*)icp, iplen - iphlen); 00247 }
Here is the call graph for this function: ![]() |
|
|
Reimplemented in BayFullTcpAgent, HashClassifier, IvsSource, dsREDQueue, DiffusionRate, SinkAgent, DiffusionAgent, FloodingAgent, OmniMcastAgent, LinkDelay, CBQueue, DropTail, ErrorModel, PIQueue, Queue< T >, RedPDQueue, REDQueue, REMQueue, RIOQueue, Snoop, FackTcpAgent, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, Sack1TcpAgent, TcpSink, DelAckSink, TcpAgent, VegasTcpAgent, toraAgent, Queue< T >, and XcpSink. Definition at line 70 of file object.cc. Referenced by NsObject::command().
|
|
|
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: ![]() |
|
||||||||||||
|
||||||||||||
|
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 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_; }
|
|
|
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: ![]() |
|
|
Reimplemented in TcpAgent. Definition at line 149 of file agent.h.
|
|
||||||||||||
|
Definition at line 133 of file ping_responder.cc. References Scheduler::instance(). Referenced by recv(). 00134 { 00135 if (sz < 20) { 00136 fprintf(stderr, "%f: PingResponder(%s): sim pkt too small for base IP header(%d)\n", 00137 Scheduler::instance().clock(), name(), sz); 00138 return (NULL); 00139 } 00140 00141 int ipver = (*((char*)iph) & 0xf0) >> 4; 00142 if (ipver != 4) { 00143 fprintf(stderr, "%f: PingResponder(%s): IP bad ver (%d)\n", 00144 Scheduler::instance().clock(), name(), ipver); 00145 return (NULL); 00146 } 00147 00148 int iplen = ntohs(iph->ip_len); 00149 int iphlen = (*((char*)iph) & 0x0f) << 2; 00150 if (iplen < (iphlen + 8)) { 00151 fprintf(stderr, "%f: PingResponder(%s): IP dgram not long enough (len: %d)\n", 00152 Scheduler::instance().clock(), name(), iplen); 00153 return (NULL); 00154 } 00155 00156 if (sz < iplen) { 00157 fprintf(stderr, "%f: PingResponder(%s): IP dgram not long enough (len: %d)\n", 00158 Scheduler::instance().clock(), name(), iplen); 00159 return (NULL); 00160 } 00161 00162 if (iphlen != 20) { 00163 fprintf(stderr, "%f: PingResponder(%s): IP bad hlen (%d)\n", 00164 Scheduler::instance().clock(), name(), iphlen); 00165 return (NULL); 00166 } 00167 00168 if (Internet::in_cksum((u_short*) iph, iphlen)) { 00169 fprintf(stderr, "%f: PingResponder(%s): IP bad cksum\n", 00170 Scheduler::instance().clock(), name()); 00171 return (NULL); 00172 } 00173 00174 if (iph->ip_p != IPPROTO_ICMP) { 00175 fprintf(stderr, "%f: PingResponder(%s): not ICMP (proto: %d)\n", 00176 Scheduler::instance().clock(), name(), iph->ip_p); 00177 return (NULL); 00178 } 00179 00180 00181 if (iph->ip_off != 0) { 00182 fprintf(stderr, "%f: PingResponder(%s): fragment! (off: 0x%x)\n", 00183 Scheduler::instance().clock(), name(), ntohs(iph->ip_off)); 00184 return (NULL); 00185 } 00186 00187 if (iph->ip_src.s_addr == 0xffffffff || iph->ip_src.s_addr == 0) { 00188 fprintf(stderr, "%f: PingResponder(%s): bad src addr (%s)\n", 00189 Scheduler::instance().clock(), name(), 00190 inet_ntoa(iph->ip_src)); 00191 return (NULL); 00192 } 00193 00194 if (IN_MULTICAST(ntohl(iph->ip_src.s_addr))) { 00195 fprintf(stderr, "%f: PingResponder(%s): mcast src addr (%s)\n", 00196 Scheduler::instance().clock(), name(), 00197 inet_ntoa(iph->ip_src)); 00198 return (NULL); 00199 } 00200 icmp* icp = (icmp*) (iph + 1); 00201 if (Internet::in_cksum((u_short*) icp, iplen - iphlen) != 0) { 00202 fprintf(stderr, 00203 "%f: PingResponder(%s): bad ICMP cksum\n", 00204 Scheduler::instance().clock(), name()); 00205 return (NULL); 00206 } 00207 if (icp->icmp_type != ICMP_ECHO) { 00208 fprintf(stderr, "%f: PingResponder(%s): not echo request (%d)\n", 00209 Scheduler::instance().clock(), name(), 00210 icp->icmp_type); 00211 return (NULL); 00212 } 00213 00214 if (icp->icmp_code != 0) { 00215 fprintf(stderr, "%f: PingResponder(%s): bad code (%d)\n", 00216 Scheduler::instance().clock(), name(), 00217 icp->icmp_code); 00218 return (NULL); 00219 } 00220 return (icp); 00221 }
Here is the call graph for this function: ![]() |
|
|
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 135 of file agent.h. Referenced by Agent::insertOldValue(), Agent::lookupOldValue(), and Agent::~Agent(). |
|
|
Definition at line 122 of file agent.h. Referenced by Agent::delay_bind_dispatch(), and Agent::initpkt(). |
|
|
|
|
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 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