You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-11-05 04:50:35 +03:00
253 lines
7.2 KiB
Perl
253 lines
7.2 KiB
Perl
package NetSNMP::TrapReceiver;
|
|
|
|
use 5.00006;
|
|
use strict;
|
|
use Carp;
|
|
|
|
require Exporter;
|
|
require DynaLoader;
|
|
|
|
use AutoLoader;
|
|
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $AUTOLOAD);
|
|
@ISA = qw(Exporter
|
|
DynaLoader);
|
|
|
|
require NetSNMP::OID;
|
|
|
|
|
|
# Items to export into callers namespace by default. Note: do not export
|
|
# names by default without a very good reason. Use EXPORT_OK instead.
|
|
# Do not simply export all your public functions/methods/constants.
|
|
|
|
# This allows declaration use NetSNMP::TrapReceiver ':all';
|
|
# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
|
|
# will save memory.
|
|
%EXPORT_TAGS = ( 'all' => [ qw(
|
|
NETSNMPTRAPD_AUTH_HANDLER
|
|
NETSNMPTRAPD_HANDLER_BREAK
|
|
NETSNMPTRAPD_HANDLER_FAIL
|
|
NETSNMPTRAPD_HANDLER_FINISH
|
|
NETSNMPTRAPD_HANDLER_OK
|
|
NETSNMPTRAPD_POST_HANDLER
|
|
NETSNMPTRAPD_PRE_HANDLER
|
|
netsnmp_add_default_traphandler
|
|
netsnmp_add_global_traphandler
|
|
netsnmp_add_traphandler
|
|
) ] );
|
|
|
|
@EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
|
|
|
|
@EXPORT = qw(
|
|
NETSNMPTRAPD_AUTH_HANDLER
|
|
NETSNMPTRAPD_HANDLER_BREAK
|
|
NETSNMPTRAPD_HANDLER_FAIL
|
|
NETSNMPTRAPD_HANDLER_FINISH
|
|
NETSNMPTRAPD_HANDLER_OK
|
|
NETSNMPTRAPD_POST_HANDLER
|
|
NETSNMPTRAPD_PRE_HANDLER
|
|
);
|
|
|
|
$VERSION = '5.2.1.2';
|
|
|
|
# sub new {
|
|
# my $type = shift;
|
|
# my ($self);
|
|
# %$self = @_;
|
|
# bless($self, $type);
|
|
# return $self;
|
|
# }
|
|
|
|
# sub register($$$$) {
|
|
# my ($self, $oid, $sub) = @_;
|
|
# my $reg = NetSNMP::TrapReceiver::registration::new($oid, $sub);
|
|
# if ($reg) {
|
|
# $reg->register();
|
|
# $self->{'regobjs'}{$name} = $reg;
|
|
# }
|
|
# return $reg;
|
|
# }
|
|
|
|
sub AUTOLOAD {
|
|
# This AUTOLOAD is used to 'autoload' constants from the constant()
|
|
# XS function.
|
|
|
|
my $constname;
|
|
($constname = $AUTOLOAD) =~ s/.*:://;
|
|
croak "&NetSNMP::TrapReceiver::constant not defined" if $constname eq 'constant';
|
|
my ($error, $val) = constant($constname);
|
|
if ($error) { croak $error; }
|
|
{
|
|
no strict 'refs';
|
|
# Fixed between 5.005_53 and 5.005_61
|
|
#XXX if ($] >= 5.00561) {
|
|
#XXX *$AUTOLOAD = sub () { $val };
|
|
#XXX }
|
|
#XXX else {
|
|
*$AUTOLOAD = sub { $val };
|
|
#XXX }
|
|
}
|
|
goto &$AUTOLOAD;
|
|
}
|
|
|
|
bootstrap NetSNMP::TrapReceiver $VERSION;
|
|
|
|
# Preloaded methods go here.
|
|
|
|
# Autoload methods go after =cut, and are processed by the autosplit program.
|
|
|
|
1;
|
|
__END__
|
|
|
|
=head1 NAME
|
|
|
|
NetSNMP::TrapReceiver - Embedded perl trap handling for Net-SNMP's snmptrapd
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
Put the following lines in your snmptrapd.conf file:
|
|
|
|
perl NetSNMP::TrapReceiver::register("trapOID", \&myfunc);
|
|
|
|
=head1 ABSTRACT
|
|
|
|
The NetSNMP::TrapReceiver module is used to register perl
|
|
subroutines into the Net-SNMP snmptrapd process. Net-SNMP MUST have
|
|
been configured using --with-embedded-perl. Registration of
|
|
functions is then done through the snmptrapd.conf configuration
|
|
file. This module can NOT be used in a normal perl script to
|
|
receive traps. It is intended solely for embedded use within the
|
|
snmptrapd demon.
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
Within the snmprapd.conf file, the keyword "perl" may be used to call
|
|
any perl expression and using this ability, you can use the
|
|
NetSNMP::TrapReceiver module to register functions which will be
|
|
called every time a given notification (a trap or an inform) is
|
|
received. Registered functions are called with 2 arguments. The
|
|
first is a reference to a hash containing information about how the
|
|
trap was received (what version of the SNMP protocol was used, where
|
|
it came from, what SNMP user name or community name it was sent under,
|
|
etc). The second argument is a reference to an array containing the
|
|
variable bindings (OID and value information) that define the
|
|
noification itself. Each variable is itself a reference to an array
|
|
containing three values: a NetSNMP::OID object, the value that came
|
|
associated with it, and the value's numeric type (see NetSNMP::ASN for
|
|
further details on SNMP typing information).
|
|
|
|
Subroutines are registered using the NetSNMP::TrapReceiver::register
|
|
funcion, which takes two arguments. The first is a string describing
|
|
the notification you want to register for (such as "linkUp" or
|
|
"MyMIB::MyTrap" or ".1.3.6.1.4.1.2021...."). Two special keywords can
|
|
be used in place of an OID: "default" and "all". The "default"
|
|
keyword indicates you want your handler to be called in the case where
|
|
no other handlers are called. The "all" keyword indicates that the
|
|
handler should ALWAYS be called for every notification.
|
|
|
|
=head1 EXAMPLE
|
|
|
|
As an example, put the following code into a file (say
|
|
"/usr/local/share/snmp/mytrapd.pl"):
|
|
|
|
#!/usr/bin/perl
|
|
|
|
sub my_receiver {
|
|
print "********** PERL RECEIVED A NOTIFICATION:\n";
|
|
|
|
# print the PDU info (a hash reference)
|
|
print "PDU INFO:\n";
|
|
foreach my $k(keys(%{$_[0]})) {
|
|
printf " %-30s %s\n", $k, $_[0]{$k};
|
|
}
|
|
|
|
# print the variable bindings:
|
|
print "VARBINDS:\n";
|
|
foreach my $x (@{$_[1]}) {
|
|
printf " %-30s type=%-2d value=%s\n", $x->[0], $x->[2], $x->[1];
|
|
}
|
|
}
|
|
|
|
NetSNMP::TrapReceiver::register("all", \&my_receiver) ||
|
|
warn "failed to register our perl trap handler\n";
|
|
|
|
print STDERR "Loaded the example perl snmptrapd handler\n";
|
|
|
|
Then, put the following line in your snmprapd.conf file:
|
|
|
|
perl do "/usr/local/share/snmp/mytrapd.pl";
|
|
|
|
Start snmptrapd (as root, and the following other opions make it stay
|
|
in the foreground and log to stderr):
|
|
|
|
snmptrapd -f -Le
|
|
|
|
You should see it start up and display the final message from the end
|
|
of the above perl script:
|
|
|
|
Loaded the perl snmptrapd handler
|
|
2004-02-11 10:08:45 NET-SNMP version 5.2 Started.
|
|
|
|
Then, if you send yourself a fake trap using the following example command:
|
|
|
|
snmptrap -v 2c -c mycommunity localhost 0 linkUp ifIndex.1 i 1 \
|
|
ifAdminStatus.1 i up ifOperStatus.1 i up ifDescr s eth0
|
|
|
|
You should see the following output appear from snmptrapd as your perl
|
|
code gets executed:
|
|
|
|
********** PERL RECEIVED A NOTIFICATION:
|
|
PDU INFO:
|
|
notificationtype TRAP
|
|
receivedfrom 127.0.0.1
|
|
version 1
|
|
errorstatus 0
|
|
messageid 0
|
|
community mycommunity
|
|
transactionid 2
|
|
errorindex 0
|
|
requestid 765160220
|
|
VARBINDS:
|
|
sysUpTimeInstance type=67 value=0:0:00:00.00
|
|
snmpTrapOID.0 type=6 value=linkUp
|
|
ifIndex.1 type=2 value=1
|
|
ifAdminStatus.1 type=2 value=1
|
|
ifOperStatus.1 type=2 value=1
|
|
ifDescr type=4 value="eth0"
|
|
|
|
=head1 EXPORT
|
|
|
|
None by default.
|
|
|
|
# =head2 Exportable constants
|
|
|
|
# NETSNMPTRAPD_AUTH_HANDLER
|
|
# NETSNMPTRAPD_HANDLER_BREAK
|
|
# NETSNMPTRAPD_HANDLER_FAIL
|
|
# NETSNMPTRAPD_HANDLER_FINISH
|
|
# NETSNMPTRAPD_HANDLER_OK
|
|
# NETSNMPTRAPD_POST_HANDLER
|
|
# NETSNMPTRAPD_PRE_HANDLER
|
|
|
|
=head1 SEE ALSO
|
|
|
|
NetSNMP::OID, NetSNMP::ASN
|
|
|
|
snmptrapd.conf(5) for configuring the Net-SNMP trap receiver.
|
|
|
|
snmpd.conf(5) for configuring the Net-SNMP snmp agent for sending traps.
|
|
|
|
http://www.Net-SNMP.org/
|
|
|
|
=head1 AUTHOR
|
|
|
|
W. Hardaker, E<lt>hardaker@users.sourceforge.netE<gt>
|
|
|
|
=head1 COPYRIGHT AND LICENSE
|
|
|
|
Copyright 2004 by W. Hardaker
|
|
|
|
This library is free software; you can redistribute it and/or modify
|
|
it under the same terms as Perl itself.
|
|
|
|
=cut
|