Sink模塊的狀態機很簡單,只有INIT和DISCARD兩個,非強制狀態只有DISCARD用於包的銷燬。Sink模塊的作用就是銷燬從輸入流接收到的包,並且返回關於包的一系列統計量。
Init的入口代碼爲
/* Initilaize the statistic handles to keep */
/* track of traffic sinked by this process. */
bits_rcvd_stathandle =op_stat_reg ("Traffic Sink.Traffic Received (bits)", OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);
bitssec_rcvd_stathandle =op_stat_reg ("Traffic Sink.Traffic Received (bits/sec)", OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);
pkts_rcvd_stathandle =op_stat_reg ("Traffic Sink.Traffic Received (packets)", OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);
pktssec_rcvd_stathandle =op_stat_reg ("Traffic Sink.Traffic Received (packets/sec)", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);
ete_delay_stathandle =op_stat_reg ("Traffic Sink.End-to-End Delay (seconds)", OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);
bits_rcvd_gstathandle =op_stat_reg ("Traffic Sink.Traffic Received (bits)", OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
bitssec_rcvd_gstathandle =op_stat_reg ("Traffic Sink.Traffic Received (bits/sec)", OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
pkts_rcvd_gstathandle =op_stat_reg ("Traffic Sink.Traffic Received (packets)", OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
pktssec_rcvd_gstathandle =op_stat_reg ("Traffic Sink.Traffic Received (packets/sec)", OPC_STAT_INDEX_NONE, OPC_STAT_GLOBAL);
ete_delay_gstathandle =op_stat_reg ("Traffic Sink.End-to-End Delay (seconds)", OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
op_stat_reg函數的作用是返回進程模型中節點或模塊統計量,即初始化統計量句柄,第一個參數爲統計量所在組的名稱
所以上述代碼分別返回的是局部統計量和全局統計量,包括:收到的bit數,bit速率,包數,包速率,端對端延時
DISCARD僅有出口代碼:
/* Obtain the incoming packet. */
pkptr = op_pk_get (op_intrpt_strm ());
從輸入流中獲取包的指針
/* 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);
計算包的總體大小和包傳輸延時
/* Update local statistics. */
op_stat_write函數功能爲寫入統計量,第一個參數爲統計量的統計量句柄,第二個參數爲統計量將寫入的值。
op_stat_write (bits_rcvd_stathandle, pk_size);收到的bit數
op_stat_write (pkts_rcvd_stathandle, 1.0); 收到的包
op_stat_write (ete_delay_stathandle, ete_delay);端對端延時
op_stat_write (bitssec_rcvd_stathandle, pk_size); bit速率
op_stat_write (bitssec_rcvd_stathandle, 0.0);
op_stat_write (pktssec_rcvd_stathandle, 1.0); 包速率
op_stat_write (pktssec_rcvd_stathandle, 0.0);
/* Update global statistics. */全局統計量
op_stat_write (bits_rcvd_gstathandle, pk_size);
op_stat_write (pkts_rcvd_gstathandle, 1.0);
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); 銷燬包