Fork me on GitHub

OPNET学习笔记之sink模块

sink模块的进程模型是sink,是OPNET中最简单的进程,功能是"Accepts packets from the source and destroys them",也是新建一个processor时的默认进程模型。

sink模型的state variable有10个,其中5个是local statistic,5个是global statistic,

temp vairable 包括:

Packet*  pkptr;
double  pk_size;
double  ete_delay;

没有函数模块。

状态机很简单:

  INIT状态的入口函数是在初始化各统计量handle,使用op_stat_reg()函数注册,然后可以通过这些handle写入数据,如:

bits_rcvd_stathandle   = op_stat_reg ("Traffic Sink.Traffic Received (bits)",   OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);

其中"Traffic Sink"大概与group有关。

  DISCARD状态的出口函数功能是从输入包流中获得包,记录下统计量,然后销毁包。

/* Obtain the incoming packet. */
pkptr = op_pk_get (op_intrpt_strm ());  //从输入流得到包指针pkptr

/* Caclulate metrics to be updated.  */
pk_size = (double) op_pk_total_size_get (pkptr);  //得到包总大小
ete_delay = op_sim_time () - op_pk_creation_time_get (pkptr);  /*得到这个包的端到端延迟,注意这三个变量都是temp variable,每次在状态跳转后的值都不会保留*/

/* Update local statistics.    */
op_stat_write (bits_rcvd_stathandle,   pk_size);  //收到bits
op_stat_write (pkts_rcvd_stathandle,   1.0);    //收到packets
op_stat_write (ete_delay_stathandle,   ete_delay);  //端到端延迟

op_stat_write (bitssec_rcvd_stathandle,  pk_size);  //写bits然后马上清零???
op_stat_write (bitssec_rcvd_stathandle,  0.0);
op_stat_write (pktssec_rcvd_stathandle,  1.0);  //写packets然后马上清零???
op_stat_write (pktssec_rcvd_stathandle,  0.0);

/* Update global statistics. */
op_stat_write (bits_rcvd_gstathandle,   pk_size);  //收到bits
op_stat_write (pkts_rcvd_gstathandle,   1.0);    //收到packets
op_stat_write (ete_delay_gstathandle,   ete_delay);  //端到端延迟

op_stat_write (bitssec_rcvd_gstathandle,  pk_size);
op_stat_write (bitssec_rcvd_gstathandle,  0.0);
op_stat_write (pktssec_rcvd_gstathandle,  1.0);
op_stat_write (pktssec_rcvd_gstathandle,  0.0);

/* Destroy the received packet. */
op_pk_destroy (pkptr);    //销毁包

 

问题:bitssec_rcvd_stathandle这些统计量为什么需要写完马上清零?是怎样统计的?

大概所有统计速度的(xxx/s)都需要写完马上清零,在simple_source中就是这么做的。

posted on 2012-07-19 16:23  loopever  阅读(2119)  评论(0编辑  收藏  举报