=================================================================== RCS file: /cvs/trango/Net-Telnet-Trango/scripts/update_trango.pl,v retrieving revision 1.16 retrieving revision 1.21 diff -u -r1.16 -r1.21 --- trango/Net-Telnet-Trango/scripts/update_trango.pl 2007/01/08 16:49:44 1.16 +++ trango/Net-Telnet-Trango/scripts/update_trango.pl 2007/02/01 17:08:44 1.21 @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $RedRiver: update_trango.pl,v 1.15 2005/12/30 20:26:41 andrew Exp $ +# $RedRiver: update_trango.pl,v 1.20 2007/01/31 22:19:07 mike Exp $ ######################################################################## # update_trango.pl *** Updates trango foxes with a new firmware # @@ -9,7 +9,6 @@ use warnings; use Net::TFTP; -use YAML; use lib '.'; use Net::Telnet::Trango; @@ -45,21 +44,26 @@ Timeout => 5, Errmode => 'return', ) or die "Couldn't make new connection: $!"; - $l->p("Connecting to $fox"); unless ( $t->open($fox) ) { $l->sp("Error connecting: $!"); next; } - if ($t->host_type ne $conf->{'type'}) { - $l->sp("Wrong type of unit ('$t->host_type' should be '$conf->{'type'}')"); + my $host_type = $t->host_type; + + if (lc($conf->{'firmware_type'}) eq 'fpga') { + $host_type =~ s/\s.*$//; + } + + if ($host_type ne $conf->{'type'}) { + $l->sp("Wrong type of unit ('" . $t->host_type . "' should be '$conf->{'type'}')"); $t->close; next; } if ($t->firmware_version eq $conf->{'ver'}) { - $l->sp("Already up to date with firmware version '$t->firmware_version'"); + $l->sp("Already up to date with firmware version '" . $t->firmware_version . "'"); $t->close; next; } @@ -69,24 +73,13 @@ $l->p("Sending commands"); ## Send commands - #print Dump $t->login_banner; - #print Dump $t->sysinfo; - #print Dump $t->last_lines; - #print Dump $t->ver(); - #print Dump $t->tftpd(); - #print Dump $t->enable_tftpd(); - #print Dump [ "Exit", $t->exit ]; - #print Dump $t->tftpd(); - #print Dump $t->disable_tftpd(); - #print Dump $t->tftpd(); - print Dump $t->sulog(args => 5); - #if ( upload($t, $conf->{'file_name'}) ) { - # $l->p("Rebooting"); - # $t->reboot; - #} else { + if ( upload($t, $conf->{'file_name'}) ) { + $l->p("Rebooting"); + $t->reboot; + } else { $l->p("Exiting"); $t->exit; - #} + } $l->sp(""); } @@ -96,15 +89,20 @@ my $t = shift; my $file = shift; + my $fw_type = 'Firmware'; + if (uc($conf->{'firmware_type'}) eq 'FPGA') { + $fw_type = 'FPGA'; + } + my $ver = $t->ver; - $l->p("Current version '$ver->{'Firmware Version'}'"); + $l->p("Current version '" . $ver->{$fw_type . ' Version'} . "'"); if ( - $ver->{'Firmware Version'} eq $conf->{'ver'} && - $ver->{'Firmware Checksum'} eq $conf->{'cksum'} + $ver->{$fw_type . ' Version'} eq $conf->{'ver'} && + $ver->{$fw_type . ' Checksum'} eq $conf->{'cksum'} ) { $l->sp("Already updated!"); - return 1; + return 0; } my $try = 0; @@ -124,8 +122,10 @@ # use tftp to push the file up my $tftp = Net::TFTP->new($t->Host, Mode => 'octet'); - $tftp->put($file, $file) - or die "Error uploading: " . $tftp->error; + unless ($tftp->put($file, $file)) { + print "Error uploading: " . $tftp->error; + next; + } # waitfor some sort of output # make sure it says 'Success.' otherwise error @@ -139,7 +139,7 @@ if ( $results->{'File Checksum'} ne $conf->{'file_cksum'}) { $l->sp( "File checksum '" . $results->{'File Checksum'} . - "does not match config file '" . $conf->{'file_cksum'} . "'!" + " does not match config file '" . $conf->{'file_cksum'} . "'!" ); next; } @@ -163,9 +163,13 @@ } $l->p("File name matches . . . "); - $l->p("Updating flash (new checksum '$conf->{'cksum'}')"); + my $image_type = 'mainimage'; + if ($fw_type eq 'FPGA') { + $image_type = 'fpgaimage'; + } + $l->p("Updating $image_type (new checksum '$conf->{'cksum'}')"); unless ($results = $t->updateflash( - args => 'mainimage ' . $ver->{'Firmware Checksum'} . + args => $image_type . ' ' . $ver->{$fw_type . ' Checksum'} . ' ' . $conf->{'cksum'}, Timeout => 90, ) ) { @@ -177,7 +181,7 @@ defined $results->{'Checksum'} && $results->{'Checksum'} eq $conf->{'cksum'} ) { - $l->sp("Saved checksum does not match config file!"); + $l->sp("Saved checksum " . $results->{'Checksum'} . " does not match config file " . $conf->{'cksum'} . "!"); next; } $l->p("Uploaded checksum ($results->{'Checksum'}) " .