⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agent.cc

📁 模拟器提供了一个简单易用的平台
💻 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 + -