Hi All,
I'm trying to cut my teeth on doing some pattern matching for a project I am working on for my job. As an exercise I have a written a script which telnets into a Cisco router and should return an inventory of all of the T1 interfaces on that device, making a note of which interfaces are voice PRIs.
To check for an interface I show the running configuration filtered by sections which contain the line controller T1. The problem I'm running into is the code is only returning the first match of the four interfaces that are on the router I am testing with.
Here is my code below:
use Net::Ping;
use Net::Telnet::Cisco;
use Getopt::Long;
my $host = "";
my $interface = "";
my $PRIList = "";
my $T1List = "";
my $T1Count = 0;
my $PRICount = 0;
GetOptions("host:s" => \ $host);
if (!$host)
{
print "usage: perl regexp_test.pl --host=(IPAddress)";
exit;
}
my $p = Net::Ping->new();
if ($p->ping($host))
{
print "\nDevice is online, connecting...\n\n";
my $session = Net::Telnet::Cisco->new(Host => $host);
$session->login('user', 'password');
$session->cmd("term len 0");
print "Retrieving T1 controller details...\n\n";
my @check = $session->cmd("sh run | s controller T1");
print "@check\n";
while (<@check>)
{
# match an interface number e.g. 0/0/0, 0/1/0, etc
if (m^\G[0-9]/[0-9]/[0-9]^)
{
$interface = $_;
$T1Count++;
$T1List = join ($T1List,$interface,"\n");
}
# check if the interface is a PRI (pri-group timeslots 1-24)
if (m^\Gpri-group^)
{
$PRICount++;
$PRIList = join ($PRIList,$interface,"\n");
}
}
if ($T1Count > 0)
{
print "T1 Controller Summary:\n\n";
print "$T1Count total T1 interfaces\n";
print $T1List;
print "$PRICount total voice PRI(s)\n";
print $PRIList;
}
else
{
print "No T1 interfaces found";
}
$session->close;
}
else
{
print "\nDevice OFFLINE!! Connection aborted!!\n\n";
}
$p->close();
Here is the output from the script as it is now:
C:\perl scripts>perl regexp_test.pl --host 10.22.49.19
Device is online, connecting...
Retrieving T1 controller details...
controller T1 0/0/0
framing esf
linecode b8zs
cablelength long 0db
pri-group timeslots 1-24
controller T1 0/0/1
framing esf
linecode b8zs
cablelength long 0db
controller T1 0/1/0
framing esf
linecode b8zs
cablelength long 0db
controller T1 0/1/1
framing esf
linecode b8zs
cablelength long 0db
T1 Controller Summary:
1 total T1 interfaces
0/0/0
1 total voice PRI(s)
0/0/0
Based on the return of the output of the show command I am expecting the output to be this:
C:\perl scripts>perl regexp_test.pl --host 10.22.49.19
Device is online, connecting...
Retrieving T1 controller details...
controller T1 0/0/0
framing esf
linecode b8zs
cablelength long 0db
pri-group timeslots 1-24
controller T1 0/0/1
framing esf
linecode b8zs
cablelength long 0db
controller T1 0/1/0
framing esf
linecode b8zs
cablelength long 0db
controller T1 0/1/1
framing esf
linecode b8zs
cablelength long 0db
T1 Controller Summary:
4 total T1 interfaces
0/0/0
0/0/1
0/1/0
0/1/1
1 total voice PRI(s)
0/0/0
Any ideas what I am doing wrong that I'm not getting the desired output? Any help you can provide is greatly appreciated.