#!/usr/bin/perl
-$Version = 'SCST Configurator v1.0.2';
+$Version = 'SCST Configurator v1.0.3';
# Configures SCST
#
my $TRUE = 1;
my $FALSE = 0;
-my $_MAX_LUNS_ = 255;
-my $_DEFAULT_GROUP_ = 'Default';
+my $_MAX_LUNS_ = 255;
+my $_DEFAULT_GROUP_ = 'Default';
-my $_SCSI_CLASS_ = '/sys/class/scsi_host';
-my $_FC_CLASS_ = '/sys/class/fc_host';
+my $_SCSI_CLASS_ = '/sys/class/scsi_host';
+my $_FC_CLASS_ = '/sys/class/fc_host';
+my $_SCSI_ISP_ = '/proc/scsi/isp';
+my $_SCSITGT_QLAISP_ = '/proc/scsi_tgt/qla_isp';
my $SCST;
my $DEVICES;
sub targets {
my %targets;
my %fcards;
- my $root = new IO::Dir $_FC_CLASS_;
+
+ my $root = new IO::Dir $_FC_CLASS_ if (-d $_FC_CLASS_);
if ($root) {
while (my $entry = $root->read()) {
}
}
- $root = new IO::Dir $_SCSI_CLASS_;
+ $root = new IO::Dir $_SCSI_CLASS_ if (-d $_SCSI_CLASS_);
if ($root) {
while (my $entry = $root->read()) {
$targets{$entry}->{'path'} = "$_SCSI_CLASS_/$entry/target_mode_enabled";
$targets{$entry}->{'enabled'} = $enabled;
+ $targets{$entry}->{'qla_isp'} = $FALSE;
if ($fcards{$entry}) {
$targets{$fcards{$entry}}->{'enabled'} = $enabled;
}
}
+ $root = new IO::Dir $_SCSI_ISP_ if (-d $_SCSI_ISP_);
+
+ if ($root) {
+ while (my $entry = $root->read()) {
+ next if (($entry eq '.') || ($entry eq '..'));
+
+ local $/;
+ my $io = new IO::File "$_SCSI_ISP_/$entry", O_RDONLY;
+
+ if ($io) {
+ my $wwn;
+ my @fcont;
+ my $fstr;
+ my $enabled2;
+
+ $fstr = <$io>;
+ close $io;
+
+ ($wwn) = ($fstr =~ '.*?Port WWN +([^\ ]+) .*');
+ $fcards{$entry} = $wwn;
+
+ $io = new IO::File "$_SCSITGT_QLAISP_/$entry", O_RDONLY;
+ if ($io) {
+ $fstr = <$io>;
+ close $io;
+
+ ($enabled2) = ($fstr =~ '[^\n]+\n *\d *: *(\d)');
+ $targets{$entry}->{'path'} = "$_SCSITGT_QLAISP_/$entry";
+ $targets{$entry}->{'enabled'} = $enabled2;
+ $targets{$entry}->{'qla_isp'} = $TRUE;
+
+ if ($fcards{$entry}) {
+ $targets{$fcards{$entry}}->{'enabled'} = $enabled2;
+ $targets{$fcards{$entry}}->{'path'} = "$_SCSITGT_QLAISP_/$entry";
+ $targets{$fcards{$entry}}->{'qla_isp'} = $TRUE;
+ $targets{$entry}->{'duplicate'} = $TRUE;
+ } else {
+ $targets{$entry}->{'duplicate'} = $FALSE;
+ }
+ }
+ }
+ }
+ }
+
return \%targets;
}
if ($_DEBUG_) {
print "DBG($$): ".$$TARGETS{$target}->{'path'}." -> $enable\n\n";
} else {
- print $io $enable;
+ if ($$TARGETS{$target}->{'qla_isp'} == $FALSE) {
+ print $io $enable;
+ } else {
+ print $io $enable ? "enable all" : "disable all";
+ }
}
close $io;