BW.out.pl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:4k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #!/usr/bin/perl -w
  2. #
  3. # Copyright (C) 2001 by USC/ISI
  4. # All rights reserved.
  5. #
  6. # Redistribution and use in source and binary forms are permitted
  7. # provided that the above copyright notice and this paragraph are
  8. # duplicated in all such forms and that any documentation, advertising
  9. # materials, and other materials related to such distribution and use
  10. # acknowledge that the software was developed by the University of
  11. # Southern California, Information Sciences Institute.  The name of the
  12. # University may not be used to endorse or promote products derived from
  13. # this software without specific prior written permission.
  14. #
  15. # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  16. # WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  17. # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18. #
  19. # This work is supported by DARPA through SAMAN Project
  20. # (http://www.isi.edu/saman/), administered by the Space and Naval
  21. # Warfare System Center San Diego under Contract No. N66001-00-C-8066
  22. #
  23. sub usage {
  24.     print STDERR <<END;
  25.   usage: $0  [-w FilenameExtention]
  26.     Options:
  27.             -w string  specify the filename extention
  28. END
  29.     exit 1;
  30. }
  31. BEGIN {
  32.     $dblibdir = "./";
  33.     push(@INC, $dblibdir);
  34. }
  35. use DbGetopt;
  36. require "dblib.pl";
  37. my(@orig_argv) = @ARGV;
  38. &usage if ($#ARGV < 0);
  39. my($prog) = &progname;
  40. my($dbopts) = new DbGetopt("w:?", @ARGV);
  41. my($ch);
  42. while ($dbopts->getopt) {
  43.     $ch = $dbopts->opt;
  44.     if ($ch eq 'w') {
  45. $fext = $dbopts->optarg;
  46.     } else {
  47. &usage;
  48.     };
  49. };
  50. $foutbw=join(".",$fext,"outbound.BW");
  51. $foutdelay=join(".",$fext,"outbound.delay");
  52. $oldc="";
  53. $olds="";
  54. $c="";
  55. $s="";
  56. $c1="";
  57. $s1="";
  58. $d=0;
  59. $a=0;
  60. $oldq=0;
  61. $i=0;
  62. $j=0;
  63. local(@datan);
  64. local(@n);
  65. local(@dataq);
  66. local(@q);
  67. #estimate delay and bottleneck bandwidth for outbound traffic
  68. open(OUTBW,"> $foutbw") || die("cannot open $foutbwn");
  69. open(OUTDELAY,"> $foutdelay") || die("cannot open $foutdelayn");
  70. while (<>) {
  71. ($client,$server,$timed,$timea,$seq) = split(' ',$_);
  72. $gap=$seq - $oldq;
  73. #the gap between two back-to-back packets should be less than 1ms
  74. $thresh=$d + 0.001;
  75.         #estimate delay between ISI server and remote clients
  76. $delay=$timea - $timed;
  77. #extra check: RTT should be at least 1ms
  78. if ($delay > 0.001) {
  79.         if (($c1 ne $client ) || ($s1 ne $server)) {
  80.          if ( $j gt 0 ) {
  81.     @dataq = sort numerically @q;
  82.     $m=int($j/2);
  83. #     print OUTDELAY "$c1 $s1 $dataq[$m]n";
  84. $onewayD=$dataq[$m]/2.0;
  85.                          print OUTDELAY "$onewayDn";
  86. }
  87. $#q=0;
  88. $q[0]=$delay;
  89. $j=1;
  90. } else {
  91. $q[$j]=$delay;
  92. $j=$j + 1;
  93. }
  94. }
  95. $c1=$client;
  96. $s1=$server;
  97.         #estimate bottleneck bandwidth between ISI server and remote clients
  98. #        if ( ($gap eq 1460) && ($client eq $oldc) && ($server eq $olds) && ($timed lt $thresh)) {
  99.         if ( ($client eq $oldc) && ($server eq $olds) && ($timed lt $thresh)) {
  100. $gap1=$timed - $d;
  101. $gap2=$timea - $a;
  102.          if ( $gap2 gt $gap1) {
  103.          if (($c ne $client) || ($s ne $server)) {
  104.   #at least 3 samples to take the medium
  105.          if ($i gt 3 ) {
  106.     @datan = sort numerically @n;
  107.     $m=int($i/2);
  108. # $bw=0.01168/$datan[$m];
  109.                                         #take the minimum instead of medium
  110. # $bw=0.01168/$datan[$#n];
  111. $bw=$datan[$#n];
  112. if ( $bw lt 100) {
  113. #     print OUTBW "$c $s  $bwn";
  114.       print OUTBW "$bwn";
  115. }
  116. }
  117. $#n=0;
  118. # $n[0]=$gap2;
  119. $n[0]=($gap*8)/($gap2*1000000);
  120. $i=1;
  121. } else {
  122. # $n[$i]=$gap2;
  123. $n[$i]=($gap*8)/($gap2*1000000);
  124. $i=$i + 1;
  125. }
  126. $c=$client;
  127. $s=$server;
  128. }
  129. }
  130. $oldc=$client;
  131. $olds=$server;
  132. $d=$timed;
  133. $a=$timea;
  134. $oldq=$seq;
  135. }
  136. close(OUTBW);
  137. close(OUTDELAY);
  138. sub numerically { $a <=> $b; }