#!/bin/bash # **** License **** # Version: VPL 1.0 # # The contents of this file are subject to the Vyatta Public License # Version 1.0 ("License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://www.vyatta.com/vpl # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # This code was originally developed by Vyatta, Inc. # Portions created by Vyatta are Copyright (C) 2007 Vyatta, Inc. # All Rights Reserved. # # Author: Tom Grennan # Date: 2007 # # **** End License **** shopt -s extglob shopt -s nullglob declare progname=${0##*/} declare -a full_itfs=( /sys/class/net/+(eth|vmnet|wan|sit|lo)* ) declare -a itfs declare -i rx_bytes rx_packets rx_errors rx_dropped rx_over_errors multicast declare -i tx_bytes tx_packets tx_errors tx_dropped tx_carrier_errors collisions declare -i rx_missed_errors rx_fifo_errors _usage () { cat <<-EOF $progname [ INTERFACE ] EOF } _error () { ecode=$1 shift echo $@ if [ $ecode -eq 1 ] ; then echo _usage fi exit $ecode } if [ $# -gt 0 ] ; then if [[ $1 == --+(usage|help) ]] ; then _usage exit 0 else itfs=( $@ ) fi else itfs=( ${full_itfs[@]##*/} ) fi for itf in ${itfs[@]} ; do test -d /sys/class/net/$itf || \ _error 2 $itf: no such interface\! for stat in \ rx_bytes rx_packets rx_errors rx_dropped rx_over_errors multicast \ tx_bytes tx_packets tx_errors tx_dropped tx_carrier_errors collisions do full_stat=/sys/class/net/${itf}/statistics/${stat} if [ -r $full_stat ] ; then eval $stat=$(cat $full_stat) else eval $stat=0 fi done for stat in rx_missed_errors ; do full_stat=/sys/class/net/${itf}/statistics/${stat} if [ -r $full_stat ] ; then let $(( rx_dropped_errors += $(cat $full_stat) )) fi done for stat in rx_fifo_errors ; do full_stat=/sys/class/net/${itf}/statistics/${stat} if [ -r $full_stat ] ; then let $(( rx_over_errors += $(cat $full_stat) )) fi done printf -v rx_stats \ '%10d %10d %10d %10d %10d %10d' \ $rx_bytes \ $rx_packets\ $rx_errors \ $rx_dropped \ $rx_over_errors \ $multicast printf -v tx_stats \ '%10d %10d %10d %10d %10d %10d' \ $tx_bytes \ $tx_packets\ $tx_errors \ $tx_dropped \ $tx_carrier_errors \ $collisions ip -s addr show ${itf} | sed 's/^[0-9]*: //' cat <<-EOF RX: bytes packets errors dropped overrun mcast $rx_stats TX: bytes packets errors dropped carrier collisions $tx_stats EOF done # Local Variables: # mode: shell-script # sh-indentation: 4 # End: