ontime.pl
来自「一款用来进行网络模拟的软件」· PL 代码 · 共 546 行
PL
546 行
#!/usr/bin/perl# get arguments ontime.pl <duration> <filename> <#i> <retries>$simtime = shift; # length of simulation run$filename = shift; # file to write into$i = shift; # run #$retries = shift; # number of retries (0,1,..5)print "$i, $simtime, $filename $retries\n";$linkrate = 10000000;$pktsize = 1040; #TCP#$pktsize = 512; #CBR#get the totalpackets and numrexmit'ed packets number# this method is inaccurate compared to getting pkt num from ns trace outfile#$ndatapack = 0;#$nrexmitpack = 0;# for tracing seqno and cwnd valuesopen(SEQ, ">seqno.$filename.$i") || die "Can't open seqno.$filename.$retries.$i\n";#open(CWND, ">cwnd.$filename.$i") || die "Can't open seqno.$filename.$retries.$i\n";#open file for writing/appendingopen(LOG1, ">>$filename") || die "Can't open $filename\n";open(LOG2, ">>$filename.stat") || die "Can't open $filename.stat\n";open(NSTRACE, "case0.tcp_trace.$i") || die "Can't open case0.tcp_trace.$i\n";while ($temp = <NSTRACE>) { chomp($temp); @line = split " ", $temp; $var = @line[5]; $val = @line[6]; #if ($var eq "ndatapack_") { #$ndatapack = $val; #} #elsif ($var eq "nrexmitpack_") { #$nrexmitpack = $val; #} if ($var eq "t_seqno_") { print SEQ "@line[0] $val\n"; } #elsif ($var eq "cwnd_") { #print CWND "@line[0] $val\n"; #}} #print ("ndatapack= $ndatapack, nrexmitpack = $nrexmitpack\n");#$pktrecvd = $ndatapack - $nrexmitpack;#print ("pktrecvd = $pktrecvd\n");#$datarecvd = $pktrecvd * $pktsize ; # in bytes#print("datarecvd = $datarecvd\n");# find total num of pkts recvd at sink from tracefile# this doesn't work as the tracefile doesn't seem to be tracing recvs at the agent layer (TCP)$bytenum = 0;open(TRFILE, "case0.tr") || die "Can't open case0.tr\n";while ($temp = <TRFILE>) { chomp($temp); @line = split " ", $temp; $op = @line[0]; $s = @line[2]; $d = @line[3]; if ($op eq "r") { if ($s == 0 && $d == 1 ) { $p = @line[4]; if (($p eq "tcp") || ($p eq "cbr")) { #if ($s == 0 && $d == 1 ) { $tcppkts = @line[10]; } #if (($op eq "r") || ($op eq "e")) { #if ($s == 0 && $d == 1 ) { $bytenum = $bytenum + @line[5]; } } }print "total tcp pkts recvd = $tcppkts\n";$datarecvd = $tcppkts * $pktsize ; # in bytesprint("total tcp bytes recvd = $datarecvd\n");print "total link bytes recvd = $bytenum\n";# calculate on and off times from timer state output# first get the ON/OFF timestamps from tracefile#for ontime distribution$a1 = 0; # less than 1$a2 = 0;$a3 = 0;$a4 = 0; # between 1 and 5$a5 = 0; # between 5 and 10$a6 = 0; # between 10 and 50$a7 = 0; # more than 50$a8 = 0;$a9 = 0;$a10 = 0; # less than 1$a11 = 0;$a12 = 0;$a13 = 0; # between 1 and 5$a14 = 0; # between 5 and 10$a15 = 0; # between 10 and 50$a16 = 0; # more than 50$a17 = 0;$a18 = 0;$a19 = 0;$a20 = 0;$a21 = 0;$a22 = 0;$a23 = 0;$a24 = 0;$a25 = 0;$a26 = 0;#for offtime distribution$p1 = 0; # less than 1$p2 = 0;$p3 = 0;$p4 = 0; # between 1 and 5$p5 = 0; # between 5 and 10$p6 = 0; # between 10 and 50$p7 = 0; # more than 50$p8 = 0;$p9 = 0;$p10 = 0; # less than 1$p11 = 0;$p12 = 0;$p13 = 0; # between 1 and 5$p14 = 0; # between 5 and 10$p15 = 0; # between 10 and 50$p16 = 0; # more than 50$p17 = 0;$p18 = 0; # between 1 and 5$p19 = 0; # between 5 and 10$p20 = 0; # between 10 and 50$p21 = 0;open(STATES, "+< states.tr") || die "Can't open states.tr\n";$offtime = 0;$ontime = 0;$temp = <STATES>;chomp($temp);@line = split " ", $temp;$t1 = @line[1]; $d1 = @line[7]; $timer1 = @line[3]; $max = 0;$num = 0;if ($d1 > $max) { $max = $d1;}while ($temp = <STATES>) { chomp($temp); @line = split " ", $temp; $t2 = @line[1]; $d2 = @line[7]; $timer2 = @line[3]; if ($d2 > $max) { $max = $d2; } $old_ontime = $ontime; $old_offtime = $offtime; #print "old_ontime = $ontime; old_offtime = $offtime\n"; #compare_OR_onoff_times($t1, $d1, $timer1, $t2, $d2, $timer2, $ontime, $offtime); # state is on if either timer1 or timer2 is on if ($timer1 eq $timer2) { #same timer $ontime += $d1; $offtime += $t2 - ($t1 + $d1); $t1 = $t2; $d1 = $d2; $timer1 = $timer2; $num++; } else { # different timer if ($t2 >= ($t1 + $d1)) { $ontime += $d1; $offtime += $t2 - ($t1 + $d1); $t1 = $t2; $d1 = $d2; $timer1 = $timer2; $num++; } else { # t2 < ($t1+$d1) if ( $t1+$d1 >= $t2+$d2 ) { } else { # t1+d1 < t2+d2 $ontime += $t2 - $t1; $t1 = $t2; $d1 = $d2; $timer1 = $timer2; $num++; } } } #print "ontime = $ontime; offtime = $offtime\n"; $delta_ontime = $ontime - $old_ontime; $delta_offtime = $offtime - $old_offtime; # creating distributions for on and off time if ($delta_ontime > 0) { if ($delta_ontime < 2) { $a1++; } elsif ($delta_ontime >= 2 && $delta_ontime < 4) { $a2++; } elsif ($delta_ontime >= 4 && $delta_ontime < 6) { $a3++; } elsif ($delta_ontime >= 6 && $delta_ontime < 8) { $a4++; } elsif ($delta_ontime >= 8 && $delta_ontime < 10) { $a5++; } elsif ($delta_ontime >= 10 && $delta_ontime < 12) { $a6++; } elsif ( $delta_ontime >= 12 && $delta_ontime < 14) { $a7++; } elsif ($delta_ontime >= 14 && $delta_ontime < 16) { $a8++; } elsif ( $delta_ontime >= 16 && $delta_ontime < 18) { $a9++; } elsif ($delta_ontime >= 18 && $delta_ontime < 20) { $a10++; } elsif ($delta_ontime >= 20 && $delta_ontime < 22) { $a11++; } elsif ($delta_ontime >= 22 && $delta_ontime < 24) { $a12++; } elsif ($delta_ontime >= 24 && $delta_ontime < 26) { $a13++; } elsif ($delta_ontime >= 26 && $delta_ontime < 28) { $a14++; } elsif ($delta_ontime >= 28 && $delta_ontime < 30) { $a15++; } elsif ( $delta_ontime >= 30 && $delta_ontime < 32) { $a16++; } elsif ($delta_ontime >= 32 && $delta_ontime < 34) { $a17++; } elsif ( $delta_ontime >= 34 && $delta_ontime < 36) { $a18++; } elsif ($delta_ontime >= 36 && $delta_ontime < 38) { $a19++; } elsif ( $delta_ontime >= 38 && $delta_ontime < 40) { $a20++; } elsif ($delta_ontime >= 40 && $delta_ontime < 42) { $a21++; } elsif ( $delta_ontime >= 42 && $delta_ontime < 44) { $a22++; } elsif ($delta_ontime >= 44 && $delta_ontime < 46) { $a23++; } elsif ($delta_ontime >= 46 && $delta_ontime < 48) { $a24++; } elsif ($delta_ontime >= 48 && $delta_ontime < 50) { $a25++; } elsif ($delta_ontime >= 50) { $a26++; } } #print "delta_ontime=$delta_ontime a1=$a1 a2=$a2 a3=$a3 b=$b c=$c d=$d e=$e\n"; #now for distribution for offtimes if ($delta_offtime > 0) { if ($delta_ontime < 0.2) { $p1++; } elsif ($delta_ontime >= 0.2 && $delta_ontime < 0.4) { $p2++; } elsif ($delta_ontime >= 0.4 && $delta_ontime < 0.6) { $p3++; } elsif ($delta_ontime >= 0.6 && $delta_ontime < 0.8) { $p4++; } elsif ($delta_ontime >= 0.8 && $delta_ontime < 1.0) { $p5++; } elsif ($delta_ontime >= 1.0 && $delta_ontime < 1.2) { $p6++; } elsif ( $delta_ontime >= 1.2 && $delta_ontime < 1.4) { $p7++; } elsif ($delta_ontime >= 1.4 && $delta_ontime < 1.6) { $p8++; } elsif ( $delta_ontime >= 1.6 && $delta_ontime < 1.8) { $p9++; } elsif ($delta_ontime >= 1.8 && $delta_ontime < 2.0) { $p10++; } elsif ($delta_ontime >= 2.0 && $delta_ontime < 2.2) { $p11++; } elsif ($delta_ontime >= 2.2 && $delta_ontime < 2.4) { $p12++; } elsif ($delta_ontime >= 2.4 && $delta_ontime < 2.6) { $p13++; } elsif ($delta_ontime >= 2.6 && $delta_ontime < 2.8) { $p14++; } elsif ($delta_ontime >= 2.8 && $delta_ontime < 3.0) { $p15++; } elsif ( $delta_ontime >= 3.0 && $delta_ontime < 3.2) { $p16++; } elsif ($delta_ontime >= 3.2 && $delta_ontime < 3.4) { $p17++; } elsif ( $delta_ontime >= 3.4 && $delta_ontime < 3.6) { $p18++; } elsif ($delta_ontime >= 3.6 && $delta_ontime < 3.8) { $p19++; } elsif ( $delta_ontime >= 3.8 && $delta_ontime < 4.0) { $p20++; } elsif ($delta_ontime >= 4.0) { $p21++; } } #print "delta_offtime=$delta_offtime p1=$p1 p2=$p2 p3=$p3 q=$q r=$r s=$s t=$t\n"; }# check for end of sim casesif (($t1+$d1) > $simtime) { $ontime += $simtime - $t1;} else { $ontime += $d1;} $num++;# creating distributions for on and off timeif ($delta_ontime < 2) { $a1++;} elsif ($delta_ontime >= 2 && $delta_ontime < 4) { $a2++;} elsif ($delta_ontime >= 4 && $delta_ontime < 6) { $a3++;} elsif ($delta_ontime >= 6 && $delta_ontime < 8) { $a4++;} elsif ($delta_ontime >= 8 && $delta_ontime < 10) { $a5++;} elsif ($delta_ontime >= 10 && $delta_ontime < 12) { $a6++;} elsif ( $delta_ontime >= 12 && $delta_ontime < 14) { $a7++;} elsif ($delta_ontime >= 14 && $delta_ontime < 16) { $a8++;} elsif ( $delta_ontime >= 16 && $delta_ontime < 18) { $a9++;} elsif ($delta_ontime >= 18 && $delta_ontime < 20) { $a10++;} elsif ($delta_ontime >= 20 && $delta_ontime < 22) { $a11++;} elsif ($delta_ontime >= 22 && $delta_ontime < 24) { $a12++;} elsif ($delta_ontime >= 24 && $delta_ontime < 26) { $a13++;} elsif ($delta_ontime >= 26 && $delta_ontime < 28) { $a14++;} elsif ($delta_ontime >= 28 && $delta_ontime < 30) { $a15++;} elsif ( $delta_ontime >= 30 && $delta_ontime < 32) { $a16++;} elsif ($delta_ontime >= 32 && $delta_ontime < 34) { $a17++;} elsif ( $delta_ontime >= 34 && $delta_ontime < 36) { $a18++;} elsif ($delta_ontime >= 36 && $delta_ontime < 38) { $a19++; } elsif ( $delta_ontime >= 38 && $delta_ontime < 40) { $a20++;} elsif ($delta_ontime >= 40 && $delta_ontime < 42) { $a21++;} elsif ( $delta_ontime >= 42 && $delta_ontime < 44) { $a22++;} elsif ($delta_ontime >= 44 && $delta_ontime < 46) { $a23++;} elsif ($delta_ontime >= 46 && $delta_ontime < 48) { $a24++;} elsif ($delta_ontime >= 48 && $delta_ontime < 50) { $a25++; } elsif ($delta_ontime >= 50) { $a26++;} close(STATES);print LOG2 "$a1 $a2 $a3 $a4 $a5 $a6 $a7 $a8 $a9 $a10 $a11 $a12 $a13 $a14 $a15 $a16 $a17 $a18 $a19 $a20 $a21 $a22 $a23 $a24 $a25 $a26 $p1 $p2 $p3 $p4 $p5 $p6 $p7 $p8 $p9 $p10 $p11 $p12 $p13 $p14 $p15 $p16 $p17 $p18 $p19 $p20 $p21 $num\n";close(LOG2);print("Ontime: $ontime\n");print ("Offtime: $offtime\n");#calculate the goodput$tcpgoodput1 = ($datarecvd * 8) / $simtime ;$tcpgoodput2 = ($datarecvd * 8) / $ontime ;$linkthruput1 = ($bytenum * 8) / $simtime;$linkthruput2 = ($bytenum * 8) / $ontime;$idealput = $linkrate * ($ontime/$simtime);#print LOG "Run$i(in bps)#\tOntime: $ontime Offtime: $offtime Linkrate(bps): $linkrate#\tTotalPktsRecvd: $pktrecvd TotalBytesRecvd: $datarecvd #\tGoodput1: (total_bytes*8)/simtime = $goodput1 (in bps)#\tGoodput2: (total_bytes*8)/ONtime = $goodput2 (in bps)#\tidealput: linkrate * ONtime/simtime = $idealput (in bps)\n\n";printf LOG1 "%.4f %.4f %.4f %.4f %.4f %.4f\n", $ontime,$tcpgoodput1,$tcpgoodput2,$linkthruput1,$linkthruput2,$idealput;close(LOG1);sub put_in_bin () { $dur2 = shift; $a1 = shift; $a2 = shift; $a3 = shift; $b = shift; $c = shift; $d = shift; $e = shift; if ($dur2 < 0.25) { $a1++; } elsif ($dur2 >= 0.25 && $dur2 < 0.5) { $a2++; } elsif ($dur2 >= 0.5 && $dur2 < 1) { $a3++; } elsif ( $dur2 >= 1 && $dur2 < 5) { $b++; } elsif ($dur2 >= 5 && $dur2 < 10) { $c++; } elsif ($dur2 >= 10 && $dur2 < 50) { $d++; } elsif ($dur2 >=50) { $e++; }} # state is ON when either timer1 or timer2 is ONsub compare_OR_onoff_times () { $t1 = shift; $d1 = shift; $timer1 = shift; $t2 = shift; $d2 = shift; $timer2 = shift; $ontime = shift; $offtime = shift; if ($timer1 eq $timer2) { #same timer $ontime += $d1; $offtime += $t2 - ($t1 + $d1); $t1 = $t2; $d1 = $d2; $timer1 = $timer2; print "type1\n"; return; } else { # different timer if ($t2 >= ($t1 + $d1)) { $ontime += $d1; $offtime += $t2 - ($t1 + $d1); $t1 = $t2; $d1 = $d2; $timer1 = $timer2; print "type2\n"; return; } else { # t2 < ($t1+$d1) if ( $t1+$d1 >= $t2+$d2 ) { print "type3\n"; return; } else { # t1+d1 < t2+d2 $ontime += $t2 - $t1; $t1 = $t2; $d1 = $d2; $timer1 = $timer2; print "type4\n"; return; } } }}# state is on only when both timer1 and timer2 is ONsub compare_AND_onoff_times { #calculate the ontime by first calculating the offtime # same timer if ($timer1 eq $timer2) { #$offtime += $dur1; $start1 = $start2; $dur1 = $dur2; $end1 = $end2; $timer1 = $timer2; print("Case1: Offtime = $offtime\n"); } else { #if ($end1 > $end2) { # continue; #} if ($end1 <= $start2) { $offtime += $dur1; $start1 = $start2; $dur1 = $dur2; $end1 = $end2; $timer1 = $timer2; print("Case2: Offtime = $offtime\n"); } elsif (($end1 > $start2) && ($end1 <= $end2)) { $offtime += $start2 - $start1; $start1 = $start2; $dur1 = $dur2; $end1 = $end2; $timer1 = $timer2; print("Case3: Offtime = $offtime\n"); } else { # $end1 > $end2 $flag = 1; } } print("Offtime = $offtime\n");}if ($flag == 1) { if ($end1 > $simtime) { $offtime += $simtime - $start1; } else { $offtime += $dur1; } } else { # we have to add the remaining off duration now if (($start2 + $dur2) > $simtime) { $offtime += $simtime - $start2; } else { $offtime += $dur2; } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?