diff options
Diffstat (limited to 'scripts/vyatta-snmp.pl')
-rw-r--r-- | scripts/vyatta-snmp.pl | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/scripts/vyatta-snmp.pl b/scripts/vyatta-snmp.pl new file mode 100644 index 00000000..59c7524b --- /dev/null +++ b/scripts/vyatta-snmp.pl @@ -0,0 +1,150 @@ +#!/usr/bin/perl +# +# Module: vyatta-snmp.pl +# +# **** License **** +# Version: VPL 1.0 +# +# The contents of this file are subject to the Vyatta Public License +# Version 1.0 ("License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.vyatta.com/vpl +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# This code was originally developed by Vyatta, Inc. +# Portions created by Vyatta are Copyright (C) 2007 Vyatta, Inc. +# All Rights Reserved. +# +# Author: Stig Thormodsrud +# Date: October 2007 +# Description: Script to glue vyatta cli to snmp daemon +# +# **** End License **** +# + +use lib "/opt/vyatta/share/perl5/"; +use VyattaConfig; +use VyattaMisc; +use Getopt::Long; + +use strict; +use warnings; + +my $mibdir = '/opt/vyatta/share/snmp/mibs'; +my $snmp_init = '/opt/vyatta/sbin/snmpd.init'; +my $snmp_conf = '/etc/snmp/snmpd.conf'; + + +sub snmp_init { + system("iptables -A INPUT -m rlsnmpstats"); + system("iptables -A OUTPUT -m rlsnmpstats"); +} + +sub snmp_restart { + system("$snmp_init restart"); +} + +sub snmp_stop { + system("$snmp_init stop"); +} + +sub snmp_get_constants { + my $output; + + my $date = `date`; + chomp $date; + $output = "#\n# autogenerated by vyatta-snmp.pl on $date\n#\n"; + $output .= "dlmod bgp4_mib_1657 $mibdir/libbgp4_mib_1657.so\n"; + $output .= "dlmod ospf_mib_1850 $mibdir/libospf_mib_1850.so\n"; + $output .= "trap2sink localhost vyatta 51510\n"; + + return $output; +} + +sub snmp_get_values { + my $output; + my $config = new VyattaConfig; + + $config->setLevel("protocols snmp community"); + my @communities = $config->listNodes(); + + foreach my $community (@communities) { + my $authorization = $config->returnValue("$community authorization"); + if (defined $authorization and $authorization eq "rw") { + $output .= "rwcommunity $community\n"; + } else { + $output .= "rocommunity $community\n"; + } + } + + $config->setLevel("protocols snmp"); + my $contact = $config->returnValue("contact"); + if (defined $contact) { + $output .= "syscontact \"$contact\" \n"; + } + my $description = $config->returnValue("description"); + if (defined $description) { + $output .= "sysdescr \"$description\" \n"; + } + my $location = $config->returnValue("location"); + if (defined $location) { + $output .= "syslocation \"$location\" \n"; + } + + my $multivalues = $config->returnValue("trap-target"); + my @trap_targets = split("\n", $multivalues); + foreach my $trap_target (@trap_targets) { + $output .= "trapsink $trap_target\n"; + } + + return $output; +} + +sub snmp_write_file { + my ($config) = @_; + + open(my $fh, '>', $snmp_conf) || die "Couldn't open $snmp_conf - $!"; + print $fh $config; + close $fh; +} + + +# +# main +# +my $init_snmp; +my $update_snmp; +my $stop_snmp; + +GetOptions("init-snmp!" => \$init_snmp, + "update-snmp!" => \$update_snmp, + "stop-snmp!" => \$stop_snmp); + +if (defined $init_snmp) { + snmp_init(); +} + +if (defined $update_snmp) { + my $config; + + $config = snmp_get_constants(); + $config .= snmp_get_values(); + snmp_write_file($config); + snmp_restart(); +} + +if (defined $stop_snmp) { + snmp_stop(); +} + +exit 0; + +# end of file + + + + |