ptype

来源:互联网 发布:linux环境apache ab 编辑:程序博客网 时间:2024/06/06 01:51

在上篇 flowid和ptype的赋值与作用 中,提出了问题。

按照逐步搜索fid_的方法,搜索hdr_cmn的ptype字段,同样发现该字段由Agent的ptype字段赋值。

对于CBR-traffic -> Agent/udp ->node的模型,从高往低考虑,

对于解释类Application/Traffic/CBR, 查看其对应编译类CBR_Traffic的源码(~ns/tools/cbr_traffic.cc&cbr_traffic.h)

 函数很少,很容易在CBR_Traffic::init( )看到agent_->set_pkttype(PT_CBR)一句,当已知传输层代理是TCP或TFRC时则不再设置成PT_CBR这点不清楚是为什么

其中agent_是该app绑定的传输层代理,当执行到tcl脚本的“$ftp attach-agent $tcp”或“$cbr attach-agent $udp”相同功能的语句时,agent_赋值[[【Alipcation::command( )】。(~ns/apps/app.cc)

整个赋值顺序是

 先有传输层udpAgent,new时将ptype设置成PT_UDP(~ns/apps/udp.cc)

 应用层Application/Traffic/CBR与传输层绑定时,cbr 的agent指向代理层agent

 tcl脚本执行"$cbr start"时,调用位于cbr::start( )里的cbr::init( ),将udpAgent的ptype置成PT_CBR;

再看$ftp(~ns/tcl/lib/ns-source.tcl),

在其拥有的init、start等方法中,未设置ptype,所以绑定tcp时,ptype仍然是PT_TCP

更改方法:FTP的start方法里加上一句    “ $self set_pkttype 27” 或者27换成PT_FTP

   Application/FTP instproc start {} {
      $self set_pkttype 27
      [$self agent] send -1
    }

当然Application的command函数中,要加上相应的处理

在argc=3的情况下,加上如下的处理分支

if(strcmp(argv[1],"set_pkttype")==0){
   agent_->set_pkttype(packet_t(atoi(argv[2]))); //如果写的是PT_FTP转换方式不同
   return (TCL_OK);
  }

重新make,测试即可发现,ptype已是27~~~~~

原创粉丝点击