]> git.sesse.net Git - nms/commitdiff
Merge.
authorroot <root@space>
Tue, 3 Apr 2007 16:46:20 +0000 (18:46 +0200)
committerroot <root@space>
Tue, 3 Apr 2007 16:46:20 +0000 (18:46 +0200)
clients/ciscong.pl [new file with mode: 0644]
clients/zyxelng.pl [new file with mode: 0644]
include/nms.pm
make-all-config.sh
web/bg07.png [new file with mode: 0644]
web/nettkart.pl
web/portkart.pl
web/stempmap.pl

diff --git a/clients/ciscong.pl b/clients/ciscong.pl
new file mode 100644 (file)
index 0000000..277dfcf
--- /dev/null
@@ -0,0 +1,169 @@
+#!/usr/bin/perl
+#
+#
+
+use warnings;
+use strict;
+
+use lib '../include';
+
+use Net::Telnet::Cisco;
+use Net::Ping;
+
+use Data::Dumper;
+
+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";
+       eval {
+               require "../include/config.local.pm";
+       };
+}
+
+sub ios_getroute {
+       my ($t, $net) = @_;
+
+       $t->cmd("show ip route".($net ? " $net" : '')) or return 0;;
+       
+       return 1;
+}
+
+#my $ios_server = "noc-gw.net.tg07.gathering.org";
+#my $vlannumber = 16;
+
+#my $ios = nms::ios_connect($ios_server, $nms::config::ios_user, $nms::config::ios_pass)
+#      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 $ios = Net::Telnet::Cisco->new(Host => $dip,
+                       Errmode => 'return',
+                       Prompt => '/[^\s\(]+(\([^\(]\)){0,1}[#>]/');
+       $ios->login($nms::config::ios_user, $nms::config::ios_pass);
+       $ios->enable;
+
+#nms::ios_enable($ios);
+#$ios->cmd();
+#nms::ios_getroute($ios, "192.168.1.0");
+#$ios->cmd("");
+
+#nms::ios_close($ios);
+
+# Disable paging
+       $ios->cmd("terminal length 0");
+
+#my @routes = $ios->cmd("show ip route");
+
+       if (ios_getroute($ios, "192.168.1.0") == 1) {
+               print "Already routed up 192.168.1.0/24\n" ;
+               return;
+       }
+
+       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");
+
+####
+
+       stop_vlan($ios, $vlan);
+
+
+       $ios->close();
+
+}
+
+## Collect switch ips
+
+my %switchips;
+
+open(SWITCHES, $switches) or die "Unable to open switches";
+while(<SWITCHES>) {
+       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;
+       }
+}
+close(SWITCHES);
+
+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);
+}
+
+
+if ($#ARGV > -1) {
+       first_run();
+}
+
+
+
diff --git a/clients/zyxelng.pl b/clients/zyxelng.pl
new file mode 100644 (file)
index 0000000..e41f657
--- /dev/null
@@ -0,0 +1,124 @@
+#!/usr/bin/perl -w
+#
+#
+
+use strict;
+use lib '../include';
+
+use Data::Dumper;
+
+use nms qw(switch_connect switch_exec);
+#use ios;
+
+#my $t = nms::ios_connect('62.148.36.12', 'c', 'c', 'c');
+
+#print STDERR "No such network 192.168.1.0\n" if nms::ios_getroute($t, "192.168.1.0") == 0;
+
+#nms::ios_close($t);
+
+my $oldip;
+my $newip;
+if ($#ARGV < 1) {
+       die "Foo $#ARGV";
+}
+
+$oldip = $ARGV[0];
+$newip = $ARGV[1];
+
+my $one = 0;
+
+my $switchip;
+#$switchip = "87.76.250.226" if $one;
+#$switchip = "192.168.2.150" if $one;
+#$switchip = "192.168.1.1" unless $one;
+$switchip = $oldip;
+my $switch = switch_connect($switchip)
+       or die "Could not connect to $switchip";
+
+my $cmds1 = <<EOF
+sys hostname es-3024
+ip igmpsnoop enable
+
+sys sw vlan type 802.1q
+sys sw vlan1q svlan setentry MNGT 248 25 fixed tag
+sys sw vlan1q svlan active 248
+sys sw vlan1q svlan setentry e01-1sw 1 25 fixed untag
+
+sys sw vlan1q svlan setentry MNGT 248 1 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 2 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 3 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 4 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 5 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 6 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 7 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 8 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 9 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 10 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 11 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 12 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 13 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 14 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 15 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 16 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 17 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 18 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 19 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 20 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 21 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 22 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 23 forbidden tag
+sys sw vlan1q svlan setentry MNGT 248 24 forbidden tag
+EOF
+;
+#
+foreach (split(/\n+/, $cmds1)) {
+       print "Sending: '$_'\n";
+       switch_exec($_, $switch);
+}
+
+my $cmd;
+#$cmd = "ip ifconfig swif0 192.168.1.1/24" if $one;
+#$cmd = "ip ifconfig swif0 192.168.2.150/24" unless $one;
+$cmd = "ip ifconfig swif0 $newip/30";
+
+print "Sending '$cmd'\n";
+my $pid = fork();
+if ($pid == 0) {
+       print "Sending ifconfig.. $cmd\n";
+       switch_exec($cmd, $switch);
+       exit 0;
+} else {
+       #switch_exec($cmd, $switch, 1);
+       print "Sleeping...\n";
+       sleep 1;
+}
+$switch->close();
+
+#print "Reconnecting... ";
+##$switchip = "192.168.1.1" if $one;
+##$switchip = "192.168.2.150" unless $one;
+#$switchip = $newip;
+#autoflush STDOUT 1;
+#print "Connecting to: $switchip...\n";
+#my $i = 1;
+#while(1) {
+#      $switch = switch_connect($switchip);
+#      
+#      #print (defined($switch)? $switch : "foo") ." <---- switch\n";
+#      if (defined($switch) || $switch) {
+#              last;
+#      }
+#      printf("Waited $i seconds...\r");
+#      $i++;
+#      sleep 1;
+#}
+#print "\n";
+
+#print $switch."\n";
+#$cmd = "sys sw vlan1q svlan cpu 248";
+#print "Sending '$cmd'\n";
+#print "XXX: No we did not...";
+#print Dumper($switch->cmd("ip ifconfig"));
+#print Dumper($switch->cmd("ip route status"));
+#switch_exec($cmd, $switch, 1);
+
index 0c0d7541be2371bcc6e9f280acbe41de85a584c6..b55314d16b64e83769b2b01faadabbda7ab6c802 100644 (file)
@@ -5,6 +5,10 @@ use DBI;
 use Net::Telnet;
 package nms;
 
+
+use base 'Exporter';
+our @EXPORT = qw(switch_connect switch_exec);
+
 BEGIN {
        require "config.pm";
        eval {
@@ -25,10 +29,11 @@ sub db_connect {
 sub switch_connect($) {
        my ($ip) = @_;
 
-#                                      Dump_Log => '/tmp/dumplog-queue',
        my $conn = new Net::Telnet(     Timeout => $nms::config::telnet_timeout,
+#                                      Dump_Log => '/tmp/dumplog-queue',
                                        Errmode => 'return',
-                                       Prompt => '/(es3024|e\d+\-\dsw)>/i');
+#                                      Prompt => '/ES-3023>/');
+                                       Prompt => '/(ES-3024|e\d{1,2}\-\dsw)>/i');
        my $ret = $conn->open(  Host => $ip);
        if (!$ret || $ret != 1) {
                return (undef);
@@ -45,11 +50,17 @@ sub switch_connect($) {
 }
 
 # Send a command to switch and return the data recvied from the switch
-sub switch_exec($$) {
-       my ($cmd, $conn) = @_;
+sub switch_exec {
+       my ($cmd, $conn, $print) = @_;
 
        # Send the command and get data from switch
-       my @data = $conn->cmd($cmd);
+       my @data;
+       if (defined($print)) {
+               $conn->print($cmd);
+               return;
+       } else {
+               @data = $conn->cmd($cmd);
+       }
        my @lines = ();
        foreach my $line (@data) {
                # Remove escape-7 sequence
index 10d3180e12c28a6dc3ab3ad049911bc25313ad36..4321b568ddb87cd252e3342eddbddcc91d14f118 100755 (executable)
@@ -1,5 +1,6 @@
 #! /bin/sh
 ./planning/planning
+scp switches.txt patchlist.txt space:/root/
 cat static-switches.txt >> switches.txt
 ./config/make-dhcpd.pl > /etc/dhcp3/dhcpd.conf
 ./config/make-named.pl > /etc/bind/named.conf
diff --git a/web/bg07.png b/web/bg07.png
new file mode 100644 (file)
index 0000000..7b65a60
Binary files /dev/null and b/web/bg07.png differ
index 29499fb296228c1195a56b4ff5334955dd9955bc..e0b47e8bba26669fbcf7def7879d5067ab989c76 100755 (executable)
@@ -9,7 +9,7 @@ my $cgi = CGI->new;
 my $dbh = nms::db_connect();
 
 GD::Image->trueColor(1);
-$img = GD::Image->new('snmp-bg.png');
+$img = GD::Image->new('bg2.png');
 
 my $blk = $img->colorResolve(0, 0, 0);
 
index 9150cef27b573fc404a9b0daed2229286a86d956..259376e39522f73a024449260de09e853620ff1e 100755 (executable)
@@ -9,7 +9,7 @@ my $cgi = CGI->new;
 my $dbh = nms::db_connect();
 
 GD::Image->trueColor(1);
-$img = GD::Image->new('snmp-bg.png');
+$img = GD::Image->new('bg2.png');
 
 my $blk = $img->colorResolve(0, 0, 0);
 
index fcfd32cd4695755770f37ef32ff92f98862cf015..2399b31677dcb977519315d3db09ac5ff9ac663c 100755 (executable)
@@ -12,7 +12,7 @@ use warnings;
 
 GD::Image->trueColor(1);
 
-my $img = GD::Image->new('snmp-bg.png');
+my $img = GD::Image->new('bg2.png');
 #my $img = GD::Image->new(100,100);
 my $cgi = CGI->new;