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

📄 routing_table.cc

📁 柯老师网站上找到的
💻 CC
字号:
/********************************************************************//* routing_table.cc : Chalermek Intanagonwiwat (USC/ISI)  05/18/99  *//********************************************************************/// Important Note: Work still in progress !extern "C" {#include <assert.h>#include <math.h>#include <stdio.h>#include <signal.h>#include <float.h>}#include <tcl.h>#include <stdlib.h>#include "diff_header.h"#include "agent.h"#include "tclcl.h"#include "ip.h"#include "config.h"#include "packet.h"#include "trace.h"#include "random.h"#include "classifier.h"#include "node.h"#include "diffusion.h"#include "diff_rate.h"#include "iflist.h"#include "hash_table.h"#include "arp.h"#include "mac.h"#include "ll.h"#include "dsr/path.h"#include "god.h"#include "routing_table.h"void Routing_Entry::reset(){  counter = 0;  num_active = 0;  num_iif = 0;  clear_outlist(active);  clear_outlist(inactive);  clear_inlist(iif);  clear_inlist(down_iif);  clear_agentlist(source);  clear_agentlist(sink);  active = NULL;  inactive = NULL;  iif = NULL;  down_iif = NULL;  source = NULL;  sink = NULL;  last_fwd_time = -2.0*INTEREST_PERIODIC;  new_org_counter = 0;}void Routing_Entry::clear_outlist(Out_List *list){  Out_List *cur=list;  Out_List *temp = NULL;  while (cur != NULL) {    temp = OUT_NEXT(cur);    delete cur;    cur = temp;  }  }void Routing_Entry::clear_inlist(In_List *list){  In_List *cur=list;  In_List *temp = NULL;  while (cur != NULL) {    temp = IN_NEXT(cur);    delete cur;    cur = temp;  }}void Routing_Entry::clear_agentlist(Agent_List *list){  Agent_List *cur=list;  Agent_List *temp = NULL;  while (cur != NULL) {    temp = AGENT_NEXT(cur);    delete cur;    cur = temp;  }}int Routing_Entry::MostRecvOrg(){  In_List *cur;  int     most = 0;  for (cur=iif; cur!=NULL; cur = IN_NEXT(cur)) {      most = max(most,NEW_ORG_RECV(cur));  }  return most;}bool Routing_Entry::ExistOriginalGradient(){  Out_List *cur_out;  for (cur_out = active; cur_out!=NULL; cur_out=OUT_NEXT(cur_out)) {    if (GRADIENT(cur_out) == ORIGINAL)      return true;  }  return false;}void Routing_Entry::IncRecvCnt(ns_addr_t agent_addr){  PrvCurPtr RetVal;  counter++;  RetVal=INTF_FIND(iif, agent_addr);  if (RetVal.cur != NULL) {     TOTAL_RECV(RetVal.cur)++;     return;  }   RetVal=INTF_FIND(source, agent_addr);  if (RetVal.cur != NULL)    return;  // On-demand adding In_List   TOTAL_RECV(AddInList(agent_addr))++;}void Routing_Entry::CntPosSend(ns_addr_t agent_addr){  PrvCurPtr RetVal;  RetVal=INTF_FIND(iif, agent_addr);  if (RetVal.cur != NULL) {     NUM_POS_SEND(RetVal.cur)++;     return;  }   // On-demand adding In_List   In_List *cur_in = AddInList(agent_addr);  NUM_POS_SEND(cur_in)++;}void Routing_Entry::CntNeg(ns_addr_t agent_addr){  PrvCurPtr RetVal;  RetVal=INTF_FIND(active, agent_addr);  if (RetVal.cur != NULL) {     NUM_NEG_RECV(RetVal.cur)++;     return;  }   /*  perror("Hey man. How come you send me the negative reinforment?\n");  exit(-1);  */}void Routing_Entry::CntNewSub(ns_addr_t agent_addr){  PrvCurPtr RetVal;  RetVal=INTF_FIND(iif, agent_addr);  if (RetVal.cur != NULL) {     NEW_SUB_RECV(RetVal.cur)++;     TOTAL_NEW_SUB_RECV(RetVal.cur)++;     LAST_TS_NEW_SUB(RetVal.cur) = NOW;     return;  }   RetVal=INTF_FIND(source, agent_addr);  if (RetVal.cur != NULL)    return;  // On-demand adding In_List   In_List *cur_in = AddInList(agent_addr);  NEW_SUB_RECV(cur_in)++;  TOTAL_NEW_SUB_RECV(cur_in)++;  LAST_TS_NEW_SUB(cur_in) = NOW;}void Routing_Entry::ClrNewSub(ns_addr_t agent_addr){  PrvCurPtr RetVal;  RetVal=INTF_FIND(iif, agent_addr);  if (RetVal.cur != NULL) {     NEW_SUB_RECV(RetVal.cur)= 0;     LAST_TS_NEW_SUB(RetVal.cur) = -1.0;     return;  } }void Routing_Entry::CntNewOrg(ns_addr_t agent_addr){  PrvCurPtr RetVal;  RetVal=INTF_FIND(iif, agent_addr);  if (RetVal.cur != NULL) {     NEW_ORG_RECV(RetVal.cur)++;     TOTAL_NEW_ORG_RECV(RetVal.cur)++;     return;  }   RetVal=INTF_FIND(source, agent_addr);  if (RetVal.cur != NULL)    return;  // On-demand adding In_List   In_List *cur_in = AddInList(agent_addr);  NEW_ORG_RECV(cur_in)++;  TOTAL_NEW_ORG_RECV(cur_in)++;}void Routing_Entry::CntOldOrg(ns_addr_t agent_addr){  PrvCurPtr RetVal;  RetVal=INTF_FIND(iif, agent_addr);  if (RetVal.cur != NULL) {     OLD_ORG_RECV(RetVal.cur)++;     TOTAL_OLD_ORG_RECV(RetVal.cur)++;     return;  }   RetVal=INTF_FIND(source, agent_addr);  if (RetVal.cur != NULL)    return;  // On-demand adding In_List   In_List *cur_in = AddInList(agent_addr);  OLD_ORG_RECV(cur_in)++;  TOTAL_OLD_ORG_RECV(cur_in)++;}void Routing_Entry::ClrAllNewOrg(){  In_List *cur;  for (cur = iif; cur!= NULL; cur = IN_NEXT(cur)) {     NEW_ORG_RECV(cur)= 0;  }}void Routing_Entry::ClrAllOldOrg(){  In_List *cur;  for (cur=iif; cur!=NULL; cur = IN_NEXT(cur) ) {     OLD_ORG_RECV(cur)= 0;  }}In_List *Routing_Entry::MostRecentIn(){  In_List *cur, *ret;  double recent_time;  ret = NULL;  recent_time = -1.0;  for (cur = iif; cur!=NULL; cur=IN_NEXT(cur)) {    if (LAST_TS_NEW_SUB(cur) > recent_time) {      ret = cur;      recent_time = LAST_TS_NEW_SUB(cur);    }  }  return ret;}In_List * Routing_Entry::AddInList(ns_addr_t addr){  In_List *inPtr= new In_List;  AGT_ADDR(inPtr) = addr;  INTF_INSERT(iif, inPtr);   num_iif++;  return inPtr;}Routing_Entry:: Routing_Entry() {     last_fwd_time = -2.0*INTEREST_PERIODIC;      counter      = 0;    new_org_counter = 0;    num_active   = 0;    num_iif      = 0;    active       = NULL;     inactive     = NULL;     iif          = NULL;    down_iif     = NULL;    source       = NULL;    sink         = NULL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -