summaryrefslogtreecommitdiff
path: root/torrus/bin/action_snmptrap.in
diff options
context:
space:
mode:
Diffstat (limited to 'torrus/bin/action_snmptrap.in')
-rw-r--r--torrus/bin/action_snmptrap.in183
1 files changed, 183 insertions, 0 deletions
diff --git a/torrus/bin/action_snmptrap.in b/torrus/bin/action_snmptrap.in
new file mode 100644
index 000000000..c2e9c20bb
--- /dev/null
+++ b/torrus/bin/action_snmptrap.in
@@ -0,0 +1,183 @@
+#!@PERL@
+# Copyright (C) 2002 Stanislav Sinyagin
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+# $Id: action_snmptrap.in,v 1.1 2010-12-27 00:04:01 ivan Exp $
+# Stanislav Sinyagin <ssinyagin@yahoo.com>
+
+# SNMP v2c trap
+# See Torrus-MIB.txt for reference
+
+use strict;
+use Net::SNMP qw(:ALL);
+use Getopt::Long;
+
+require '@snmptrap_siteconfig_pl@';
+
+if( not $ENV{'TORRUS_TOKEN'} )
+{
+ print STDERR ("Torrus environment variables missing. This program ",
+ "must be run from Torrus Monitor\n");
+ exit 1;
+}
+
+my @hosts;
+my $severity;
+
+my $ok = GetOptions( 'host=s' => \@hosts,
+ 'community=s' => \$Torrus::Snmptrap::community,
+ 'port=i' => \$Torrus::Snmptrap::port,
+ 'severity=i' => \$severity );
+
+if( not $ok )
+{
+ print STDERR ("Error parsing options\n");
+ exit 1;
+}
+
+if( scalar(@hosts) > 0 )
+{
+ @Torrus::Snmptrap::hosts = @hosts;
+}
+
+my $oid_prefix = '.1.3.6.1.4.1.14697.1.1.1';
+
+my %event_type = ( 'set' => 1,
+ 'repeat' => 2,
+ 'clear' => 3,
+ 'forget' => 4
+ );
+
+my @varbindlist = ( $oid_prefix . '.1',
+ INTEGER32, 1,
+
+ $oid_prefix . '.2',
+ OCTET_STRING, $ENV{'TORRUS_TOKEN'},
+
+ $oid_prefix . '.3',
+ OCTET_STRING, $ENV{'TORRUS_MONITOR'},
+
+ $oid_prefix . '.4',
+ INTEGER, $event_type{$ENV{'TORRUS_EVENT'}},
+
+ $oid_prefix . '.5',
+ OCTET_STRING, $ENV{'TORRUS_NODEPATH'},
+
+ $oid_prefix . '.6',
+ OCTET_STRING, snmp_dateandtime( $ENV{'TORRUS_TSTAMP'} ),
+
+ $oid_prefix . '.7',
+ OCTET_STRING, $ENV{'TORRUS_TREE'},
+
+ $oid_prefix . '.9',
+ OCTET_STRING, $ENV{'TORRUS_MCOMMENT'}
+ );
+
+if( defined( $severity ) )
+{
+ push( @varbindlist,
+ $oid_prefix . '.8',
+ INTEGER32, $severity );
+}
+
+
+foreach my $host ( @Torrus::Snmptrap::hosts )
+{
+ my( $session, $error ) =
+ Net::SNMP->session( -hostname => $host,
+ -community => $Torrus::Snmptrap::community,
+ -port => $Torrus::Snmptrap::port,
+ -version => 2
+ );
+
+ if( not defined($session) )
+ {
+ printf STDERR ("Error opening SNMP trap session: %s.\n", $error);
+ exit 1;
+ }
+
+
+ my $result =
+ $session->snmpv2_trap( -varbindlist => \@varbindlist );
+
+ if( not $result )
+ {
+ printf STDERR ("Error sending SNMP trap: %s.\n", $session->error());
+ }
+
+ $session->close();
+}
+
+# Converts UNIX time to DateAndTime from SNMPv2-TC
+# Currently timezone is not handled.
+
+# DateAndTime ::= TEXTUAL-CONVENTION
+# DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"
+# STATUS current
+# DESCRIPTION
+# "A date-time specification.
+#
+# field octets contents range
+# ----- ------ -------- -----
+# 1 1-2 year* 0..65536
+# 2 3 month 1..12
+# 3 4 day 1..31
+# 4 5 hour 0..23
+# 5 6 minutes 0..59
+# 6 7 seconds 0..60
+# (use 60 for leap-second)
+# 7 8 deci-seconds 0..9
+# 8 9 direction from UTC '+' / '-'
+# 9 10 hours from UTC* 0..13
+# 10 11 minutes from UTC 0..59
+#
+# * Notes:
+# - the value of year is in network-byte order
+# - daylight saving time in New Zealand is +13
+#
+# For example, Tuesday May 26, 1992 at 1:30:15 PM EDT would be
+# displayed as:
+#
+# 1992-5-26,13:30:15.0,-4:0
+#
+# Note that if only local time is known, then timezone
+# information (fields 8-10) is not present."
+# SYNTAX OCTET STRING (SIZE (8 | 11))
+
+sub snmp_dateandtime
+{
+ my $thetime = shift;
+
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
+ localtime( $thetime );
+
+ my $result = pack('nC6',
+ $year + 1900,
+ $mon + 1,
+ $mday,
+ $hour,
+ $min,
+ $sec,
+ 0);
+ return $result;
+}
+
+
+# Local Variables:
+# mode: perl
+# indent-tabs-mode: nil
+# perl-indent-level: 4
+# End: