]> git.sesse.net Git - nms/commitdiff
Error handling.
authorEirik Nygaard <eirikn@space>
Tue, 3 Apr 2007 16:17:22 +0000 (18:17 +0200)
committerEirik Nygaard <eirikn@space>
Tue, 3 Apr 2007 16:17:22 +0000 (18:17 +0200)
clients/ciscong.pl

index 3107943c51d4c376038f5ae27acacc699c7411d6..277dfcf13dc7ebc712983633ac614ddb259705d0 100644 (file)
@@ -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(<SWITCHES>) {
 }
 close(SWITCHES);
 
-
-open(PATCHLIST, $patchlist) or die "Unable to open patchlist";
-while (<PATCHLIST>) {
-       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 (<PATCHLIST>) {
+               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();
+}