blob: 8b8913fb8d666804466db574ad17203c51ee838b [file] [log] [blame]
use strict;
use vars qw();
use SNMP qw();
&SNMP::initMib();
&SNMP::loadModules(
'RFC2127-MIB',
);
sub trap_call_setup;
sub trap_dummy;
#
# should eventually get these out of the MIB...
#
my %dispatch_table = (
'isdnMibCallInformation', \&trap_call_setup,
'.', \&trap_dummy,
);
sub trap_dispatcher
{
my $session = shift;
my $ref = shift;
my $trapType;
my ($reqid, $addr, $community);
# if this is a timeout, then there will be no args...
if (defined($ref)) {
$ref->[1]->[2] = SNMP::translateObj($ref->[1]->val);
$trapType = $ref->[1]->val;
my $args = shift;
($reqid, $addr, $community) = @{$args};
} else {
$trapType = 'timeout';
}
if (defined($dispatch_table{$trapType})) {
&{$dispatch_table{$trapType}}($session, $ref);
} elsif (defined($dispatch_table{'.'})) {
&{$dispatch_table{'.'}}($session, $ref);
} else {
# don't do anything... silently discard.
}
}
sub trap_dummy
{
my $session = shift;
my $ref = shift;
my $trapType = $ref->[1]->val;
warn "unexpected trap " . $trapType;
}
sub trap_call_setup
{
my $session = shift;
my $varlist = shift;
my $args = shift;
my $ifIndex = $varlist->[2]->val;
my $isdnBearerOperStatus = $varlist->[3]->val;
my $isdnBearerPeerAddress = $varlist->[4]->val;
my $isdnBearerPeerSubAddress = $varlist->[5]->val;
my $isdnBearerInfoType = $varlist->[6]->val;
my $isdnBearerCallOrigin = $varlist->[5]->val;
my ($reqid, $ipaddr, $community) = @{$args};
printf "Call from %s", $isdnBearerPeerAddress;
printf "*%s", $isdnBearerPeerSubAddress if ($isdnBearerPeerSubAddress ne '');
printf "\n";
}
my $session = new SNMP::Session(
DestHost => 'udp:162',
LocalPort => 1,
Version => '2c',
UseEnums => 0,
);
if (!defined($session)) {
die "can't create listener session";
}
# otherwise assume that ErrorNum is zero...
$session->SNMP::_catch([\&trap_dispatcher, $session]);
&SNMP::MainLoop();