Ascend Archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(ASCEND) User sessions via SNMP on MAX & Cisco
I've been using maxstatus by Tatsuo Natsukawa (natsu@itjit.ad.jp) for well
over a year as a core module for user management scripts. Now that the
ISP I work for now has some Cisco (5200 & 3640) equipment for dialup
connectivity, I've been needing a way to get the same type of output for
the cisco that I have for the Ascends.
Would anyone care to share an snmp script such as maxstatus for the cisco?
I'd be eternally grateful.
--maxstatus--
#!/bin/sh
# natsu@itjit.ad.jp May 18, 1996
# natsu@itjit.ad.jp May 20, 1996 fixed Error: can't read
# "sessionStatusEntry(x)": no such
# element in array
# natsu@itjit.ad.jp Dec 19, 1996 clean exit when snmp walk fails
# thanks tony@nol.net (@neosoft.com now)
#
# maxstatus <ip> [<community>]
#
# you'll get an output like:
#
# Speed Elapsed Time User IP Address Subnet Mask Service
# ------- -------------- -------- --------------- --------------- -------
# 64000 0d 23:59:38.00 itjspd05 202.242.46.167 255.255.255.255 ppp
# 26400 0d 0:07:36.00 itjsys22 202.242.46.172 255.255.255.255 ppp
# 64000 0d 2:28:32.00 itjadv01 202.242.46.162 255.255.255.255 ppp
# 28800 0d 0:35:46.00 its00086 202.242.46.169 255.255.255.255 ppp
# 64000 0d 0:00:25.00 soros1 202.217.132.192 255.255.255.255 ppp
#
# Summary
# ----------
# 64000: 3
# 28800: 1
# 26400: 1
# --
# 5
#
# Ok I stole code from ifload and ifload.tcl that come wich scotty. They were
# very helpful.
# Tcl sees the next lines as an assignment to variable `kludge'.
# For sh, the two shifts cancel the effect of the set, and then we
# run scotty on this script.
set kludge { $*
shift
shift
if test -f ../scotty ; then
exec ../scotty -nf $0 $*
else
exec /usr/bin/scotty -nf $0 $*
fi
}
if {$argc < 1 || $argc > 2} {
puts stderr {usage: maxstatus <ip> [<community>]}
exit 1
}
set host [lindex $argv 0]
set community [expr {$argc == 2 ? [lindex $argv 1] : "public"}]
mib load ascend.mib
set code [catch {snmp session -address $host -community $community} s]
if $code {
puts stderr $s
exit 1
}
set code [catch {$s walk vbl callStatusIndex {
set callStatusIndex [lindex [lindex $vbl 0] 2]
set vbl [$s get "
callStatusValidFlag.$callStatusIndex \
callStatusStartingTimeStamp.$callStatusIndex \
callStatusDataRate.$callStatusIndex \
callSessionIndex.$callStatusIndex \
sysUpTime.0 \
"]
set callStatusValidFlag [lindex [lindex $vbl 0] 2]
if {$callStatusValidFlag == "valid"} {
set callStatusStartingTimeStamp [lindex [lindex $vbl 1] 2]
set callStatusDataRate [lindex [lindex $vbl 2] 2]
set callSessionIndex [lindex [lindex $vbl 3] 2]
set sysUpTime [lindex [lindex $vbl 4] 2]
# build a table with $callSessionIndex as the key
# $sysUpTime contains spaces, and I don't want its columns to get separated
set callStatusEntry($callSessionIndex) [list \
$callStatusStartingTimeStamp \
$callStatusDataRate \
[list $sysUpTime] \
]
}
}}]
if $code {
puts stderr $s
exit 1
}
$s walk vbl ssnStatusIndex {
set ssnStatusIndex [lindex [lindex $vbl 0] 2]
set vbl [$s get "
ssnStatusValidFlag.$ssnStatusIndex \
ssnStatusUserName.$ssnStatusIndex \
ssnStatusUserIPAddress.$ssnStatusIndex \
ssnStatusUserSubnetMask.$ssnStatusIndex \
ssnStatusCurrentService.$ssnStatusIndex \
"]
set ssnStatusValidFlag [lindex [lindex $vbl 0] 2]
if {$ssnStatusValidFlag == "valid"} {
set ssnStatusUserName [lindex [lindex $vbl 1] 2]
set ssnStatusUserIPAddress [lindex [lindex $vbl 2] 2]
set ssnStatusUserSubnetMask [lindex [lindex $vbl 3] 2]
set ssnStatusCurrentService [lindex [lindex $vbl 4] 2]
set ssnStatusCallReferenceNum [lindex [lindex $vbl 5] 2]
# boild a table with $ssnStatusIndex as key
set sessionStatusEntry($ssnStatusIndex) "
$ssnStatusUserName \
$ssnStatusUserIPAddress \
$ssnStatusUserSubnetMask \
$ssnStatusCurrentService \
"
}
}
puts "Speed Elapsed Time User IP Address Subnet Mask Service"
puts "------- -------------- -------- --------------- --------------- -------"
# select * from callStatusEntry, sessionStatusEntry
# where callSessionIndex = ssnStatusIndex
foreach callSessionIndex [array names callStatusEntry] {
# we only want the intersection of the two tables
if {![info exists sessionStatusEntry($callSessionIndex)]} continue
set callStatusStartingTimeStamp [ \
lindex $callStatusEntry($callSessionIndex) 0 \
]
set callStatusDataRate [lindex $callStatusEntry($callSessionIndex) 1]
set sysUpTime [lindex [lindex $callStatusEntry($callSessionIndex) 2] 0]
set ssnStatusUserName [lindex $sessionStatusEntry($callSessionIndex) 0]
set ssnStatusUserIPAddress [lindex $sessionStatusEntry($callSessionIndex) 1]
set ssnStatusUserSubnetMask [lindex $sessionStatusEntry($callSessionIndex) 2]
set ssnStatusCurrentService [lindex $sessionStatusEntry($callSessionIndex) 3]
# $callStatusStartingTimeStamp is in seconds, but sysUpTime is expected to be
# in hundreds of a second
set callDuration [mib format sysUpTime [ \
expr [mib scan sysUpTime $sysUpTime] - 100 * $callStatusStartingTimeStamp \
]]
puts "$callStatusDataRate $callDuration $ssnStatusUserName\t$ssnStatusUserIPAddress\t$ssnStatusUserSubnetMask\t$ssnStatusCurrentService"
# count how many 64k's, 28.8k's, etc.
# you have to make sure the variable exists before you increment it
set dataRateCount($callStatusDataRate) [expr {
([info exists dataRateCount($callStatusDataRate)]) ?
[incr dataRateCount($callStatusDataRate)] : 1
}]
}
exit 0
++ Ascend Users Mailing List ++
To unsubscribe: send unsubscribe to ascend-users-request@bungi.com
To get FAQ'd: <http://www.nealis.net/ascend/faq>