summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am2
-rw-r--r--scripts/snmpd.init75
-rw-r--r--scripts/vyatta-snmp.pl150
-rw-r--r--templates/protocols/snmp/community/node.def3
-rw-r--r--templates/protocols/snmp/community/node.tag/authorization/node.def7
-rw-r--r--templates/protocols/snmp/community/node.tag/node.def1
-rw-r--r--templates/protocols/snmp/contact/node.def2
-rw-r--r--templates/protocols/snmp/description/node.def2
-rw-r--r--templates/protocols/snmp/location/node.def3
-rw-r--r--templates/protocols/snmp/node.def9
-rw-r--r--templates/protocols/snmp/trap-target/node.def3
11 files changed, 257 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am
index afaaf6b0..c7713acd 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -14,6 +14,8 @@ sbin_SCRIPTS += scripts/standalone_root_pw_reset
sbin_SCRIPTS += scripts/system/vyatta_update_login_user.pl
sbin_SCRIPTS += scripts/system/vyatta_update_logrotate.pl
sbin_SCRIPTS += scripts/system/vyatta_update_syslog.pl
+sbin_SCRIPTS += scripts/vyatta-snmp.pl
+sbin_SCRIPTS += scripts/snmpd.init
sysconf_DATA += sysconf/hosts
sysconf_DATA += sysconf/logrotate_messages
diff --git a/scripts/snmpd.init b/scripts/snmpd.init
new file mode 100644
index 00000000..3e4ef17b
--- /dev/null
+++ b/scripts/snmpd.init
@@ -0,0 +1,75 @@
+#! /bin/sh
+# /etc/init.d/snmpd: start snmp daemon.
+
+test -x /usr/sbin/snmpd || exit 0
+test -x /usr/sbin/snmptrapd || exit 0
+
+# Defaults
+export MIBDIRS=/usr/share/snmp/mibs
+SNMPDRUN=yes
+SNMPDOPTS='-Lsd -Lf /dev/null -p /var/run/snmpd.pid'
+TRAPDRUN=no
+TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'
+
+# Reads config file (will override defaults above)
+[ -r /etc/default/snmpd ] && . /etc/default/snmpd
+
+# Cd to / before starting any daemons.
+cd /
+
+case "$1" in
+ start)
+ echo -n "Starting network management services:"
+ if [ "$SNMPDRUN" = "yes" -a -f /etc/snmp/snmpd.conf ]; then
+ start-stop-daemon --quiet --start --exec /usr/sbin/snmpd \
+ -- -p /var/run/snmpd.pid
+ echo -n " snmpd"
+ fi
+ if [ "$TRAPDRUN" = "yes" -a -f /etc/snmp/snmptrapd.conf ]; then
+ start-stop-daemon --quiet --start --exec /usr/sbin/snmptrapd \
+ -- $TRAPDOPTS
+ echo -n " snmptrapd"
+ fi
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping network management services:"
+ start-stop-daemon --quiet --stop --pidfile /var/run/snmpd.pid
+ echo -n " snmpd"
+ start-stop-daemon --quiet --stop --pidfile /var/run/snmptrapd.pid
+ echo -n " snmptrapd"
+ echo "."
+ ;;
+ restart)
+ echo -n "Restarting network management services:"
+ start-stop-daemon --quiet --stop --pidfile /var/run/snmpd.pid
+ start-stop-daemon --quiet --stop --pidfile /var/run/snmptrapd.pid
+ # Allow the daemons time to exit completely.
+ sleep 2
+ if [ "$SNMPDRUN" = "yes" -a -f /etc/snmp/snmpd.conf ]; then
+ start-stop-daemon --quiet --start --exec /usr/sbin/snmpd -- -p /var/run/snmpd.pid
+ echo -n " snmpd"
+ fi
+ if [ "$TRAPDRUN" = "yes" -a -f /etc/snmp/snmptrapd.conf ]; then
+ # Allow snmpd time to start up.
+ sleep 1
+ start-stop-daemon --quiet --start --exec /usr/sbin/snmptrapd -- $TRAPDOPTS
+ echo -n " snmptrapd"
+ fi
+ echo "."
+ ;;
+ reload|force-reload)
+ echo -n "Reloading network management services:"
+ if [ "$SNMPDRUN" = "yes" -a -f /etc/snmp/snmpd.conf ]; then
+ start-stop-daemon --quiet --stop --signal 1 \
+ --pidfile /var/run/snmpd.pid --exec /usr/sbin/snmpd
+ echo -n " snmpd"
+ fi
+ echo "."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/snmpd {start|stop|restart|reload|force-reload}"
+ exit 1
+esac
+
+exit 0
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
+
+
+
+
diff --git a/templates/protocols/snmp/community/node.def b/templates/protocols/snmp/community/node.def
new file mode 100644
index 00000000..18472af8
--- /dev/null
+++ b/templates/protocols/snmp/community/node.def
@@ -0,0 +1,3 @@
+tag:
+type: txt
+help: "Community name"
diff --git a/templates/protocols/snmp/community/node.tag/authorization/node.def b/templates/protocols/snmp/community/node.tag/authorization/node.def
new file mode 100644
index 00000000..b9960195
--- /dev/null
+++ b/templates/protocols/snmp/community/node.tag/authorization/node.def
@@ -0,0 +1,7 @@
+type: txt
+default: "ro"
+help: "Authorization type either (rw or ro)"
+syntax: $(@) in "ro", "rw"; "authorization type must be either rw or ro"
+
+
+
diff --git a/templates/protocols/snmp/community/node.tag/node.def b/templates/protocols/snmp/community/node.tag/node.def
new file mode 100644
index 00000000..410186c6
--- /dev/null
+++ b/templates/protocols/snmp/community/node.tag/node.def
@@ -0,0 +1 @@
+help: "Community options"
diff --git a/templates/protocols/snmp/contact/node.def b/templates/protocols/snmp/contact/node.def
new file mode 100644
index 00000000..970ed5fa
--- /dev/null
+++ b/templates/protocols/snmp/contact/node.def
@@ -0,0 +1,2 @@
+type: txt
+help: "Contact information"
diff --git a/templates/protocols/snmp/description/node.def b/templates/protocols/snmp/description/node.def
new file mode 100644
index 00000000..d5566f58
--- /dev/null
+++ b/templates/protocols/snmp/description/node.def
@@ -0,0 +1,2 @@
+type: txt
+help: "Description information"
diff --git a/templates/protocols/snmp/location/node.def b/templates/protocols/snmp/location/node.def
new file mode 100644
index 00000000..284e38a7
--- /dev/null
+++ b/templates/protocols/snmp/location/node.def
@@ -0,0 +1,3 @@
+type: txt
+help: "Location information"
+
diff --git a/templates/protocols/snmp/node.def b/templates/protocols/snmp/node.def
new file mode 100644
index 00000000..269b64ed
--- /dev/null
+++ b/templates/protocols/snmp/node.def
@@ -0,0 +1,9 @@
+help: "Configure SNMP"
+create: "/opt/vyatta/sbin/vyatta-snmp.pl --init-snmp"
+delete: "touch /tmp/snmp.\\$PPID"
+end: "if [ -f \"/tmp/snmp.\\$PPID\" ]; then \
+ /opt/vyatta/sbin/vyatta-snmp.pl --stop-snmp \
+ rm -rf /tmp/snmp.\\$PPID; \
+ else \
+ /opt/vyatta/sbin/vyatta-snmp.pl --update-snmp; \
+ fi; "
diff --git a/templates/protocols/snmp/trap-target/node.def b/templates/protocols/snmp/trap-target/node.def
new file mode 100644
index 00000000..1a7d5bae
--- /dev/null
+++ b/templates/protocols/snmp/trap-target/node.def
@@ -0,0 +1,3 @@
+multi:
+type: ipv4
+help: "IPv4 address of trap target"