90 lines
2.7 KiB
Perl
90 lines
2.7 KiB
Perl
#!/bin/perl
|
|
our %Config;
|
|
|
|
my @AlarmText;
|
|
|
|
while (1) {
|
|
my %switches;
|
|
my @StpStatusTrans = qw / undef disabled blocking listening learning forwarding broken/;
|
|
my $AlarmFlag;
|
|
|
|
my $t=localtime;
|
|
printf "%s\n", $t;
|
|
|
|
@AlarmText=();
|
|
my $Header = sprintf " %-15s %-6s %-12s %-12s\n ------------------------------------------------\n", "Switch", "Port", "Erwartet", "Ausgelesen";
|
|
push @AlarmText, $Header;
|
|
|
|
open CONF, "<stp_state.conf";
|
|
my @config=<CONF>;
|
|
close CONF;
|
|
|
|
eval "@config";
|
|
|
|
my %IfIndex;
|
|
my %StpStatus;
|
|
|
|
# Jede Switch durchlaufen
|
|
foreach my $switch (keys %switches) {
|
|
# debug ausgabe
|
|
#print "\n$switch\n";
|
|
|
|
# Port Namen lesen um auf IfIndex zurückzuschließen
|
|
my @IfIndexArray = `snmpwalk -mall -c public $switch .1.3.6.1.2.1.2.2.1.2`;
|
|
|
|
# STP Status lesen um zum IfIndex den STP Status zuzuordnen
|
|
my @IfStpStatusArray = `snmpwalk -mall -c public $switch .1.3.6.1.2.1.17.2.15.1.3`;
|
|
|
|
# Jeden Port dieser Switch durchlaufen
|
|
foreach (@{$switches{$switch}}) {
|
|
my ($SollStatus,$port) = $_ =~ /([0-9])_(.*)/;
|
|
# debug ausgabe
|
|
#printf " %-6s %-12s", $port, $StpStatusTrans[$SollStatus];
|
|
|
|
# Suche IfIndex zu Portname
|
|
foreach (@IfIndexArray) {
|
|
if ($_ =~ /$port"/) {
|
|
my $index;
|
|
($index) = $_ =~ /\.([0-9]*) =/;
|
|
${$IfIndex{$switch}}{$port} = $index;
|
|
|
|
# Suche STP Status zu IfIndex
|
|
foreach (@IfStpStatusArray) {
|
|
if ($_ =~ /$index = /) {
|
|
my $stp;
|
|
($stp) = $_ =~ /= ([0-9])/;
|
|
${$StpStatus{$switch}}{$port} = $StpStatusTrans[$stp];
|
|
# debug ausgabe
|
|
#printf "%-12s", $StpStatusTrans[$stp];
|
|
if ($stp != $SollStatus) {
|
|
# debug ausgabe
|
|
#print " ! ";
|
|
AlarmMail($switch, $port, $StpStatusTrans[$SollStatus], $StpStatusTrans[$stp]);
|
|
$AlarmFlag = 1;
|
|
}
|
|
# debug ausgabe
|
|
#print "\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($AlarmFlag) {
|
|
open OUT, ">output.txt";
|
|
printf OUT "@AlarmText";
|
|
close OUT;
|
|
|
|
# Mailserver
|
|
`clemail -to a.wisniewski\@icfsystems.de -subject "Unerwarteter STP Status" -bodyfile output.txt -from rz\@icfsystems.de -smtpserver 130.35.0.143 -smtpport 25`;
|
|
|
|
}
|
|
# Pause zwischen Prüfungen in Sekunden
|
|
sleep(600);
|
|
}
|
|
|
|
sub AlarmMail {
|
|
my ($a,$b,$c,$d) = @_;
|
|
push @AlarmText, sprintf "%-15s %-6s %-12s %-12s\n", $a, $b, $c, $d;
|
|
} |