Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 62 additions & 9 deletions scripts/sflowenable
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,48 @@
#
# Copyright (c) 2001 InMon Corp. Licensed under the terms of the InMon sFlow licence:
# http://www.inmon.com/technology/sflowlicense.txt
# Copyright (C) 2015, Vitaliy Ivanov, Interface Masters Technologies, Inc.
#

check_oid()
{
oid=$1
value=$2

t_value=$(snmpget -v 2c -c $COMMUNITY $SWITCH $oid | sed -r 's/.*\.([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+) = .*: (.*)/\2/g' | sed 's/ *$//g')

if [ "$t_value" -eq "$t_value" ] 2>/dev/null; then
# Integer
if [ "$t_value" != "$value" ];
then
echo "$t_value is not equal to $value"
exit 1
fi

else
# String or hex
if [ "${t_value:0:1}" != "\"" ];
then
# Hex
if [ "$t_value" != "$value" ];
then
echo "$t_value is not equal to $value"
exit 1
fi
else
# String
if [ "$t_value" != "\"$value\"" ];
then
echo "$t_value is not equal to $value"
exit 1
fi
fi
fi

}

MINPARAMS=3
if [ $# -lt "$MINPARAMS" ]
if [ $# -lt "$MINPARAMS" ]
then
echo "Usage: $0 switch community receiver [port] [rate] [interval] [timeout] [force]"
echo " where:"
Expand Down Expand Up @@ -35,7 +74,7 @@ TIMEOUT=${7:-3600}
USEFORCE=${8:-0}

# initialize static variables
OWNER="$HOSTNAME;$0"
OWNER="$HOSTNAME;$0"
ADDRESSTYPE=1 # IP v4
SFLOWMIB=".1.3.6.1.4.1.14706.1"
IFINDEX="11.1.3.6.1.2.1.2.2.1.1"
Expand All @@ -52,19 +91,19 @@ RCVRINDEX=$(snmpwalk -v 2c -Oqn -c $COMMUNITY $SWITCH $SFLOWMIB.1.4.1.2 | awk -v
last = idx;
if(owner == me) lastOwner = idx;
if(owner == "") lastFree = idx;
}
}
END{
if(lastOwner) print lastOwner;
else if(lastFree) print lastFree;
else if(useforce) print last;
}')

if [ ! $RCVRINDEX ]
then
then
echo "No free sFlowRcvrTable entries found, current sFlowRcvrOwners:"
snmpwalk -v 2c -Oqn -c $COMMUNITY $SWITCH $SFLOWMIB.1.4.1.2 | awk --source '{print $2}'
exit 1
fi
fi

if [ $TIMEOUT -eq 0 ]
then
Expand All @@ -87,11 +126,19 @@ echo "sFlowRcvrPort = $PORT"
snmpset -v 2c -c $COMMUNITY $SWITCH $SFLOWMIB.1.4.1.2.$RCVRINDEX s $OWNER $SFLOWMIB.1.4.1.3.$RCVRINDEX i $TIMEOUT $SFLOWMIB.1.4.1.5.$RCVRINDEX i $ADDRESSTYPE $SFLOWMIB.1.4.1.6.$RCVRINDEX x $HEXRECEIVER $SFLOWMIB.1.4.1.7.$RCVRINDEX i $PORT

if [ $? -ne 0 ]
then
then
echo "SNMP set failed"
exit 1;
fi

HEXRECEIVER=$(echo $HEXRECEIVER | awk '$0=gensub(/(..)/,"\\1 ","g")' | sed 's/ *$//g')

check_oid $SFLOWMIB.1.4.1.2.$RCVRINDEX $OWNER
check_oid $SFLOWMIB.1.4.1.3.$RCVRINDEX $TIMEOUT
check_oid $SFLOWMIB.1.4.1.5.$RCVRINDEX $ADDRESSTYPE
#check_oid $SFLOWMIB.1.4.1.6.$RCVRINDEX "$HEXRECEIVER"
check_oid $SFLOWMIB.1.4.1.7.$RCVRINDEX $PORT

echo "Grabbing entries in sFlowFsTable"

for ENTRY in $(snmpwalk -v 2c -Oqn -c $COMMUNITY $SWITCH $SFLOWMIB.1.5.1.3.$IFINDEX | awk -v myRcvrIndex=$RCVRINDEX -v useforce=$USEFORCE --source '
Expand All @@ -105,7 +152,7 @@ for ENTRY in $(snmpwalk -v 2c -Oqn -c $COMMUNITY $SWITCH $SFLOWMIB.1.5.1.3.$IFIN
last[ifIndex] = instance;
if(receiver == myRcvrIndex) lastOwner[ifIndex] = instance;
if(receiver == 0) lastFree[ifIndex] = instance;
}
}
END{
for (i in last) {
if(lastOwner[i]) print i "." lastOwner[i];
Expand All @@ -122,6 +169,9 @@ END{
echo "Now set values"
fi
snmpset -v 2c -c $COMMUNITY $SWITCH $SFLOWMIB.1.5.1.3.$IFINDEX.$ENTRY i $RCVRINDEX $SFLOWMIB.1.5.1.4.$IFINDEX.$ENTRY i $RATE

check_oid $SFLOWMIB.1.5.1.3.$IFINDEX.$ENTRY $RCVRINDEX
check_oid $SFLOWMIB.1.5.1.4.$IFINDEX.$ENTRY $RATE
done

echo "Grabbing entries in sFlowCpTable"
Expand All @@ -137,7 +187,7 @@ for ENTRY in $(snmpwalk -v 2c -Oqn -c $COMMUNITY $SWITCH $SFLOWMIB.1.6.1.3.$IFIN
last[ifIndex] = instance;
if(receiver == myRcvrIndex) lastOwner[ifIndex] = instance;
if(receiver == 0) lastFree[ifIndex] = instance;
}
}
END{
for (i in last) {
if(lastOwner[i]) print i "." lastOwner[i];
Expand All @@ -154,6 +204,9 @@ END{
snmpset -v 2c -c $COMMUNITY $SWITCH $SFLOWMIB.1.6.1.3.$IFINDEX.$ENTRY i 0
echo "Now set values"
fi

snmpset -v 2c -c $COMMUNITY $SWITCH $SFLOWMIB.1.6.1.3.$IFINDEX.$ENTRY i $RCVRINDEX $SFLOWMIB.1.6.1.4.$IFINDEX.$ENTRY i $INTERVAL

check_oid $SFLOWMIB.1.6.1.3.$IFINDEX.$ENTRY $RCVRINDEX
check_oid $SFLOWMIB.1.6.1.4.$IFINDEX.$ENTRY $INTERVAL
done