|
Packit |
667938 |
#!/usr/bin/perl
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# PMLines.pl
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# 1998/08/04
|
|
Packit |
667938 |
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# Created by Carlos.Canau@EUnet.pt with cfgmaker from Tobias Oetiker
|
|
Packit |
667938 |
# <oetiker@ee.ethz.ch> as skeleton
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# returns:
|
|
Packit |
667938 |
# #modems
|
|
Packit |
667938 |
# #isdn
|
|
Packit |
667938 |
# sysName
|
|
Packit |
667938 |
# sysUptime
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# 1998/10/30
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# Modified by Butch Kemper <kemper@tstar.net> to allow multiple PortMasters
|
|
Packit |
667938 |
# to be specified on the argument line and to output the totals.
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# 1999/4/18
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# Modified by Butch Kemper <kemper@tstar.net> to process PM2 systems and
|
|
Packit |
667938 |
# to distingish between async and isdn ports.
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# Changed name to PM2lines.pl
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# 1999/4/19
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# Modified by Butch Kemper <kemper@tstar.net> to process both PM2 and PM3
|
|
Packit |
667938 |
# systems.
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# Changed name to PMlines.pl
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# 2000/9/5
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# Modified by Robert Boyle (robert@tellurian.net) to work with
|
|
Packit |
667938 |
# Lucent's VERY broken PM4 SNMP. Now uses modem number in use to determine if
|
|
Packit |
667938 |
# call is ISDN or analog. If modem = "M0" then call is ISDN
|
|
Packit |
667938 |
# Not pretty, but it does work. Somone who is a better PERL programmer than I
|
|
Packit |
667938 |
# may want to integrate these changes into the base PMlines.pl script and make
|
|
Packit |
667938 |
# determination of which method to use based on chassis type.
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# Changed name to PM4lines.pl
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# 2000/9/19
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# Modified AGAIN by Robert Boyle (robert@tellurian.net) to work with
|
|
Packit |
667938 |
# all Lucent Portmaster 2/3/4 chassis. Now uses port speed to determine if
|
|
Packit |
667938 |
# call is ISDN or analog. If speed is 56000 or 64000 then call is ISDN.
|
|
Packit |
667938 |
# This may cause a false ISDN reading if someone has a perfect v.90 connection.
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
# Changed name back to PMlines.pl
|
|
Packit |
667938 |
#
|
|
Packit |
667938 |
|
|
Packit |
667938 |
|
|
Packit |
667938 |
use SNMP_Session;
|
|
Packit |
667938 |
use BER;
|
|
Packit |
667938 |
use Socket;
|
|
Packit |
667938 |
use strict;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
%snmpget::OIDS = ( 'sysName' => '1.3.6.1.2.1.1.5.0',
|
|
Packit |
667938 |
'sysUptime' => '1.3.6.1.2.1.1.3.0',
|
|
Packit |
667938 |
'ifNumber' => '1.3.6.1.2.1.2.1.0',
|
|
Packit |
667938 |
'PMip' => '1.3.6.1.4.1.307.3.2.1.1.1.14',
|
|
Packit |
667938 |
'PMty' => '1.3.6.1.4.1.307.3.2.1.1.1.11',
|
|
Packit |
667938 |
);
|
|
Packit |
667938 |
|
|
Packit |
667938 |
my($tot_isdn,$tot_modems,$args) = (0,0,0);
|
|
Packit |
667938 |
my($input_string,$PROGNAME,$sysUptime,$sysName,$interfaces)="";
|
|
Packit |
667938 |
($PROGNAME = $0) =~ s/.*\///;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
diexit(0) if $#ARGV < 0;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
for ($args=0; $args < $#ARGV+1; $args++) {
|
|
Packit |
667938 |
$input_string = $ARGV[$args];
|
|
Packit |
667938 |
my($community,$router) = split /\@/, $input_string;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
diexit(0) unless $community && $router;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
($sysName,$sysUptime,$interfaces) =
|
|
Packit |
667938 |
snmpget($router,$community,'sysName','sysUptime','ifNumber');
|
|
Packit |
667938 |
my @PMip = snmpgettable($router,$community,'PMip');
|
|
Packit |
667938 |
my @PMty = snmpgettable($router,$community,'PMty');
|
|
Packit |
667938 |
my ($i);
|
|
Packit |
667938 |
|
|
Packit |
667938 |
for ($i=0; $i < $#PMip+1; $i++)
|
|
Packit |
667938 |
{
|
|
Packit |
667938 |
|
|
Packit |
667938 |
if ($PMip[$i] ne "0.0.0.0") {
|
|
Packit |
667938 |
if ($PMty[$i] ne "56000" and $PMty[$i] ne "64000") {
|
|
Packit |
667938 |
$tot_modems++;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
else {
|
|
Packit |
667938 |
$tot_isdn++;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
printf "$tot_modems\n";
|
|
Packit |
667938 |
printf "$tot_isdn\n";
|
|
Packit |
667938 |
printf "$sysUptime\n";
|
|
Packit |
667938 |
printf "$sysName\n";
|
|
Packit |
667938 |
|
|
Packit |
667938 |
exit(0);
|
|
Packit |
667938 |
|
|
Packit |
667938 |
sub diexit {
|
|
Packit |
667938 |
die ("USAGE: $PROGNAME community\@portmaster [community\@portmaster]" .
|
|
Packit |
667938 |
" \.\.\.\n" .
|
|
Packit |
667938 |
" community = snmp read community string\n" .
|
|
Packit |
667938 |
" portmaster = FQN of PortMaster\n");
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
sub snmpget{
|
|
Packit |
667938 |
my($host,$community,@vars) = @_;
|
|
Packit |
667938 |
my(@enoid, $var,$response, $bindings, $binding, $value, $inoid,$outoid,
|
|
Packit |
667938 |
$upoid,$oid,@retvals);
|
|
Packit |
667938 |
foreach $var (@vars) {
|
|
Packit |
667938 |
die "Unknown SNMP var $var\n"
|
|
Packit |
667938 |
unless $snmpget::OIDS{$var};
|
|
Packit |
667938 |
push @enoid, encode_oid((split /\./, $snmpget::OIDS{$var}));
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
srand();
|
|
Packit |
667938 |
my $session = SNMP_Session->open ($host ,
|
|
Packit |
667938 |
$community,
|
|
Packit |
667938 |
161);
|
|
Packit |
667938 |
if ($session->get_request_response(@enoid)) {
|
|
Packit |
667938 |
$response = $session->pdu_buffer;
|
|
Packit |
667938 |
($bindings) = $session->decode_get_response ($response);
|
|
Packit |
667938 |
$session->close ();
|
|
Packit |
667938 |
while ($bindings) {
|
|
Packit |
667938 |
($binding,$bindings) = decode_sequence ($bindings);
|
|
Packit |
667938 |
($oid,$value) = decode_by_template ($binding, "%O%@");
|
|
Packit |
667938 |
my $tempo = pretty_print($value);
|
|
Packit |
667938 |
$tempo=~s/\t/ /g;
|
|
Packit |
667938 |
$tempo=~s/\n/ /g;
|
|
Packit |
667938 |
$tempo=~s/^\s+//;
|
|
Packit |
667938 |
$tempo=~s/\s+$//;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
push @retvals, $tempo;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
return (@retvals);
|
|
Packit |
667938 |
} else {
|
|
Packit |
667938 |
die "No answer from $input_string. You may be using the wrong community\n";
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
sub snmpgettable{
|
|
Packit |
667938 |
my($host,$community,$var) = @_;
|
|
Packit |
667938 |
my($next_oid,$enoid,$orig_oid,
|
|
Packit |
667938 |
$response, $bindings, $binding, $value, $inoid,$outoid,
|
|
Packit |
667938 |
$upoid,$oid,@table,$tempo);
|
|
Packit |
667938 |
die "Unknown SNMP var $var\n"
|
|
Packit |
667938 |
unless $snmpget::OIDS{$var};
|
|
Packit |
667938 |
|
|
Packit |
667938 |
$orig_oid = encode_oid(split /\./, $snmpget::OIDS{$var});
|
|
Packit |
667938 |
$enoid=$orig_oid;
|
|
Packit |
667938 |
srand();
|
|
Packit |
667938 |
my $session = SNMP_Session->open ($host ,
|
|
Packit |
667938 |
$community,
|
|
Packit |
667938 |
161);
|
|
Packit |
667938 |
for(;;) {
|
|
Packit |
667938 |
if ($session->getnext_request_response(($enoid))) {
|
|
Packit |
667938 |
$response = $session->pdu_buffer;
|
|
Packit |
667938 |
($bindings) = $session->decode_get_response ($response);
|
|
Packit |
667938 |
($binding,$bindings) = decode_sequence ($bindings);
|
|
Packit |
667938 |
($next_oid,$value) = decode_by_template ($binding, "%O%@");
|
|
Packit |
667938 |
# quit once we are outside the table
|
|
Packit |
667938 |
last unless BER::encoded_oid_prefix_p($orig_oid,$next_oid);
|
|
Packit |
667938 |
$tempo = pretty_print($value);
|
|
Packit |
667938 |
#print "$var: '$tempo'\n";
|
|
Packit |
667938 |
$tempo=~s/\t/ /g;
|
|
Packit |
667938 |
$tempo=~s/\n/ /g;
|
|
Packit |
667938 |
$tempo=~s/^\s+//;
|
|
Packit |
667938 |
$tempo=~s/\s+$//;
|
|
Packit |
667938 |
push @table, $tempo;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
} else {
|
|
Packit |
667938 |
die "No answer from $input_string\n";
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
$enoid=$next_oid;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
$session->close ();
|
|
Packit |
667938 |
return (@table);
|
|
Packit |
667938 |
}
|