GAFAgent Class Reference

#include <gaf.h>

Inheritance diagram for GAFAgent:

Agent Connector NsObject TclObject Handler Collaboration diagram for GAFAgent:

Collaboration graph
[legend]

Detailed Description

Definition at line 142 of file gaf.h.

Public Member Functions

nsaddr_taddr ()
virtual void attachApp (Application *app)
virtual void close ()
virtual void connect (nsaddr_t dst)
nsaddr_tdaddr ()
virtual void debug (const char *fmt,...)
nsaddr_tdport ()
virtual void drop (Packet *p)
 GAFAgent (nsaddr_t id)
packet_t get_pkttype ()
int isdebug () const
virtual void listen ()
double myttl ()
u_int32_t nodeid ()
nsaddr_tport ()
virtual void recv (Packet *p, const char *s)
virtual void recv (Packet *, Handler *)
void recvOnly (Packet *)
virtual void send (int nbytes)
virtual void send (int sz, AppData *data)
void send (Packet *p, Handler *h)
virtual void sendmsg (int nbytes, const char *flags=0)
virtual void sendmsg (int sz, AppData *, const char *flags=0)
virtual void sendto (int nbytes, const char *flags, ns_addr_t dst)
virtual void sendto (int nbytes, const char *flags, nsaddr_t dst)
virtual void sendto (int sz, AppData *, const char *flags, ns_addr_t dst)
virtual void sendto (int sz, AppData *, const char *flags, nsaddr_t dst)
void set_pkttype (packet_t pkttype)
void setDropTarget (NsObject *dt)
virtual int & size ()
void target (NsObject *target)
NsObjecttarget ()
virtual void timeout (int tno)
void timeout (GafMsgType)

Protected Member Functions

void addAgentTrace (const char *name)
Packetallocpkt (int) const
Packetallocpkt () const
int command (int argc, const char *const *argv)
virtual int delay_bind_dispatch (const char *varName, const char *localName, TclObject *tracer)
virtual void delay_bind_init_all ()
void deleteAgentTrace ()
virtual void drop (Packet *p, const char *s)
void dumpTracedVars ()
void duty_timeout ()
void handle (Event *)
virtual void idle ()
void initpkt (Packet *) const
void insertOldValue (TracedVar *v, const char *value)
OldValuelookupOldValue (TracedVar *v)
void makeUpDiscoveryMsg (Packet *p)
void monitorAgentTrace ()
void node_off ()
void node_on ()
void processDiscoveryMsg (Packet *p)
virtual void recvBytes (int bytes)
virtual void reset ()
void schedule_wakeup (struct DiscoveryMsg)
void send_discovery ()
void setGAFstate (GafNodeState)
virtual void trace (TracedVar *v)
virtual void trace_event (char *eventtype)

Protected Attributes

int adapt_mobility_
Applicationapp_
double beacon_
Tcl_Channel channel_
int debug_
int defttl_
NsObjectdrop_
ns_addr_t dst_
GAFDutyTimer dtimer_
EventTraceet_
int fid_
int flags_
int gid_
ns_addr_t here_
int leader_settime_
int maxttl_
int nid_
OldValueoldValueList_
int prio_
int randomflag_
int seqno_
int size_
GafNodeState state_
GAFSelectTimer stimer_
NsObjecttarget_
Nodethisnode
GAFDiscoverTimer timer_
char * traceName_
packet_t type_

Static Protected Attributes

static int uidcnt_


Constructor & Destructor Documentation

GAFAgent::GAFAgent nsaddr_t  id  ) 
 

Definition at line 94 of file gaf.cc.

References Node::get_node_by_address(), God::getMyGrid(), gid_, God::instance(), nid_, seqno_, and thisnode.

00094                               : Agent(PT_GAF), beacon_(1), randomflag_(1), timer_(this), stimer_(this), dtimer_(this), maxttl_(5), state_(GAF_FREE),leader_settime_(0),adapt_mobility_(0)
00095 {
00096         double x = 0.0, y = 0.0, z = 0.0;
00097 
00098     seqno_ = -1;
00099     nid_ = id;
00100     thisnode = Node::get_node_by_address(nid_); 
00101     // gid_ = nid_; // temporary setting, MUST BE RESET
00102 
00103     // grid caculation
00104     // no need to update location becasue getLoc will do it
00105 
00106     ((MobileNode *)thisnode)->getLoc(&x, &y, &z);
00107     gid_ = God::instance()->getMyGrid(x,y);
00108         
00109     if (gid_ < 0) {
00110         printf("fatal error: node is outside topography\n");
00111     }
00112 }

Here is the call graph for this function:


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 99 of file agent.h.

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

Referenced by LandmarkAgent::assign_lmaddress(), WormApp::command(), SSMSRMAgent::command(), IntTcpAgent::createTcpSession(), DiffusionProb::DecGradient(), Agent::flushAVar(), SctpAgent::ForceSource(), LmsSender::handle_lms_pkt(), DiffusionProb::IncGradient(), SSMSRMAgent::is_active(), QSAgent::process(), TPAgent::recv(), SRMAgent::recv(), SSMSRMAgent::recv(), QSAgent::recv(), MIPBSAgent::recv(), HttpInvalAgent::recv(), CtrMcastEncap::recv(), SSMSRMAgent::recv_glb_sess(), SSMSRMAgent::recv_loc_sess(), SSMSRMAgent::recv_rep_sess(), SRMAgent::recv_sess(), 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(), SctpAgent::SetSource(), LmsSender::solicit_naks(), SRMAgent::start(), TcpAgent::trace_event(), TcpAgent::traceAll(), TcpAsymAgent::traceAll(), SctpAgent::TraceAll(), MultipleFastRtxSctpAgent::TraceAll(), MfrTimestampSctpAgent::TraceAll(), TcpAgent::traceVar(), TcpSessionAgent::traceVar(), TcpAsymAgent::traceVar(), SctpAgent::TraceVar(), MultipleFastRtxSctpAgent::TraceVar(), and MfrTimestampSctpAgent::TraceVar().

00099 { return here_.addr_; }

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

Definition at line 528 of file agent.cc.

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

00529 {
00530         Packet* p = allocpkt();
00531 
00532     if (n > 0)
00533             p->allocdata(n);
00534 
00535     return(p);
00536 }

Here is the call graph for this function:

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

Definition at line 517 of file agent.cc.

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

Referenced by XcpSink::ack(), TcpSink::ack(), QSTcpSink::ack(), SctpAgent::AddDestination(), 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(), XcpAgent::output(), TcpAgent::output(), VegasTcpAgent::output(), RFC793eduTcpAgent::output(), QSNewRenoTcpAgent::output(), IntTcpAgent::output(), AbsTcpAgent::output(), TCPTapAgent::processpkt(), AbsTcpSink::recv(), SAack_Agent::recv(), PingAgent::recv(), Encapsulator::recv(), MIPMHAgent::reg(), DSRAgent::returnSrcRouteToRequestor(), HttpInvalAgent::send(), MIPBSAgent::send_ads(), SRMAgent::send_ctrl(), SSMSRMAgent::send_ctrl(), send_discovery(), LmsSender::send_dmcast(), LmsReceiver::send_dmcast(), 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(), RapAgent::SendAck(), UdpAgent::sendmsg(), SimpleTcpAgent::sendmsg(), SRMAgent::sendmsg(), SA_Agent::sendmsg(), RTPAgent::sendmsg(), PushbackAgent::sendMsg(), MessagePassingAgent::sendmsg(), LmsSender::sendmsg(), FullTcpAgent::sendpacket(), BayFullTcpAgent::sendpacket(), SctpAgent::SendPacket(), RapAgent::SendPacket(), TfrcAgent::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(), TPAgent::sendto(), MessagePassingAgent::sendto(), LmsSender::solicit_naks(), and AbsDelAckSink::timeout().

00518 {
00519     Packet* p = Packet::alloc();
00520     initpkt(p);
00521     return (p);
00522 }

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 WormApp::command(), 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 GAFAgent::command int  argc,
const char *const *  argv
[protected, virtual]
 

Reimplemented from Agent.

Definition at line 412 of file gaf.cc.

References adapt_mobility_, Agent::command(), GAF_STARTUP_JITTER, gafjitter(), maxttl_, TimerHandler::resched(), and timer_.

00413 {
00414         if (argc == 2) {
00415       if (strcmp (argv[1], "start-gaf") == 0) {
00416         // schedule the discovery timer randomly
00417         timer_.resched(gafjitter(GAF_STARTUP_JITTER, 1));
00418         // schedule the select phase after certain time
00419         // of discovery msg exchange, as fast as possible
00420         // stimer_.resched(Random::uniform(GAF_LEADER_JITTER,GAF_LEADER_JITTER+1)); 
00421 
00422         return (TCL_OK); 
00423       }
00424           
00425     }
00426     if (argc == 3) {
00427         if (strcmp(argv[1], "adapt-mobility") == 0) {
00428             adapt_mobility_ = atoi(argv[2]);
00429             //timer_.resched(Random::uniform(0, beacon_));
00430             return TCL_OK;
00431         }
00432     
00433         if (strcmp(argv[1], "maxttl") == 0) {
00434         maxttl_ = atoi(argv[2]);
00435         return TCL_OK;
00436         }
00437 
00438     }
00439     return (Agent::command(argc, argv));
00440 }

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 101 of file agent.h.

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

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

00101 { 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 }

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

Reimplemented from NsObject.

Reimplemented in BayFullTcpAgent, LDPAgent, HbAfterRtoSctpAgent, MfrHbAfterRtoSctpAgent, MfrTimestampSctpAgent, MultipleFastRtxSctpAgent, NewRenoSctpAgent, TimestampSctpAgent, SctpAgent, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, VegasTcpAgent, XcpAgent, and XcpSink.

Definition at line 93 of file agent.cc.

References ns_addr_t::addr_, Agent::defttl_, NsObject::delay_bind_dispatch(), Agent::dst_, Agent::fid_, Agent::flags_, Agent::here_, ns_addr_t::port_, and Agent::prio_.

Referenced by XcpSink::delay_bind_dispatch(), TcpAgent::delay_bind_dispatch(), TcpSink::delay_bind_dispatch(), SctpAgent::delay_bind_dispatch(), and LDPAgent::delay_bind_dispatch().

00094 {
00095     if (delay_bind(varName, localName, "agent_addr_", (int*)&(here_.addr_), tracer)) return TCL_OK;
00096     if (delay_bind(varName, localName, "agent_port_", (int*)&(here_.port_), tracer)) return TCL_OK;
00097     if (delay_bind(varName, localName, "dst_addr_", (int*)&(dst_.addr_), tracer)) return TCL_OK;
00098     if (delay_bind(varName, localName, "dst_port_", (int*)&(dst_.port_), tracer)) return TCL_OK;
00099     if (delay_bind(varName, localName, "fid_", (int*)&fid_, tracer)) return TCL_OK;
00100     if (delay_bind(varName, localName, "prio_", (int*)&prio_, tracer)) return TCL_OK;
00101     if (delay_bind(varName, localName, "flags_", (int*)&flags_, tracer)) return TCL_OK;
00102     if (delay_bind(varName, localName, "ttl_", &defttl_, tracer)) return TCL_OK;
00103     if (delay_bind(varName, localName, "class_", (int*)&fid_, tracer)) return TCL_OK;
00104     return Connector::delay_bind_dispatch(varName, localName, tracer);
00105 }

Here is the call graph for this function:

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

Reimplemented from NsObject.

Reimplemented in BayFullTcpAgent, LDPAgent, HbAfterRtoSctpAgent, MfrHbAfterRtoSctpAgent, MfrTimestampSctpAgent, MultipleFastRtxSctpAgent, NewRenoSctpAgent, TimestampSctpAgent, SctpAgent, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, VegasTcpAgent, XcpAgent, and XcpSink.

Definition at line 78 of file agent.cc.

References NsObject::delay_bind_init_all().

Referenced by XcpSink::delay_bind_init_all(), TcpAgent::delay_bind_init_all(), TcpSink::delay_bind_init_all(), SctpAgent::delay_bind_init_all(), and LDPAgent::delay_bind_init_all().

00079 {
00080     delay_bind_init_one("agent_addr_");
00081     delay_bind_init_one("agent_port_");
00082     delay_bind_init_one("dst_addr_");
00083     delay_bind_init_one("dst_port_");
00084     delay_bind_init_one("fid_");
00085     delay_bind_init_one("prio_");
00086     delay_bind_init_one("flags_");
00087     delay_bind_init_one("ttl_");
00088     delay_bind_init_one("class_");
00089     Connector::delay_bind_init_all();
00090 }

Here is the call graph for this function:

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 102 of file agent.h.

References Agent::dst_, and ns_addr_t::port_.

Referenced by SctpAgent::AddDestination(), DSDV_Agent::lost_link(), CtrMcastEncap::recv(), AODV::recvAODV(), toraAgent::recvTORA(), IntTcpAgent::rxmit_last(), IntTcpAgent::send_one(), rtProtoDV::sendpkt(), SctpAgent::SetDestination(), TcpAgent::trace_event(), TcpAgent::traceAll(), TcpAsymAgent::traceAll(), TcpAgent::traceVar(), TcpSessionAgent::traceVar(), TcpAsymAgent::traceVar(), SctpAgent::TraceVar(), MultipleFastRtxSctpAgent::TraceVar(), and MfrTimestampSctpAgent::TraceVar().

00102 { 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]
 

Reimplemented in XCPQueue.

Definition at line 106 of file connector.cc.

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

Referenced by ARPTable::arpresolve(), XCPQueue::drop(), 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(), DSDV_Agent::forwardPacket(), DSRAgent::getRouteForPacket(), HDLC::goBackNMode(), Snoop::handle(), DSRAgent::handleFlowForwarding(), DSRAgent::handleForwarding(), HDLC::handleRR(), DSDV_Agent::lost_link(), TCPTapAgent::processpkt(), CMUPriQueue::prq_enqueue(), rtqueue::purge(), SessionTTLChecker::recv(), TTLChecker::recv(), FullTcpAgent::recv(), BayFullTcpAgent::recv(), SatLL::recv(), LL::recv(), GAFPartner::recv(), Filter::recv(), DynamicLink::recv(), AODV::recvError(), PriQueue::recvHighPriority(), HDLC::recvIncoming(), toraAgent::reset(), HDLC::reset(), Queue< T >::reset(), LinkDelay::reset(), AODV::rt_ll_failed(), AODV::rt_purge(), toraAgent::rtRoutePacket(), HDLC::selectiveRepeatMode(), AODV::sendRequest(), SatLL::sendUp(), LL::sendUp(), DropTail::shrink_queue(), 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]
 

void GAFAgent::duty_timeout  )  [protected]
 

Definition at line 387 of file gaf.cc.

References GAF_NONSTART_JITTER, gafjitter(), God::getMyGrid(), gid_, God::instance(), node_on(), TimerHandler::resched(), send_discovery(), thisnode, and timer_.

Referenced by timeout().

00388 {
00389     double x=0.0, y=0.0, z=0.0;
00390 
00391     // find where I am
00392     
00393     ((MobileNode *)thisnode)->getLoc(&x, &y, &z);
00394     gid_ = God::instance()->getMyGrid(x,y);
00395 
00396 
00397     // wake up myself
00398     node_on();
00399     
00400     // send discovery first to try to find whether
00401     // there is a leader around me
00402 
00403     send_discovery();
00404 
00405     // schedule the discovery timer randomly
00406     // can wait longer to get a chance to be replaced
00407 
00408     timer_.resched(gafjitter(GAF_NONSTART_JITTER, 1));
00409 
00410 }

Here is the call graph for this function:

packet_t Agent::get_pkttype  )  [inline, inherited]
 

Definition at line 104 of file agent.h.

References Agent::type_.

00104 { 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(), XcpAgent::output(), TcpAgent::output(), RFC793eduTcpAgent::output(), QSNewRenoTcpAgent::output(), IntTcpAgent::output(), BayFullTcpAgent::output(), UdpAgent::sendmsg(), SA_Agent::sendmsg(), RTPAgent::sendmsg(), MessagePassingAgent::sendmsg(), TPAgent::sendto(), and MessagePassingAgent::sendto().

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

Here is the call graph for this function:

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

Definition at line 456 of file agent.cc.

References hdr_nv::access(), hdr_flags::access(), hdr_ip::access(), hdr_cmn::access(), ns_addr_t::addr_, Scheduler::clock(), hdr_flags::cong_action_, hdr_ip::daddr(), Agent::defttl_, hdr_cmn::direction(), hdr_ip::dport(), Agent::dst_, hdr_flags::ecn_, hdr_flags::ecn_capable_, hdr_flags::ecn_to_echo_, hdr_flags::eln_, hdr_cmn::error(), Agent::fid_, hdr_ip::flowid(), hdr_flags::fs_, NixNode::GetNixVector(), NixNode::GetNodeObject(), hdr_nv::h_used, Agent::here_, hdr_cmn::iface(), Scheduler::instance(), hdr_flags::no_ts_, hdr_cmn::NONE, hdr_nv::nv(), hdr_ip::offset(), hdr_nv::offset(), ns_addr_t::port_, hdr_flags::pri_, hdr_ip::prio(), Agent::prio_, hdr_cmn::ptype(), hdr_flags::qs_, NixVec::Reset(), hdr_ip::saddr(), hdr_cmn::size(), Agent::size_, hdr_ip::sport(), hdr_cmn::timestamp(), hdr_ip::ttl(), Agent::type_, hdr_cmn::uid(), Agent::uidcnt_, UNKN_IFACE, and iface_literal::value().

Referenced by Agent::allocpkt(), and PingResponder::recv().

00457 {
00458     hdr_cmn* ch = hdr_cmn::access(p);
00459     ch->uid() = uidcnt_++;
00460     ch->ptype() = type_;
00461     ch->size() = size_;
00462     ch->timestamp() = Scheduler::instance().clock();
00463     ch->iface() = UNKN_IFACE.value(); // from packet.h (agent is local)
00464     ch->direction() = hdr_cmn::NONE;
00465 
00466     ch->error() = 0;    /* pkt not corrupt to start with */
00467 
00468     hdr_ip* iph = hdr_ip::access(p);
00469     iph->saddr() = here_.addr_;
00470     iph->sport() = here_.port_;
00471     iph->daddr() = dst_.addr_;
00472     iph->dport() = dst_.port_;
00473     
00474     //DEBUG
00475     //if (dst_ != -1)
00476     //  printf("pl break\n");
00477     
00478     iph->flowid() = fid_;
00479     iph->prio() = prio_;
00480     iph->ttl() = defttl_;
00481 
00482     hdr_flags* hf = hdr_flags::access(p);
00483     hf->ecn_capable_ = 0;
00484     hf->ecn_ = 0;
00485     hf->eln_ = 0;
00486     hf->ecn_to_echo_ = 0;
00487     hf->fs_ = 0;
00488     hf->no_ts_ = 0;
00489     hf->pri_ = 0;
00490     hf->cong_action_ = 0;
00491     hf->qs_ = 0;
00492 #ifdef HAVE_STL
00493 
00494     hdr_nv* nv = hdr_nv::access(p);
00495     if (0)
00496         printf("Off hdr_nv %d, ip_hdr %d myaddr %d\n",
00497                hdr_nv::offset(), hdr_ip::offset(), here_.addr_);
00498     NixNode* pNixNode = NixNode::GetNodeObject(here_.addr_);
00499     if (0)
00500         printf("Node Object %p\n", pNixNode);
00501     if (pNixNode) { 
00502         // If we get non-null, indicates nixvector routing in use
00503         // Delete any left over nv in the packet
00504         // Get a nixvector to the target (may create new)
00505         NixVec* pNv = pNixNode->GetNixVector(dst_.addr_);
00506         pNv->Reset();
00507         nv->nv() = pNv; // And set the nixvec in the packet
00508         nv->h_used = 0; // And reset used portion to 0
00509     }
00510 #endif //HAVE_STL
00511 }

Here is the call graph for this function:

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 GAFAgent::makeUpDiscoveryMsg Packet p  )  [protected]
 

Definition at line 464 of file gaf.cc.

References hdr_cmn::access(), hdr_ip::access(), Packet::accessdata(), hdr_cmn::addr_type_, Packet::allocdata(), hdr_ip::daddr(), hdr_ip::dport(), GAF_LEADER, God::getMyGridSize(), gid_, God::instance(), Address::instance(), IP_BROADCAST, IP_HDR_LEN, leader_settime_, MIN_LIFETIME, myttl(), hdr_cmn::next_hop_, nid_, Address::nodeshift(), NOW, NS_AF_INET, hdr_cmn::size_, state_, DiscoveryMsg::stime, thisnode, and DiscoveryMsg::ttl.

Referenced by send_discovery().

00465 {
00466   hdr_ip *iph = hdr_ip::access(p);
00467   hdr_cmn *hdrc = hdr_cmn::access(p);
00468   u_int32_t ttl,stime;
00469   unsigned char *walk;
00470   double gridsize, speed;
00471 
00472   // fill up the header
00473   hdrc->next_hop_ = IP_BROADCAST;
00474   hdrc->addr_type_ = NS_AF_INET;
00475   iph->daddr() = IP_BROADCAST << Address::instance().nodeshift();
00476   iph->dport() = 254;
00477 
00478   // hdrc->direction() = hdr_cmn::DOWN;
00479 
00480   // fill up the data
00481 
00482   p->allocdata(sizeof(DiscoveryMsg));
00483   walk = p->accessdata ();
00484   hdrc->size_ = sizeof(DiscoveryMsg) + IP_HDR_LEN; // Existence Msg + IP
00485 
00486   *(walk++) = gid_ >> 24;
00487   *(walk++) = (gid_ >> 16) & 0xFF;
00488   *(walk++) = (gid_ >> 8) & 0xFF;
00489   *(walk++) = (gid_ >> 0) & 0xFF;
00490   *(walk++) = nid_ >> 24;
00491   *(walk++) = (nid_ >> 16) & 0xFF;
00492   *(walk++) = (nid_ >> 8) & 0xFF;
00493   *(walk++) = (nid_ >> 0) & 0xFF;
00494 
00495   // access my state
00496 
00497   *(walk++) = state_ >> 24;
00498   *(walk++) = (state_ >> 16) & 0xFF;
00499   *(walk++) = (state_ >> 8) & 0xFF;
00500   *(walk++) = (state_ >> 0) & 0xFF;  
00501 
00502 
00503   // ttl tells the receiver that how much longer the sender can
00504   // survive, cut it into half for the purpose of load balance
00505 
00506   if (state_ == GAF_LEADER) {
00507       // must send real msg because I am the leader
00508     ttl = (int)(leader_settime_ - NOW);
00509     if (ttl < 0) ttl = 0;
00510 
00511   } else {
00512 
00513       if ((ttl = (u_int32_t)myttl()) > MIN_LIFETIME) {
00514           ttl = (u_int32_t) ttl/2;
00515       }
00516 
00517   }
00518   *(walk++) = ttl >> 24;
00519   *(walk++) = (ttl >> 16) & 0xFF;
00520   *(walk++) = (ttl >> 8) & 0xFF;
00521   *(walk++) = (ttl >> 0) & 0xFF;
00522   
00523 
00524   // fill my possible time of leaving this grid
00525   
00526   
00527   speed = ((MobileNode*)thisnode)->speed();
00528 
00529   if (speed == 0) {
00530     // make stime big enough
00531     stime = 2*ttl;
00532   } else {
00533     gridsize = God::instance()->getMyGridSize();
00534     stime = (u_int32_t) (gridsize/speed);
00535   }
00536 
00537   *(walk++) = stime >> 24;
00538   *(walk++) = (stime >> 16) & 0xFF;
00539   *(walk++) = (stime >> 8) & 0xFF;
00540   *(walk++) = (stime >> 0) & 0xFF;
00541 
00542   //printf("Node %d send out Exitence msg gid/nid %d %d\n", nid_, gid_, nid_);
00543 
00544 }

Here is the call graph for this function:

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:

double GAFAgent::myttl  ) 
 

Definition at line 283 of file gaf.cc.

References Node::energy_model(), Node::ifhead(), thisnode, and DiscoveryMsg::ttl.

Referenced by makeUpDiscoveryMsg(), processDiscoveryMsg(), and timeout().

00284 {
00285   double ce,maxp;
00286   Phy *phyp; 
00287   double ttl; 
00288   
00289   ce = (thisnode->energy_model())->energy();
00290 
00291   phyp = (thisnode->ifhead()).lh_first;
00292 
00293   assert (phyp != 0);
00294   maxp = ((WirelessPhy *)phyp)->getPtconsume();
00295   ttl = ce/maxp;
00296   
00297   return ttl;
00298 
00299 }

Here is the call graph for this function:

void GAFAgent::node_off  )  [protected]
 

Definition at line 548 of file gaf.cc.

References Node::energy_model(), GAF_SLEEP, Node::ifhead(), EnergyModel::node_on(), setGAFstate(), and thisnode.

Referenced by schedule_wakeup().

00549 {
00550     Phy *p;
00551     EnergyModel *em;
00552 
00553     //printf ("Node (%d %d) goes SLEEP from %d at %f\n",nid_, gid_, state_, Scheduler::instance().clock());
00554 
00555     
00556     // if I am in the data transfer state, do not turn off
00557 
00558     // if (state_ == GAF_TRAFFIC) return;
00559 
00560     // set node state
00561     em = thisnode->energy_model();
00562     em->node_on() = false;
00563     //((MobileNode *)thisnode->energy_model())->node_on() = false;
00564 
00565     // notify phy
00566     p  = (thisnode->ifhead()).lh_first;
00567     if (p) {
00568     ((WirelessPhy *)p)->node_off();
00569     }
00570     // change agent state
00571     setGAFstate(GAF_SLEEP);
00572 }

Here is the call graph for this function:

void GAFAgent::node_on  )  [protected]
 

Definition at line 575 of file gaf.cc.

References Node::energy_model(), GAF_FREE, Node::ifhead(), EnergyModel::node_on(), setGAFstate(), and thisnode.

Referenced by duty_timeout().

00576 {
00577     Phy *p;
00578     EnergyModel* em;
00579 
00580     // set node state
00581 
00582     em = thisnode->energy_model();
00583     em->node_on() = true;
00584 
00585     //(MobileNode *)thisnode->energy_model()->node_on() = true;
00586 
00587     // notify phy
00588 
00589     p = (thisnode->ifhead()).lh_first;
00590     if (p) {
00591         ((WirelessPhy *)p)->node_on();
00592     }
00593     
00594     setGAFstate(GAF_FREE);
00595 }

Here is the call graph for this function:

u_int32_t GAFAgent::nodeid  )  [inline]
 

Definition at line 149 of file gaf.h.

References nid_.

00149 {return nid_;}

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

Definition at line 100 of file agent.h.

References Agent::here_, and ns_addr_t::port_.

Referenced by SctpAgent::ForceSource(), LmsAgent::pkt2agent(), MIPBSAgent::recv(), HttpInvalAgent::recv(), CtrMcastEncap::recv(), IntTcpAgent::rxmit_last(), IntTcpAgent::send_one(), LmsReceiver::send_refresh(), IcmpAgent::sendredirect(), SctpAgent::SetSource(), TcpAgent::trace_event(), TcpAgent::traceAll(), TcpAsymAgent::traceAll(), SctpAgent::TraceAll(), MultipleFastRtxSctpAgent::TraceAll(), MfrTimestampSctpAgent::TraceAll(), TcpAgent::traceVar(), TcpSessionAgent::traceVar(), TcpAsymAgent::traceVar(), SctpAgent::TraceVar(), MultipleFastRtxSctpAgent::TraceVar(), and MfrTimestampSctpAgent::TraceVar().

00100 { return here_.port_; }

void GAFAgent::processDiscoveryMsg Packet p  )  [protected]
 

Definition at line 134 of file gaf.cc.

References Packet::accessdata(), TimerHandler::force_cancel(), GAF_FREE, GAF_LEADER, God::getMyGrid(), DiscoveryMsg::gid, gid_, God::instance(), leader_settime_, MIN_LIFETIME, myttl(), DiscoveryMsg::nid, nid_, NOW, schedule_wakeup(), send_discovery(), DiscoveryMsg::state, state_, DiscoveryMsg::stime, stimer_, thisnode, and DiscoveryMsg::ttl.

Referenced by recv().

00135 {
00136     struct DiscoveryMsg emsg;
00137     u_int32_t dst;
00138     unsigned char *w = p->accessdata ();
00139     double x = 0.0, y = 0.0, z = 0.0;
00140     int ttl;
00141 
00142 
00143     dst = *(w++);
00144     dst = dst << 8 | *(w++);
00145         dst = dst << 8 | *(w++);
00146         dst = dst << 8 | *(w++);
00147     
00148     emsg.gid = dst;
00149     
00150     dst = *(w++);
00151         dst = dst << 8 | *(w++);
00152         dst = dst << 8 | *(w++);
00153         dst = dst << 8 | *(w++);
00154 
00155     emsg.nid = dst;
00156 
00157     dst = *(w++);
00158         dst = dst << 8 | *(w++);
00159         dst = dst << 8 | *(w++);
00160         dst = dst << 8 | *(w++);
00161     
00162     emsg.state = dst;
00163 
00164     dst = *(w++);
00165         dst = dst << 8 | *(w++);
00166         dst = dst << 8 | *(w++);
00167         dst = dst << 8 | *(w++);
00168     
00169     emsg.ttl = dst;
00170     
00171     dst = *(w++);
00172         dst = dst << 8 | *(w++);
00173         dst = dst << 8 | *(w++);
00174         dst = dst << 8 | *(w++);
00175     
00176     emsg.stime = dst;
00177 
00178 
00179     // first, check if this node has changed its grid
00180     ((MobileNode *)thisnode)->getLoc(&x, &y, &z);
00181         gid_  = God::instance()->getMyGrid(x,y);
00182     
00183     // If the msg is not from my grid, ignore it
00184     if (((u_int32_t)gid_) != (u_int32_t)emsg.gid) return;
00185 
00186 
00187     switch (emsg.state) {
00188 
00189     case GAF_LEADER:
00190 
00191       // I receives a "whoami" msg from the leader in this grid
00192       // I am supposed to discard if I am in GAF_LEADER
00193       // state too, or put myself into sleep if I am in GAF_FREE
00194       
00195       switch (state_) {
00196       case GAF_LEADER:
00197 
00198         ttl = (int)(leader_settime_ - NOW);
00199         if (ttl < 0) ttl = 0;
00200 
00201             if ( ((u_int32_t)ttl) > (u_int32_t) emsg.ttl) {
00202                   //supress the partner
00203                   send_discovery();
00204           return; 
00205             
00206         } else {
00207                   if (((u_int32_t)ttl) == emsg.ttl && (u_int32_t)nid_ < emsg.nid) {
00208                       send_discovery();
00209                   return;
00210           }
00211           // from LEADER to SLEEP, cancel my timer
00212           stimer_.force_cancel();
00213           leader_settime_ = 0;
00214 
00215           // turn off my self
00216           schedule_wakeup(emsg);
00217         }
00218 
00219         break;
00220       
00221       case GAF_FREE:
00222         schedule_wakeup(emsg);
00223 
00224         break;
00225       default:
00226         break;
00227 
00228       }
00229 
00230       break;
00231     case GAF_FREE:
00232       if (state_ == GAF_FREE) {
00233           if ((ttl = (int)myttl()) > MIN_LIFETIME) {
00234                  ttl = ttl/2;
00235               }
00236     
00237               if ( ttl > (int)emsg.ttl) {
00238                   //supress other node
00239                   send_discovery();
00240           return; 
00241               } else {
00242                   if ((u_int32_t)ttl == emsg.ttl && (u_int32_t)nid_ < emsg.nid) {
00243                       send_discovery();
00244                   return;
00245                   }
00246     
00247           schedule_wakeup(emsg);
00248 
00249           }         
00250           }
00251       
00252       if (state_ == GAF_LEADER) {
00253           send_discovery();
00254       }
00255 
00256       break;
00257     default:
00258       printf("%d gets wrong discovery msg\n",nid_ );;
00259       break;
00260     }
00261 
00262 }

Here is the call graph for this function:

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 GAFAgent::recv Packet ,
Handler
[virtual]
 

Reimplemented from Agent.

Definition at line 114 of file gaf.cc.

References hdr_gaf::access(), Packet::free(), GAF_DISCOVER, GAF_SLEEP, processDiscoveryMsg(), state_, and hdr_gaf::type_.

00115 {
00116     hdr_gaf *gafh = hdr_gaf::access(p);
00117 
00118     switch (gafh->type_) {
00119 
00120     case GAF_DISCOVER:
00121 
00122       if (state_ != GAF_SLEEP)
00123           processDiscoveryMsg(p);
00124       Packet::free(p);
00125       break;
00126 
00127     default:
00128       Packet::free(p);
00129       break;
00130     }
00131 }

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

Definition at line 70 of file object.cc.

Referenced by NsObject::command().

00071 {
00072 }

void GAFAgent::schedule_wakeup struct  DiscoveryMsg  )  [protected]
 

Definition at line 264 of file gaf.cc.

References adapt_mobility_, dtimer_, MIN_TURNOFFTIME, node_off(), TimerHandler::resched(), DiscoveryMsg::stime, DiscoveryMsg::ttl, and Random::uniform().

Referenced by processDiscoveryMsg().

00264                                                        {
00265 
00266   int waketime;
00267   waketime = emsg.ttl;
00268  
00269   // control whether using mobility adaption
00270   if (adapt_mobility_ > 0 ) {
00271       if (emsg.stime < emsg.ttl) waketime = emsg.stime;
00272   }
00273 
00274   // node does not go switch to sleep if the lifetime
00275   // it senses is less than MIN_SWITCHTIME
00276 
00277   if (waketime > MIN_TURNOFFTIME ) { 
00278      node_off();
00279      dtimer_.resched(Random::uniform(waketime/2, waketime)); 
00280   }
00281 }

Here is the call graph for this function:

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

Reimplemented in SRMAgent.

Definition at line 91 of file agent.h.

References Agent::sendmsg().

00091 { sendmsg(nbytes); }

Here is the call graph for this function:

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 XcpSink::ack(), SinkAgent::bcast_interest(), PingAgent::command(), MessageAgent::command(), mcastControlAgent::command(), LmsAgent::command(), LDPAgent::command(), SinkAgent::data_ready(), DSDV_Agent::forwardPacket(), FullTcpAgent::foutput(), XcpAgent::output(), TcpAgent::output(), RFC793eduTcpAgent::output(), QSNewRenoTcpAgent::output(), IntTcpAgent::output(), BayFullTcpAgent::output(), AbsTcpAgent::output(), AbsTcpSink::recv(), SRAgent::recv(), PingAgent::recv(), NatAgent::recv(), MIPBSAgent::recv(), Encapsulator::recv(), Decapsulator::recv(), MIPMHAgent::reg(), SctpAgent::RouteCalcDelayTimerExpiration(), HttpInvalAgent::send(), send_discovery(), RapAgent::SendAck(), SimpleTcpAgent::sendmsg(), PushbackAgent::sendMsg(), FullTcpAgent::sendpacket(), BayFullTcpAgent::sendpacket(), SctpAgent::SendPacket(), RapAgent::SendPacket(), TfrcAgent::sendpkt(), TfrcSinkAgent::sendpkt(), SinkAgent::sendpkt(), IcmpAgent::sendredirect(), and AbsDelAckSink::timeout().

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

Here is the call graph for this function:

void GAFAgent::send_discovery  )  [protected]
 

Definition at line 442 of file gaf.cc.

References hdr_gaf::access(), Agent::allocpkt(), GAF_DISCOVER, God::getMyGrid(), gid_, God::instance(), makeUpDiscoveryMsg(), Agent::send(), seqno_, hdr_gaf::seqno_, thisnode, and hdr_gaf::type_.

Referenced by duty_timeout(), processDiscoveryMsg(), and timeout().

00443 {
00444         Packet *p = allocpkt();
00445     double x=0.0, y=0.0, z=0.0;
00446 
00447     hdr_gaf *h = hdr_gaf::access(p);
00448     //hdr_ip *iph = hdr_ip::access(p);
00449 
00450     h->type_ = GAF_DISCOVER;
00451     h->seqno_ = ++seqno_;
00452 
00453     // update my grid infomation
00454     
00455     ((MobileNode *)thisnode)->getLoc(&x, &y, &z);
00456     gid_ = God::instance()->getMyGrid(x,y);
00457     
00458     makeUpDiscoveryMsg(p);
00459 
00460     send(p,0);
00461 }

Here is the call graph for this function:

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

Reimplemented in SA_Agent, RTPAgent, UdpAgent, MessagePassingAgent, LmsSender, SRMAgent, SctpAgent, FullTcpAgent, TcpAgent, TfrcAgent, and SimpleTcpAgent.

Definition at line 407 of file agent.cc.

00408 {
00409 }

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

Reimplemented in UdpAgent, and MessagePassingAgent.

Definition at line 400 of file agent.cc.

References abort().

Referenced by Agent::command(), Application::send(), Agent::send(), TrafficTrace::timeout(), TelnetApp::timeout(), SctpApp1::timeout(), EXPOO_Traffic::timeout(), and CBR_PP_Traffic::timeout().

00401 {
00402     fprintf(stderr, 
00403     "Agent::sendmsg(int, AppData*, const char*) not implemented\n");
00404     abort();
00405 }

Here is the call graph for this function:

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

Reimplemented in MessagePassingAgent.

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

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

Reimplemented in MessagePassingAgent.

Definition at line 420 of file agent.cc.

00422 {
00423 }

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

Definition at line 411 of file agent.cc.

References abort().

Referenced by Agent::command(), AnWormApp::probe(), and DnhWormApp::send_probe().

00413 {
00414     fprintf(stderr, 
00415     "Agent::sendmsg(int, AppData*, const char*) not implemented\n");
00416     abort();
00417 }

Here is the call graph for this function:

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

Definition at line 103 of file agent.h.

References Agent::type_.

Referenced by Agent::command(), RA_Traffic::init(), POO_Traffic::init(), EXPOO_Traffic::init(), and CBR_PP_Traffic::init().

00103 { type_ = pkttype; }

void Connector::setDropTarget NsObject dt  )  [inline, inherited]
 

Definition at line 51 of file connector.h.

References Connector::drop_.

Referenced by XCPWrapQ::command().

00051 {drop_ = dt; } 

void GAFAgent::setGAFstate GafNodeState   )  [protected]
 

Definition at line 598 of file gaf.cc.

References state_.

Referenced by node_off(), node_on(), and timeout().

00599 {
00600   //printf("Node (%d %d) changes state from %d to %d at %f\n", nid_, gid_, state_,gs,Scheduler::instance().clock());
00601 
00602    state_ = gs;
00603 }

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

Reimplemented in FullTcpAgent.

Definition at line 98 of file agent.h.

References Agent::size_.

Referenced by rtProtoDV::command(), RLM_Sender::command(), imepAgent::getResponseListSize(), LandmarkAgent::makeUpdate(), Agent::recv(), SSMSRMAgent::send_glb_sess(), SSMSRMAgent::send_loc_sess(), SSMSRMAgent::send_rep_sess(), SRMAgent::send_sess(), TelnetApp::timeout(), and SctpApp1::timeout().

00098 { return size_; }

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

Definition at line 49 of file connector.h.

References Connector::target(), and Connector::target_.

00049 { target_ = target; }

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(), MIPMHAgent::reg(), MIPBSAgent::send_ads(), and Connector::target().

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 GAFAgent::timeout GafMsgType   ) 
 

Definition at line 302 of file gaf.cc.

References duty_timeout(), GAF_DISCOVER, GAF_DUTY, GAF_FREE, GAF_LEADER, GAF_SELECT, GAF_SLEEP, leader_settime_, MAX_DISCOVERY_TIME, MIN_LIFETIME, myttl(), NOW, TimerHandler::resched(), send_discovery(), setGAFstate(), state_, stimer_, timer_, DiscoveryMsg::ttl, and Random::uniform().

Referenced by GAFDutyTimer::expire(), GAFSelectTimer::expire(), and GAFDiscoverTimer::expire().

00303 {
00304   
00305   int ttl;
00306 
00307 //printf ("Node (%d %d) get signal %d at %f\n",nid_, gid_, msgt, Scheduler::instance().clock());
00308 
00309     switch (msgt) {
00310     case GAF_DISCOVER:
00311 
00312       switch (state_) {
00313       case GAF_SLEEP:
00314     break;
00315        
00316       case GAF_FREE:
00317 
00318     if ((ttl = (int)myttl()) > MIN_LIFETIME) {
00319                 ttl = (int) ttl/2;
00320         }
00321         
00322     leader_settime_ = (int) (ttl + NOW);  
00323 
00324     // schdule to tell me that I can switch after ttl
00325 
00326     stimer_.resched(ttl); 
00327     
00328     setGAFstate(GAF_LEADER);
00329 
00330     send_discovery();
00331 
00332     //printf ("Node (%d %d) becomes a leader at %f\n",nid_, gid_, Scheduler::instance().clock());
00333 
00334          timer_.resched(Random::uniform(MAX_DISCOVERY_TIME-1,MAX_DISCOVERY_TIME));
00335     
00336     // fall through
00337          break; 
00338 
00339       case GAF_LEADER:
00340 
00341     send_discovery();
00342 
00343         timer_.resched(Random::uniform(MAX_DISCOVERY_TIME-1,MAX_DISCOVERY_TIME));
00344     break;
00345       default:
00346     break;
00347 
00348       }
00349 
00350       break;
00351 
00352     case GAF_SELECT:
00353         switch (state_) {
00354 
00355       case GAF_LEADER:
00356 
00357         // I just finish my LEADER role, put myself into FREE
00358         // state so that I have chance to go sleep
00359         // put myself into FREE does not hurt anything
00360 
00361         //printf("Node (%d %d) go BACK to FREE from LEADER at %f\n",nid_,gid_,Scheduler::instance().clock());
00362 
00363         duty_timeout();
00364 
00365         leader_settime_ = 0;
00366 
00367         break;
00368 
00369       case GAF_FREE:
00370       case GAF_SLEEP:
00371         break;
00372       default:
00373         break;
00374         }
00375     break;
00376     case GAF_DUTY:
00377         duty_timeout();
00378         break;
00379     default:
00380         printf("Wrong GAF msg time!\n");
00381     }
00382 
00383 }

Here is the call graph for this function:

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

Reimplemented in SctpAgent, and TcpAgent.

Definition at line 266 of file agent.cc.

References ns_addr_t::addr_, Agent::channel_, Agent::dst_, Agent::here_, Agent::insertOldValue(), Scheduler::instance(), Agent::lookupOldValue(), min, TIME_FORMAT, Agent::traceName_, TRACEVAR_MAXVALUELENGTH, and OldValue::val_.

Referenced by TcpAgent::trace().

00267 {
00268     if (channel_ == 0)
00269         return;
00270     char wrk[256], value[128];
00271     int n;
00272 
00273     // XXX we need to keep track of old values. What's the best way?
00274     v->value(value, 128);
00275 
00276     // XXX hack: how do I know ns has not started yet?
00277     // if there's nothing in value, return
00278     static int started = 0;
00279     if (!started) {
00280         Tcl::instance().evalc("[Simulator instance] is-started");
00281         if (Tcl::instance().result()[0] == '0')
00282             // Simulator not started, do nothing
00283             return;
00284         // remember for next time (so we don't always have to call to tcl)
00285         started = 1;
00286     };
00287 
00288     OldValue *ov = lookupOldValue(v);
00289     if (ov != NULL) {
00290         sprintf(wrk, 
00291             "f -t "TIME_FORMAT" -s %d -d %d -n %s -a %s -v %s -o %s -T v",
00292             Scheduler::instance().clock(), here_.addr_,
00293             dst_.addr_, v->name(), traceName_, value, ov->val_);
00294         strncpy(ov->val_, 
00295             value,
00296             min(strlen(value)+1, TRACEVAR_MAXVALUELENGTH));
00297     } else {
00298         // if there is value, insert it into old value list
00299         sprintf(wrk, "f -t "TIME_FORMAT" -s %d -d %d -n %s -a %s -v %s -T v",
00300             Scheduler::instance().clock(), here_.addr_,
00301             dst_.addr_, v->name(), traceName_, value);
00302         insertOldValue(v, value);
00303     }
00304     n = strlen(wrk);
00305     wrk[n] = '\n';
00306     wrk[n+1] = 0;
00307     (void)Tcl_Write(channel_, wrk, n+1);
00308 }

Here is the call graph for this function:

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

Reimplemented in TcpAgent.

Definition at line 149 of file agent.h.

00149 {}


Field Documentation

int GAFAgent::adapt_mobility_ [protected]
 

Definition at line 177 of file gaf.h.

Referenced by command(), and schedule_wakeup().

Application* Agent::app_ [protected, inherited]
 

Reimplemented in BayFullTcpAgent.

Definition at line 137 of file agent.h.

Referenced by Agent::attachApp(), Agent::idle(), RapAgent::IpgTimeout(), UdpAgent::recv(), TPAgent::recv(), SimpleTcpAgent::recv(), RapAgent::recv(), MessagePassingAgent::recv(), HttpInvalAgent::recv(), Agent::recv(), and Agent::recvBytes().

double GAFAgent::beacon_ [protected]
 

Definition at line 163 of file gaf.h.

Tcl_Channel Agent::channel_ [protected, inherited]
 

Definition at line 133 of file agent.h.

Referenced by Agent::addAgentTrace(), Agent::command(), Agent::flushAVar(), Agent::monitorAgentTrace(), XcpAgent::output(), XcpAgent::recv_newack_helper(), Agent::trace(), TcpAgent::traceAll(), TcpAsymAgent::traceAll(), SctpAgent::TraceAll(), MultipleFastRtxSctpAgent::TraceAll(), MfrTimestampSctpAgent::TraceAll(), TcpAgent::traceVar(), TcpSessionAgent::traceVar(), TcpAsymAgent::traceVar(), SctpAgent::TraceVar(), MultipleFastRtxSctpAgent::TraceVar(), and MfrTimestampSctpAgent::TraceVar().

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(), PushbackQueue::enque(), NsObject::isdebug(), NsObject::NsObject(), TfrcAgent::recv(), PushbackQueue::reportDrop(), SctpAgent::Reset(), REDQueue::reset(), DropTail::shrink_queue(), and Delayer::try_send().

int Agent::defttl_ [protected, inherited]
 

Definition at line 124 of file agent.h.

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

NsObject* Connector::drop_ [protected, inherited]
 

Definition at line 59 of file connector.h.

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

ns_addr_t Agent::dst_ [protected, inherited]
 

Reimplemented in AckRecons.

Definition at line 118 of file agent.h.

Referenced by Agent::addAgentTrace(), Agent::daddr(), Agent::delay_bind_dispatch(), Agent::deleteAgentTrace(), Agent::dport(), DSRProto::DSRProto(), Agent::flushAVar(), Agent::initpkt(), SRMAgent::recv(), SSMSRMAgent::recv(), NatAgent::recv(), SRMAgent::sendmsg(), PushbackAgent::sendMsg(), and Agent::trace().

GAFDutyTimer GAFAgent::dtimer_ [protected]
 

Definition at line 168 of file gaf.h.

Referenced by schedule_wakeup().

EventTrace* Agent::et_ [protected, inherited]
 

Definition at line 148 of file agent.h.

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

int Agent::fid_ [protected, inherited]
 

Definition at line 121 of file agent.h.

Referenced by Agent::delay_bind_dispatch(), AbsTcpAgent::flowid(), Agent::initpkt(), CtrMcastEncap::recv(), Sack1TcpAgent::timeout(), and TcpAgent::trace_event().

int Agent::flags_ [protected, inherited]
 

Reimplemented in BayFullTcpAgent, RapAgent, and FullTcpAgent.

Definition at line 123 of file agent.h.

Referenced by Agent::delay_bind_dispatch().

int GAFAgent::gid_ [protected]
 

Definition at line 170 of file gaf.h.

Referenced by duty_timeout(), GAFAgent(), makeUpDiscoveryMsg(), processDiscoveryMsg(), and send_discovery().

ns_addr_t Agent::here_ [protected, inherited]
 

Definition at line 117 of file agent.h.

Referenced by Agent::addAgentTrace(), Agent::addr(), SinkAgent::bcast_interest(), MessagePassingAgent::command(), SinkAgent::data_ready(), OmniMcastAgent::DataForSink(), FloodingAgent::DataForSink(), DiffusionAgent::DataForSink(), Agent::delay_bind_dispatch(), Agent::deleteAgentTrace(), AODV::forward(), 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(), SinkAgent::sendpkt(), SinkAgent::set_addr(), SinkAgent::Terminate(), and Agent::trace().

int GAFAgent::leader_settime_ [protected]
 

Definition at line 176 of file gaf.h.

Referenced by makeUpDiscoveryMsg(), processDiscoveryMsg(), and timeout().

int GAFAgent::maxttl_ [protected]
 

Definition at line 173 of file gaf.h.

Referenced by command().

int GAFAgent::nid_ [protected]
 

Definition at line 171 of file gaf.h.

Referenced by GAFAgent(), makeUpDiscoveryMsg(), nodeid(), and processDiscoveryMsg().

OldValue* Agent::oldValueList_ [protected, inherited]
 

Definition at line 135 of file agent.h.

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

int Agent::prio_ [protected, inherited]
 

Definition at line 122 of file agent.h.

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

int GAFAgent::randomflag_ [protected]
 

Definition at line 165 of file gaf.h.

int GAFAgent::seqno_ [protected]
 

Definition at line 169 of file gaf.h.

Referenced by GAFAgent(), and send_discovery().

int Agent::size_ [protected, inherited]
 

Reimplemented in SA_Agent, and AckRecons.

Definition at line 119 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(), TfrcAgent::decrease_rate(), XcpSink::delay_bind_dispatch(), TcpAgent::delay_bind_dispatch(), TcpSink::delay_bind_dispatch(), FullTcpAgent::foutput(), DSRAgent::getRouteForPacket(), TfrcAgent::increase_rate(), TfrcAgent::initial_rate(), TcpAgent::initial_window(), Agent::initpkt(), RapAgent::IpgTimeout(), IvsReceiver::IvsReceiver(), LmsAgent::LmsAgent(), LmsReceiver::LmsReceiver(), mcastControlAgent::mcastControlAgent(), MessageAgent::MessageAgent(), MessagePassingAgent::MessagePassingAgent(), MIPBSAgent::MIPBSAgent(), MIPMHAgent::MIPMHAgent(), TfrcAgent::nextpkt(), IntTcpAgent::opencwnd(), XcpAgent::output(), TcpAgent::output(), PingAgent::PingAgent(), TcpAgent::processQuickStart(), RapAgent::RapAgent(), TfrcAgent::recv(), TcpSessionAgent::recv(), NewRenoTcpAgent::recv(), TfrcAgent::reduce_rate_on_no_feedback(), SctpAgent::Reset(), 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(), LmsSender::send_spm(), UdpAgent::sendmsg(), TfrcAgent::sendmsg(), TcpAgent::sendmsg(), SRMAgent::sendmsg(), RTPAgent::sendmsg(), MessagePassingAgent::sendmsg(), RapAgent::SendPacket(), TfrcAgent::sendpkt(), rtProtoDV::sendpkt(), SinkAgent::sendpkt(), TPAgent::sendto(), MessagePassingAgent::sendto(), SinkAgent::SinkAgent(), Agent::size(), TfrcAgent::slowstart(), LmsSender::solicit_naks(), TfrcAgent::start(), TfrcAgent::TfrcAgent(), TfrcSinkAgent::TfrcSinkAgent(), RTPAgent::timeout(), RTCPAgent::timeout(), TPAgent::TPAgent(), UdpAgent::UdpAgent(), and TfrcSinkAgent::weighted_average1().

GafNodeState GAFAgent::state_ [protected]
 

Definition at line 175 of file gaf.h.

Referenced by makeUpDiscoveryMsg(), processDiscoveryMsg(), recv(), setGAFstate(), and timeout().

GAFSelectTimer GAFAgent::stimer_ [protected]
 

Definition at line 167 of file gaf.h.

Referenced by processDiscoveryMsg(), and timeout().

NsObject* Connector::target_ [protected, inherited]
 

Definition at line 58 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(), SctpAgent::ForceSource(), toraAgent::forward(), AODV::forward(), DSDV_Agent::forwardPacket(), SensorQueryAgent::generate_query(), DSDVTriggerHandler::handle(), AckRecons::handle(), DSDV_Agent::helper_callback(), DSDV_Agent::lost_link(), OmniMcastAgent::OmniMcastAgent(), LandmarkAgent::periodic_callback(), TCPTapAgent::processpkt(), IPTapAgent::processpkt(), CMUPriQueue::prq_enqueue(), CMUPriQueue::prq_resume(), Trace::recv(), TraceIpMac::recv(), TraceIp::recv(), SRMAgent::recv(), SSMSRMAgent::recv(), SAack_Agent::recv(), Queue< T >::recv(), PingResponder::recv(), MIPEncapsulator::recv(), LmsAgent::recv(), HackLossyLink::recv(), FQ::recv(), ErrorModel::recv(), DynamicLink::recv(), DSRAgent::recv(), DelayModel::recv(), LinkDelay::recv(), CtrMcastDecap::recv(), CtrMcastEncap::recv(), CMUTrace::recv(), Trace::recvOnly(), Queue< T >::resume(), LinkDelay::send(), Connector::send(), Agent::send(), MIPBSAgent::send_ads(), SRMAgent::send_ctrl(), SSMSRMAgent::send_ctrl(), LmsSender::send_dmcast(), LmsReceiver::send_dmcast(), LmsAgent::send_downstream(), LmsSender::send_lms_pkt(), LmsReceiver::send_nak(), LmsReceiver::send_refresh(), MIPMHAgent::send_sols(), LmsSender::send_spm(), LmsAgent::send_upstream(), LandmarkAgent::SendChangedTagListUpdate(), AODV::sendError(), AODV::sendHello(), UdpAgent::sendmsg(), SRMAgent::sendmsg(), SA_Agent::sendmsg(), RTPAgent::sendmsg(), MessagePassingAgent::sendmsg(), LmsSender::sendmsg(), DSDV_Agent::sendOutBCastPkt(), SA_Agent::sendpkt(), rtProtoDV::sendpkt(), RTPAgent::sendpkt(), RTCPAgent::sendpkt(), IvsSource::sendpkt(), AODV::sendReply(), AODV::sendRequest(), TPAgent::sendto(), MessagePassingAgent::sendto(), SctpAgent::SetSource(), LmsSender::solicit_naks(), Connector::target(), toraAgent::tora_output(), and Delayer::try_send().

Node* GAFAgent::thisnode [protected]
 

Definition at line 172 of file gaf.h.

Referenced by duty_timeout(), GAFAgent(), makeUpDiscoveryMsg(), myttl(), node_off(), node_on(), processDiscoveryMsg(), and send_discovery().

GAFDiscoverTimer GAFAgent::timer_ [protected]
 

Definition at line 166 of file gaf.h.

Referenced by command(), duty_timeout(), and timeout().

char* Agent::traceName_ [protected, inherited]
 

Definition at line 134 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 120 of file agent.h.

Referenced by Agent::get_pkttype(), Agent::initpkt(), FullTcpAgent::listen(), BayFullTcpAgent::listen(), RapAgent::SendAck(), SRMAgent::sendmsg(), RapAgent::SendPacket(), Agent::set_pkttype(), and XcpAgent::XcpAgent().

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

Definition at line 131 of file agent.h.

Referenced by imepAgent::handlerControlTimer(), Agent::initpkt(), imepAgent::sendAck(), imepAgent::sendBeacon(), toraAgent::sendCLR(), imepAgent::sendHello(), toraAgent::sendQRY(), and toraAgent::sendUPD().


The documentation for this class was generated from the following files:
Generated on Tue Mar 6 17:08:44 2007 for ns2 Network Simulator 2.29 by  doxygen 1.4.6