--- /dev/null
+#! /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;
+}