Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

TfrcAgent Class Reference

#include <tfrc.h>

Inheritance diagram for TfrcAgent:

Inheritance graph
[legend]
Collaboration diagram for TfrcAgent:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TfrcAgent ()
void recv (Packet *, Handler *)
void sendpkt ()
void nextpkt ()
int command (int argc, const char *const *argv)
void start ()
void stop ()
void update_rtt (double tao, double now)
void increase_rate (double p)
void decrease_rate ()
void slowstart ()
void reduce_rate_on_no_feedback ()
void advanceby (int delta)
void sendmsg (int nbytes, const char *flags=0)
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 timeout (int tno)
virtual void sendmsg (int sz, AppData *, 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_taddr ()
nsaddr_tport ()
nsaddr_tdaddr ()
nsaddr_tdport ()
void set_pkttype (packet_t pkttype)
packet_t get_pkttype ()
NsObjecttarget ()
virtual void drop (Packet *p)
int isdebug () const
virtual void debug (const char *fmt,...)

Protected Member Functions

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 ()
Packetallocpkt () const
Packetallocpkt (int) const
void initpkt (Packet *) const
virtual void trace (TracedVar *v)
void deleteAgentTrace ()
void addAgentTrace (const char *name)
void monitorAgentTrace ()
OldValuelookupOldValue (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)
virtual void reset ()
void handle (Event *)

Protected Attributes

TfrcSendTimer send_timer_
TfrcNoFeedbackTimer NoFeedbacktimer_
int SndrType_
int maxseq_
int seqno_
int psize_
double rate_
double oldrate_
double delta_
int rate_change_
double rcvrate
double maxrate_
double ss_maxrate_
int printStatus_
int datalimited_
int oldCode_
double last_pkt_time_
double rtt_
double rttcur_
double rttvar_
double tzero_
double sqrtrtt_
int ca_
int t_srtt_
int t_rtt_
int t_rttvar_
int rttvar_exp_
double t_rtxcur_
double tcp_tick_
int T_SRTT_BITS
int T_RTTVAR_BITS
int srtt_init_
int rttvar_init_
double rtxcur_init_
int InitRate_
double df_
double last_change_
double ssmult_
int bval_
double overhead_
TracedInt ndatapack_
int UrgentFlag
int active_
int round_id
int first_pkt_rcvd
int ecn_
int conservative_
double scmult_
int heavyrounds_
int maxHeavyRounds_
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_
OldValueoldValueList_
Applicationapp_
EventTraceet_
NsObjecttarget_
NsObjectdrop_
int debug_

Static Protected Attributes

int uidcnt_

Friends

class TfrcSendTimer
class TfrcNoFeedbackTimer

Constructor & Destructor Documentation

TfrcAgent::TfrcAgent  ) 
 

Definition at line 72 of file tfrc.cc.

References bval_, ca_, conservative_, datalimited_, df_, ecn_, InitRate_, last_pkt_time_, maxHeavyRounds_, maxseq_, ndatapack_, oldCode_, overhead_, printStatus_, PT_TFRC, rate_, rttvar_exp_, rttvar_init_, rtxcur_init_, scmult_, seqno_, Agent::size_, SndrType_, srtt_init_, ssmult_, T_RTTVAR_BITS, T_SRTT_BITS, and tcp_tick_.

00072                      : Agent(PT_TFRC), send_timer_(this), 
00073          NoFeedbacktimer_(this), rate_(0), oldrate_(0), maxrate_(0)
00074 {
00075         bind("packetSize_", &size_);
00076         bind("rate_", &rate_);
00077         bind("df_", &df_);
00078         bind("tcp_tick_", &tcp_tick_);
00079         bind("ndatapack_", &ndatapack_);
00080         bind("srtt_init_", &srtt_init_);
00081         bind("rttvar_init_", &rttvar_init_);
00082         bind("rtxcur_init_", &rtxcur_init_);
00083         bind("rttvar_exp_", &rttvar_exp_);
00084         bind("T_SRTT_BITS", &T_SRTT_BITS);
00085         bind("T_RTTVAR_BITS", &T_RTTVAR_BITS);
00086         bind("InitRate_", &InitRate_);
00087         bind("overhead_", &overhead_);
00088         bind("ssmult_", &ssmult_);
00089         bind("bval_", &bval_);
00090         bind("ca_", &ca_);
00091         bind_bool("printStatus_", &printStatus_);
00092         bind_bool("conservative_", &conservative_);
00093         bind_bool("ecn_", &ecn_);
00094         bind("maxHeavyRounds_", &maxHeavyRounds_);
00095         bind("SndrType_", &SndrType_); 
00096         bind("scmult_", &scmult_);
00097         bind_bool("oldCode_", &oldCode_);
00098         seqno_ = -1;
00099         maxseq_ = 0;
00100         datalimited_ = 0;
00101         last_pkt_time_ = 0.0;
00102 }


Member Function Documentation

void Agent::addAgentTrace const char *  name  )  [protected, inherited]
 

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:

nsaddr_t& Agent::addr  )  [inline, inherited]
 

Definition at line 96 of file agent.h.

References ns_addr_t::addr_, Agent::here_, and nsaddr_t.

Referenced by LandmarkAgent::assign_lmaddress(), SSMSRMAgent::command(), IntTcpAgent::createTcpSession(), Agent::flushAVar(), LmsSender::handle_lms_pkt(), SSMSRMAgent::is_active(), QSNewRenoTcpAgent::recv(), TcpAsymSink::recv(), SRMAgent::recv(), SSMSRMAgent::recv(), QSAgent::recv(), MIPBSAgent::recv(), LmsAgent::recv(), HttpInvalAgent::recv(), CtrMcastEncap::recv(), SSMSRMAgent::recv_glb_sess(), SSMSRMAgent::recv_loc_sess(), SSMSRMAgent::recv_rep_sess(), SRMAgent::recv_sess(), TapAgent::recvpkt(), MIPMHAgent::reg(), MIPBSAgent::send_ads(), LmsSender::send_dmcast(), LmsReceiver::send_dmcast(), LmsAgent::send_downstream(), SSMSRMAgent::send_glb_sess(), LmsSender::send_lms_pkt(), SSMSRMAgent::send_loc_sess(), LmsReceiver::send_nak(), LmsReceiver::send_refresh(), SSMSRMAgent::send_rep_sess(), SRMAgent::send_sess(), MIPMHAgent::send_sols(), LmsSender::send_spm(), LmsAgent::send_upstream(), SRMAgent::sendmsg(), LmsSender::solicit_naks(), SRMAgent::start(), TcpAgent::trace_event(), TcpAgent::traceAll(), TcpAsymAgent::traceAll(), TcpAgent::traceVar(), TcpSessionAgent::traceVar(), and TcpAsymAgent::traceVar().

00096 { return here_.addr_; }

void TfrcAgent::advanceby int  delta  ) 
 

Definition at line 125 of file tfrc.cc.

References datalimited_, maxseq_, oldCode_, sendpkt(), seqno_, and start().

Referenced by command(), and sendmsg().

00126 {
00127         maxseq_ += delta;
00128         
00129         if (seqno_ == -1) {
00130                 // if no packets hve been sent so far, call start. 
00131                 start(); 
00132         } else if (datalimited_ && maxseq_ > seqno_) {
00133                 // We were data-limited - send a packet now!
00134                 // The old code always waited for a timer to expire!!
00135                 datalimited_ = 0;
00136                 if (!oldCode_) {
00137                         sendpkt();
00138                 }
00139         }
00140 } 

Here is the call graph for this function:

Packet * Agent::allocpkt int   )  const [protected, inherited]
 

Definition at line 517 of file agent.cc.

References Packet::allocdata(), and Agent::allocpkt().

00518 {
00519         Packet* p = allocpkt();
00520 
00521         if (n > 0)
00522                 p->allocdata(n);
00523 
00524         return(p);
00525 }

Here is the call graph for this function:

Packet * Agent::allocpkt  )  const [protected, inherited]
 

Definition at line 506 of file agent.cc.

References Packet::alloc(), and Agent::initpkt().

Referenced by TcpSink::ack(), QSTcpSink::ack(), Agent::allocpkt(), PingAgent::command(), MessageAgent::command(), mcastControlAgent::command(), LmsAgent::command(), LDPAgent::command(), LandmarkAgent::command(), IvsReceiver::command(), DSDV_Agent::command(), OmniMcastAgent::create_packet(), FloodingAgent::create_packet(), DiffusionAgent::create_packet(), SinkAgent::create_packet(), SensorQueryAgent::generate_query(), DSRAgent::getRouteForPacket(), LandmarkAgent::makeUpdate(), DSDV_Agent::makeUpdate(), TcpAgent::output(), VegasTcpAgent::output(), RFC793eduTcpAgent::output(), QSNewRenoTcpAgent::output(), IntTcpAgent::output(), AbsTcpAgent::output(), TCPTapAgent::processpkt(), AbsDelAckSink::recv(), AbsTcpSink::recv(), SAack_Agent::recv(), PingAgent::recv(), Encapsulator::recv(), TapAgent::recvpkt(), MIPMHAgent::reg(), DSRAgent::replyFromRouteCache(), DSRAgent::returnSrcRouteToRequestor(), HttpInvalAgent::send(), MIPBSAgent::send_ads(), SRMAgent::send_ctrl(), SSMSRMAgent::send_ctrl(), MFTPSndAgent::send_data(), GAFAgent::send_discovery(), LmsSender::send_dmcast(), LmsReceiver::send_dmcast(), SSMSRMAgent::send_glb_sess(), LmsSender::send_lms_pkt(), SSMSRMAgent::send_loc_sess(), MFTPRcvAgent::send_nak(), LmsReceiver::send_nak(), LmsReceiver::send_refresh(), SSMSRMAgent::send_rep_sess(), SRMAgent::send_sess(), MIPMHAgent::send_sols(), LmsSender::send_spm(), MFTPSndAgent::send_status_request(), RapAgent::SendAck(), UdpAgent::sendmsg(), SimpleTcpAgent::sendmsg(), SRMAgent::sendmsg(), SA_Agent::sendmsg(), RTPAgent::sendmsg(), PushbackAgent::sendMsg(), LmsSender::sendmsg(), FullTcpAgent::sendpacket(), BayFullTcpAgent::sendpacket(), RapAgent::SendPacket(), sendpkt(), TfrcSinkAgent::sendpkt(), SA_Agent::sendpkt(), rtProtoDV::sendpkt(), RTPAgent::sendpkt(), RTCPAgent::sendpkt(), RLM_Sender::sendpkt(), IvsSource::sendpkt(), IcmpAgent::sendredirect(), SA_Agent::sendreq(), DSRAgent::sendRouteShortening(), SA_Agent::sendteardown(), LmsSender::solicit_naks(), and AbsDelAckSink::timeout().

00507 {
00508         Packet* p = Packet::alloc();
00509         initpkt(p);
00510         return (p);
00511 }

Here is the call graph for this function:

void Agent::attachApp Application app  )  [virtual, inherited]
 

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 }

void Agent::close  )  [virtual, inherited]
 

Reimplemented in FullTcpAgent.

Definition at line 377 of file agent.cc.

Referenced by Agent::command().

00378 {
00379 }

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

Reimplemented from Agent.

Definition at line 142 of file tfrc.cc.

References advanceby(), Agent::command(), maxseq_, SndrType_, start(), and stop().

00143 {
00144         if (argc==2) {
00145                 // are we an infinite sender?
00146                 if ( (strcmp(argv[1],"start")==0) && (SndrType_ == 0)) {
00147                         start();
00148                         return TCL_OK;
00149                 }
00150                 if (strcmp(argv[1],"stop")==0) {
00151                         stop();
00152                         return TCL_OK;
00153                 }
00154         }
00155         if ((argc == 3) && (SndrType_ == 1)) {
00156                 // or do we need an FTP type app? 
00157         if (strcmp(argv[1], "advance") == 0) {
00158                 int newseq = atoi(argv[2]);
00159                 // THIS ISN"T USED.
00160                 // newseq: new sequence
00161                 // seqno_: next sequence to be sent
00162                 // maxseq_: max seq_  produced by app so far.
00163                 if (newseq > maxseq_)
00164                         advanceby(newseq - maxseq_);
00165                 return (TCL_OK);
00166         }
00167         if (strcmp(argv[1], "advanceby") == 0) {
00168                 advanceby(atoi(argv[2]));
00169                 return (TCL_OK);
00170                 }
00171         }
00172         return (Agent::command(argc, argv));
00173 }

Here is the call graph for this function:

void Agent::connect nsaddr_t  dst  )  [virtual, inherited]
 

Definition at line 389 of file agent.cc.

Referenced by Agent::command().

00390 {
00391 /*
00392         dst_ = dst;
00393 */
00394 }

nsaddr_t& Agent::daddr  )  [inline, inherited]
 

Definition at line 98 of file agent.h.

References ns_addr_t::addr_, Agent::dst_, and nsaddr_t.

Referenced by IntTcpAgent::createTcpSession(), DSDV_Agent::lost_link(), TcpAsymSink::recv(), CtrMcastEncap::recv(), PingResponder::reflect(), IntTcpAgent::rxmit_last(), LmsSender::send_dmcast(), LmsSender::send_lms_pkt(), IntTcpAgent::send_one(), rtProtoDV::sendpkt(), LmsSender::solicit_naks(), TcpAgent::trace_event(), TcpAgent::traceAll(), TcpAsymAgent::traceAll(), TcpAgent::traceVar(), TcpSessionAgent::traceVar(), and TcpAsymAgent::traceVar().

00098 { return dst_.addr_; }

void NsObject::debug const char *  fmt,
... 
[virtual, inherited]
 

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 }

void TfrcAgent::decrease_rate  ) 
 

Definition at line 433 of file tfrc.cc.

References Scheduler::clock(), heavyrounds_, Scheduler::instance(), last_change_, maxHeavyRounds_, maxrate_, rate_, rate_change_, RATE_DECREASE, rcvrate, rtt_, and Agent::size_.

Referenced by recv().

00434 {
00435         double now = Scheduler::instance().clock(); 
00436         rate_ = rcvrate;
00437         double maximumrate = (maxrate_>size_/rtt_)?maxrate_:size_/rtt_ ;
00438 
00439         // Allow sending rate to be greater than maximumrate
00440         //   (which is by default twice the receiving rate)
00441         //   for at most maxHeavyRounds_ rounds.
00442         if (rate_ > maximumrate)
00443                 heavyrounds_++;
00444         else
00445                 heavyrounds_ = 0;
00446         if (heavyrounds_ > maxHeavyRounds_) {
00447                 rate_ = (rate_ > maximumrate)?maximumrate:rate_ ;
00448         }
00449 
00450         rate_change_ = RATE_DECREASE;
00451         last_change_ = now;
00452 }

Here is the call graph for this function:

int Agent::delay_bind_dispatch const char *  varName,
const char *  localName,
TclObject tracer
[protected, virtual, inherited]
 

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:

void Agent::delay_bind_init_all  )  [protected, virtual, inherited]
 

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:

void Agent::deleteAgentTrace  )  [protected, inherited]
 

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:

nsaddr_t& Agent::dport  )  [inline, inherited]
 

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().

00099 { return dst_.port_; }

void Connector::drop Packet p,
const char *  s
[protected, virtual, inherited]
 

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:

void Connector::drop Packet p  )  [virtual, inherited]
 

Definition at line 106 of file connector.cc.

References Connector::drop_, Packet::free(), and NsObject::recv().

Referenced by DSRAgent::acceptRouteReply(), ARPTable::arpresolve(), JoBS::dropFront(), Vq::dropPacketForECN(), DSRAgent::dropSendBuff(), JoBS::dropTail(), dsREDQueue::edrop(), Vq::enque(), SRR::enque(), SimpleIntServ::enque(), SFQ::enque(), rtqueue::enque(), RIOQueue::enque(), REMQueue::enque(), REDQueue::enque(), RedPDQueue::enque(), PIQueue::enque(), Marker::enque(), GK::enque(), dsREDQueue::enque(), DRR::enque(), DropTail::enque(), Demarker::enque(), aodv_rqueue::enque(), toraAgent::forward(), AODV::forward(), LandmarkAgent::ForwardPacket(), DSDV_Agent::forwardPacket(), DSRAgent::getRouteForPacket(), Snoop::handle(), DSRAgent::handleFlowForwarding(), DSRAgent::handleForwarding(), DSDV_Agent::lost_link(), TCPTapAgent::processpkt(), CMUPriQueue::prq_enqueue(), rtqueue::purge(), imepAgent::purgeReXmitQ(), SessionTTLChecker::recv(), TTLChecker::recv(), toraAgent::recv(), FullTcpAgent::recv(), BayFullTcpAgent::recv(), TBF::recv(), SatLL::recv(), LL::recv(), GAFPartner::recv(), FloodAgent::recv(), Filter::recv(), DynamicLink::recv(), DSDV_Agent::recv(), AODV::recv(), AODV::recvError(), PriQueue::recvHighPriority(), AODV::recvReply(), toraAgent::reset(), Queue< T >::reset(), LinkDelay::reset(), AODV::rt_ll_failed(), AODV::rt_purge(), AODV::rt_resolve(), toraAgent::rtRoutePacket(), TCPTapAgent::sendpkt(), TapAgent::sendpkt(), IPTapAgent::sendpkt(), AODV::sendRequest(), SatLL::sendUp(), LL::sendUp(), PriQueue::Terminate(), DSRAgent::Terminate(), CMUPriQueue::Terminate(), ARPTable::Terminate(), and DSRAgent::undeliverablePkt().

00107 {
00108         if (drop_ != 0)
00109                 drop_->recv(p);
00110         else
00111                 Packet::free(p);
00112 }

Here is the call graph for this function:

void Agent::dumpTracedVars  )  [protected, inherited]
 

packet_t Agent::get_pkttype  )  [inline, inherited]
 

Definition at line 101 of file agent.h.

References packet_t, and Agent::type_.

Referenced by CBR_Traffic::init().

00101 { return type_; }

void NsObject::handle Event  )  [protected, virtual, inherited]
 

Implements Handler.

Reimplemented in LinkDelay, LL, AckRecons, and Snoop.

Definition at line 91 of file object.cc.

References NsObject::recv().

00092 {
00093         recv((Packet*)e);
00094 }

Here is the call graph for this function:

void Agent::idle  )  [protected, virtual, inherited]
 

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().

00364 {
00365         if (app_)
00366                 app_->resume();
00367 }

Here is the call graph for this function:

void TfrcAgent::increase_rate double  p  ) 
 

Definition at line 416 of file tfrc.cc.

References Scheduler::clock(), CONG_AVOID, heavyrounds_, Scheduler::instance(), last_change_, maxrate_, rate_, rate_change_, rcvrate, rtt_, and Agent::size_.

Referenced by recv().

00417 {               
00418         double now = Scheduler::instance().clock();
00419 
00420         double mult = (now-last_change_)/rtt_ ;
00421         if (mult > 2) mult = 2 ;
00422 
00423         rate_ = rate_ + (size_/rtt_)*mult ;
00424         double maximumrate = (maxrate_>size_/rtt_)?maxrate_:size_/rtt_ ;
00425         maximumrate = (maximumrate>rcvrate)?rcvrate:maximumrate;
00426         rate_ = (rate_ > maximumrate)?maximumrate:rate_ ;
00427         
00428         rate_change_ = CONG_AVOID;  
00429         last_change_ = now;
00430         heavyrounds_ = 0;
00431 }       

Here is the call graph for this function:

void Agent::initpkt Packet  )  const [protected, inherited]
 

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:

void Agent::insertOldValue TracedVar *  v,
const char *  value
[protected, inherited]
 

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 }

int NsObject::isdebug  )  const [inline, inherited]
 

Definition at line 61 of file object.h.

References NsObject::debug_.

00061 { return debug_; }

void Agent::listen  )  [virtual, inherited]
 

Reimplemented in BayFullTcpAgent, RapAgent, and FullTcpAgent.

Definition at line 381 of file agent.cc.

Referenced by Agent::command().

00382 {
00383 }

OldValue * Agent::lookupOldValue TracedVar *  v  )  [protected, inherited]
 

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 }

void Agent::monitorAgentTrace  )  [protected, inherited]
 

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:

void TfrcAgent::nextpkt  ) 
 

Definition at line 215 of file tfrc.cc.

References ca_, datalimited_, delta_, maxseq_, oldrate_, overhead_, rate_, rate_change_, TimerHandler::resched(), rttcur_, send_timer_, sendpkt(), seqno_, Agent::size_, SLOW_START, SMALLFLOAT, SndrType_, sqrtrtt_, and Random::uniform().

Referenced by TfrcSendTimer::expire(), recv(), and reduce_rate_on_no_feedback().

00216 {
00217         double next = -1;
00218         double xrate = -1; 
00219 
00220         if (SndrType_ == 0) {
00221                 sendpkt();
00222         }
00223         else {
00224                 if (maxseq_ > seqno_) {
00225                         sendpkt();
00226                 } else
00227                         datalimited_ = 1;
00228         }
00229         
00230         // during slow start and congestion avoidance, we increase rate
00231         // slowly - by amount delta per packet 
00232         if ((rate_change_ == SLOW_START) && (oldrate_+SMALLFLOAT< rate_)) {
00233                 oldrate_ = oldrate_ + delta_;
00234                 xrate = oldrate_;
00235         }
00236         else {
00237                 if (ca_) 
00238                         xrate = rate_ * sqrtrtt_/sqrt(rttcur_);
00239                 else
00240                         xrate = rate_;
00241         }
00242         if (xrate > SMALLFLOAT) {
00243                 next = size_/xrate;
00244                 //
00245                 // randomize between next*(1 +/- woverhead_) 
00246                 //
00247                 next = next*(2*overhead_*Random::uniform()-overhead_+1);
00248                 if (next > SMALLFLOAT)
00249                         send_timer_.resched(next);
00250         }
00251 }

Here is the call graph for this function:

nsaddr_t& Agent::port  )  [inline, inherited]
 

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().

00097 { return here_.port_; }

void NsObject::recv Packet p,
const char *  s
[virtual, inherited]
 

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:

void TfrcAgent::recv Packet ,
Handler
[virtual]
 

Reimplemented from Agent.

Definition at line 289 of file tfrc.cc.

References hdr_tfrc_ack::access(), bval_, Scheduler::clock(), conservative_, NsObject::debug_, decrease_rate(), first_pkt_rcvd, hdr_tfrc_ack::flost, Packet::free(), increase_rate(), Scheduler::instance(), hdr_tfrc_ack::losses, maxrate_, nextpkt(), NoFeedbacktimer_, oldrate_, OUT_OF_SLOW_START, p_to_b(), printStatus_, rate_, rate_change_, hdr_tfrc_ack::rate_since_last_report, rcvrate, TimerHandler::resched(), round_id, rtt_, scmult_, Agent::size_, SLOW_START, slowstart(), ss_maxrate_, hdr_tfrc_ack::timestamp_echo, ts, tzero_, update_rtt(), and UrgentFlag.

00290 {
00291         double now = Scheduler::instance().clock();
00292         hdr_tfrc_ack *nck = hdr_tfrc_ack::access(pkt);
00293         double ts = nck->timestamp_echo;
00294         double rate_since_last_report = nck->rate_since_last_report;
00295         // double NumFeedback_ = nck->NumFeedback_;
00296         double flost = nck->flost; 
00297         int losses = nck->losses;
00298 
00299         round_id ++ ;
00300         UrgentFlag = 0;
00301 
00302         if (rate_since_last_report > 0) {
00303                 /* compute the max rate for slow-start as two times rcv rate */ 
00304                 ss_maxrate_ = 2*rate_since_last_report*size_;
00305                 if (conservative_) { 
00306                         if (losses >= 1) {
00307                                 /* there was a loss in the most recent RTT */
00308                                 if (debug_) printf("time: %5.2f losses: %d rate %5.2f\n", 
00309                                   now, losses, rate_since_last_report);
00310                                 maxrate_ = rate_since_last_report*size_;
00311                         } else { 
00312                                 /* there was no loss in the most recent RTT */
00313                                 maxrate_ = scmult_*rate_since_last_report*size_;
00314                         }
00315                         if (debug_) printf("time: %5.2f losses: %d rate %5.2f maxrate: %5.2f\n", now, losses, rate_since_last_report, maxrate_);
00316                 } else 
00317                         maxrate_ = 2*rate_since_last_report*size_;
00318         } else {
00319                 ss_maxrate_ = 0;
00320                 maxrate_ = 0; 
00321         }
00322 
00323                 
00324         /* update the round trip time */
00325         update_rtt (ts, now);
00326 
00327         /* .. and estimate of fair rate */
00328         rcvrate = p_to_b(flost, rtt_, tzero_, size_, bval_);
00329 
00330         /* if we get no more feedback for some time, cut rate in half */
00331         double t = 2*rtt_ ; 
00332         if (t < 2*size_/rate_) 
00333                 t = 2*size_/rate_ ; 
00334         NoFeedbacktimer_.resched(t);
00335         
00336         /* if we are in slow start and we just saw a loss */
00337         /* then come out of slow start */
00338 
00339         if (first_pkt_rcvd == 0) {
00340                 first_pkt_rcvd = 1 ; 
00341                 slowstart ();
00342                 nextpkt();
00343         }
00344         else {
00345                 if (rate_change_ == SLOW_START) {
00346                         if (flost > 0) {
00347                                 rate_change_ = OUT_OF_SLOW_START;
00348                                 oldrate_ = rate_ = rcvrate;
00349                         }
00350                         else {
00351                                 slowstart ();
00352                                 nextpkt();
00353                         }
00354                 }
00355                 else {
00356                         if (rcvrate>rate_) 
00357                                 increase_rate(flost);
00358                         else 
00359                                 decrease_rate ();               
00360                 }
00361         }
00362         if (printStatus_) {
00363                 printf("time: %5.2f rate: %5.2f\n", now, rate_);
00364                 double packetrate = rate_ * rtt_ / size_;
00365                 printf("time: %5.2f packetrate: %5.2f\n", now, packetrate);
00366         }
00367         Packet::free(pkt);
00368 }

Here is the call graph for this function:

void Agent::recvBytes int  bytes  )  [protected, virtual, inherited]
 

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().

00355 {
00356         if (app_)
00357                 app_->recv(nbytes);     
00358 }

Here is the call graph for this function:

void Agent::recvOnly Packet  )  [inline, virtual, inherited]
 

Reimplemented from NsObject.

Definition at line 78 of file agent.h.

00078 {};

void TfrcAgent::reduce_rate_on_no_feedback  ) 
 

Definition at line 478 of file tfrc.cc.

References datalimited_, nextpkt(), NoFeedbacktimer_, oldCode_, rate_, rate_change_, RATE_DECREASE, TimerHandler::resched(), round_id, rtt_, Agent::size_, and UrgentFlag.

Referenced by TfrcNoFeedbackTimer::expire().

00479 {
00480         rate_change_ = RATE_DECREASE; 
00481         if (oldCode_ || !datalimited_ || rate_ > 4.0 * size_/rtt_ ) {
00482                 // if we are not datalimited,
00483                 //   or the current rate is greater than four pkts per RTT
00484                 rate_*=0.5;
00485         }
00486         UrgentFlag = 1;
00487         round_id ++ ;
00488         double t = 2*rtt_ ; 
00489         if (t < 2*size_/rate_) 
00490                 t = 2*size_/rate_ ; 
00491         NoFeedbacktimer_.resched(t);
00492         nextpkt();
00493 }

Here is the call graph for this function:

void NsObject::reset  )  [protected, virtual, inherited]
 

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, and Queue< T >.

Definition at line 70 of file object.cc.

Referenced by NsObject::command().

00071 {
00072 }

virtual void Agent::send int  nbytes  )  [inline, virtual, inherited]
 

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:

virtual void Agent::send int  sz,
AppData data
[inline, virtual, inherited]
 

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:

void Agent::send Packet p,
Handler h
[inline, inherited]
 

Reimplemented from Connector.

Definition at line 80 of file agent.h.

References NsObject::recv(), and Connector::target_.

Referenced by TcpSink::ack(), QSTcpSink::ack(), SinkAgent::bcast_interest(), PingAgent::command(), MessageAgent::command(), mcastControlAgent::command(), LmsAgent::command(), LDPAgent::command(), SinkAgent::data_ready(), DSDV_Agent::forwardPacket(), FullTcpAgent::foutput(), TcpAgent::output(), VegasTcpAgent::output(), RFC793eduTcpAgent::output(), QSNewRenoTcpAgent::output(), IntTcpAgent::output(), BayFullTcpAgent::output(), AbsTcpAgent::output(), AbsDelAckSink::recv(), AbsTcpSink::recv(), SRAgent::recv(), PingAgent::recv(), NatAgent::recv(), MIPBSAgent::recv(), Encapsulator::recv(), Decapsulator::recv(), MIPMHAgent::reg(), HttpInvalAgent::send(), GAFAgent::send_discovery(), RapAgent::SendAck(), SimpleTcpAgent::sendmsg(), PushbackAgent::sendMsg(), FullTcpAgent::sendpacket(), BayFullTcpAgent::sendpacket(), RapAgent::SendPacket(), sendpkt(), TfrcSinkAgent::sendpkt(), SinkAgent::sendpkt(), IcmpAgent::sendredirect(), and AbsDelAckSink::timeout().

00080 { target_->recv(p, h); }

Here is the call graph for this function:

void Agent::sendmsg int  sz,
AppData ,
const char *  flags = 0
[virtual, inherited]
 

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:

void TfrcAgent::sendmsg int  nbytes,
const char *  flags = 0
[virtual]
 

Reimplemented from Agent.

Definition at line 111 of file tfrc.cc.

References advanceby(), MAXSEQ, maxseq_, and Agent::size_.

00112 {
00113         if (nbytes == -1 && maxseq_ < MAXSEQ)
00114                 advanceby(MAXSEQ - maxseq_);
00115         else if (size_ > 0) {
00116                 int npkts = int(nbytes/size_);
00117                 npkts += (nbytes%size_ ? 1 : 0);
00118                 //if (debug_) printf("nbytes: %d size: %d npkts: %d\n",
00119                 //    nbytes, size_, npkts);
00120                 advanceby(npkts);
00121         }
00122 }

Here is the call graph for this function:

void TfrcAgent::sendpkt  ) 
 

Definition at line 454 of file tfrc.cc.

References hdr_flags::access(), hdr_tfrc::access(), active_, Agent::allocpkt(), Scheduler::clock(), ecn_, hdr_flags::ect(), Scheduler::instance(), last_pkt_time_, ndatapack_, hdr_tfrc::psize, hdr_tfrc::rate, rate_, round_id, hdr_tfrc::round_id, hdr_tfrc::rtt, rtt_, Agent::send(), hdr_tfrc::seqno, seqno_, Agent::size_, hdr_tfrc::timestamp, hdr_tfrc::tzero, tzero_, UrgentFlag, and hdr_tfrc::UrgentFlag.

Referenced by advanceby(), nextpkt(), and start().

00455 {
00456         if (active_) {
00457                 Packet* p = allocpkt();
00458                 hdr_tfrc *tfrch = hdr_tfrc::access(p);
00459                 hdr_flags* hf = hdr_flags::access(p);
00460                 if (ecn_) {
00461                         hf->ect() = 1;  // ECN-capable transport
00462                 }
00463                 tfrch->seqno=seqno_++;
00464                 tfrch->timestamp=Scheduler::instance().clock();
00465                 tfrch->rtt=rtt_;
00466                 tfrch->tzero=tzero_;
00467                 tfrch->rate=rate_;
00468                 tfrch->psize=size_;
00469                 tfrch->UrgentFlag=UrgentFlag;
00470                 tfrch->round_id=round_id;
00471                 ndatapack_++;
00472                 double now = Scheduler::instance().clock(); 
00473                 last_pkt_time_ = now;
00474                 send(p, 0);
00475         }
00476 }

Here is the call graph for this function:

virtual void Agent::sendto int  nbytes,
const char *  flags,
nsaddr_t  dst
[virtual, inherited]
 

void Agent::sendto int  sz,
AppData ,
const char *  flags,
nsaddr_t  dst
[virtual, inherited]
 

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:

void Agent::set_pkttype packet_t  pkttype  )  [inline, inherited]
 

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; }

virtual int& Agent::size  )  [inline, virtual, inherited]
 

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_; }

void TfrcAgent::slowstart  ) 
 

Definition at line 370 of file tfrc.cc.

References Scheduler::clock(), delta_, Scheduler::instance(), last_change_, oldrate_, rate_, rtt_, Agent::size_, SMALLFLOAT, ss_maxrate_, and ssmult_.

Referenced by recv().

00371 {
00372         double now = Scheduler::instance().clock(); 
00373 
00374         if (rate_+SMALLFLOAT< size_/rtt_ ) {
00375                 /* if this is the first report, change rate to 1 per rtt */
00376                 /* compute delta so rate increases slowly to new value   */
00377                 oldrate_ = rate_;
00378                 rate_ = size_/rtt_;
00379                 delta_ = (rate_ - oldrate_)/(rate_*rtt_/size_);
00380                 last_change_ = now;
00381         } else {
00382                 /* else multiply the rate by ssmult_, and compute delta, */
00383                 /*  so that the rate increases slowly to new value       */
00384                 if (ss_maxrate_ > 0) {
00385                         if (ssmult_*rate_ < ss_maxrate_ && now - last_change_ > rtt_) {
00386                                 rate_ = ssmult_*rate_; 
00387                                 delta_ = (rate_ - oldrate_)/(rate_*rtt_/size_);
00388                                 last_change_=now;
00389                         } else {
00390                                 if ( (oldrate_ > ss_maxrate_) || (rate_ > ss_maxrate_)) {
00391                                         if (oldrate_ > ss_maxrate_) {
00392                                                 delta_ = 0; 
00393                                                 rate_ = oldrate_ = 0.5*ss_maxrate_;
00394                                                 last_change_ = now;
00395                                         } else {
00396                                                 rate_ = ss_maxrate_; 
00397                                                 delta_ = (rate_ - oldrate_)/(rate_*rtt_/size_);
00398                                                 last_change_ = now; 
00399                                         }
00400                                 } else {
00401                                         if (now - last_change_ > rtt_) {
00402                                                 rate_ = ss_maxrate_;
00403                                                 delta_ = (rate_ - oldrate_)/(rate_*rtt_/size_);
00404                                                 last_change_=now;
00405                                         }
00406                                 }
00407                         }
00408                 } else {
00409                         rate_ = ssmult_*rate_; 
00410                         delta_ = (rate_ - oldrate_)/(rate_*rtt_/size_);
00411                         last_change_=now;
00412                 }
00413         }
00414 }

Here is the call graph for this function:

void TfrcAgent::start  ) 
 

Definition at line 175 of file tfrc.cc.

References active_, delta_, first_pkt_rcvd, heavyrounds_, InitRate_, last_change_, maxrate_, ndatapack_, NoFeedbacktimer_, oldrate_, rate_, rate_change_, rcvrate, TimerHandler::resched(), round_id, rtt_, rttcur_, rttvar_init_, rtxcur_init_, send_timer_, sendpkt(), seqno_, Agent::size_, SLOW_START, sqrtrtt_, srtt_init_, ss_maxrate_, t_rttvar_, T_RTTVAR_BITS, t_rtxcur_, t_srtt_, T_SRTT_BITS, tcp_tick_, tzero_, and UrgentFlag.

Referenced by advanceby(), and command().

00176 {
00177         seqno_=0;                               
00178         rate_ = InitRate_;
00179         delta_ = 0;
00180         oldrate_ = rate_;  
00181         rate_change_ = SLOW_START;
00182         UrgentFlag = 1;
00183         rtt_=0;  
00184         sqrtrtt_=1;
00185         rttcur_=1;
00186         tzero_ = 0;
00187         last_change_=0;
00188         maxrate_ = 0; 
00189         ss_maxrate_ = 0;
00190         ndatapack_=0;
00191         active_ = 1; 
00192         round_id = 0;
00193         heavyrounds_ = 0;
00194         t_srtt_ = int(srtt_init_/tcp_tick_) << T_SRTT_BITS;
00195         t_rttvar_ = int(rttvar_init_/tcp_tick_) << T_RTTVAR_BITS;
00196         t_rtxcur_ = rtxcur_init_;
00197         rcvrate = 0 ;
00198 
00199         first_pkt_rcvd = 0 ;
00200         // send the first packet
00201         sendpkt();
00202         // ... at initial rate
00203         send_timer_.resched(size_/rate_);
00204         // ... and start timer so we can cut rate 
00205         // in half if we do not get feedback
00206         NoFeedbacktimer_.resched(2*size_/rate_); 
00207 }

Here is the call graph for this function:

void TfrcAgent::stop  ) 
 

Definition at line 209 of file tfrc.cc.

References active_, TimerHandler::force_cancel(), and send_timer_.

Referenced by command().

00210 {
00211         active_ = 0;
00212         send_timer_.force_cancel();
00213 }

Here is the call graph for this function:

NsObject* Connector::target  )  [inline, inherited]
 

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_; }

void Agent::timeout int  tno  )  [virtual, inherited]
 

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().

00348 {
00349 }

void Agent::trace TracedVar *  v  )  [protected, virtual, inherited]
 

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:

virtual void Agent::trace_event char *  eventtype  )  [inline, protected, virtual, inherited]
 

Reimplemented in TcpAgent.

Definition at line 146 of file agent.h.

00146 {}

void TfrcAgent::update_rtt double  tao,
double  now
 

Definition at line 253 of file tfrc.cc.

References df_, rtt_, rttcur_, rttvar_exp_, sqrtrtt_, t_rtt_, t_rttvar_, T_RTTVAR_BITS, t_rtxcur_, t_srtt_, T_SRTT_BITS, tcp_tick_, and tzero_.

Referenced by recv().

00254 {
00255         /* the TCP update */
00256         t_rtt_ = int((now-tao) /tcp_tick_ + 0.5);
00257         if (t_rtt_==0) t_rtt_=1;
00258         if (t_srtt_ != 0) {
00259                 register short delta;
00260                 delta = t_rtt_ - (t_srtt_ >> T_SRTT_BITS);    
00261                 if ((t_srtt_ += delta) <= 0)    
00262                         t_srtt_ = 1;
00263                 if (delta < 0)
00264                         delta = -delta;
00265                 delta -= (t_rttvar_ >> T_RTTVAR_BITS);
00266                 if ((t_rttvar_ += delta) <= 0)  
00267                         t_rttvar_ = 1;
00268         } else {
00269                 t_srtt_ = t_rtt_ << T_SRTT_BITS;                
00270                 t_rttvar_ = t_rtt_ << (T_RTTVAR_BITS-1);        
00271         }
00272         t_rtxcur_ = (((t_rttvar_ << (rttvar_exp_ + (T_SRTT_BITS - T_RTTVAR_BITS))) + t_srtt_)  >> T_SRTT_BITS ) * tcp_tick_;
00273         tzero_=t_rtxcur_;
00274 
00275         /* fine grained RTT estimate for use in the equation */
00276         if (rtt_ > 0) {
00277                 rtt_ = df_*rtt_ + ((1-df_)*(now - tao));
00278                 sqrtrtt_ = df_*sqrtrtt_ + ((1-df_)*sqrt(now - tao));
00279         } else {
00280                 rtt_ = now - tao;
00281                 sqrtrtt_ = sqrt(now - tao);
00282         }
00283         rttcur_ = now - tao;
00284 }


Friends And Related Function Documentation

friend class TfrcNoFeedbackTimer [friend]
 

Definition at line 121 of file tfrc.h.

friend class TfrcSendTimer [friend]
 

Definition at line 120 of file tfrc.h.


Member Data Documentation

int TfrcAgent::active_ [protected]
 

Definition at line 191 of file tfrc.h.

Referenced by sendpkt(), start(), and stop().

Application* Agent::app_ [protected, inherited]
 

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().

int TfrcAgent::bval_ [protected]
 

Definition at line 187 of file tfrc.h.

Referenced by recv(), and TfrcAgent().

int TfrcAgent::ca_ [protected]
 

Definition at line 167 of file tfrc.h.

Referenced by nextpkt(), and TfrcAgent().

Tcl_Channel Agent::channel_ [protected, inherited]
 

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().

int TfrcAgent::conservative_ [protected]
 

Definition at line 197 of file tfrc.h.

Referenced by recv(), and TfrcAgent().

int TfrcAgent::datalimited_ [protected]
 

Definition at line 154 of file tfrc.h.

Referenced by advanceby(), nextpkt(), reduce_rate_on_no_feedback(), and TfrcAgent().

int NsObject::debug_ [protected, inherited]
 

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(), recv(), PushbackQueue::reportDrop(), and REDQueue::reset().

int Agent::defttl_ [protected, inherited]
 

Definition at line 121 of file agent.h.

Referenced by Agent::delay_bind_dispatch(), and Agent::initpkt().

double TfrcAgent::delta_ [protected]
 

Definition at line 146 of file tfrc.h.

Referenced by nextpkt(), slowstart(), and start().

double TfrcAgent::df_ [protected]
 

Definition at line 183 of file tfrc.h.

Referenced by TfrcAgent(), and update_rtt().

NsObject* Connector::drop_ [protected, inherited]
 

Definition at line 57 of file connector.h.

Referenced by Connector::command(), Connector::drop(), and ErrorModel::recv().

ns_addr_t Agent::dst_ [protected, inherited]
 

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().

int TfrcAgent::ecn_ [protected]
 

Definition at line 194 of file tfrc.h.

Referenced by sendpkt(), and TfrcAgent().

EventTrace* Agent::et_ [protected, inherited]
 

Definition at line 145 of file agent.h.

Referenced by TcpAgent::command(), and TcpAgent::trace_event().

int Agent::fid_ [protected, inherited]
 

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().

int TfrcAgent::first_pkt_rcvd [protected]
 

Definition at line 193 of file tfrc.h.

Referenced by recv(), and start().

int Agent::flags_ [protected, inherited]
 

Reimplemented in BayFullTcpAgent, RapAgent, and FullTcpAgent.

Definition at line 120 of file agent.h.

Referenced by Agent::delay_bind_dispatch().

int TfrcAgent::heavyrounds_ [protected]
 

Definition at line 200 of file tfrc.h.

Referenced by decrease_rate(), increase_rate(), and start().

ns_addr_t Agent::here_ [protected, inherited]
 

Definition at line 114 of file agent.h.

Referenced by Agent::addAgentTrace(), Agent::addr(), SinkAgent::bcast_interest(), SinkAgent::data_ready(), OmniMcastAgent::DataForSink(), FloodingAgent::DataForSink(), DiffusionAgent::DataForSink(), Agent::delay_bind_dispatch(), Agent::deleteAgentTrace(), DiffusionProb::ForwardData(), DiffusionProb::ForwardTxFailed(), DiffusionRate::FwdOriginal(), DiffusionProb::FwdPosReinf(), DiffusionRate::FwdSubsample(), OmniMcastAgent::GodForwardData(), Agent::initpkt(), OmniMcastAgent::MACprepare(), FloodingAgent::MACprepare(), DiffusionAgent::MACprepare(), Agent::monitorAgentTrace(), Agent::port(), OmniMcastAgent::prepare_message(), FloodingAgent::prepare_message(), DiffusionAgent::prepare_message(), SSMSRMAgent::recv(), PingAgent::recv(), NatAgent::recv(), DumbAgent::recv(), SinkAgent::sendpkt(), SinkAgent::set_addr(), SinkAgent::Terminate(), and Agent::trace().

int TfrcAgent::InitRate_ [protected]
 

Definition at line 182 of file tfrc.h.

Referenced by start(), and TfrcAgent().

double TfrcAgent::last_change_ [protected]
 

Definition at line 184 of file tfrc.h.

Referenced by decrease_rate(), increase_rate(), slowstart(), and start().

double TfrcAgent::last_pkt_time_ [protected]
 

Definition at line 158 of file tfrc.h.

Referenced by sendpkt(), and TfrcAgent().

int TfrcAgent::maxHeavyRounds_ [protected]
 

Definition at line 202 of file tfrc.h.

Referenced by decrease_rate(), and TfrcAgent().

double TfrcAgent::maxrate_ [protected]
 

Definition at line 150 of file tfrc.h.

Referenced by decrease_rate(), increase_rate(), recv(), and start().

int TfrcAgent::maxseq_ [protected]
 

Definition at line 141 of file tfrc.h.

Referenced by advanceby(), command(), nextpkt(), sendmsg(), and TfrcAgent().

TracedInt TfrcAgent::ndatapack_ [protected]
 

Definition at line 189 of file tfrc.h.

Referenced by sendpkt(), start(), and TfrcAgent().

TfrcNoFeedbackTimer TfrcAgent::NoFeedbacktimer_ [protected]
 

Definition at line 139 of file tfrc.h.

Referenced by recv(), reduce_rate_on_no_feedback(), and start().

int TfrcAgent::oldCode_ [protected]
 

Definition at line 156 of file tfrc.h.

Referenced by advanceby(), reduce_rate_on_no_feedback(), and TfrcAgent().

double TfrcAgent::oldrate_ [protected]
 

Definition at line 145 of file tfrc.h.

Referenced by nextpkt(), recv(), slowstart(), and start().

OldValue* Agent::oldValueList_ [protected, inherited]
 

Definition at line 132 of file agent.h.

Referenced by Agent::insertOldValue(), Agent::lookupOldValue(), and Agent::~Agent().

double TfrcAgent::overhead_ [protected]
 

Definition at line 188 of file tfrc.h.

Referenced by nextpkt(), and TfrcAgent().

int TfrcAgent::printStatus_ [protected]
 

Definition at line 153 of file tfrc.h.

Referenced by recv(), and TfrcAgent().

int Agent::prio_ [protected, inherited]
 

Definition at line 119 of file agent.h.

Referenced by Agent::delay_bind_dispatch(), and Agent::initpkt().

int TfrcAgent::psize_ [protected]
 

Definition at line 143 of file tfrc.h.

double TfrcAgent::rate_ [protected]
 

Definition at line 144 of file tfrc.h.

Referenced by decrease_rate(), increase_rate(), nextpkt(), recv(), reduce_rate_on_no_feedback(), sendpkt(), slowstart(), start(), and TfrcAgent().

int TfrcAgent::rate_change_ [protected]
 

Definition at line 147 of file tfrc.h.

Referenced by decrease_rate(), increase_rate(), nextpkt(), recv(), reduce_rate_on_no_feedback(), and start().

double TfrcAgent::rcvrate [protected]
 

Definition at line 148 of file tfrc.h.

Referenced by decrease_rate(), increase_rate(), recv(), and start().

int TfrcAgent::round_id [protected]
 

Definition at line 192 of file tfrc.h.

Referenced by recv(), reduce_rate_on_no_feedback(), sendpkt(), and start().

double TfrcAgent::rtt_ [protected]
 

Definition at line 161 of file tfrc.h.

Referenced by decrease_rate(), increase_rate(), recv(), reduce_rate_on_no_feedback(), sendpkt(), slowstart(), start(), and update_rtt().

double TfrcAgent::rttcur_ [protected]
 

Definition at line 162 of file tfrc.h.

Referenced by nextpkt(), start(), and update_rtt().

double TfrcAgent::rttvar_ [protected]
 

Definition at line 163 of file tfrc.h.

int TfrcAgent::rttvar_exp_ [protected]
 

Definition at line 173 of file tfrc.h.

Referenced by TfrcAgent(), and update_rtt().

int TfrcAgent::rttvar_init_ [protected]
 

Definition at line 179 of file tfrc.h.

Referenced by start(), and TfrcAgent().

double TfrcAgent::rtxcur_init_ [protected]
 

Definition at line 180 of file tfrc.h.

Referenced by start(), and TfrcAgent().

double TfrcAgent::scmult_ [protected]
 

Definition at line 199 of file tfrc.h.

Referenced by recv(), and TfrcAgent().

TfrcSendTimer TfrcAgent::send_timer_ [protected]
 

Definition at line 138 of file tfrc.h.

Referenced by nextpkt(), start(), and stop().

int TfrcAgent::seqno_ [protected]
 

Definition at line 142 of file tfrc.h.

Referenced by advanceby(), nextpkt(), sendpkt(), start(), and TfrcAgent().

int Agent::size_ [protected, inherited]
 

Reimplemented in SA_Agent, and AckRecons.

Definition at line 116 of file agent.h.

Referenced by AbsDelAckSink::AbsDelAckSink(), AbsTcpAgent::AbsTcpAgent(), AbsTcpRenoAckAgent::AbsTcpRenoAckAgent(), AbsTcpRenoDelAckAgent::AbsTcpRenoDelAckAgent(), AbsTcpSink::AbsTcpSink(), AbsTcpTahoeAckAgent::AbsTcpTahoeAckAgent(), AbsTcpTahoeDelAckAgent::AbsTcpTahoeDelAckAgent(), RTCPAgent::command(), LDPAgent::command(), SinkAgent::command(), IntTcpAgent::createTcpSession(), decrease_rate(), TcpAgent::delay_bind_dispatch(), TcpSink::delay_bind_dispatch(), FullTcpAgent::foutput(), DSRAgent::getRouteForPacket(), increase_rate(), TcpAgent::initial_window(), Agent::initpkt(), RapAgent::IpgTimeout(), IvsReceiver::IvsReceiver(), LmsAgent::LmsAgent(), LmsReceiver::LmsReceiver(), mcastControlAgent::mcastControlAgent(), MessageAgent::MessageAgent(), MIPBSAgent::MIPBSAgent(), MIPMHAgent::MIPMHAgent(), nextpkt(), IntTcpAgent::opencwnd(), PingAgent::PingAgent(), RapAgent::RapAgent(), recv(), TcpSessionAgent::recv(), NewRenoTcpAgent::recv(), reduce_rate_on_no_feedback(), RLM_Sender::RLM_Sender(), RTCPAgent::RTCPAgent(), RTPAgent::RTPAgent(), IntTcpAgent::rxmit_last(), LmsSender::send_lms_pkt(), TcpSessionAgent::send_much(), LmsReceiver::send_nak(), IntTcpAgent::send_one(), LmsReceiver::send_refresh(), UdpAgent::sendmsg(), sendmsg(), TcpAgent::sendmsg(), SRMAgent::sendmsg(), RTPAgent::sendmsg(), RapAgent::SendPacket(), sendpkt(), rtProtoDV::sendpkt(), SinkAgent::sendpkt(), SinkAgent::SinkAgent(), Agent::size(), slowstart(), start(), TfrcAgent(), TfrcSinkAgent::TfrcSinkAgent(), RTPAgent::timeout(), RTCPAgent::timeout(), and UdpAgent::UdpAgent().

int TfrcAgent::SndrType_ [protected]
 

Definition at line 140 of file tfrc.h.

Referenced by command(), nextpkt(), and TfrcAgent().

double TfrcAgent::sqrtrtt_ [protected]
 

Definition at line 165 of file tfrc.h.

Referenced by nextpkt(), start(), and update_rtt().

int TfrcAgent::srtt_init_ [protected]
 

Definition at line 178 of file tfrc.h.

Referenced by start(), and TfrcAgent().

double TfrcAgent::ss_maxrate_ [protected]
 

Definition at line 152 of file tfrc.h.

Referenced by recv(), slowstart(), and start().

double TfrcAgent::ssmult_ [protected]
 

Definition at line 185 of file tfrc.h.

Referenced by slowstart(), and TfrcAgent().

int TfrcAgent::t_rtt_ [protected]
 

Definition at line 171 of file tfrc.h.

Referenced by update_rtt().

int TfrcAgent::t_rttvar_ [protected]
 

Definition at line 172 of file tfrc.h.

Referenced by start(), and update_rtt().

int TfrcAgent::T_RTTVAR_BITS [protected]
 

Definition at line 177 of file tfrc.h.

Referenced by start(), TfrcAgent(), and update_rtt().

double TfrcAgent::t_rtxcur_ [protected]
 

Definition at line 174 of file tfrc.h.

Referenced by start(), and update_rtt().

int TfrcAgent::t_srtt_ [protected]
 

Definition at line 170 of file tfrc.h.

Referenced by start(), and update_rtt().

int TfrcAgent::T_SRTT_BITS [protected]
 

Definition at line 176 of file tfrc.h.

Referenced by start(), TfrcAgent(), and update_rtt().

NsObject* Connector::target_ [protected, inherited]
 

Definition at line 56 of file connector.h.

Referenced by SRAgent::command(), SA_Agent::command(), IvsReceiver::command(), MultiFieldFilter::command(), Filter::command(), Connector::command(), DiffusionAgent::DiffusionAgent(), DSRAgent::DSRAgent(), PromotionTimer::expire(), FloodingAgent::FloodingAgent(), toraAgent::forward(), AODV::forward(), LandmarkAgent::ForwardPacket(), DSDV_Agent::forwardPacket(), SensorQueryAgent::generate_query(), DSDVTriggerHandler::handle(), AckRecons::handle(), DSRAgent::handlePacketReceipt(), DSDV_Agent::helper_callback(), AODV::initialized(), DSDV_Agent::lost_link(), OmniMcastAgent::OmniMcastAgent(), LandmarkAgent::periodic_callback(), LandmarkAgent::ProcessHierUpdate(), TCPTapAgent::processpkt(), IPTapAgent::processpkt(), CMUPriQueue::prq_enqueue(), CMUPriQueue::prq_resume(), DequeTrace::recv(), Trace::recv(), TraceIpMac::recv(), TraceIp::recv(), TBF::recv(), SRMAgent::recv(), SSMSRMAgent::recv(), SatDequeTrace::recv(), SAack_Agent::recv(), Queue< T >::recv(), PingResponder::recv(), MIPEncapsulator::recv(), LmsAgent::recv(), HackLossyLink::recv(), GAFPartner::recv(), FQ::recv(), FloodAgent::recv(), ErrorModel::recv(), DynamicLink::recv(), DumbAgent::recv(), DSRAgent::recv(), DelayModel::recv(), LinkDelay::recv(), CtrMcastDecap::recv(), CtrMcastEncap::recv(), CMUTrace::recv(), PriQueue::recvHighPriority(), Trace::recvOnly(), TapAgent::recvpkt(), Queue< T >::resume(), LinkDelay::send(), Connector::send(), Agent::send(), MIPBSAgent::send_ads(), SRMAgent::send_ctrl(), SSMSRMAgent::send_ctrl(), MFTPSndAgent::send_data(), LmsSender::send_dmcast(), LmsReceiver::send_dmcast(), LmsAgent::send_downstream(), SSMSRMAgent::send_glb_sess(), LmsSender::send_lms_pkt(), SSMSRMAgent::send_loc_sess(), MFTPRcvAgent::send_nak(), LmsReceiver::send_nak(), LmsReceiver::send_refresh(), SSMSRMAgent::send_rep_sess(), SRMAgent::send_sess(), MIPMHAgent::send_sols(), LmsSender::send_spm(), MFTPSndAgent::send_status_request(), LmsAgent::send_upstream(), LandmarkAgent::SendChangedTagListUpdate(), AODV::sendError(), AODV::sendHello(), UdpAgent::sendmsg(), SRMAgent::sendmsg(), SA_Agent::sendmsg(), RTPAgent::sendmsg(), LmsSender::sendmsg(), DSDV_Agent::sendOutBCastPkt(), SA_Agent::sendpkt(), rtProtoDV::sendpkt(), RTPAgent::sendpkt(), RTCPAgent::sendpkt(), IvsSource::sendpkt(), AODV::sendReply(), AODV::sendRequest(), LmsSender::solicit_naks(), Connector::target(), TBF::timeout(), and toraAgent::tora_output().

double TfrcAgent::tcp_tick_ [protected]
 

Definition at line 175 of file tfrc.h.

Referenced by start(), TfrcAgent(), and update_rtt().

char* Agent::traceName_ [protected, inherited]
 

Definition at line 131 of file agent.h.

Referenced by Agent::addAgentTrace(), Agent::command(), Agent::deleteAgentTrace(), Agent::flushAVar(), Agent::monitorAgentTrace(), and Agent::trace().

packet_t Agent::type_ [protected, inherited]
 

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().

double TfrcAgent::tzero_ [protected]
 

Definition at line 164 of file tfrc.h.

Referenced by recv(), sendpkt(), start(), and update_rtt().

int Agent::uidcnt_ [static, protected, inherited]
 

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().

int TfrcAgent::UrgentFlag [protected]
 

Definition at line 190 of file tfrc.h.

Referenced by recv(), reduce_rate_on_no_feedback(), sendpkt(), and start().


The documentation for this class was generated from the following files:
Generated on Tue Apr 20 13:32:28 2004 for NS2.26SourcesOriginal by doxygen 1.3.3