From d9ecfc56d84895d3a88399d67db4cae1a31e7271 Mon Sep 17 00:00:00 2001 From: Eirik Nygaard Date: Tue, 3 Apr 2007 18:17:22 +0200 Subject: [PATCH] Error handling. --- clients/ciscong.pl | 91 +++++++++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 34 deletions(-) diff --git a/clients/ciscong.pl b/clients/ciscong.pl index 3107943..277dfcf 100644 --- a/clients/ciscong.pl +++ b/clients/ciscong.pl @@ -12,10 +12,10 @@ use Net::Ping; use Data::Dumper; -#my $patchlist = "/home/eirikn/patchlist.txt"; -#my $switches = "/home/eirikn/switches.txt"; -my $patchlist = "/home/eirikn/patchlist.txt.eirik"; -my $switches = "/home/eirikn/switches.txt.eirik"; +my $patchlist = "/root/patchlist.txt"; +my $switches = "/root/switches.txt"; +#my $patchlist = "/home/eirikn/patchlist.txt.eirik"; +#my $switches = "/home/eirikn/switches.txt.eirik"; BEGIN { require "../include/config.pm"; @@ -39,6 +39,27 @@ sub ios_getroute { # or die "Unable to connect to cisco"; +sub start_vlan { + my ($ios, $vlan) = @_; + + $ios->cmd("conf t"); + $ios->cmd("int vlan $vlan"); + $ios->cmd("ip add 192.168.1.254 255.255.255.0 secondary"); + $ios->cmd("exit"); + $ios->cmd("exit"); +} + +sub stop_vlan { + my ($ios, $vlan) = @_; + + $ios->cmd("conf t"); + $ios->cmd("int vlan $vlan"); + $ios->cmd("no ip add 192.168.1.254 255.255.255.0 secondary"); + $ios->cmd("exit"); + $ios->cmd("exit"); +} + + sub do_distro { my ($dip, $newip, $vlan) = @_; @@ -66,23 +87,25 @@ sub do_distro { return; } - $ios->cmd("conf t"); - $ios->cmd("int vlan $vlan"); - $ios->cmd("ip add 192.168.1.254 255.255.255.0 secondary"); - $ios->cmd("exit"); - $ios->cmd("exit"); - my $zyxeloldip = "192.168.1.1"; + start_vlan($ios, $vlan); ### Do things ## ZyxelNG connect my $p = Net::Ping->new(); printf "Waiting for zyxel to come up...\n"; + my $counter = 0; while (1) { + if ($counter > 180) { + print "Waiting for zyxel on $dip:$vlan timed out, wanted to set ip: $newip"; + stop_vlan($ios, $vlan); + return; + } last if $p->ping($zyxeloldip); print "pinging...\n"; sleep 1; + $counter++; } print "Zyxel is alive..\n"; $p->close(); @@ -91,18 +114,13 @@ sub do_distro { #### - $ios->cmd("conf t"); - $ios->cmd("int vlan $vlan"); - $ios->cmd("no ip add 192.168.1.254 255.255.255.0 secondary"); - $ios->cmd("exit"); - $ios->cmd("exit"); + stop_vlan($ios, $vlan); $ios->close(); } - ## Collect switch ips my %switchips; @@ -119,28 +137,33 @@ while() { } close(SWITCHES); - -open(PATCHLIST, $patchlist) or die "Unable to open patchlist"; -while () { - my ($switch, $distro, $port) = split; - - $switch =~ /e(\d+)-(\d)/; - my ($row, $place) = ($1, $2); - my $ipnet = $switchips{$switch}; - my $vlan = $row . $place; - print "Switch: $switch, Distro: $distro, vlan: $vlan\n"; - print "Ip net: $ipnet\n"; - my ($first, $second, $third, $fourth) = split(/\./, $ipnet); - my $ip = "$first.$second.$third.".(int($fourth)+2); - print "Ip: $ip\n"; - my $dip = $distro.".net.tg07.gathering.org"; - - do_distro($dip, $ip, $vlan); +sub first_run { + + open(PATCHLIST, $patchlist) or die "Unable to open patchlist"; + while () { + my ($switch, $distro, $port) = split; + + $switch =~ /e(\d+)-(\d)/; + my ($row, $place) = ($1, $2); + my $ipnet = $switchips{$switch}; + my $vlan = $row . $place; + print "Switch: $switch, Distro: $distro, vlan: $vlan\n"; + print "Ip net: $ipnet\n"; + my ($first, $second, $third, $fourth) = split(/\./, $ipnet); + my $ip = "$first.$second.$third.".(int($fourth)+2); + print "Ip: $ip\n"; + my $dip = $distro.".net.tg07.gathering.org"; + + do_distro($dip, $ip, $vlan); # my ($dip, $newip, $vlan) = @_; + } + close(PATCHLIST); } -close(PATCHLIST); +if ($#ARGV > -1) { + first_run(); +} -- 2.39.2