raw2gp
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. eval 'exec perl -I ./bin -S $0 ${1+"$@"}' #-*-Perl-*-
  2. if 0;
  3. require 5.001;
  4. ($progname) = ($0 =~ m!([^/]+)$!);
  5. sub usage {
  6.     die <<END;
  7. usage: $progname [options] [trace files...]
  8. options:
  9.     -a plot acks
  10.     -s SCALE    scale TCP sequence numbers by SCALE
  11.     -m MODULUS  treat TCP sequence numbers as mod MODULUS
  12.     -g use gnuplot
  13.     -q show queueing delay by connecting lines (only for xgraph)
  14. #    -l show packet length
  15. Traditional ``wrapping'' ns plots (as called from the test scripts)
  16. can be generated with -s 0.01 -m 90.
  17. END
  18. };
  19. require 'getopts.pl';
  20. &Getopts('ags:m:ql') || usage;
  21. # calculate offsets.  Do we need this?
  22. # $offset = int($modulus / 10 + 1) * 10;
  23. # $offset = 1;
  24. # Default options args
  25. $modulus = defined($opt_m) ? $opt_m : 2 ** 31;
  26. $scale = defined($opt_s) ? $opt_s : 1;
  27. $plot_acks = defined($opt_a);
  28. # XXXXXX
  29. # XXX This is going to break because we have to set @INC correctly
  30. # XXX We need a clean way to set this for all scripts.
  31. # XXXXXX
  32. require 'dynamics.pl';
  33. if (defined($opt_g)) {
  34.     require 'gnuplot.pl';
  35.     if (defined($opt_q)) {
  36.         warn 'ouch';
  37.         undef $opt_q;
  38.     }
  39. } else {
  40.     require 'xgraph.pl';
  41. }
  42. $maxY = 0;
  43. @p = @a = @d = (); # @p:  list of "$x $y" pairs for data packets
  44. # @a:  list of "$x $y" pairs for acks
  45. # @d:  .. drops
  46. %q_time_seg = ();
  47. $file = $acks = '';
  48. sub translate_point {
  49.     my($time, $seq, $flow) = @_;
  50.     return ($time, $flow + ($seq % $modulus) * $scale);
  51. }
  52. ($minY, $maxY) = (9999999, -9999999);
  53. while (<>) {
  54.     $dfile = $ARGV;
  55.     next if /rtProto/;
  56.     @F = split;
  57.     /testName/ && do {
  58. $file = $F[2];
  59. $file =~ s/_/-/g;
  60. next;
  61.     };
  62.     /^[+-] / && do {
  63. $maxY = $F[7] if ($maxY < $F[7]);
  64. $is_ack = ($F[4] eq 'ack');
  65. next if ($is_ack && !$plot_acks);
  66. ($x, $y) = translate_point(@F[1, 10, 7]);
  67. if (defined($opt_q)) { # XXX intense xgraph-ism here
  68.     if (/^+/) {
  69. $statement = undef;
  70. $q_time_seg{$is_ack,$y} = $x;
  71.     };
  72.     $statement = "move $q_time_seg{$is_ack,$y} $yndraw $x $yn"
  73. if (/^-/);
  74. } else {
  75.     $statement = "$x $yn";
  76. };
  77. if (defined($statement)) {
  78.     if ($is_ack) { 
  79. push(@a, $statement);
  80.     } else {
  81.         push(@p, $statement);
  82.     };
  83. };
  84. $minY = $y if ($minY > $y);
  85. $maxY = $y if ($maxY < $y);
  86. next;
  87.     };
  88.     /^d / && do {
  89. ($x, $y) = translate_point(@F[1, 10, 7]);
  90. push(@d, "$x $yn");
  91. $minY = $y if ($minY > $y);
  92. $maxY = $y if ($maxY < $y);
  93. next;
  94.     };
  95.     /^v / && (parseDynamics(@F), next);
  96. }
  97. if ($file eq '') {
  98. ($file) = ($dfile =~ m!([^/]+)$!);
  99. }
  100. plotPreamble(STDOUT, $file, 'time', ($#p < $[ ? '0:2' : ''), 'packets', '');
  101. plot(STDOUT, 0, 'packets', 'w points 1 5', @p);
  102. if ($opt_g) {
  103.     plot(STDOUT, 0, 'acks',    'w dots', @a);
  104. } else {
  105.     # for xgraphs, insert dummy data sets so we get X's for marks in data-set 4
  106.     plot(STDOUT, 0, 'acks', 'plot 2', "0 1n", @a);
  107. }
  108. plot(STDOUT, 0, 'drops',   'w points 1 4', @d);
  109. plotDynamics(STDOUT, $minY, $maxY);
  110. plotPostamble(STDOUT);
  111. exit;