#include <diff_sink.h>
Inheritance diagram for SinkAgent:


Public Member Functions | |
| SinkAgent () | |
| int | command (int argc, const char *const *argv) |
| virtual void | timeout (int) |
| void | report () |
| void | recv (Packet *, Handler *) |
| void | reset () |
| void | set_addr (ns_addr_t) |
| int | get_pk_count () |
| void | incr_pk_count () |
| Packet * | create_packet () |
| virtual void | recv (Packet *p, const char *s) |
| void | recvOnly (Packet *) |
| void | send (Packet *p, Handler *h) |
| virtual void | send (int sz, AppData *data) |
| virtual void | send (int nbytes) |
| virtual void | sendmsg (int sz, AppData *, const char *flags=0) |
| virtual void | sendmsg (int nbytes, const char *flags=0) |
| virtual void | sendto (int sz, AppData *, const char *flags, nsaddr_t dst) |
| virtual void | sendto (int nbytes, const char *flags, nsaddr_t dst) |
| virtual void | connect (nsaddr_t dst) |
| virtual void | close () |
| virtual void | listen () |
| virtual void | attachApp (Application *app) |
| virtual int & | size () |
| nsaddr_t & | addr () |
| nsaddr_t & | port () |
| nsaddr_t & | daddr () |
| nsaddr_t & | dport () |
| void | set_pkttype (packet_t pkttype) |
| packet_t | get_pkttype () |
| NsObject * | target () |
| virtual void | drop (Packet *p) |
| int | isdebug () const |
| virtual void | debug (const char *fmt,...) |
Protected Member Functions | |
| void | Terminate () |
| void | bcast_interest () |
| void | data_ready () |
| void | start () |
| void | stop () |
| virtual void | sendpkt () |
| virtual void | delay_bind_init_all () |
| virtual int | delay_bind_dispatch (const char *varName, const char *localName, TclObject *tracer) |
| virtual void | recvBytes (int bytes) |
| virtual void | idle () |
| Packet * | allocpkt () const |
| Packet * | allocpkt (int) const |
| void | initpkt (Packet *) const |
| virtual void | trace (TracedVar *v) |
| void | deleteAgentTrace () |
| void | addAgentTrace (const char *name) |
| void | monitorAgentTrace () |
| OldValue * | lookupOldValue (TracedVar *v) |
| void | insertOldValue (TracedVar *v, const char *value) |
| void | dumpTracedVars () |
| virtual void | trace_event (char *eventtype) |
| virtual void | drop (Packet *p, const char *s) |
| void | handle (Event *) |
Protected Attributes | |
| bool | APP_DUP_ |
| bool | periodic_ |
| bool | always_max_rate_ |
| int | pk_count |
| unsigned int | data_type_ |
| int | num_recv |
| int | num_send |
| int | RecvPerSec |
| double | cum_delay |
| double | last_arrival_time |
| Data_Hash_Table | DataTable |
| int | running_ |
| int | random_ |
| int | maxpkts_ |
| double | interval_ |
| int | simple_report_rate |
| int | data_counter |
| Sink_Timer | sink_timer_ |
| Periodic_Timer | periodic_timer_ |
| Report_Timer | report_timer_ |
| ns_addr_t | here_ |
| ns_addr_t | dst_ |
| int | size_ |
| packet_t | type_ |
| int | fid_ |
| int | prio_ |
| int | flags_ |
| int | defttl_ |
| Tcl_Channel | channel_ |
| char * | traceName_ |
| OldValue * | oldValueList_ |
| Application * | app_ |
| EventTrace * | et_ |
| NsObject * | target_ |
| NsObject * | drop_ |
| int | debug_ |
Static Protected Attributes | |
| int | uidcnt_ |
Friends | |
| class | Periodic_Timer |
|
|
Definition at line 67 of file diff_sink.cc. References always_max_rate_, APP_DUP_, cum_delay, data_counter, data_type_, interval_, last_arrival_time, maxpkts_, num_recv, num_send, ORIGINAL, periodic_, pk_count, PT_DIFF, random_, RecvPerSec, simple_report_rate, and Agent::size_.
00067 : Agent(PT_DIFF), data_type_(0), 00068 running_(0), random_(0), sink_timer_(this), periodic_timer_(this), 00069 report_timer_(this) 00070 { 00071 // set option first. 00072 00073 APP_DUP_ = true; 00074 00075 periodic_ = true; 00076 always_max_rate_ = false; 00077 00078 // Bind Tcl and C++ Variables 00079 00080 bind("data_type_", &data_type_); 00081 bind_time("interval_", &interval_); 00082 bind("packetSize_", &size_); 00083 bind("random_", &random_); 00084 bind("maxpkts_", &maxpkts_); 00085 00086 // Initialize variables. 00087 00088 // maxpkts_ = 2; 00089 pk_count=0; 00090 num_recv=0; 00091 num_send=0; 00092 RecvPerSec=0; 00093 00094 cum_delay=0.0; 00095 00096 data_counter = 0; 00097 simple_report_rate = ORIGINAL; 00098 00099 last_arrival_time = -1.0; 00100 } |
|
|
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 517 of file agent.cc. References Packet::allocdata(), and Agent::allocpkt().
|
Here is the call graph for this function:

|
Here is the call graph for this function:

|
|
Definition at line 372 of file agent.cc. References Agent::app_. Referenced by HttpMInvalCache::command(), Application::command(), TcpApp::TcpApp(), and TcpApp::~TcpApp().
00373 {
00374 app_ = app;
00375 }
|
|
|
Definition at line 203 of file diff_sink.cc. References ns_addr_t::addr_, create_packet(), hdr_cdiff::data_type, data_type_, hdr_ip::dst_, hdr_cdiff::forward_agent_id, HDR_CDIFF, HDR_IP, Agent::here_, INTEREST, INTEREST_PERIODIC, hdr_cdiff::mess_type, hdr_cdiff::next_nodes, hdr_cdiff::num_next, periodic_, periodic_timer_, pk_count, hdr_cdiff::pk_num, ns_addr_t::port_, hdr_cdiff::report_rate, TimerHandler::resched(), ROUTING_PORT, Agent::send(), hdr_cdiff::sender_id, hdr_ip::src_, and SUB_SAMPLED. Referenced by command(), and Periodic_Timer::expire().
00204 {
00205 Packet* pkt = create_packet();
00206 hdr_cdiff* dfh = HDR_CDIFF(pkt);
00207 hdr_ip* iph = HDR_IP(pkt);
00208
00209 // Set message type, packet number and sender ID
00210 dfh->mess_type = INTEREST;
00211 dfh->pk_num = pk_count;
00212 pk_count++;
00213 dfh->sender_id = here_;
00214 dfh->data_type = data_type_;
00215 dfh->forward_agent_id = here_;
00216
00217 dfh->report_rate = SUB_SAMPLED;
00218 dfh->num_next = 1;
00219 dfh->next_nodes[0] = here_.addr_;
00220
00221 iph->src_ = here_;
00222 iph->dst_.addr_ = here_.addr_;
00223 iph->dst_.port_ = ROUTING_PORT;
00224
00225
00226
00227 // Send the packet
00228
00229 // printf("Sink %s send packet (%x, %d) at %f to %x.\n",
00230 // name_, dfh->sender_id,
00231 // dfh->pk_num,
00232 // NOW,
00233 // iph->dst_);
00234
00235 send(pkt, 0);
00236 if (periodic_ == true)
00237 periodic_timer_.resched(INTEREST_PERIODIC);
00238 }
|
Here is the call graph for this function:

|
|
Reimplemented in FullTcpAgent. Definition at line 377 of file agent.cc. Referenced by Agent::command().
00378 {
00379 }
|
|
||||||||||||
|
Reimplemented from Agent. Definition at line 278 of file diff_sink.cc. References always_max_rate_, APP_DUP_, bcast_interest(), Agent::command(), God::data_pkt_size, data_ready(), data_type_, TimerHandler::force_cancel(), God::instance(), REPORT_PERIOD, report_timer_, TimerHandler::resched(), sendpkt(), Agent::size_, start(), stop(), and Terminate().
00279 {
00280 if (argc == 2) {
00281
00282 if (strcmp(argv[1], "enable-duplicate") == 0) {
00283 APP_DUP_ = true;
00284 return TCL_OK;
00285 }
00286
00287 if (strcmp(argv[1], "disable-duplicate") == 0) {
00288 APP_DUP_ = false;
00289 return TCL_OK;
00290 }
00291
00292 if (strcmp(argv[1], "always-max-rate") == 0) {
00293 always_max_rate_ = true;
00294 return TCL_OK;
00295 }
00296
00297 if (strcmp(argv[1], "terminate") == 0) {
00298 Terminate();
00299 return TCL_OK;
00300 }
00301
00302 if (strcmp(argv[1], "announce") == 0) {
00303 bcast_interest();
00304 report_timer_.resched(REPORT_PERIOD);
00305
00306 return (TCL_OK);
00307 }
00308
00309 if (strcmp(argv[1], "ready") == 0) {
00310 God::instance()->data_pkt_size = size_;
00311 data_ready();
00312 return (TCL_OK);
00313 }
00314
00315 if (strcmp(argv[1], "send") == 0) {
00316 sendpkt();
00317 return (TCL_OK);
00318 }
00319
00320 if (strcmp(argv[1], "cbr-start") == 0) {
00321 start();
00322 return (TCL_OK);
00323 }
00324
00325 if (strcmp(argv[1], "stop") == 0) {
00326 stop();
00327 report_timer_.force_cancel();
00328 return (TCL_OK);
00329 }
00330
00331 }
00332
00333 if (argc == 3) {
00334 if (strcmp(argv[1], "data-type") == 0) {
00335 data_type_ = atoi(argv[2]);
00336 return (TCL_OK);
00337 }
00338 }
00339
00340 return (Agent::command(argc, argv));
00341 }
|
Here is the call graph for this function:

|
|
Definition at line 389 of file agent.cc. Referenced by Agent::command().
00390 {
00391 /*
00392 dst_ = dst;
00393 */
00394 }
|
|
|
Definition at line 437 of file diff_sink.cc. References Agent::allocpkt(), HDR_CDIFF, HDR_CMN, NOW, hdr_cmn::size(), and hdr_cdiff::ts_. Referenced by bcast_interest(), data_ready(), and sendpkt().
|
Here is the call graph for this function:

|
|
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, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, and VegasTcpAgent. 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 TcpAgent::delay_bind_dispatch(), TcpSink::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, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, and VegasTcpAgent. Definition at line 78 of file agent.cc. References NsObject::delay_bind_init_all(). Referenced by TcpAgent::delay_bind_init_all(), TcpSink::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 99 of file agent.h. References Agent::dst_, nsaddr_t, and ns_addr_t::port_. Referenced by DSDV_Agent::lost_link(), TcpAsymSink::recv(), CtrMcastEncap::recv(), IntTcpAgent::rxmit_last(), IntTcpAgent::send_one(), rtProtoDV::sendpkt(), TcpAgent::trace_event(), TcpAgent::traceAll(), TcpAsymAgent::traceAll(), TcpAgent::traceVar(), TcpSessionAgent::traceVar(), and TcpAsymAgent::traceVar().
|
|
||||||||||||
|
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:

|
Here is the call graph for this function:

|
|
|
|
|
Definition at line 425 of file diff_sink.cc. References pk_count.
00426 {
00427 return pk_count;
00428 }
|
|
|
Definition at line 101 of file agent.h. References packet_t, and Agent::type_. Referenced by CBR_Traffic::init().
00101 { 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(), TcpAgent::output(), VegasTcpAgent::output(), RFC793eduTcpAgent::output(), QSNewRenoTcpAgent::output(), IntTcpAgent::output(), BayFullTcpAgent::output(), UdpAgent::sendmsg(), SA_Agent::sendmsg(), and RTPAgent::sendmsg().
|
Here is the call graph for this function:

|
|
Definition at line 431 of file diff_sink.cc. References pk_count.
00432 {
00433 pk_count++;
00434 }
|
|
|
Definition at line 446 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(), NixVec::Reset(), hdr_ip::saddr(), hdr_cmn::size(), Agent::size_, hdr_ip::sport(), hdr_cmn::timestamp(), hdr_ip::ttl(), Agent::type_, hdr_cmn::uid(), and Agent::uidcnt_. Referenced by Agent::allocpkt(), and PingResponder::recv().
00447 {
00448 hdr_cmn* ch = hdr_cmn::access(p);
00449 ch->uid() = uidcnt_++;
00450 ch->ptype() = type_;
00451 ch->size() = size_;
00452 ch->timestamp() = Scheduler::instance().clock();
00453 ch->iface() = UNKN_IFACE.value(); // from packet.h (agent is local)
00454 ch->direction() = hdr_cmn::NONE;
00455
00456 ch->error() = 0; /* pkt not corrupt to start with */
00457
00458 hdr_ip* iph = hdr_ip::access(p);
00459 iph->saddr() = here_.addr_;
00460 iph->sport() = here_.port_;
00461 iph->daddr() = dst_.addr_;
00462 iph->dport() = dst_.port_;
00463
00464 //DEBUG
00465 //if (dst_ != -1)
00466 // printf("pl break\n");
00467
00468 iph->flowid() = fid_;
00469 iph->prio() = prio_;
00470 iph->ttl() = defttl_;
00471
00472 hdr_flags* hf = hdr_flags::access(p);
00473 hf->ecn_capable_ = 0;
00474 hf->ecn_ = 0;
00475 hf->eln_ = 0;
00476 hf->ecn_to_echo_ = 0;
00477 hf->fs_ = 0;
00478 hf->no_ts_ = 0;
00479 hf->pri_ = 0;
00480 hf->cong_action_ = 0;
00481 #ifdef HAVE_STL
00482
00483 hdr_nv* nv = hdr_nv::access(p);
00484 if (0)
00485 printf("Off hdr_nv %d, ip_hdr %d myaddr %ld\n",
00486 hdr_nv::offset(), hdr_ip::offset(), here_.addr_);
00487 NixNode* pNixNode = NixNode::GetNodeObject(here_.addr_);
00488 if (0)
00489 printf("Node Object %p\n", pNixNode);
00490 if (pNixNode) {
00491 // If we get non-null, indicates nixvector routing in use
00492 // Delete any left over nv in the packet
00493 // Get a nixvector to the target (may create new)
00494 NixVec* pNv = pNixNode->GetNixVector(dst_.addr_);
00495 pNv->Reset();
00496 nv->nv() = pNv; // And set the nixvec in the packet
00497 nv->h_used = 0; // And reset used portion to 0
00498 }
00499 #endif //HAVE_STL
00500 }
|
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().
00382 {
00383 }
|
|
|
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:

|
|
Definition at line 97 of file agent.h. References Agent::here_, nsaddr_t, and ns_addr_t::port_. Referenced by LmsAgent::pkt2agent(), TcpAsymSink::recv(), MIPBSAgent::recv(), LmsAgent::recv(), HttpInvalAgent::recv(), CtrMcastEncap::recv(), IntTcpAgent::rxmit_last(), IntTcpAgent::send_one(), LmsReceiver::send_refresh(), IcmpAgent::sendredirect(), TcpAgent::trace_event(), TcpAgent::traceAll(), TcpAsymAgent::traceAll(), TcpAgent::traceVar(), TcpSessionAgent::traceVar(), and TcpAsymAgent::traceVar().
|
|
||||||||||||
|
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 344 of file diff_sink.cc. References always_max_rate_, APP_DUP_, hdr_cdiff::attr, cum_delay, DATA, DATA_REQUEST, DATA_STOP, hdr_cdiff::data_type, data_type_, DataTable, Packet::free(), Data_Hash_Table::GetHash(), HDR_CDIFF, God::IncrRecv(), God::instance(), last_arrival_time, hdr_cdiff::mess_type, NOW, num_recv, Data_Hash_Table::PutInHash(), RecvPerSec, hdr_cdiff::report_rate, running_, simple_report_rate, start(), stop(), and hdr_cdiff::ts_.
00345 {
00346 hdr_cdiff* dfh = HDR_CDIFF(pkt);
00347
00348 /*
00349 printf("SK %d recv (%x, %x, %d) %s size %d at time %lf\n", here_.addr_,
00350 (dfh->sender_id).addr_, (dfh->sender_id).port_,
00351 dfh->pk_num, MsgStr[dfh->mess_type], cmh->size(), NOW);
00352 */
00353
00354 if (data_type_ != dfh->data_type) {
00355 printf("Hey, What are you doing? I am not a sink for %d. I'm a sink for %d. \n", dfh->data_type, data_type_);
00356 Packet::free(pkt);
00357 return;
00358 }
00359
00360
00361 switch(dfh->mess_type) {
00362 case DATA_REQUEST :
00363
00364 if (always_max_rate_ == false)
00365 simple_report_rate = dfh->report_rate;
00366
00367 if (!running_) start();
00368
00369 // printf("I got a data request for data rate %d at %lf. Will send it right away.\n",
00370 // simple_report_rate, NOW);
00371
00372 break;
00373
00374 case DATA_STOP :
00375
00376 if (running_) stop();
00377 break;
00378
00379 case DATA :
00380
00381 if (APP_DUP_ == true) {
00382 if (DataTable.GetHash(dfh->attr) != NULL) {
00383 Packet::free(pkt);
00384 return;
00385 } else {
00386 DataTable.PutInHash(dfh->attr);
00387 }
00388 }
00389
00390 cum_delay = cum_delay + (NOW - dfh->ts_);
00391 num_recv++;
00392 RecvPerSec++;
00393 God::instance()->IncrRecv();
00394
00395 /*
00396 if (last_arrival_time > 0.0) {
00397 printf("SK %d: Num_Recv %d, InterArrival %lf\n", here_.addr_,
00398 num_recv, (NOW)-last_arrival_time);
00399 }
00400 */
00401 last_arrival_time = NOW;
00402
00403 break;
00404
00405 default:
00406
00407 break;
00408 }
00409
00410 Packet::free(pkt);
00411 }
|
Here is the call graph for this function:

|
|
Definition at line 354 of file agent.cc. References Agent::app_, and Application::recv(). Referenced by DelAckSink::recv(), TcpSink::recv(), QSTcpSink::recv(), FullTcpAgent::recv(), and TcpAsymSink::recv().
|
Here is the call graph for this function:

|
|
Reimplemented from NsObject. Definition at line 78 of file agent.h.
00078 {};
|
|
|
Definition at line 122 of file diff_sink.cc. References RecvPerSec, REPORT_PERIOD, report_timer_, and TimerHandler::resched(). Referenced by Report_Timer::expire().
00123 {
00124 // printf("SK %d: RecvPerSec %d at time %lf\n", here_.addr_, RecvPerSec, NOW);
00125 report_timer_.resched(REPORT_PERIOD);
00126 RecvPerSec = 0;
00127 }
|
Here is the call graph for this function:

|
|
Reimplemented from NsObject. Definition at line 414 of file diff_sink.cc.
00415 {
00416 }
|
|
|
Reimplemented in SRMAgent. Definition at line 89 of file agent.h. References Agent::sendmsg().
00089 { 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:

|
||||||||||||
Here is the call graph for this function:

|
||||||||||||
|
Reimplemented in SA_Agent, RTPAgent, UdpAgent, LmsSender, SRMAgent, FullTcpAgent, TcpAgent, TfrcAgent, and SimpleTcpAgent. Definition at line 415 of file agent.cc.
00416 {
00417 }
|
|
||||||||||||||||
|
Reimplemented in UdpAgent. Definition at line 400 of file agent.cc. References abort(). Referenced by Agent::command(), Application::send(), Agent::send(), TrafficTrace::timeout(), TelnetApp::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:

|
|
Definition at line 143 of file diff_sink.cc. References ns_addr_t::addr_, APP_DUP_, hdr_cdiff::attr, God::CountNewData(), create_packet(), DATA, data_counter, hdr_cdiff::data_type, data_type_, hdr_ip::dst_, hdr_cdiff::forward_agent_id, Packet::free(), HDR_CDIFF, HDR_CMN, HDR_IP, Agent::here_, God::instance(), maxpkts_, hdr_cdiff::mess_type, hdr_cdiff::next_nodes, hdr_cdiff::num_next, num_send, ORIGINAL, pk_count, hdr_cdiff::pk_num, ns_addr_t::port_, hdr_cdiff::report_rate, ROUTING_PORT, running_, Agent::send(), hdr_cdiff::sender_id, simple_report_rate, hdr_cmn::size(), Agent::size_, hdr_ip::src_, and SUB_SAMPLED. Referenced by command(), start(), and timeout().
00144 {
00145 if (pk_count >= maxpkts_) {
00146 running_ = 0;
00147 return;
00148 }
00149
00150 Packet* pkt = create_packet();
00151 hdr_cdiff* dfh = HDR_CDIFF(pkt);
00152 hdr_ip* iph = HDR_IP(pkt);
00153 hdr_cmn* cmh = HDR_CMN(pkt);
00154
00155
00156 data_counter = (data_counter + SUB_SAMPLED)% ORIGINAL;
00157 if (data_counter == SUB_SAMPLED) {
00158 dfh->report_rate = SUB_SAMPLED;
00159 } else {
00160 dfh->report_rate = ORIGINAL;
00161 }
00162 if (simple_report_rate < dfh->report_rate) {
00163 Packet::free(pkt);
00164 return;
00165 }
00166
00167 cmh->size() = size_;
00168 dfh->mess_type = DATA;
00169 dfh->pk_num = pk_count;
00170
00171 pk_count++;
00172
00173 dfh->sender_id = here_;
00174 dfh->data_type = data_type_;
00175 dfh->forward_agent_id = here_;
00176
00177 dfh->num_next = 1;
00178 dfh->next_nodes[0] = here_.addr_;
00179
00180 iph->src_ = here_;
00181 iph->dst_.addr_ = here_.addr_;
00182 iph->dst_.port_ = ROUTING_PORT;
00183
00184 // Send the packet
00185 // printf("Source %s send packet (%x, %d) at %lf.\n", name(),
00186 // dfh->sender_id, dfh->pk_num, NOW);
00187
00188
00189 num_send++;
00190 dfh->attr[0] = data_type_;
00191
00192 if (APP_DUP_ == true)
00193 dfh->attr[1] = 0; // Represent detection of the same animal
00194 else
00195 dfh->attr[1] = here_.addr_; // Detect a different animal.
00196
00197 dfh->attr[2] = num_send;
00198 God::instance()->CountNewData(dfh->attr);
00199 send(pkt, 0);
00200 }
|
Here is the call graph for this function:

|
||||||||||||||||
|
|
|
||||||||||||||||||||
|
Definition at line 407 of file agent.cc. References abort(). Referenced by Agent::command().
00409 {
00410 fprintf(stderr,
00411 "Agent::sendmsg(int, AppData*, const char*) not implemented\n");
00412 abort();
00413 }
|
Here is the call graph for this function:

|
|
Definition at line 419 of file diff_sink.cc. References Agent::here_.
00420 {
00421 here_=address;
00422 }
|
|
|
Definition at line 100 of file agent.h. References Agent::type_. Referenced by Agent::command(), HttpUInvalClass::create(), RA_Traffic::init(), POO_Traffic::init(), EXPOO_Traffic::init(), CBR_Traffic::init(), and CBR_PP_Traffic::init().
00100 { type_ = pkttype; }
|
|
|
Reimplemented in FullTcpAgent. Definition at line 95 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(), and TelnetApp::timeout().
00095 { return size_; }
|
|
|
Definition at line 102 of file diff_sink.cc. References interval_, TimerHandler::resched(), running_, sendpkt(), and sink_timer_. Referenced by command(), and recv().
00103 {
00104 running_ = 1;
00105 sendpkt();
00106 sink_timer_.resched(interval_);
00107 }
|
Here is the call graph for this function:

|
|
Definition at line 109 of file diff_sink.cc. References TimerHandler::force_cancel(), periodic_, periodic_timer_, and running_. Referenced by command(), and recv().
00110 {
00111 if (running_) {
00112 running_ = 0;
00113 }
00114
00115 if (periodic_ == true) {
00116 periodic_ = false;
00117 periodic_timer_.force_cancel();
00118 }
00119 }
|
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(), QSAgent::recv(), and MIPMHAgent::reg().
00048 { return target_; }
|
|
|
Definition at line 269 of file diff_sink.cc. References ns_addr_t::addr_, cum_delay, data_type_, Agent::here_, num_recv, and num_send. Referenced by command().
|
|
|
Reimplemented from Agent. Definition at line 130 of file diff_sink.cc. References interval_, random_, TimerHandler::resched(), running_, sendpkt(), sink_timer_, and Random::uniform(). Referenced by Sink_Timer::expire().
00131 {
00132 if (running_) {
00133 sendpkt();
00134 double t = interval_;
00135 if (random_)
00136 /* add some zero-mean white noise */
00137 t += interval_ * Random::uniform(-0.5, 0.5);
00138 sink_timer_.resched(t);
00139 }
00140 }
|
Here is the call graph for this function:

|
|
Reimplemented in 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 146 of file agent.h.
00146 {}
|
|
|
Definition at line 131 of file diff_sink.h. |
|
|
Definition at line 100 of file diff_sink.h. Referenced by command(), recv(), and SinkAgent(). |
|
|
Reimplemented in BayFullTcpAgent. Definition at line 134 of file agent.h. Referenced by Agent::attachApp(), Agent::idle(), RapAgent::IpgTimeout(), UdpAgent::recv(), SimpleTcpAgent::recv(), RapAgent::recv(), HttpInvalAgent::recv(), Agent::recv(), and Agent::recvBytes(). |
|
|
Definition at line 97 of file diff_sink.h. Referenced by command(), recv(), sendpkt(), and SinkAgent(). |
|
|
Definition at line 130 of file agent.h. Referenced by Agent::addAgentTrace(), Agent::command(), Agent::flushAVar(), Agent::monitorAgentTrace(), TcpAsymSink::recv(), Agent::trace(), TcpAgent::traceAll(), TcpAsymAgent::traceAll(), TcpAgent::traceVar(), TcpSessionAgent::traceVar(), and TcpAsymAgent::traceVar(). |
|
|
Definition at line 107 of file diff_sink.h. Referenced by recv(), SinkAgent(), and Terminate(). |
|
|
Definition at line 125 of file diff_sink.h. Referenced by sendpkt(), and SinkAgent(). |
|
|
Definition at line 102 of file diff_sink.h. Referenced by bcast_interest(), command(), data_ready(), recv(), sendpkt(), SinkAgent(), and Terminate(). |
|
|
Definition at line 110 of file diff_sink.h. Referenced by recv(). |
|
|
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(), RedPDQueue::enque(), PushbackQueue::enque(), NsObject::isdebug(), NsObject::NsObject(), TfrcAgent::recv(), PushbackQueue::reportDrop(), and REDQueue::reset(). |
|
|
Definition at line 121 of file agent.h. Referenced by Agent::delay_bind_dispatch(), and Agent::initpkt(). |
|
|
Definition at line 57 of file connector.h. Referenced by Connector::command(), Connector::drop(), and ErrorModel::recv(). |
|
|
Reimplemented in AckRecons. Definition at line 115 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 145 of file agent.h. Referenced by TcpAgent::command(), and TcpAgent::trace_event(). |
|
|
Definition at line 118 of file agent.h. Referenced by Agent::delay_bind_dispatch(), AbsTcpAgent::flowid(), Agent::initpkt(), FullTcpAgent::recv(), CtrMcastEncap::recv(), AbsTcpAgent::send_batch(), Sack1TcpAgent::timeout(), and TcpAgent::trace_event(). |
|
|
Reimplemented in BayFullTcpAgent, RapAgent, and FullTcpAgent. Definition at line 120 of file agent.h. Referenced by Agent::delay_bind_dispatch(). |
|
|
|
Definition at line 122 of file diff_sink.h. Referenced by SinkAgent(), start(), and timeout(). |
|
|
Definition at line 108 of file diff_sink.h. Referenced by recv(), and SinkAgent(). |
|
|
Definition at line 121 of file diff_sink.h. Referenced by sendpkt(), and SinkAgent(). |
|
|
Definition at line 103 of file diff_sink.h. Referenced by recv(), SinkAgent(), and Terminate(). |
|
|
Definition at line 104 of file diff_sink.h. Referenced by sendpkt(), SinkAgent(), and Terminate(). |
|
|
Definition at line 132 of file agent.h. Referenced by Agent::insertOldValue(), Agent::lookupOldValue(), and Agent::~Agent(). |
|
|
Definition at line 99 of file diff_sink.h. Referenced by bcast_interest(), SinkAgent(), and stop(). |
|
|
Definition at line 128 of file diff_sink.h. Referenced by bcast_interest(), and stop(). |
|
|
Definition at line 101 of file diff_sink.h. Referenced by bcast_interest(), data_ready(), get_pk_count(), incr_pk_count(), sendpkt(), and SinkAgent(). |
|
|
Definition at line 119 of file agent.h. Referenced by Agent::delay_bind_dispatch(), and Agent::initpkt(). |
|
|
Definition at line 120 of file diff_sink.h. Referenced by SinkAgent(), and timeout(). |
|
|
Definition at line 105 of file diff_sink.h. Referenced by recv(), report(), and SinkAgent(). |
|
|
Definition at line 129 of file diff_sink.h. |
|
|
Definition at line 119 of file diff_sink.h. Referenced by recv(), sendpkt(), start(), stop(), and timeout(). |
|
|
Definition at line 124 of file diff_sink.h. Referenced by recv(), sendpkt(), and SinkAgent(). |
|
|
Definition at line 127 of file diff_sink.h. |
|
|
|
|
Definition at line 131 of file agent.h. Referenced by Agent::addAgentTrace(), Agent::command(), Agent::deleteAgentTrace(), Agent::flushAVar(), Agent::monitorAgentTrace(), and Agent::trace(). |
|
|
Definition at line 117 of file agent.h. Referenced by Agent::get_pkttype(), Agent::initpkt(), FullTcpAgent::listen(), BayFullTcpAgent::listen(), RapAgent::SendAck(), SRMAgent::sendmsg(), RapAgent::SendPacket(), and Agent::set_pkttype(). |
|
|
Definition at line 68 of file agent.cc. Referenced by imepAgent::handlerControlTimer(), imepAgent::handlerReXmitTimer(), Agent::initpkt(), imepAgent::sendAck(), imepAgent::sendBeacon(), toraAgent::sendCLR(), imepAgent::sendHello(), toraAgent::sendQRY(), DSRAgent::sendUnknownFlow(), toraAgent::sendUPD(), and DSRAgent::xmitFailed(). |
1.3.3