Search Exchange

Search All Sites

Nagios Live Webinars

Let our experts show you how Nagios can help your organization.

Contact Us

Phone: 1-888-NAGIOS-1
Email: sales@nagios.com

Login

Remember Me

Directory Tree

check_stack_netgear.sh

Rating
2 votes
Favoured:
1
Current Version
1.0
Last Release Date
2015-05-21
Compatible With
  • Nagios 3.x
License
GPL
Hits
9300
Files:
FileDescription
check_stack_netgear.shcheck_stack_netgear.sh
Network Monitoring Software - Download Nagios XI
Log Management Software - Nagios Log Server - Download
Netflow Analysis Software - Nagios Network Analyzer - Download
Check stack status of Netgear switches
(Count in SNMP the physical number of units in the stack)
Script usage:
$0 -H host -e [-c community] [-v version]
[-s 'any_snmp_args'] [-V] [--help]

Options :
-h, --help This help
-H, --host Checked switch virtual IP
-c, --community SNMP MIB (default = public)
-e, --expected Expected switches count
-p, --port SNMP port (default = 161)
-s, --snmp-args Any SNMP args you d'like to add to snmpwalk command
(credentials for SNMPv3, or whatever)
-v, --version SNMP version (default = 2c)
-V, --verbose Verbose output, mainly for debugging


Example: check for 2 switches in stack:
check_stack_netgear.sh -H 1.2.3.4 -e 2


Nagios definition example:
define command{
command_name check_stack_netgear
command_line $USER1$/check_stack_netgear.sh -H $HOSTADDRESS$ -e $ARG2$
}
define service{
use generic-service
host_name Switch-XXX
service_description Stack with 2 members
check_command check_stack_netgear!2
}


How it work:
It simply perform a snmpwalk on ENTITY-MIB:entPhysicalEntry (OID 1.3.6.1.2.1.47.1.1.1.1.7), search for 'Unit' devices and count them.
Reviews (2)
I added nagios performance data and check for errors, multicast, unicast and octetcs. Enjoy.

#!/bin/bash

##
#
# receive statusinfo from netgear switches
#
# you can get all snmp-options with:
# snmpwalk -m ALL -v 2c -c MYCOMMUNITY MYIPADDRESS .1.3.6.1.2.1
#
#
# Usage:
# ./check_netgear_switch -h IP-ADDRESS -c SNMP-COMMUNITY -s STATUSCHECK
#
#
# 2020-02-18: Version 1.3 \\ Pit Wenkin
#
##

SYSUPTIME=0
SYSCONTACT=''
SYSNAME=''
SYSLOCATION=''


SNMPVersion="2c"
SNMPCommunity="public"
SNMPTimeout="10"
SNMPPort="161"


#OID declarations
OID_SYSDESCRIPTION="1.3.6.1.2.1.1.1.0"
OID_SYSOBJECTID="1.3.6.1.2.1.1.2.0"
OID_SYSUPTIME="1.3.6.1.2.1.1.3.0"
OID_SYSCONTACT="1.3.6.1.2.1.1.4.0"
OID_SYSNAME="1.3.6.1.2.1.1.5.0"
OID_SYSLOCATION="1.3.6.1.2.1.1.6.0"
OID_SYSSERVICES="1.3.6.1.2.1.1.7.0"

OID_IFOPERSTATUS=".1.3.6.1.2.1.2.2.1.8"
OID_IFLASTCHANGE=".1.3.6.1.2.1.2.2.1.9"


# nagios return values
export STATE_OK=0
export STATE_WARNING=1
export STATE_CRITICAL=2
export STATE_UNKNOWN=3
export STATE_DEPENDENT=4

intReturn=$STATE_OK

# Memory free
OID_MEM_FREE=".1.3.6.1.4.1.4526.11.1.1.4.1"

# Memory available
OID_MEM_AVAILABLE=".1.3.6.1.4.1.4526.11.1.1.4.2"

# An estimate of the interface's current bandwidth in bits per second
OID_IF_SPEED=".1.3.6.1.2.1.2.2.1.5"

##
## Multicast
##

# The number of packets, delivered by this sub-layer to a higher (sub-)layer, which were addressed to a multicast address at this sub-layer. For a MAC layer protocol, this includes both Group and Functional addresses.
OID_IN_MULTICAST_PACKETS=".1.3.6.1.2.1.31.1.1.1.2"

# The total number of packets that higher-level protocols requested be transmitted, and which were addressed to a multicast address at this sub-layer, including those that were discarded or not sent. For a MAC layer protocol, this includes both Group and Functional addresses.
OID_OUT_MULTICAST_PACKETS=".1.3.6.1.2.1.31.1.1.1.4"

##
## Broadcast
##

# The number of packets, delivered by this sub-layer to a higher (sub-)layer, which were addressed to a broadcast address at this sub-layer.
OID_IN_BROADCAST_PACKETS=".1.3.6.1.2.1.31.1.1.1.3"

# The total number of packets that higher-level protocols requested be transmitted, and which were addressed to a broadcast address at this sub-layer, including those that were discarded or not sent.
OID_OUT_BROADCAST_PACKETS=".1.3.6.1.2.1.31.1.1.1.5"


##
## Octets
##

# The total number of octets received on the interface, including framing characters. This object is a 64-bit version of ifInOctets.
OID_IF_IN_OCTETS=".1.3.6.1.2.1.31.1.1.1.6"

# The total number of octets transmitted out of the interface, including framing characters. This object is a 64-bit version of ifOutOctets.
OID_IF_OUT_OCTETS=".1.3.6.1.2.1.31.1.1.1.10"


##
## Unicast
##

# The number of packets, delivered by this sub-layer to a higher (sub-)layer, which were not addressed to a multicast or broadcast address at this sub-layer. This object is a 64-bit version of ifInUcastPkts."
OID_IF_IN_UNICAST=".1.3.6.1.2.1.31.1.1.1.7"

# The total number of packets that higher-level protocols requested be transmitted, and which were not addressed to a multicast or broadcast address at this sub-layer, including those that were discarded or not sent. This object is a 64-bit version of ifOutUcastPkts.
OID_IF_OUT_UNICAST=".1.3.6.1.2.1.31.1.1.1.11"


##
## Errors
##

# For packet-oriented interfaces, the number of inbound packets that contained errors preventing them from being deliverable to a higher-layer protocol. For character-oriented or fixed-length interfaces, the number of inbound transmission units that contained errors preventing them from being deliverable to a higher-layer protocol.
OID_IF_IN_ERRORS=".1.3.6.1.2.1.2.2.1.14"

# For packet-oriented interfaces, the number of outbound packets that could not be transmitted because of errors. For character-oriented or fixed-length interfaces, the number of outbound transmission units that could not be transmitted because of errors.
OID_IF_OUT_ERRORS=".1.3.6.1.2.1.2.2.1.20"

usage()
{
echo "usage: ./check_netgear_switch -h [hostname] -c [community] -s [status]"
echo "options:"
echo " -h [snmp hostname] Hostname"
echo " -c [community name] community name (ex: public)"
echo " -p [snmp port] port for snmp request (default: 161)"
echo " -P [port] port to check"
echo " -n [number of ports] number of physical ports on device"
echo " -o [options] additional options"
echo " d only ports that are down (or anything except up)"
echo " u only ports that are up"
echo " -s [check] Check to be executed"
echo " info System infos"
echo " port Check statius specific port ('P' option)"
echo " ports Listing of ports ('n' option defines number of port to check)"
echo " uptime System uptime"
echo " ports-octets Data on port (nagios perf output)"
echo " ports-unicast Unicast on port (nagios perf output)"
echo " ports-multicast Multicast on port (nagios perf output)"
echo " ports-nagios Multicast/Unicast/Octets on port (nagios perf output)"
echo " uptime System uptime"
echo " -t [timeout] duration before doing an timeout in seconds - default 10s"
echo ""
echo "examples: ./check_netgear_switch -h 1.2.3.4 -c public -s info"
echo " ./check_netgear_switch -h 1.2.3.4 -p 4321 -c public -s uptime -t 30"
echo " ./check_netgear_switch -h 1.2.3.4 -c public -s ports -n 28"
echo " ./check_netgear_switch -h 1.2.3.4 -c public -s port -P 1"
exit 3
}

if [ "$1" == "--help" ]; then
usage; exit 0
fi

while getopts c:h:n:o:p:P:s:t: OPTNAME; do
case "$OPTNAME" in
h) hostname="$OPTARG";;
c) SNMPCommunity="$OPTARG";;
o) options="$OPTARG";;
n) ports="$OPTARG";;
p) SNMPPort="$OPTARG";;
P) port="$OPTARG";;
s) status="$OPTARG";;
t) SNMPTimeout="$OPTARG";;
esac
done

function up_time {
time=$1
pre=$2
suf=$3
up=$4
#returns uptime as human readable string
if [[ $time =~ (.*):(.*):(.*):(.*)\.(.*) ]]; then
DAYS=${BASH_REMATCH[1]}
HOURS=${BASH_REMATCH[2]}
MINUTES=${BASH_REMATCH[3]}
SECONDS=${BASH_REMATCH[4]}
MILLISECONDS=${BASH_REMATCH[5]}

output=$output"$pre$DAYS days $HOURS hours $MINUTES minutes$suf"
if [ $DAYS == "0" ] && [ $HOURS == "0" ] && [ $MINUTES -lt "5" ]; then
intReturn=$STATE_CRITICAL
if [ "$up" != '' ]; then
output=$up"$pre$DAYS days $HOURS hours $MINUTES minutes$suf"$output
fi
else
if [ $intReturn -lt $STATE_CRITICAL ] && [ $DAYS == "0" ] && [ $HOURS == "0" ] && [ $MINUTES -lt "15" ]; then
intReturn=$STATE_WARNING
if [ "$up" != '' ]; then
output=$up"$pre$DAYS days $HOURS hours $MINUTES minutes$suf"$output
fi
fi
fi
fi
}

function get_timestamp {
t=$1
if [[ $t =~ (.*):(.*):(.*):(.*)\.(.*) ]]; then
DAYS=${BASH_REMATCH[1]}
HOURS=${BASH_REMATCH[2]}
MINUTES=${BASH_REMATCH[3]}
SECONDS=${BASH_REMATCH[4]}
MILLISECONDS=${BASH_REMATCH[5]}

ALL=$((10#$DAYS*24*60*60*1000 + 10#$HOURS*60*60*1000 + 10#$MINUTES*60*1000 + 10#$SECONDS*1000 + 10#$MILLISECONDS))
echo $ALL
fi

}

function sub_time {
t1=$1
t2=$2;
#substracts one uptime from another
T1ALL=$(get_timestamp $t1)
T2ALL=$(get_timestamp $t2)
if [[ T1ALL != '' && T2ALL != '' ]]; then
TS=$((T1ALL - T2ALL))
DAYS=$(($TS/(24*60*60*1000)))
TS=$(($TS-($DAYS*24*60*60*1000)))
HOURS=$(($TS/(60*60*1000)))
TS=$(($TS-($HOURS*60*60*1000)))
MINUTES=$(($TS/(60*1000)))
TS=$(($TS-($MINUTES*60*1000)))
SECONDS=$(($TS/(1000)))
MILLSECONDS=$(($TS-$SECONDS))
echo "$DAYS:$HOURS:$MINUTES:$SECONDS.$MILLISECONDS"
else
echo 'ERROR'
fi
}


if [ "$hostname" = "" ] || [ "$SNMPCommunity" = "" ] ; then
usage
else
SNMPArgs=" -OQne -v $SNMPVersion -c $SNMPCommunity -t $SNMPTimeout $hostname:$SNMPPort"

case "$status" in

info)
info=`snmpget $SNMPArgs $OID_SYSDESCRIPTION $OID_SYSUPTIME $OID_SYSCONTACT $OID_SYSNAME $OID_SYSLOCATION 2> /dev/null`
if [ "$?" != "0" ] ; then
output="CRITICAL - Problem with SNMP request, check user/password/host"
intReturn=$STATE_CRITICAL ;
else

SYSDESCRIPTION=$(echo "$info" | grep $OID_SYSDESCRIPTION | sed 's/.* = //g' | sed 's/"//g')
SYSUPTIME=$(echo "$info" | grep $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g')
SYSCONTACT=$(echo "$info" | grep $OID_SYSCONTACT | sed 's/.* = //g' | sed 's/"//g')
SYSNAME=$(echo "$info" | grep $OID_SYSNAME | sed 's/.* = //g' | sed 's/"//g')
SYSLOCATION=$(echo "$info" | grep $OID_SYSLOCATION | sed 's/.* = //g' | sed 's/"//g')

if [ "$SYSDESCRIPTION" != "" ] ; then
output="Description - $SYSDESCRIPTION\n"
fi
if [ "$SYSUPTIME" != "" ] ; then
up_time $SYSUPTIME 'Uptime - '
output=$output"\n"
fi
if [ "$SYSCONTACT" != "" ] ; then
output=$output"Contact - $SYSCONTACT\n"
fi
if [ "$SYSNAME" != "" ] ; then
output=$output"Name - $SYSNAME\n"
fi
if [ "$SYSLOCATION" != "" ] ; then
output=$output"Location - $SYSLOCATION"
fi
if [ "$output" == "" ] ; then
output="No information returned"
intReturn=$STATE_WARNING
fi
fi
;;

ports)
if [ "$ports" == "" ] ; then
output="Please define number of ports";
intReturn=$STATE_UNKNOWN;
else
for i in `seq 1 $ports`;
do
OID_PORTSTATUS="$OID_PORTSTATUS $OID_IFOPERSTATUS.$i $OID_IFLASTCHANGE.$i "
done
PORTSTATUS=`snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS`
if [ "$?" != "0" ] ; then
output="CRITICAL - Problem with SNMP request, check user/password/host"
intReturn=$STATE_CRITICAL;
else
SYSUPTIME=$(echo "$PORTSTATUS" | grep $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g')
for i in `seq 1 $ports`;
do
portStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFOPERSTATUS.$((i)) " | cut -d "=" -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
portChange[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFLASTCHANGE.$((i)) " | tr -d '\n' | sed 's/.* = //g' | sed 's/"//g')
case ${portStatus[$i]} in
"1") portText[$i]="Up"; ;;
"2") portText[$i]="Down"; ;;
"3") portText[$i]="Testing"; ;;
"4") portText[$i]="Unknown"; ;;
"5") portText[$i]="Dormant"; ;;
"6") portText[$i]="Not present"; ;;
"7") portText[$i]="Lower layer down"; ;;
esac

if [ \( "$options" = "" \) -o \( "$options" = "u" -a "${portStatus[$i]}" = "1" \) -o \( "$options" = "d" -a "${portStatus[$i]}" != "1" \) ] ; then
output=$output"Port $i - ${portText[$i]}\t";
portUptime=$(sub_time $SYSUPTIME ${portChange[$i]})
up_time $portUptime '(since ' " ago)\n" "Port $i - ${portText[$i]}\t";
fi
done
fi
fi
;;


port)
if [ "$port" == "" ] ; then
output="Please define port to check";
intReturn=$STATE_UNKNOWN;
else
PORTSTATUS=`snmpget $SNMPArgs $OID_SYSUPTIME $OID_IFOPERSTATUS.$port $OID_IFLASTCHANGE.$port`
if [ "$?" != "0" ] ; then
output="CRITICAL - Problem with SNMP request, check user/password/host"
intReturn=$STATE_CRITICAL;
else
portStatus=$(echo "$PORTSTATUS" | grep "$OID_IFOPERSTATUS.$((port)) " | cut -d "=" -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
portChange=$(echo "$PORTSTATUS" | grep "$OID_IFLASTCHANGE.$((port)) " | tr -d '\n' | sed 's/.* = //g' | sed 's/"//g')
SYSUPTIME=$(echo "$PORTSTATUS" | grep $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g')
case $portStatus in
"1") portText="Up"; intReturn=$STATE_OK;;
"2") portText="Down"; intReturn=$STATE_CRITICAL;;
"3") portText="Testing"; intReturn=$STATE_WARNING;;
"4") portText="Unknown"; intReturn=$STATE_UNKNOWN;;
"5") portText="Dormant"; intReturn=$STATE_CRITICAL;;
"6") portText="Not present"; intReturn=$STATE_CRITICAL;;
"7") portText="Lower layer down"; intReturn=$STATE_CRITICAL;;
esac

output=$output"Port $port - $portText\t";
portUptime=$(sub_time $SYSUPTIME $portChange)
up_time $portUptime '(since ' " ago)\n";
fi
fi
;;

uptime)
SYSUPTIME=`snmpget $SNMPArgs $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g'`
if [ "$?" != "0" ] ; then
output="CRITICAL - Problem with SNMP request, check user/password/host";
intReturn=$STATE_CRITICAL;
else
up_time $SYSUPTIME 'Uptime - '
fi
;;

ports-multicast)
if [ "$ports" == "" ] ; then
output="Please define number of ports";
intReturn=$STATE_UNKNOWN;
else
for i in `seq 1 $ports`;
do
OID_PORTSTATUS="$OID_PORTSTATUS $OID_IFOPERSTATUS.$i $OID_IFLASTCHANGE.$i $OID_IN_MULTICAST_PACKETS.$i $OID_OUT_MULTICAST_PACKETS.$i "
done

PORTSTATUS=`snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS`
if [ "$?" != "0" ] ; then
output="CRITICAL - Problem with SNMP request, check user/password/host"
intReturn=$STATE_CRITICAL;
else
output="Ok | "
SYSUPTIME=$(echo "$PORTSTATUS" | grep $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g')
for i in `seq 1 $ports`;
do
portStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFOPERSTATUS.$((i)) " | cut -d "=" -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
portChange[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFLASTCHANGE.$((i)) " | tr -d '\n' | sed 's/.* = //g' | sed 's/"//g')
portInMulticast[$i]=$(echo "$PORTSTATUS" | grep "$OID_IN_MULTICAST_PACKETS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')
portOutMulticast[$i]=$(echo "$PORTSTATUS" | grep "$OID_OUT_MULTICAST_PACKETS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')


case ${portStatus[$i]} in
"1") portText[$i]="Up"; ;; # Up
"2") portText[$i]="Down"; ;; # Down
"3") portText[$i]="Testing"; ;; # Testing
"4") portText[$i]="Unknown"; ;; # Unknown
"5") portText[$i]="Dormant"; ;; # Dormant
"6") portText[$i]="Not present"; ;; # Not present
"7") portText[$i]="Lower layer down"; ;; # Lower layer down
esac

if [ \( "$options" = "" \) -o \( "$options" = "u" -a "${portStatus[$i]}" = "1" \) -o \( "$options" = "d" -a "${portStatus[$i]}" != "1" \) ] ; then
output=$output"Port_${i}_status=${portStatus[$i]}; Multicast_IN_$i=${portInMulticast[$i]};$MC_W;$MC_C;; Multicast_OUT_$i=${portOutMulticast[$i]};$MC_W;$MC_C;; "
fi
done
fi
fi
;;

ports-unicast)
if [ "$ports" == "" ] ; then
output="Please define number of ports";
intReturn=$STATE_UNKNOWN;
else
for i in `seq 1 $ports`;
do
OID_PORTSTATUS="$OID_PORTSTATUS $OID_IFLASTCHANGE.$i $OID_IF_IN_UNICAST.$i $OID_IF_OUT_UNICAST.$i "
done

# echo snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS

PORTSTATUS=`snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS`
if [ "$?" != "0" ] ; then
output="CRITICAL - Problem with SNMP request, check user/password/host"
intReturn=$STATE_CRITICAL;
else
output="Ok | "
SYSUPTIME=$(echo "$PORTSTATUS" | grep $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g')
for i in `seq 1 $ports`;
do
portStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFOPERSTATUS.$((i)) " | cut -d "=" -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
portInUnicast[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_IN_UNICAST.$((i)) " | sed 's/.* = //g' | sed 's/"//g')
portOutUnicast[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_OUT_UNICAST.$((i)) " | sed 's/.* = //g' | sed 's/"//g')

if [ \( "$options" = "" \) -o \( "$options" = "u" -a "${portStatus[$i]}" = "1" \) -o \( "$options" = "d" -a "${portStatus[$i]}" != "1" \) ] ; then
output=$output"Unicast_IN_$i=${portInUnicast[$i]};$UC_W;$UC_C;; Unicast_OUT_$i=${portOutUnicast[$i]};$UC_W;$UC_C;; "
fi
done
fi
fi
;;

ports-octets)
if [ "$ports" == "" ] ; then
output="Please define number of ports";
intReturn=$STATE_UNKNOWN;
else
for i in `seq 1 $ports`;
do
OID_PORTSTATUS="$OID_PORTSTATUS $OID_IFLASTCHANGE.$i $OID_IF_IN_OCTETS.$i $OID_IF_OUT_OCTETS.$i "
done

# echo snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS

PORTSTATUS=`snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS`
if [ "$?" != "0" ] ; then
output="CRITICAL - Problem with SNMP request, check user/password/host"
intReturn=$STATE_CRITICAL;
else
output="Ok | "
SYSUPTIME=$(echo "$PORTSTATUS" | grep $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g')
for i in `seq 1 $ports`;
do
portStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFOPERSTATUS.$((i)) " | cut -d "=" -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
portInStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_IN_OCTETS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')
portOutStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_OUT_OCTETS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')

if [ \( "$options" = "" \) -o \( "$options" = "u" -a "${portStatus[$i]}" = "1" \) -o \( "$options" = "d" -a "${portStatus[$i]}" != "1" \) ] ; then
output=$output"Octets_IN_$i=${portInStatus[$i]};$UC_W;$UC_C;; Octets_OUT_$i=${portOutStatus[$i]};$UC_W;$UC_C;; "
fi
done
fi
fi
;;

ports-errors)
if [ "$ports" == "" ] ; then
output="Please define number of ports";
intReturn=$STATE_UNKNOWN;
else
for i in `seq 1 $ports`;
do
OID_PORTSTATUS="$OID_PORTSTATUS $OID_IFLASTCHANGE.$i $OID_IF_IN_ERRORS.$i $OID_IF_OUT_ERRORS.$i "
done

# echo snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS

PORTSTATUS=`snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS`
if [ "$?" != "0" ] ; then
output="CRITICAL - Problem with SNMP request, check user/password/host"
intReturn=$STATE_CRITICAL;
else
output="Ok | "
SYSUPTIME=$(echo "$PORTSTATUS" | grep $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g')
for i in `seq 1 $ports`;
do
portStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFOPERSTATUS.$((i)) " | cut -d "=" -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
portInStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_IN_ERRORS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')
portOutStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_OUT_ERRORS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')

if [ \( "$options" = "" \) -o \( "$options" = "u" -a "${portStatus[$i]}" = "1" \) -o \( "$options" = "d" -a "${portStatus[$i]}" != "1" \) ] ; then
output=$output"Errors_IN_$i=${portInStatus[$i]};$EC_W;$EC_C;; Errors_OUT_$i=${portOutStatus[$i]};$EC_W;$EC_C;; "
fi
done
fi
fi
;;

ports-nagios)
if [ "$ports" == "" ] ; then
output="Please define number of ports";
intReturn=$STATE_UNKNOWN;
else

##
## Octets
##

OID_PORTSTATUS=""
for i in `seq 1 $ports`;
do
OID_PORTSTATUS="$OID_PORTSTATUS $OID_IFLASTCHANGE.$i $OID_IF_IN_OCTETS.$i $OID_IF_OUT_OCTETS.$i "
done

# echo snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS

PORTSTATUS=`snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS`
if [ "$?" != "0" ] ; then
output="CRITICAL - Problem with SNMP request, check user/password/host"
intReturn=$STATE_CRITICAL;
else
output="Ok | "
SYSUPTIME=$(echo "$PORTSTATUS" | grep $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g')
for i in `seq 1 $ports`;
do
portStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFOPERSTATUS.$((i)) " | cut -d "=" -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
portInStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_IN_OCTETS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')
portOutStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_OUT_OCTETS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')

if [ \( "$options" = "" \) -o \( "$options" = "u" -a "${portStatus[$i]}" = "1" \) -o \( "$options" = "d" -a "${portStatus[$i]}" != "1" \) ] ; then
output=$output"Octets_IN_$i=${portInStatus[$i]};$UC_W;$UC_C;; Octets_OUT_$i=${portOutStatus[$i]};$UC_W;$UC_C;; "
fi
done
fi

##
## Unicast
##

OID_PORTSTATUS=""
for i in `seq 1 $ports`;
do
OID_PORTSTATUS="$OID_PORTSTATUS $OID_IFLASTCHANGE.$i $OID_IF_IN_UNICAST.$i $OID_IF_OUT_UNICAST.$i "
done

# echo snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS

PORTSTATUS=`snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS`
if [ "$?" != "0" ] ; then
output==$output"CRITICAL - Problem with SNMP request, check user/password/host"
intReturn=$STATE_CRITICAL;
else
SYSUPTIME=$(echo "$PORTSTATUS" | grep $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g')
for i in `seq 1 $ports`;
do
portStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFOPERSTATUS.$((i)) " | cut -d "=" -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
portInUnicast[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_IN_UNICAST.$((i)) " | sed 's/.* = //g' | sed 's/"//g')
portOutUnicast[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_OUT_UNICAST.$((i)) " | sed 's/.* = //g' | sed 's/"//g')

if [ \( "$options" = "" \) -o \( "$options" = "u" -a "${portStatus[$i]}" = "1" \) -o \( "$options" = "d" -a "${portStatus[$i]}" != "1" \) ] ; then
output=$output"Unicast_IN_$i=${portInUnicast[$i]};$UC_W;$UC_C;; Unicast_OUT_$i=${portOutUnicast[$i]};$UC_W;$UC_C;; "
fi
done
fi

##
## Multicast
##

OID_PORTSTATUS=""
for i in `seq 1 $ports`;
do
OID_PORTSTATUS="$OID_PORTSTATUS $OID_IFOPERSTATUS.$i $OID_IFLASTCHANGE.$i $OID_IN_MULTICAST_PACKETS.$i $OID_OUT_MULTICAST_PACKETS.$i "
done

PORTSTATUS=`snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS`
if [ "$?" != "0" ] ; then
output="CRITICAL - Problem with SNMP request, check user/password/host"
intReturn=$STATE_CRITICAL;
else
SYSUPTIME=$(echo "$PORTSTATUS" | grep $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g')
for i in `seq 1 $ports`;
do
portStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFOPERSTATUS.$((i)) " | cut -d "=" -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
portChange[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFLASTCHANGE.$((i)) " | tr -d '\n' | sed 's/.* = //g' | sed 's/"//g')
portInMulticast[$i]=$(echo "$PORTSTATUS" | grep "$OID_IN_MULTICAST_PACKETS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')
portOutMulticast[$i]=$(echo "$PORTSTATUS" | grep "$OID_OUT_MULTICAST_PACKETS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')


case ${portStatus[$i]} in
"1") portText[$i]="Up"; ;; # Up
"2") portText[$i]="Down"; ;; # Down
"3") portText[$i]="Testing"; ;; # Testing
"4") portText[$i]="Unknown"; ;; # Unknown
"5") portText[$i]="Dormant"; ;; # Dormant
"6") portText[$i]="Not present"; ;; # Not present
"7") portText[$i]="Lower layer down"; ;; # Lower layer down
esac

if [ \( "$options" = "" \) -o \( "$options" = "u" -a "${portStatus[$i]}" = "1" \) -o \( "$options" = "d" -a "${portStatus[$i]}" != "1" \) ] ; then
output=$output"Port_${i}_status=${portStatus[$i]}; Multicast_IN_$i=${portInMulticast[$i]};$MC_W;$MC_C;; Multicast_OUT_$i=${portOutMulticast[$i]};$MC_W;$MC_C;; "
fi
done
fi

##
## Errors
##
OID_PORTSTATUS=""
for i in `seq 1 $ports`;
do
OID_PORTSTATUS="$OID_PORTSTATUS $OID_IFLASTCHANGE.$i $OID_IF_IN_ERRORS.$i $OID_IF_OUT_ERRORS.$i "
done

# echo snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS

PORTSTATUS=`snmpget $SNMPArgs $OID_SYSUPTIME $OID_PORTSTATUS`
if [ "$?" != "0" ] ; then
output="CRITICAL - Problem with SNMP request, check user/password/host"
intReturn=$STATE_CRITICAL;
else
SYSUPTIME=$(echo "$PORTSTATUS" | grep $OID_SYSUPTIME | sed 's/.* = //g' | sed 's/"//g')
for i in `seq 1 $ports`;
do
portStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IFOPERSTATUS.$((i)) " | cut -d "=" -f2 | sed 's/^[ \t]*//;s/[ \t]*$//')
portInStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_IN_ERRORS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')
portOutStatus[$i]=$(echo "$PORTSTATUS" | grep "$OID_IF_OUT_ERRORS.$((i)) " | sed 's/.* = //g' | sed 's/"//g')

if [ \( "$options" = "" \) -o \( "$options" = "u" -a "${portStatus[$i]}" = "1" \) -o \( "$options" = "d" -a "${portStatus[$i]}" != "1" \) ] ; then
output=$output"Errors_IN_$i=${portInStatus[$i]};$EC_W;$EC_C;; Errors_OUT_$i=${portOutStatus[$i]};$EC_W;$EC_C;; "
fi
done
fi

##
## End
##

fi
;;

*)
usage; exit 0
;;
esac

echo -e $output
exit $intReturn
fi
Hi there,
than you for the script

I have this output with GS748TS http://pastebin.com/6xePiCqn


Could you add in the script to count the "Slot" if doesn't find the "Unit"



thank you again