#! /usr/bin/perl # $Id$ use strict; use warnings; my($IFDEV,$SECS)=@ARGV; $SECS||=8; my $IGNORE=qr/^(?:lo|sit|pan|tun|tap|wmaster|sixxs|virbr)\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 $/; 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; }