#! /usr/local/bin/perl # oc32plentrainsc.pl inputfile interface # # class based plen runlength $class{0}=41; $class{1}=81; $class{2}=161; $class{3}=321; $class{4}=641; $class{5}=1501; $class{6}=4401; $lastclass=6; open(infile,$ARGV[0]) || die("Can't open input file\n"); $if=$ARGV[1]; # requested interface # skip header while(read(infile,$record,512)){ $cellcount=vec($record,2,8)*256+vec($record,3,8); $interface=vec($record,4,8)*256+vec($record,5,8); printf stderr "$interface\t$cellcount\n"; # Start reading in entries for ($i = 1; $i <= 17408; $i++) { read(infile,$record,60) || exit; if($i > $cellcount){next;} if(($if > 0) && ($if != $interface)){next;} if(vec($record,18,8) == 0x08){ $plen = vec($record,22,8)*256+vec($record,23,8); # determine length class into $cl for ($cl = 0; $cl <= $lastclass; $cl++) { if($plen < $class{$cl}){last;} } # determine class train behavior if($pclass == $cl){ $scount++; # serial count if($zcount> 0){ $zarray{$zcount}++; # printf"$pcount\t%d\t%d\t%d\n",$plen,$zcount,$zarray{$zcount}; } $zcount=0; # reset $zcount } else { if($scount > 1){ $clarray{$pclass,$scount}++; } $scount=1; $zcount++; } $pclass=$cl; } } } printf"total number of packets: $pcount\n\n"; printf"packet size no-runlen behavior:\n"; printf"plen\trlength\tfrequency\n"; printf"=======\t=======\t=========\n"; foreach $key ( sort numerically ( keys %zarray)) { printf" n\/a\t%d\t%d\n",$key,$zarray{$key}; $zsum++; $zsumsum=$zsumsum+(($key-1)*$zarray{$key}); } printf"sum=$zsumsum in $zsum runlength categories\n"; printf"\nclass\trunlen\tcount\trange\n"; printf"=======\t=======\t=======\t=========\n"; foreach $key ( sort numerically ( keys %clarray)) { ($cl, $runlength) = split( $;, $key ) ; if($cl > $maxcl){$maxcl=$cl;} if($runlength > $maxrunlength){$maxrunlength=$runlength;} } for ($cl=0; $cl<=$maxcl; $cl++){ for ($runlength=1; $runlength<=$maxrunlength; $runlength++) { if($clarray{$cl,$runlength}){ printf"$cl\t$runlength\t%d\t%d-%d\n",$clarray{$cl,$runlength},$class{$cl-1}+0,$class{$cl}-1; $rsum++; $rsumsum=$rsumsum+($runlength*$clarray{$cl,$runlength}); } } } printf"sum=$rsumsum in $rsum plengthclass\/runlength categories\n"; sub numerically { $a <=> $b;}