#! /usr/local/bin/perl # oc32plentrains.pl inputfile interface # # create runlength summary of packets of equal size # 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); if($pplen == $plen){ $scount++; 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){ $plarray{$pplen,$scount}++; } $scount=1; $zcount++; } $pplen=$plen; } } } 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"\n"; printf"packet size runlen behavior:\n"; printf"plen\trlength\tfrequency\n"; printf"=======\t=======\t=========\n"; foreach $key ( sort numerically ( keys %plarray)) { ($plen, $rlength) = split( $;, $key ) ; if($plen > $maxplen){$maxplen=$plen;} if($rlength > $maxrlength){$maxrlength=$rlength;} } for ($plen=1; $plen<=$maxplen; $plen++){ for ($rlength=1; $rlength<=$maxrlength; $rlength++) { if($plarray{$plen,$rlength}){ printf"$plen\t$rlength\t%d\n",$plarray{$plen,$rlength}; $rsum++; $rsumsum=$rsumsum+($rlength*$plarray{$plen,$rlength}); } } } printf"sum=$rsumsum in $rsum plength\/runlength categories\n"; sub numerically { $a <=> $b;}