Initial multi-if version.
authorjkratoch <>
Fri, 24 Jul 2009 13:49:18 +0000 (13:49 +0000)
committerjkratoch <>
Fri, 24 Jul 2009 13:49:18 +0000 (13:49 +0000)
bin/traf [new file with mode: 0755]

diff --git a/bin/traf b/bin/traf
new file mode 100755 (executable)
index 0000000..a4f6300
--- /dev/null
+++ b/bin/traf
@@ -0,0 +1,65 @@
+#! /usr/bin/perl
+# $Id$
+
+use strict;
+use warnings;
+
+my($IFDEV,$SECS)=@ARGV;
+
+$SECS||=8;
+my $IGNORE=qr/^(?:lo|sit|pan|tun|tap)\d*$/;
+
+$|=1;
+# $if->{"rx"=>,"tx"=>}
+my %last;
+my $last_if="";
+my $dot;
+for (;;) {
+       local *F;
+       open F,"/proc/net/dev" or die;
+       my $dev=do { local $/; <F> or die; };
+       close F or die;
+       $dev=~s/^Inter-.*\n face .*\n// or die $dev;
+       my $smth;
+       while ($dev=~s/^\s*(\S+?):\s*(\d+)(?:\s+\d+){7}\s+(\d+)\s.*\n//) {
+               my($if,$rx,$tx)=($1,$2,$3);
+               next if $IFDEV && $if ne $IFDEV;
+               next if !$IFDEV && $if=~/^$IGNORE$/o;
+               $last{$if}||={};
+               my $last=$last{$if};
+               if (defined $last->{"rx"}) {
+                       if ($dot) {
+                               print "\n";
+                               $dot=0;
+                       }
+                       if ($last_if ne $if) {
+                               $last_if=$if;
+                               print "$if:\n";
+                       }
+                       # FIXME - done?
+                       # 1798512 37387
+                       # 2147483648      32058
+                       # 1800104 35797
+                       sub fmt($$)
+                       {
+                               my($now,$last)=@_;
+                               if ($now>=$last) {
+                                       return $now-$last;
+                               } else {
+                                       return "=$now";
+                               }
+                       }
+                       print fmt($rx,$last->{"rx"})."\t".fmt($tx,$last->{"tx"})."\n";
+               }
+               $last->{"rx"}=$rx;
+               $last->{"tx"}=$tx;
+               $smth++;
+       }
+       die $dev if $dev;
+       if (!$smth) {
+               print ".";
+               $dot++;
+               $last_if="";
+       }
+       sleep $SECS;
+}