X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=clients%2Fciscong.pl;h=1a9c6182ab73bf52366472d4ca866ca25a42d4a6;hb=065361daac62b4cdb33cf19caa534e29ac1dfde0;hp=3107943c51d4c376038f5ae27acacc699c7411d6;hpb=b7f4a767079d193a1429318eb6cf67e7aba60149;p=nms diff --git a/clients/ciscong.pl b/clients/ciscong.pl index 3107943..1a9c618 100644 --- a/clients/ciscong.pl +++ b/clients/ciscong.pl @@ -12,8 +12,8 @@ use Net::Ping; use Data::Dumper; -#my $patchlist = "/home/eirikn/patchlist.txt"; -#my $switches = "/home/eirikn/switches.txt"; +#my $patchlist = "/root/patchlist.txt"; +#my $switches = "/root/switches.txt"; my $patchlist = "/home/eirikn/patchlist.txt.eirik"; my $switches = "/home/eirikn/switches.txt.eirik"; @@ -39,9 +39,30 @@ 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) = @_; + my ($dip, $newip, $vlan, $switchname) = @_; my $ios = Net::Telnet::Cisco->new(Host => $dip, Errmode => 'return', @@ -66,43 +87,40 @@ 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(); - system("perl ./zyxelng.pl 192.168.1.1 $newip"); + system("perl ./zyxelng.pl 192.168.1.1 $newip $switchname"); #### - $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; @@ -111,7 +129,6 @@ open(SWITCHES, $switches) or die "Unable to open switches"; while() { my ($ip, $net, $name) = split; - print $name."\n"; if ($name =~ /e\d+-\d/) { die "We only support /26 nets for now you wanted $net" if ($net ne "26"); $switchips{$name} = $ip; @@ -119,28 +136,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, $switch); # my ($dip, $newip, $vlan) = @_; + } + close(PATCHLIST); } -close(PATCHLIST); +if ($#ARGV > -1) { + first_run(); +}