📄 agent.cc
字号:
static char rcsid [] = "$Id: agent.cc,v 1.1 2001/08/07 21:57:03 suman Exp suman $";/* * $Log: agent.cc,v $ * Revision 1.1 2001/08/07 21:57:03 suman * Initial revision * *//* * File: agent.cc * Author: Suman Banerjee <suman@cs.umd.edu> * Date: July 31, 2001 * Terms: GPL * * myns simulator */#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <node.h>#include <agent.h>#define STATE_SIZE 256char rand_seq_state[STATE_SIZE];Agent::Agent (int Id, int Index, Node *N) { t = AGENT_NONE; id = Id; index = Index; n = N; started = false; n->a = this;}void Agent::init (int Id, int Index, Node *N) { id = Id; index = Index; n = N; started = false; n->a = this;}void Agent::start (void) { assert (! started); started = true; return;}void Agent::stop (void) { assert (started); started = false; return;}void Agent::send_pkt (Packet *p, int dst_ag, int dst_node) { if (n == NULL) return; p->src_agent = id; p->dst_agent = dst_ag; n->send_pkt(p,dst_node); return;}void Agent::generic_send_data_pkt (SourceDistributionType sdt, int burst_size, double burst_gap) { if (burst_size > 0) { specific_send_data_pkt(); if (burst_size == 1) return; AgentEvent * ag_e = new AgentEvent(AGENT_SOURCE); ag_e->sdt = sdt; ag_e->source_burst = burst_size - 1; ag_e->source_gap = burst_gap; EventInfo * sim_ev = new EventInfo(EVENT_AGENT,(void*)this,(void*)ag_e); double actual_gap; switch (sdt) { case DIST_CONSTANT: actual_gap = burst_gap; break; case DIST_UNIFORM: actual_gap = burst_gap * ( ((double)(get_pkt_source_random())) / ((double)RAND_MAX) ); break; default: assert(0); } Scheduler::AddRelativeEvent(actual_gap,sim_ev); } return;}void Agent::specific_send_data_pkt (void) { return;}void Agent::generic_rx_pkt_handler (Packet *p) { if (p->dst_agent != id) { /* Incorrect forwarding of the packet */ printf ("[Err] Packet %d incorrectly forwarded to < ag %d node %d > correct is < ag %d node %d >\n", p->id, id, n->id, p->dst_agent, p->dst); return; } /* Do app level packet handling here */ specific_rx_pkt_handler(p); return;}void Agent::specific_rx_pkt_handler (Packet *p) { return;}void Agent::EventHandler (AgentEvent *ae) { switch (ae->t) { case AGENT_START : start (); /* send_pkt(new Packet,2,8); */ break; case AGENT_STOP : stop (); break; case AGENT_SOURCE : generic_send_data_pkt(ae->sdt,ae->source_burst,ae->source_gap); break; default : printf ("[Err] Illegal agent event\n"); exit(-1); } delete ae; return;}void init_random_for_pkt_sources (unsigned int seed) { char * old_state = initstate(seed,rand_seq_state,STATE_SIZE); // setstate(old_state); return;}long int get_pkt_source_random (void) { char * old_state = setstate(rand_seq_state); // assert (old_state != NULL); long int ret_val = random(); // setstate(old_state); return ret_val;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -