summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Grennan <tgrennan@vyatta.com>2007-09-17 17:04:09 -0700
committerTom Grennan <tgrennan@vyatta.com>2007-09-17 17:04:09 -0700
commitee7a0bb124bf9b33e3263c3330fccba98f3d0189 (patch)
tree2618a8da31c15b20656f1d17672124705c57e499
parent796460d8696981a26c4ad271b9ce2e1962aa23fc (diff)
downloadvyatta-op-ee7a0bb124bf9b33e3263c3330fccba98f3d0189.tar.gz
vyatta-op-ee7a0bb124bf9b33e3263c3330fccba98f3d0189.zip
add show_interfaces scripts
-rw-r--r--Makefile.am8
-rwxr-xr-xscripts/show_interfaces74
-rwxr-xr-xscripts/show_interfaces_ethernet112
-rwxr-xr-xscripts/show_interfaces_loopback76
-rwxr-xr-xscripts/show_interfaces_statistics123
-rwxr-xr-xscripts/show_interfaces_summary55
-rwxr-xr-xscripts/show_interfaces_system75
-rwxr-xr-xscripts/show_interfaces_tunnel76
8 files changed, 599 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
index 83419df..87c323d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -4,6 +4,14 @@ completiondir = /etc/bash_completion.d
completion_DATA = etc/bash_completion.d/vyatta-op
opdir = $(datadir)/vyatta-op/templates
+bin_SCRIPTS = scripts/show_interfaces
+bin_SCRIPTS += scripts/show_interfaces_ethernet
+bin_SCRIPTS += scripts/show_interfaces_loopback
+bin_SCRIPTS += scripts/show_interfaces_statistics
+bin_SCRIPTS += scripts/show_interfaces_summary
+bin_SCRIPTS += scripts/show_interfaces_system
+bin_SCRIPTS += scripts/show_interfaces_tunnel
+
cpiop = find . ! -regex '\(.*~\|.*\.bak\|.*\.swp\|.*\#.*\#\)' -print0 | \
cpio -0pd
diff --git a/scripts/show_interfaces b/scripts/show_interfaces
new file mode 100755
index 0000000..1a8d804
--- /dev/null
+++ b/scripts/show_interfaces
@@ -0,0 +1,74 @@
+#!/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 ****
+
+test -f /etc/default/vyatta && source /etc/default/vyatta
+: ${vyatta_bindir:=/opt/vyatta/bin}
+
+shopt -s extglob
+shopt -s nullglob
+
+declare progname=${0##*/}
+declare -a full_itfs=( /sys/class/net/+(eth|vmnet|lo|sit|wan)* )
+declare -a itfs
+
+_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
+ elif [[ $1 != +(eth|vmnet|lo|sit|wan)* ]] ; then
+ _error 2 \""$1"\" is not an interface name\!
+ elif ! test -d /sys/class/net/$1 ; then
+ _error 2 $1: no such interface\!
+ else
+ itfs=( $1 )
+ shift
+ fi
+else
+ itfs=( ${full_itfs[@]##*/} )
+fi
+
+$vyatta_bindir/show_interfaces_statistics ${itfs[@]}
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 4
+# End:
diff --git a/scripts/show_interfaces_ethernet b/scripts/show_interfaces_ethernet
new file mode 100755
index 0000000..d592018
--- /dev/null
+++ b/scripts/show_interfaces_ethernet
@@ -0,0 +1,112 @@
+#!/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 ****
+
+test -f /etc/default/vyatta && source /etc/default/vyatta
+: ${vyatta_bindir:=/opt/vyatta/bin}
+
+shopt -s extglob
+shopt -s nullglob
+
+declare progname=${0##*/}
+declare -a itfs
+
+_usage ()
+{
+ cat <<-EOF
+ $progname
+ $progname INTERFACE
+ $progname INTERFACE physical
+ $progname INTERFACE vif VIF
+ $progname INTERFACE vif VIF physical
+ EOF
+}
+
+_error ()
+{
+ ecode=$1
+ shift
+ echo $@
+ if [ $ecode -eq 1 ] ; then
+ echo
+ _usage
+ fi
+ exit $ecode
+}
+
+_show_interfaces_ethernet_physical ()
+{
+ if type -t ethtool &>/dev/null ; then
+ for eth ; do
+ sudo ethtool $eth
+ echo
+ done
+ fi
+}
+
+if [ $# -gt 0 ] ; then
+ if [[ $1 == --+(usage|help) ]] ; then
+ _usage
+ exit 0
+ elif [[ $1 != +(eth|vmnet)*([[:digit:]]) ]] ; then
+ _error 2 \""$1"\" is not an ethernet device name\!
+ elif ! test -d /sys/class/net/$1 ; then
+ _error 2 \""$1"\" no such ethernet interface\!
+ else
+ eth=$1
+ shift
+ fi
+ if [[ $# -gt 0 && $1 == vif ]] ; then
+ shift
+ if [ $# -gt 0 ] ; then
+ vif=$1 ; shift
+ itf=${eth}.${vif}
+ test -d /sys/class/net/$itf || \
+ _error 2 \""$vif"\" no such vif for $eth\!
+ else
+ _error 1 Missing VIF parameter\!
+ fi
+ else
+ itf=$eth
+ fi
+ itfs=( $itf )
+else
+ declare -a full_eths=( /sys/class/net/+(eth|vmnet)* )
+ test ${#full_eths[@]} -gt 0 || \
+ _error 2 No ethernet interfaces\!
+ itfs=( ${full_eths[@]##*/} )
+fi
+
+case "$1" in
+ physical ) cmd=_show_interfaces_ethernet_physical ;;
+ "" | statistics ) cmd=$vyatta_bindir/show_interfaces_statistics ;;
+ name ) cmd=echo ;;
+ * ) _error 1 \""$1"\" is an invalid parameter\! ;;
+esac
+
+eval $cmd ${itfs[@]##*/}
+
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 4
+# End:
diff --git a/scripts/show_interfaces_loopback b/scripts/show_interfaces_loopback
new file mode 100755
index 0000000..ab1bb5d
--- /dev/null
+++ b/scripts/show_interfaces_loopback
@@ -0,0 +1,76 @@
+#!/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 ****
+
+test -f /etc/default/vyatta && source /etc/default/vyatta
+: ${vyatta_bindir:=/opt/vyatta/bin}
+
+shopt -s extglob
+shopt -s nullglob
+
+declare progname=${0##*/}
+declare -a itfs
+
+_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
+ elif [[ $1 != lo* ]] ; then
+ _error 2 \""$1"\" is not a loopback device name\!
+ elif ! test -d /sys/class/net/$1 ; then
+ _error 2 $1: no such loopback interface\!
+ else
+ itfs=( $1 )
+ shift
+ fi
+else
+ declare -a full_los=( /sys/class/net/lo* )
+ test ${#full_los[@]} -gt 0 || \
+ _error 2 No loopback interfaces\!
+ itfs=( ${full_los[@]##*/} )
+fi
+
+$vyatta_bindir/show_interfaces_statistics ${itfs[@]}
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 4
+# End:
diff --git a/scripts/show_interfaces_statistics b/scripts/show_interfaces_statistics
new file mode 100755
index 0000000..40870cc
--- /dev/null
+++ b/scripts/show_interfaces_statistics
@@ -0,0 +1,123 @@
+#!/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:
diff --git a/scripts/show_interfaces_summary b/scripts/show_interfaces_summary
new file mode 100755
index 0000000..020ae2c
--- /dev/null
+++ b/scripts/show_interfaces_summary
@@ -0,0 +1,55 @@
+#!/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 -a full_itfs=( /sys/class/net/+(eth|vmnet|lo|sit|wan)* )
+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
+
+printf '%10s %10s %10s %10s %10s\n' \
+ interface packets bytes errors drops
+
+for itf in ${full_itfs[@]##*/} ; do
+ 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
+ printf '%10s rx %10d %10d %10d %10d\n' \
+ $itf $rx_packets $rx_bytes $rx_errors $rx_dropped
+ printf '%10s tx %10d %10d %10d %10d\n' \
+ '' $tx_packets $tx_bytes $tx_errors $tx_dropped
+done
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 4
+# End:
diff --git a/scripts/show_interfaces_system b/scripts/show_interfaces_system
new file mode 100755
index 0000000..abc79d4
--- /dev/null
+++ b/scripts/show_interfaces_system
@@ -0,0 +1,75 @@
+#!/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 ****
+
+test -f /etc/default/vyatta && source /etc/default/vyatta
+: ${vyatta_bindir:=/opt/vyatta/bin}
+
+shopt -s extglob
+shopt -s nullglob
+
+declare progname=${0##*/}
+declare -a full_itfs=( /sys/class/net/+(eth|vmnet|lo|sit|wan)* )
+declare -a itfs
+declare -i flags
+
+_usage ()
+{
+ cat <<-EOF
+ $progname [ enabled ]
+ EOF
+}
+
+_error ()
+{
+ ecode=$1
+ shift
+ echo $@
+ if [ $ecode -eq 1 ] ; then
+ _usage
+ fi
+ exit $ecode
+}
+
+if [ $# -gt 0 ] ; then
+ if [[ $1 == --+(usage|help) ]] ; then
+ _usage
+ exit 0
+ elif [[ $1 != enabled ]] ; then
+ _error 1 Invalid option: $1
+ else
+ for itf in ${full_itfs[@]} ; do
+ let -i flags="$(cat $itf/flags) & 1"
+ [[ $flags -eq 1 ]] && \
+ itfs[${#itfs[@]}]=${itf##*/}
+ done
+ fi
+else
+ itfs=( ${full_itfs[@]##*/} )
+fi
+
+$vyatta_bindir/show_interfaces_statistics ${itfs[@]}
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 4
+# End:
diff --git a/scripts/show_interfaces_tunnel b/scripts/show_interfaces_tunnel
new file mode 100755
index 0000000..d5df7b3
--- /dev/null
+++ b/scripts/show_interfaces_tunnel
@@ -0,0 +1,76 @@
+#!/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 ****
+
+test -f /etc/default/vyatta && source /etc/default/vyatta
+: ${vyatta_bindir:=/opt/vyatta/bin}
+
+shopt -s extglob
+shopt -s nullglob
+
+declare progname=${0##*/}
+declare -a itfs
+
+_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
+ elif [[ $1 != sit* ]] ; then
+ _error 2 \""$1"\" is not a tunnel device name\!
+ elif ! test -d /sys/class/net/$1 ; then
+ _error 2 $1: no such tunnel interface\!
+ else
+ itfs=( $1 )
+ shift
+ fi
+else
+ declare -a full_sits=( /sys/class/net/sit* )
+ test ${#full_sits[@]} -gt 0 || \
+ _error 2 No tunnel interfaces\!
+ itfs=( ${full_sits[@]##*/} )
+fi
+
+$vyatta_bindir/show_interfaces_statistics ${itfs[@]}
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 4
+# End: