use strict;
use warnings;
use DBI;
+use Net::Telnet;
package nms;
+
+use base 'Exporter';
+our @EXPORT = qw(switch_connect switch_exec);
+
BEGIN {
require "config.pm";
eval {
return $dbh;
}
+sub switch_connect($) {
+ my ($ip) = @_;
+
+ my $conn = new Net::Telnet( Timeout => $nms::config::telnet_timeout,
+# Dump_Log => '/tmp/dumplog-queue',
+ Errmode => 'return',
+# Prompt => '/ES-3023>/');
+ Prompt => '/(ES-3024|e\d{1,2}\-\dsw)>/i');
+ my $ret = $conn->open( Host => $ip);
+ if (!$ret || $ret != 1) {
+ return (undef);
+ }
+ # XXX: Just send the password as text, I did not figure out how to
+ # handle authentication with only password through $conn->login().
+ #$conn->login(»·Prompt => '/password[: ]*$/i',
+ # Name => $password,
+ # Password => $password);
+ $conn->cmd($nms::config::zyxel_password);
+ # Get rid of banner
+ #$conn->get;
+ 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);
+ }
+ my @lines = ();
+ foreach my $line (@data) {
+ # Remove escape-7 sequence
+ $line =~ s/\x1b\x37//g;
+ push (@lines, $line);
+ }
+
+ return @lines;
+}
+
1;