diff options
Diffstat (limited to 'include/nms.pm')
-rw-r--r-- | include/nms.pm | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/include/nms.pm b/include/nms.pm new file mode 100644 index 0000000..9567bde --- /dev/null +++ b/include/nms.pm @@ -0,0 +1,104 @@ +#! /usr/bin/perl +use strict; +use warnings; +use DBI; +use Net::Telnet; +use Data::Dumper; +use FileHandle; +package nms; + + +use base 'Exporter'; +our @EXPORT = qw(switch_disconnect switch_connect switch_exec switch_timeout db_connect); + +BEGIN { + require "config.pm"; + eval { + require "config.local.pm"; + }; +} + +sub db_connect { + my $dbh = DBI->connect("dbi:Pg:" . + "dbname=" . $nms::config::db_name . + ";host=" . $nms::config::db_host, + $nms::config::db_username, + $nms::config::db_password) + or die "Couldn't connect to database"; + return $dbh; +} + +sub switch_connect($) { + my ($ip) = @_; + + my $dumplog = FileHandle->new; + $dumplog->open(">>/tmp/dumplog-queue") or die "/tmp/dumplog-queue: $!"; + $dumplog->print("\n\nConnecting to " . $ip . "\n\n"); + + my $inputlog = FileHandle->new; + $inputlog->open(">>/tmp/inputlog-queue") or die "/tmp/inputlog-queue: $!"; + $inputlog->print("\n\nConnecting to " . $ip . "\n\n"); + + my $conn = new Net::Telnet( Timeout => $nms::config::telnet_timeout, + Dump_Log => $dumplog, + Input_Log => $inputlog, + Errmode => 'return', + Prompt => '/DGS-3100# (?!\x1b\[K)/'); + my $ret = $conn->open( Host => $ip); + if (!$ret || $ret != 1) { + return (undef); + } + # Handle login with and without password + print "Logging in without password\n"; + $conn->waitfor('/User ?Name:/'); + $conn->print('admin'); + my (undef, $match) = $conn->waitfor('/DGS-3100#|Password:/'); + die 'Unexpected prompt after login attempt' if (not defined $match); + if ($match eq 'Password:') { + $conn->print('gurbagurba'); # Dette passordet skal feile + $conn->waitfor('/User ?Name:/'); + $conn->print($nms::config::dlink1g_user); + my (undef, $match) = $conn->waitfor('/DGS-3100#|Password:/'); + if ($match eq 'Password:') { + $conn->cmd($nms::config::dlink1g_passwd); + } + } + return ($conn); +} + +# Send a command to switch and return the data recvied from the switch +sub switch_exec { + my ($cmd, $conn, $print) = @_; + + # Send the command and get data from switch + my @data; + if (defined($print)) { + $conn->print($cmd); + return; + } else { + @data = $conn->cmd($cmd); + print $conn->errmsg, "\n"; + } + return @data; +# my @lines = (); +# foreach my $line (@data) { +# # Remove escape-7 sequence +## $line =~ s/\x1b\x37//g; +# push (@lines, $line); +# } +# return @lines; +} + +sub switch_timeout { + my ($timeout, $conn) = @_; + + $conn->timeout($timeout); + return ('Set timeout to ' . $timeout); +} + +sub switch_disconnect { + my ($conn) = @_; + $conn->close; +} + +1; |