added files
[bcm963xx.git] / userapps / opensource / net-snmp / perl / SNMP / examples / trap-example.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4 use vars qw();
5 use SNMP qw();
6
7 &SNMP::initMib();
8
9 &SNMP::loadModules(
10   'RFC2127-MIB',
11   );
12
13 sub trap_call_setup;
14 sub trap_dummy;
15
16 #
17 # should eventually get these out of the MIB...
18 #
19 my %dispatch_table = (
20   'isdnMibCallInformation', \&trap_call_setup,
21   '.', \&trap_dummy,
22 );
23
24 sub trap_dispatcher
25 {
26   my $session = shift;
27   my $ref = shift;
28   my $trapType;
29   my ($reqid, $addr, $community);
30
31   # if this is a timeout, then there will be no args...
32   if (defined($ref)) {
33     $ref->[1]->[2] = SNMP::translateObj($ref->[1]->val);
34     $trapType = $ref->[1]->val;
35     my $args = shift;
36     ($reqid, $addr, $community) = @{$args};
37   } else {
38     $trapType = 'timeout';
39   }
40
41   if (defined($dispatch_table{$trapType})) {
42     &{$dispatch_table{$trapType}}($session, $ref);
43   } elsif (defined($dispatch_table{'.'})) {
44     &{$dispatch_table{'.'}}($session, $ref);
45   } else {
46     # don't do anything... silently discard.
47   }
48 }
49
50 sub trap_dummy
51 {
52   my $session = shift;
53   my $ref = shift;
54
55   my $trapType = $ref->[1]->val;
56
57   warn "unexpected trap " . $trapType;
58 }
59
60
61 sub trap_call_setup
62 {
63   my $session = shift;
64   my $varlist = shift;
65   my $args = shift;
66
67   my $ifIndex = $varlist->[2]->val;
68   my $isdnBearerOperStatus = $varlist->[3]->val;
69   my $isdnBearerPeerAddress = $varlist->[4]->val;
70   my $isdnBearerPeerSubAddress = $varlist->[5]->val;
71   my $isdnBearerInfoType = $varlist->[6]->val;
72   my $isdnBearerCallOrigin = $varlist->[5]->val;
73
74   my ($reqid, $ipaddr, $community) = @{$args};
75
76   printf "Call from %s", $isdnBearerPeerAddress;
77   printf "*%s", $isdnBearerPeerSubAddress if ($isdnBearerPeerSubAddress ne '');
78   printf "\n";
79 }
80
81 my $session = new SNMP::Session(
82   DestHost => '0.0.0.0',
83   LocalPort => 162,
84   Version => '2c',
85   UseEnums => 0,
86   );
87
88 if (!defined($session)) {
89   die "can't create listener session";
90 }
91
92 # otherwise assume that ErrorNum is zero...
93
94 $session->SNMP::_catch([\&trap_dispatcher, $session]);
95
96 &SNMP::MainLoop();