📄 finish.tcl
字号:
set erm_tip [list s s s s d d f d d f d] set erm_val "" set erm_tit "" foreach k $erm_temp { append erm_val "%[lindex $erm_dim $k][lindex $erm_tip $k] " append erm_tit "%[lindex $erm_dim_tit $k]s " } puts $file(finish) "#$line\n#" puts $file(finish) "#\t\t\t\tError Model Statistics\n#" puts $file(finish) "# [format $erm_tit who src dst pkt_type rcv_net_other error_other p_error_other rcv_net_my error_my p_error_my send_chn]\n#" foreach fid [lessof [expr $num_n * [expr $num_n - 1] / 2]] { foreach tip {tcp ack udp voip mac_rts mac_cts mac_ack} { puts $file(finish) " [format $erm_val erm_$fid $macadd($stat(errmo_src,$fid)) $macadd($stat(errmo_dst,$fid)) $tip \ $stat(errmo,$fid,rcv_mac,$tip) $stat(errmo,$fid,corrup,$tip) \ [expr $stat(errmo,$fid,corrup,$tip) / [expr $stat(errmo,$fid,rcv_mac,$tip) + 0.000000000001]] \ $stat(errmo,$fid,rcv_mac_my,$tip) $stat(errmo,$fid,corrup_my,$tip) \ [expr $stat(errmo,$fid,corrup_my,$tip) / [expr $stat(errmo,$fid,rcv_mac_my,$tip) + 0.000000000001]] \ $stat(errmo,$fid,send_chn,$tip)]" } puts $file(finish) "#" }}####################################################################### ## NET_stat: Writes on the output file the Wireless Physic statistics ## #######################################################################proc NET_stat {} { global file line stat num_n nd set chn_temp [list 0 1 2 3 4 5] set chn_dim [list 8 12 12 12 12 12] set chn_dim_tit [list 8 12 12 12 12 12] set chn_tip [list s s d d d d] set chn_val "" set chn_tit "" foreach k $chn_temp { append chn_val "%[lindex $chn_dim $k][lindex $chn_tip $k] " append chn_tit "%[lindex $chn_dim_tit $k]s " } puts $file(finish) "#$line\n#" puts $file(finish) "#\t\t\t\tNetwork Statistics\n#" puts $file(finish) "# [format $chn_tit node_id pkt_type rcv_chn drop bit_error send_mac]\n#" foreach fid [lessof $num_n] { foreach tip {message ARP tcp ack udp voip mac_rts mac_cts mac_ack} { puts $file(finish) " [format $chn_val chn_$nd($fid) $tip $stat(chn,rcv_erm,$fid,$tip) $stat(chn,drop,$fid,$tip) \ $stat(chn,error,$fid,$tip) $stat(chn,send_mac,$fid,$tip)]" } puts $file(finish) "#" }}####################################################################### ## ERM_change: Writes on the output file others Error Model ## statistics ## #######################################################################proc ERM_change {} { global file line stat num_n nd opt macadd set cst_temp [list 0 1 2 3 4 5 6] set cst_dim [list 8 12 12 14.4 14.4 14.10 14.10] set cst_dim_tit [list 8 12 12 14 14 14 14] set cst_tip [list s s s f f f f] set cst_val "" set cst_tit "" foreach k $cst_temp { append cst_val "%[lindex $cst_dim $k][lindex $cst_tip $k] " append cst_tit "%[lindex $cst_dim_tit $k]s " } puts $file(finish) "#$line\n#" puts $file(finish) "#\t\t\t\tError Model Time Change\n#" puts $file(finish) "# [format $cst_tit who src dst burst_BG burst_BB pGB perr]\n#" foreach fid [lessof [expr $num_n * [expr $num_n - 1] / 2]] { set burst_BG [expr $stat(errmo,$fid,av_badG).0 / $stat(errmo,$fid,n_badG).0] set burst_BB [expr $stat(errmo,$fid,av_badB).0 / [expr $stat(errmo,$fid,n_badB).0 + 0.0000000000000001]] set pGB [expr $stat(errmo,$fid,n_badB).0 / [expr $stat(errmo,$fid,n_badB).0 + $stat(errmo,$fid,n_badG).0]] set perr [expr [expr $stat(errmo,$fid,av_badG).0 + $stat(errmo,$fid,av_badB).0] / \ [expr $stat(errmo,$fid,av_badG).0 + $stat(errmo,$fid,av_badB).0 + $stat(errmo,$fid,av_good).0]] puts $file(finish) " [format $cst_val tch_$fid $macadd($stat(errmo_src,$fid)) $macadd($stat(errmo_dst,$fid)) \ $burst_BG $burst_BB $pGB $perr]" }}####################################################################### ## delay_stat: Writes on the output file the packets delay and ## variance statistics ## ## who: the statistic type (tcp or udp) ## num: the number of flow of type 'who' ## #######################################################################proc delay_stat {who num} { global file line num_tcp fl udp_fl stat opt nd set dly_temp [list 0 1 2 3 4 5 6] set dly_dim [list 12 12 12.8 12.8 12.8 12.8 12.8] set dly_dim_tit [list 12 12 12 12 12 12 12] set dly_tip [list s s f f f f f] set var_tip [list s s g g g g g] set dly_val "" set dly_tit "" foreach k $dly_temp { append dly_val "%[lindex $dly_dim $k][lindex $dly_tip $k] " append var_val "%[lindex $dly_dim_tit $k][lindex $var_tip $k] " append dly_tit "%[lindex $dly_dim_tit $k]s " } if {$who == "tcp"} { set temp2 "data" set temp3 "TCP" } else { set temp2 "cbr" set temp3 "CBR" } puts $file(finish) "#\n#$line\n#" puts $file(finish) "#\t\t\t\t $temp3 DELAY Statistics\n#" puts $file(finish) "# [format $dly_tit flow_id direction LL_delay queue_delay MAC_delay chn_delay up_delay]\n#" foreach fid [range 1 $num] { if {$who == "tcp"} { set temp $fl($fid) } else { set temp $udp_fl($fid) } puts $file(finish) " [format $dly_val dly_${temp2}_$fid $temp [expr $stat($who,delay,ll,$fid) / $stat($who,time_count,$fid).0] \ [expr $stat($who,delay,ifq,$fid) / $stat($who,time_count,$fid).0] \ [expr $stat($who,delay,mac,$fid) / $stat($who,time_count,$fid).0] \ [expr $stat($who,delay,channel,$fid) / $stat($who,time_count,$fid).0] \ [expr $stat($who,delay,up,$fid) / $stat($who,time_count,$fid).0]]" } if {$opt(onoff) == 2 && $who == "tcp"} { foreach fid [range [expr -$num] -1] { puts $file(finish) " [format $dly_val dly_${temp2}_$fid $fl($fid) [expr $stat($who,delay,ll,$fid) / $stat($who,time_count,$fid).0] \ [expr $stat($who,delay,ifq,$fid) / $stat($who,time_count,$fid).0] \ [expr $stat($who,delay,mac,$fid) / $stat($who,time_count,$fid).0] \ [expr $stat($who,delay,channel,$fid) / $stat($who,time_count,$fid).0] \ [expr $stat($who,delay,up,$fid) / $stat($who,time_count,$fid).0]]" } } puts $file(finish) "#\n#$line\n#" puts $file(finish) "#\t\t\t\t $temp3 JITTER Statistics\n#" puts $file(finish) "# [format $dly_tit flow_id direction LL_delay queue_delay MAC_delay chn_delay up_delay]\n#" foreach fid [range 1 $num] { if {$who == "tcp"} { set temp $fl($fid) } else { set temp $udp_fl($fid) } puts $file(finish) " [format $var_val var_${temp2}_$fid $temp \ $stat($who,var,ll,$fid) $stat($who,var,ifq,$fid) $stat($who,var,mac,$fid) \ $stat($who,var,channel,$fid) $stat($who,var,up,$fid)]" } if {$opt(onoff) == 2 && $who == "tcp"} { foreach fid [range [expr -$num] -1] { puts $file(finish) " [format $var_val var_${temp2}_$fid $fl($fid) \ $stat($who,var,ll,$fid) $stat($who,var,ifq,$fid) $stat($who,var,mac,$fid) \ $stat($who,var,channel,$fid) $stat($who,var,up,$fid)]" } }}proc delay_voip_stat {num} { global file line num_voip fl voip_fl stat opt nd global delaydistup delaydistdown BINSIZE NUMBINS maxup maxdown set dly_voip_temp [list 0 1 2 3 4 5 6 7 8 9 10 11] set dly_voip_dim [list 12 12 12.8 12.8 12.8 12.8 12.8 12.8 12.8 12.8 12.8 12.8] set dly_voip_dim_tit [list 12 12 12 12 12 12 12 12 12 12 12 12] set dly_voip_tip [list s s f f f f f f f f f f] set var_voip_tip [list s s g g g g g g g g g g] set dly_voip_val "" set dly_voip_tit "" foreach k $dly_voip_temp { append dly_voip_val "%[lindex $dly_voip_dim $k][lindex $dly_voip_tip $k] " append var_voip_val "%[lindex $dly_voip_dim_tit $k][lindex $var_voip_tip $k] " append dly_voip_tit "%[lindex $dly_voip_dim_tit $k]s " } puts $file(finish) "#\n#$line\n#" puts $file(finish) "#\t\t\t\t VoIP DELAY Statistics\n#" puts $file(finish) "# [format $dly_voip_tit flow_id direction LL_delay_S queue_delay_S MAC_delay_S chn_delay_S up_delay_S LL_delay_D queue_delay_D MAC_delay_D chn_delay_D up_delay_D]\n#" foreach fid [range 1 $num] { if { $stat(voipc,time_count,$fid) == 0 } { set stat(voipc,time_count,$fid) 1 } if { $stat(voips,time_count,$fid) == 0 } { set stat(voips,time_count,$fid) 1 } puts $file(finish) " [format $dly_voip_val dly_voce_$fid $voip_fl($fid) \ [expr $stat(voipc,delay,ll,$fid) / $stat(voipc,time_count,$fid).0] \ [expr $stat(voipc,delay,ifq,$fid) / $stat(voipc,time_count,$fid).0] \ [expr $stat(voipc,delay,mac,$fid) / $stat(voipc,time_count,$fid).0] \ [expr $stat(voipc,delay,channel,$fid) / $stat(voipc,time_count,$fid).0] \ [expr $stat(voipc,delay,up,$fid) / $stat(voipc,time_count,$fid).0] \ [expr $stat(voips,delay,ll,$fid) / $stat(voips,time_count,$fid).0] \ [expr $stat(voips,delay,ifq,$fid) / $stat(voips,time_count,$fid).0] \ [expr $stat(voips,delay,mac,$fid) / $stat(voips,time_count,$fid).0] \ [expr $stat(voips,delay,channel,$fid) / $stat(voips,time_count,$fid).0] \ [expr $stat(voips,delay,up,$fid) / $stat(voips,time_count,$fid).0]]" } puts $file(finish) "#\n#$line\n#" puts $file(finish) "#\t\t\t\t VoIP JITTER Statistics\n#" puts $file(finish) "# [format $dly_voip_tit flow_id direction LL_delay_S queue_delay_S MAC_delay_S chn_delay_S up_delay_S LL_delay_D queue_delay_D MAC_delay_D chn_delay_D up_delay_D]\n#" foreach fid [range 1 $num] { puts $file(finish) " [format $var_voip_val var_voce_$fid $voip_fl($fid) \ $stat(voipc,var,ll,$fid) $stat(voipc,var,ifq,$fid) $stat(voipc,var,mac,$fid) $stat(voipc,var,channel,$fid) \ $stat(voipc,var,up,$fid) $stat(voips,var,ll,$fid) $stat(voips,var,ifq,$fid) $stat(voips,var,mac,$fid) \ $stat(voips,var,channel,$fid) $stat(voips,var,up,$fid)]" } # delay distribution set numup 0.0 set numdown 0.0 for { set i 0 } { $i <= $NUMBINS } { incr i } { set numup [expr $numup + $delaydistup($i)] set numdown [expr $numdown + $delaydistdown($i)] } set outlier [expr $NUMBINS + 1] set outliersup $delaydistup($outlier) set outliersdown $delaydistup($outlier) puts $file(finish) "#\n\n\n\n#$line\n#" puts $file(finish) "#\t\t\t\t VoIP DELAY Distribution" puts $file(finish) "# Samples up = [expr int($numup)] - Samples down = [expr int($numdown)]" puts $file(finish) "# Outliers up = $outliersup - Outliers down = $outliersdown" puts $file(finish) "# Max delay up = $maxup - Max delay down = $maxdown" puts $file(finish) "# bin infbin nup pdfup cumup ndown pdfdown cumdown" set cumup 0.0 set cumdown 0.0 set aveup 0.0 set avedown 0.0 for { set i 0 } { $i <= $NUMBINS } { incr i } { set nup $delaydistup($i) if { $nup > 0 } { set pdfup [expr $nup/$numup] set cumup [expr $cumup + $pdfup] set aveup [expr $aveup + $pdfup * ($i + 0.5) * $BINSIZE] } else { set pdfup 0.0 } set ndown $delaydistdown($i) if { $ndown > 0 } { set pdfdown [expr $ndown/$numdown] set cumdown [expr $cumdown + $pdfdown] set avedown [expr $avedown + $pdfdown * ($i + 0.5) * $BINSIZE] } else { set pdfdown 0.0 } if { $nup > 0 || $ndown > 0 } { puts $file(finish) [format "%5d %10.4f %6d %1.10f %1.10f %6d %1.10f %1.10f" \ $i [expr $i * $BINSIZE] $nup $pdfup $cumup $ndown $pdfdown $cumdown] } } puts $file(finish) "# average delay up = $aveup - average delay down = $avedown"}set NUMBINS 16000set BINSIZE 0.0001 ;# 0.1 millisecset maxup 0.0set maxdown 0.0for { set i 0 } { $i <= [expr $NUMBINS + 1] } { incr i } { set delaydistup($i) 0 set delaydistdown($i) 0} proc udpdelaysample { addr fid value } { global delaydistup delaydistdown BINSIZE NUMBINS maxup maxdown # puts "delay sample at $addr, fid $fid, value $value" # dir = 0 -> upstream / dir = 1 -> downstream set dir [string index $addr 0] set bin [expr int($value/$BINSIZE)] if { $bin > $NUMBINS } { puts "Warning: delay out of range : $value" set bin [expr $NUMBINS + 1] } if $dir { incr delaydistdown($bin) if { $value > $maxdown } { set maxdown $value } } else { incr delaydistup($bin) if { $value > $maxup } { set maxup $value } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -