- Updated for vdisk/vcdrom from disk_fileio/cdrom_fileio

- Added new errorString() method to SCST/SCST.pm containing
  error message of last error encountered.
- Minor updates to scst_db - UNTESTED
- Changed SCST/SCST.pm to look for files like vdisk/vdisk instead
  of vdisk/type to gather list of valid device handlers
- Minor bug fixes



git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@130 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Mark Buechler
2007-06-19 20:21:27 +00:00
parent c7748b916b
commit f6ba07057d
6 changed files with 386 additions and 108 deletions
+11
View File
@@ -15,3 +15,14 @@ Changes since 0.9.5-pre0:
- Removed the comment which prevented a target from being enabled in enableTarget()
- Updated init.d/scst to use scstadmin instead of scst_db
- Fixup of README file
Changes since 0.9.6-pre2:
- Updated SCST/SCST.pm for vdisk/vcdrom from cdrom_fileio/disk_fileio
- Updated scstadmin for vdisk/vcdrom...
- Minor updates to scst_db for vdisk/vcdrom - UNTESTED
- Enhanced error messages in SCST/SCST.pm. Now has new method errorString()
- Added additional error messaging to scstadmin
- Changed SCST/SCST.pm to look for vdisk/vdisk instead of vdisk/type for
valid device handler types.
- Minor bug fixes
+273 -62
View File
@@ -17,13 +17,13 @@ my $_SCST_IO_ = $_SCST_DIR_.'/scsi_tgt';
my $_SCST_CDROM_IO_ = $_SCST_DIR_.'/dev_cdrom/dev_cdrom';
my $_SCST_CHANGER_IO_ = $_SCST_DIR_.'/dev_changer/dev_changer';
my $_SCST_DISK_IO_ = $_SCST_DIR_.'/dev_disk/dev_disk';
my $_SCST_DISK_FILE_IO_ = $_SCST_DIR_.'/disk_fileio/disk_fileio';
my $_SCST_CDROM_FILE_IO_ = $_SCST_DIR_.'/cdrom_fileio/cdrom_fileio';
my $_SCST_DISKP_IO_ = $_SCST_DIR_.'/dev_disk_perf/dev_disk_perf';
my $_SCST_MODISK_IO_ = $_SCST_DIR_.'/dev_modisk/dev_modisk';
my $_SCST_MODISKP_IO_ = $_SCST_DIR_.'/dev_modisk_perf/dev_modisk_perf';
my $_SCST_TAPE_IO_ = $_SCST_DIR_.'/dev_tape/dev_tape';
my $_SCST_TAPEP_IO_ = $_SCST_DIR_.'/dev_tape_perf/dev_tape_perf';
my $_SCST_VDISK_IO_ = $_SCST_DIR_.'/vdisk/vdisk';
my $_SCST_VCDROM_IO_ = $_SCST_DIR_.'/vcdrom/vcdrom';
my $_SCST_GROUPS_DIR_ = $_SCST_DIR_.'/groups';
my $_SCST_SGV_STATS_ = $_SCST_DIR_.'/sgv';
my $_SCST_SESSIONS_ = $_SCST_DIR_.'/sessions';
@@ -34,32 +34,32 @@ my $_SCST_DEVICES_IO_ = 'devices';
my @_AVAILABLE_OPTIONS_ = ('WRITE_THROUGH', 'O_DIRECT', 'READ_ONLY', 'NULLIO', 'NV_CACHE');
use vars qw(@ISA @EXPORT $VERSION $CDROM_TYPE $CHANGER_TYPE $DISK_TYPE $DISKFILE_TYPE
$CDROMFILE_TYPE $DISKPERF_TYPE $MODISK_TYPE $MODISKPERF_TYPE $TAPE_TYPE
use vars qw(@ISA @EXPORT $VERSION $CDROM_TYPE $CHANGER_TYPE $DISK_TYPE $VDISK_TYPE
$VCDROM_TYPE $DISKPERF_TYPE $MODISK_TYPE $MODISKPERF_TYPE $TAPE_TYPE
$TAPEPERF_TYPE);
$CDROM_TYPE = 1;
$CHANGER_TYPE = 2;
$DISK_TYPE = 3;
$DISKFILE_TYPE = 4;
$CDROMFILE_TYPE = 5;
$VDISK_TYPE = 4;
$VCDROM_TYPE = 5;
$DISKPERF_TYPE = 6;
$MODISK_TYPE = 7;
$MODISKPERF_TYPE = 8;
$TAPE_TYPE = 9;
$TAPEPERF_TYPE = 10;
$VERSION = 0.6;
$VERSION = 0.6.1;
my $_SCST_MIN_MAJOR_ = 0;
my $_SCST_MIN_MINOR_ = 9;
my $_SCST_MIN_RELEASE_ = 5;
my $_SCST_MIN_RELEASE_ = 6;
my %_IO_MAP_ = ($CDROM_TYPE => $_SCST_CDROM_IO_,
$CHANGER_TYPE => $_SCST_CHANGER_IO_,
$DISK_TYPE => $_SCST_DISK_IO_,
$DISKFILE_TYPE => $_SCST_DISK_FILE_IO_,
$CDROMFILE_TYPE => $_SCST_CDROM_FILE_IO_,
$VDISK_TYPE => $_SCST_VDISK_IO_,
$VCDROM_TYPE => $_SCST_VCDROM_IO_,
$DISKPERF_TYPE => $_SCST_DISKP_IO_,
$MODISK_TYPE => $_SCST_MODISK_IO_,
$MODISKPERF_TYPE => $_SCST_MODISKP_IO_,
@@ -69,8 +69,8 @@ my %_IO_MAP_ = ($CDROM_TYPE => $_SCST_CDROM_IO_,
my %_TYPE_MAP_ = ('dev_cdrom' => $CDROM_TYPE,
'dev_changer' => $CHANGER_TYPE,
'dev_disk' => $DISK_TYPE,
'disk_fileio' => $DISKFILE_TYPE,
'cdrom_fileio' => $CDROMFILE_TYPE,
'vdisk' => $VDISK_TYPE,
'vcdrom' => $VCDROM_TYPE,
'dev_disk_perf' => $DISKPERF_TYPE,
'dev_modisk' => $MODISK_TYPE,
'dev_modisk_perf' => $MODISKPERF_TYPE,
@@ -87,11 +87,12 @@ sub new {
bless($self, $class);
$self->{'debug'} = $debug if $debug;
$self->{'debug'} = $debug;
my $scstVersion = $self->scstVersion();
my($major, $minor, $release) = split(/\./, $scstVersion, 3);
($release, undef) = split(/\-/, $release) if ($release =~ /\-/);
$badVersion = $FALSE if (($major > $_SCST_MIN_MAJOR_) ||
(($major == $_SCST_MIN_MAJOR_) && ($minor > $_SCST_MIN_MINOR_)) ||
@@ -152,7 +153,11 @@ sub addGroup {
return 2 if ($self->groupExists($group));
my $io = new IO::File $_SCST_IO_, O_WRONLY;
return $TRUE if (!$io);
if (!$io) {
$self->{'error'} = "addGroup(): Failed to open handler IO $_SCST_IO_";
return $TRUE;
}
my $cmd = "add_group $group\n";
@@ -175,7 +180,11 @@ sub removeGroup {
return 2 if (!$self->groupExists($group));
my $io = new IO::File $_SCST_IO_, O_WRONLY;
return $TRUE if (!$io);
if (!$io) {
$self->{'error'} = "removeGroup(): Failed to open handler IO $_SCST_IO_";
return $TRUE;
}
my $cmd = "del_group $group\n";
@@ -197,7 +206,10 @@ sub sgvStats {
my %stats;
my $first = $TRUE;
return undef if (!$io);
if (!$io) {
$self->{'error'} = "sgvStats(): Failed to open handler IO $_SCST_IO_";
return undef;
}
while (my $line = <$io>) {
chomp $line;
@@ -244,7 +256,10 @@ sub sessions {
my %sessions;
my $first = $TRUE;
return undef if (!$io);
if (!$io) {
$self->{'error'} = "sessions(): Failed to open handler IO $_SCST_IO_";
return undef;
}
while (my $line = <$io>) {
chomp $line;
@@ -270,7 +285,10 @@ sub devices {
my %devices;
my $first = $TRUE;
return undef if (!$io);
if (!$io) {
$self->{'error'} = "devices(): Failed to open handler IO $_SCST_IO_";
return undef;
}
while (my $line = <$io>) {
chomp $line;
@@ -296,11 +314,22 @@ sub handlerDevices {
my $first = $TRUE;
my %devices;
return undef if (!$handler_io);
return undef if (!$self->handlerExists($handler));
if (!$handler_io) {
$self->{'error'} = "handlerDevices(): Failed to open handler IO $handler_io or handler $handler invalid";
return undef;
}
if (!$self->handlerExists($handler)) {
$self->{'error'} = "handlerDevices(): Handler $handler does not exist";
return undef;
}
my $io = new IO::File $handler_io, O_RDONLY;
return undef if (!$io);
if (!$io) {
$self->{'error'} = "handlerDevices(): Failed to open handler IO $handler_io";
return undef;
}
while (my $line = <$io>) {
chomp $line;
@@ -349,10 +378,26 @@ sub openDevice {
my $blocksize = shift;
my $handler_io = $_IO_MAP_{$handler};
return $TRUE if ($self->checkOptions($options));
return $TRUE if (!$handler_io);
return $TRUE if (!$self->handlerExists($handler));
return 2 if ($self->handlerDeviceExists($handler, $device));
if ($self->checkOptions($options)) {
$self->{'error'} = "openDevice(): Invalid options '$options' given for device $device";
return $TRUE;
}
if (!$handler_io) {
$self->{'error'} = "openDevice(): Failed to open handler IO $handler_io or ".
"handler $handler invalid";
return $TRUE;
}
if (!$self->handlerExists($handler)) {
$self->{'error'} = "openDevice(): Handler $handler does not exist";
return $TRUE;
}
if ($self->handlerDeviceExists($handler, $device)) {
$self->{'error'} = "openDevice(): Device $device is already open";
return 2;
}
$options = $self->cleanupString($options);
@@ -364,7 +409,15 @@ sub openDevice {
return $FALSE if ($self->{'debug'});
return $rc if ($rc);
return !$self->handlerDeviceExists($handler, $device);
$rc = !$self->handlerDeviceExists($handler, $device);
if ($rc) {
$self->{'error'} = "openDevice(): An error occured while opening device $device. ".
"See dmesg/kernel log for more information.";
}
return $rc;
}
sub closeDevice {
@@ -374,9 +427,20 @@ sub closeDevice {
my $path = shift;
my $handler_io = $_IO_MAP_{$handler};
return $TRUE if (!$handler_io);
return $TRUE if (!$self->handlerExists($handler));
return 2 if (!$self->handlerDeviceExists($handler, $device));
if (!$handler_io) {
$self->{'error'} = "closeDevice(): Failed to open handler IO $handler_io or handler $handler invalid";
return $TRUE;
}
if (!$self->handlerExists($handler)) {
$self->{'error'} = "closeDevice(): Handler $handler does not exist";
return $TRUE;
}
if ($self->handlerDeviceExists($handler, $device)) {
$self->{'error'} = "closeDevice(): Device $device is not open";
return 2;
}
my $cmd = "close $device $path\n";
@@ -384,7 +448,15 @@ sub closeDevice {
return $FALSE if ($self->{'debug'});
return $rc if ($rc);
return $self->handlerDeviceExists($handler, $device);
$rc = $self->handlerDeviceExists($handler, $device);
if ($rc) {
$self->{'error'} = "closeDevice(): An error occured while closing device $device. ".
"See dmesg/kernel log for more information.";
}
return $rc;
}
sub userExists {
@@ -411,7 +483,12 @@ sub users {
return undef if (!$self->groupExists($group));
my $io = new IO::File $_SCST_GROUPS_DIR_."/$group/".$_SCST_USERS_IO_, O_RDONLY;
return undef if (!$io);
if (!$io) {
$self->{'error'} = "users(): Failed to open handler IO ".$_SCST_GROUPS_DIR_.
"/$group/".$_SCST_USERS_IO_;
return undef;
}
while (my $line = <$io>) {
chomp $line;
@@ -429,8 +506,15 @@ sub addUser {
my $user = shift;
my $group = shift;
return $TRUE if (!$self->groupExists($group));
return 2 if ($self->userExists($user, $group));
if (!$self->groupExists($group)) {
$self->{'error'} = "addUser(): Group $group does not exist";
return $TRUE;
}
if ($self->userExists($user, $group)) {
$self->{'error'} = "addUser(): User $user already exists in group $group";
return 2;
}
my $cmd = "add $user\n";
@@ -438,7 +522,15 @@ sub addUser {
return $FALSE if ($self->{'debug'});
return $rc if ($rc);
return !$self->userExists($user, $group);
$rc = !$self->userExists($user, $group);
if ($rc) {
$self->{'error'} = "addUser(): An error occured while adding user $user to group $group. ".
"See dmesg/kernel log for more information.";
}
return $rc;
}
sub removeUser {
@@ -446,8 +538,15 @@ sub removeUser {
my $user = shift;
my $group = shift;
return $TRUE if (!$self->groupExists($group));
return 2 if (!$self->userExists($user, $group));
if (!$self->groupExists($group)) {
$self->{'error'} = "removeUser(): Group $group does not exist";
return $TRUE;
}
if ($self->userExists($user, $group)) {
$self->{'error'} = "removeUser(): User $user does not exist in group $group";
return 2;
}
my $cmd = "del $user\n";
@@ -455,21 +554,37 @@ sub removeUser {
return $FALSE if ($self->{'debug'});
return $rc if ($rc);
return $self->userExists($user, $group);
$rc = $self->userExists($user, $group);
if ($rc) {
$self->{'error'} = "removeUser(): An error occured while removing user $user ".
"from group $group. See dmesg/kernel log for more information.";
}
return $rc;
}
sub clearUsers {
my $self = shift;
my $group = shift;
return $TRUE if (!$self->groupExists($group));
if (!$self->groupExists($group)) {
$self->{'error'} = "clearUsers(): Group $group does not exist";
return $TRUE;
}
my $cmd = "clear\n";
my $rc = $self->group_private($group, $_SCST_USERS_IO_, $cmd);
return $FALSE if ($self->{'debug'});
return $rc if ($rc);
if ($rc) {
$self->{'error'} = "clearUsers(): An error occured while clearing users from ".
"group $group. See dmesg/kernel log for more information.";
return $rc;
}
my $users = $self->users($group);
@@ -498,8 +613,7 @@ sub handlers {
foreach my $entry (readdir($dirHandle)) {
next if (($entry eq '.') || ($entry eq '..'));
if ((-d $_SCST_DIR_.'/'.$entry ) && (-f $_SCST_DIR_.'/'.$entry.'/type')) {
if ((-d $_SCST_DIR_.'/'.$entry ) && (-f $_SCST_DIR_.'/'.$entry.'/'.$entry)) {
push @handlers, $_TYPE_MAP_{$entry} if ($_TYPE_MAP_{$entry});
}
}
@@ -533,10 +647,18 @@ sub groupDevices {
my %devices;
my $first = $TRUE;
return undef if (!$self->groupExists($group));
if (!$self->groupExists($group)) {
$self->{'error'} = "groupDevices(): Group $group does not exist";
return undef;
}
my $io = new IO::File $_SCST_GROUPS_DIR_."/$group/".$_SCST_DEVICES_IO_, O_RDONLY;
return undef if (!$io);
if (!$io) {
$self->{'error'} = "groupDevices(): Failed to open handler IO ".$_SCST_GROUPS_DIR_.
"/$group/".$_SCST_DEVICES_IO_;
return undef;
}
while (my $line = <$io>) {
chomp $line;
@@ -562,8 +684,16 @@ sub assignDeviceToGroup {
my $group = shift;
my $lun = shift;
return $TRUE if (!$self->groupExists($group));
return 2 if ($self->groupDeviceExists($device, $group, $lun));
if (!$self->groupExists($group)) {
$self->{'error'} = "assignDeviceToGroup(): Group $group does not exist";
return $TRUE;
}
if ($self->groupDeviceExists($device, $group, $lun)) {
$self->{'error'} = "assignDeviceToGroup(): Device $device is already ".
"assigned to group $group";
return 2;
}
my $cmd = "add $device $lun\n";
@@ -571,7 +701,15 @@ sub assignDeviceToGroup {
return $FALSE if ($self->{'debug'});
return $rc if ($rc);
return !$self->groupDeviceExists($device, $group, $lun);
$rc = !$self->groupDeviceExists($device, $group, $lun);
if ($rc) {
$self->{'error'} = "assignDeviceToGroup(): An error occured while assigning device $device ".
"to group $group. See dmesg/kernel log for more information.";
}
return $rc;
}
sub assignDeviceToHandler {
@@ -579,10 +717,22 @@ sub assignDeviceToHandler {
my $device = shift;
my $handler = shift;
my $handler_io = $_IO_MAP_{$handler};
return $TRUE if (!$handler_io);
return $TRUE if (!$self->handlerExists($handler));
return 2 if ($self->handlerDeviceExists($handler, $device));
if (!$handler_io) {
$self->{'error'} = "assignDeviceToHandler(): Failed to open handler IO $handler_io or ".
"handler $handler invalid";
return $TRUE;
}
if (!$self->handlerExists($handler)) {
$self->{'error'} = "assignDeviceToHandler(): Handler $handler does not exist";
return $TRUE;
}
if ($self->handlerDeviceExists($device, $handler)) {
$self->{'error'} = "assignDeviceToHandler(): Device $device is already assigned to handler $handler";
return 2;
}
my $cmd = "assign $device $handler\n";
@@ -590,7 +740,15 @@ sub assignDeviceToHandler {
return $FALSE if ($self->{'debug'});
return $rc if($rc);
return !$self->handlerDeviceExists($handler, $device);
$rc = !$self->handlerDeviceExists($handler, $device);
if ($rc) {
$self->{'error'} = "assignDeviceToHandler(): An error occured while assigning device $device ".
"to handler $handler. See dmesg/kernel log for more information.";
}
return $rc;
}
sub removeDeviceFromGroup {
@@ -598,8 +756,15 @@ sub removeDeviceFromGroup {
my $device = shift;
my $group = shift;
return $TRUE if (!$self->groupExists($group));
return 2 if (!$self->groupDeviceExists($device, $group));
if (!$self->groupExists($group)) {
$self->{'error'} = "removeDeviceFromGroup(): Group $group does not exist";
return $TRUE;
}
if (!$self->groupDeviceExists($device, $group)) {
$self->{'error'} = "removeDeviceFromGroup(): Device $device does not exist in group $group";
return 2;
}
my $cmd = "del $device\n";
@@ -607,7 +772,15 @@ sub removeDeviceFromGroup {
return $FALSE if ($self->{'debug'});
return $rc if ($rc);
return $self->groupDeviceExists($device, $group);
$rc = $self->groupDeviceExists($device, $group);
if ($rc) {
$self->{'error'} = "removeDeviceFromGroup(): An error occured while removing device $device ".
"from group $group. See dmesg/kernel log for more information.";
}
return $rc;
}
sub clearGroupDevices {
@@ -621,7 +794,12 @@ sub clearGroupDevices {
my $rc = $self->group_private($group, $_SCST_DEVICES_IO_, $cmd);
return $FALSE if ($self->{'debug'});
return $rc if ($rc);
if ($rc) {
$self->{'error'} = "clearGroupDevices(): An error occured while clearing devices from ".
"group $group. See dmesg/kernel log for more information.";
return $rc;
}
my $devices = $self->groupDevices($group);
@@ -634,7 +812,11 @@ sub handler_private {
my $cmd = shift;
my $io = new IO::File $handler_io, O_WRONLY;
return $TRUE if (!$io);
if (!$io) {
$self->{'error'} = "SCST/SCST.pm: Failed to open handler IO $handler_io";
return $TRUE;
}
if ($self->{'debug'}) {
print "DBG($$): '$handler_io' -> '$cmd'\n";
@@ -652,7 +834,11 @@ sub scst_private {
my $cmd = shift;
my $io = new IO::File $_SCST_IO_, O_WRONLY;
return $TRUE if (!$io);
if (!$io) {
$self->{'error'} = "SCST/SCST.pm: Failed to open handler IO $_SCST_IO_";
return $TRUE;
}
if ($self->{'debug'}) {
print "DBG($$): '$_SCST_IO_' -> '$cmd'\n";
@@ -672,7 +858,11 @@ sub group_private {
my $cmd = shift;
my $io = new IO::File $_SCST_GROUPS_DIR_."/$group/".$file, O_WRONLY;
return $TRUE if (!$io);
if (!$io) {
$self->{'error'} = "SCST/SCST.pm: Failed to open handler IO ".$_SCST_GROUPS_DIR_."/$group/".$file;
return $TRUE;
}
if ($self->{'debug'}) {
print "DBG($$): $_SCST_GROUPS_DIR_/$group/$file -> $cmd\n";
@@ -700,6 +890,17 @@ sub checkOptions {
return $TRUE;
}
sub errorString {
my $self = shift;
return undef if (!$self->{'error'});
my $string = $self->{'error'};
$self->{'error'} = undef;
return $string;
}
sub cleanupString {
my $self = shift;
my $string = shift;
@@ -724,9 +925,9 @@ SCST::SCST - Generic SCST methods.
print "Using SCST version".$p->scstVersion()."\n";
if ($p->handlerDeviceExists($SCST::SCST::DISKFILE_TYPE)) {
if ($p->handlerDeviceExists($SCST::SCST::VDISK_TYPE)) {
print "openDevice() failed\n"
if ($p->openDevice($SCST::SCST::DISKFILE_TYPE, 'DISK01', '/vdisk/disk01.dsk'));
if ($p->openDevice($SCST::SCST::VDISK_TYPE, 'DISK01', '/vdisk/disk01.dsk'));
}
undef $p;
@@ -976,6 +1177,16 @@ Arguments: (string) $group
Returns: (int) $success
=item SCST::SCST->errorString();
Contains a description of the last error occured or undef if no error
has occured or if this method has already been called once since the
last error.
Arguments: (void)
Returns: (string) $error_string
=back
=head1 WARNING
@@ -992,8 +1203,8 @@ Available Device Handlers:
CDROM_TYPE,
CHANGER_TYPE,
DISK_TYPE,
DISKFILE_TYPE,
CDROMFILE_TYPE,
VDISK_TYPE,
VCDROM_TYPE,
DISKPERF_TYPE,
MODISK_TYPE,
MODISKPERF_TYPE,
+40 -22
View File
@@ -1,51 +1,60 @@
# Automatically generated by scst.
[HANDLER disk_fileio]
DEVICE GW15K000,/dev/evms/GW15K000,512
DEVICE GW15K001,/dev/evms/GW15K001,512
DEVICE MP15K004,/dev/evms/MP15K004,512
DEVICE MP15K005,/dev/evms/MP15K005,512
DEVICE MP15K006,/dev/evms/MP15K006,512
DEVICE MP15K007,/dev/evms/MP15K007,512
DEVICE MP15K008,/dev/evms/MP15K008,512
DEVICE MP15K009,/dev/evms/MP15K009,512
DEVICE MP15K00a,/dev/evms/MP15K00a,512
DEVICE MP15K00b,/dev/evms/MP15K00b,512
DEVICE MP15K00c,/dev/evms/MP15K00c,512
DEVICE MP15K00d,/dev/evms/MP15K00d,512
DEVICE MP15K00e,/dev/evms/MP15K00e,512
DEVICE MS10K006,/dev/evms/MS10K002,512
DEVICE MS15K000,/dev/evms/MS15K000,512
DEVICE MS15K001,/dev/evms/MS15K001,512
DEVICE MS15K002,/dev/evms/MS15K002,512
DEVICE MS15K005,/dev/evms/MS15K003,512
DEVICE RG10K000,/dev/evms/RG10K000,512
DEVICE RG72K001,/dev/evms/RG72K001,512
[HANDLER vdisk]
#DEVICE <vdisk name>,<device path>,<options>,<block size>
DEVICE GW15K000,/dev/evms/GW15K000,,512
DEVICE GW15K001,/dev/evms/GW15K001,,512
DEVICE MP15K004,/dev/evms/MP15K004,,512
DEVICE MP15K005,/dev/evms/MP15K005,,512
DEVICE MP15K006,/dev/evms/MP15K006,,512
DEVICE MP15K007,/dev/evms/MP15K007,,512
DEVICE MP15K008,/dev/evms/MP15K008,,512
DEVICE MP15K009,/dev/evms/MP15K009,,512
DEVICE MP15K00a,/dev/evms/MP15K00a,,512
DEVICE MP15K00b,/dev/evms/MP15K00b,,512
DEVICE MP15K00c,/dev/evms/MP15K00c,,512
DEVICE MP15K00d,/dev/evms/MP15K00d,,512
DEVICE MP15K00e,/dev/evms/MP15K00e,,512
DEVICE MS10K006,/dev/evms/MS10K002,,512
DEVICE MS15K000,/dev/evms/MS15K000,,512
DEVICE MS15K001,/dev/evms/MS15K001,,512
DEVICE MS15K002,/dev/evms/MS15K002,,512
DEVICE MS15K005,/dev/evms/MS15K003,,512
DEVICE RG10K000,/dev/evms/RG10K000,,512
DEVICE RG72K001,/dev/evms/RG72K001,,512
[HANDLER cdrom_fileio]
[HANDLER vcdrom]
[GROUP CORBIN2_a]
#USER <user wwn>
USER 21:00:00:e0:8b:11:8d:8a
[GROUP CORBIN3_a]
#USER <user wwn>
USER 21:00:00:e0:8b:03:9e:1a
[GROUP MENTASM_a]
#USER <user wwn>
USER 21:00:00:e0:8b:11:06:8a
[GROUP PC1_a]
#USER <user wwn>
USER 21:00:00:e0:8b:11:3f:8d
[GROUP PC2_a]
#USER <user wwn>
USER 21:00:00:e0:8b:03:d8:4a
[GROUP PC3_a]
#USER <user wwn>
USER 21:00:00:e0:8b:13:ba:01
[GROUP PC4_a]
#USER <user wwn>
USER 21:00:00:e0:8b:11:a6:8b
[GROUP RAISTLIN_a]
#USER <user wwn>
USER 21:00:00:e0:8b:11:75:8b
[ASSIGNMENT CORBIN2_a]
@@ -55,35 +64,44 @@ DEVICE RG10K000,2
DEVICE RG72K001,3
[ASSIGNMENT CORBIN3_a]
#ASSIGNMENT <device name>,<lun>
DEVICE MP15K00d,0
[ASSIGNMENT Default]
#ASSIGNMENT <device name>,<lun>
DEVICE GW15K000,0
DEVICE GW15K001,1
[ASSIGNMENT MENTASM_a]
#ASSIGNMENT <device name>,<lun>
DEVICE MP15K006,0
DEVICE MP15K008,1
DEVICE MP15K00e,2
[ASSIGNMENT PC1_a]
#ASSIGNMENT <device name>,<lun>
DEVICE MS15K000,0
[ASSIGNMENT PC2_a]
#ASSIGNMENT <device name>,<lun>
DEVICE MS15K005,0
[ASSIGNMENT PC3_a]
#ASSIGNMENT <device name>,<lun>
DEVICE MP15K00c,0
[ASSIGNMENT PC4_a]
#ASSIGNMENT <device name>,<lun>
DEVICE MP15K005,0
DEVICE MP15K007,1
[ASSIGNMENT RAISTLIN_a]
#ASSIGNMENT <device name>,<lun>
DEVICE MP15K00a,0
DEVICE MP15K00b,1
[TARGETS enable]
#HOST <wwn identifier>
HOST 0x50060b0000397178
HOST 0x50060b000039717a
+1 -1
View File
@@ -148,7 +148,7 @@ CREATE TABLE `scst_handlers` (
LOCK TABLES `scst_handlers` WRITE;
/*!40000 ALTER TABLE `scst_handlers` DISABLE KEYS */;
INSERT INTO `scst_handlers` VALUES (1,'disk','N'),(2,'disk_fileio','Y'),(3,'cdrom','N'),(4,'changer','N'),(5,'disk_perf','N'),(6,'modisk','N'),(7,'modisk_perf','N'),(8,'tape','N'),(9,'tape_perf','N');
INSERT INTO `scst_handlers` VALUES (1,'disk','N'),(2,'vdisk','Y'),(3,'cdrom','N'),(4,'changer','N'),(5,'disk_perf','N'),(6,'modisk','N'),(7,'modisk_perf','N'),(8,'tape','N'),(9,'tape_perf','N');
/*!40000 ALTER TABLE `scst_handlers` ENABLE KEYS */;
UNLOCK TABLES;
+5 -5
View File
@@ -1,5 +1,5 @@
#!/usr/bin/perl
$Version = 'SCST DB Configurator v0.51';
$Version = 'SCST DB Configurator v0.51.1';
# Configures SCST
#
@@ -61,8 +61,8 @@ my %MD_DEVICES;
my %_HANDLER_MAP_ = ('cdrom' => $SCST::SCST::CDROM_TYPE,
'changer' => $SCST::SCST::CHANGER_TYPE,
'disk' => $SCST::SCST::DISK_TYPE,
'disk_fileio' => $SCST::SCST::DISKFILE_TYPE,
'cdrom_fileio' => $SCST::SCST::CDROMFILE_TYPE,
'vdisk' => $SCST::SCST::VDISK_TYPE,
'vcdrom' => $SCST::SCST::VCDROM_TYPE,
'disk_perf' => $SCST::SCST::DISKPERF_TYPE,
'modisk' => $SCST::SCST::MODISK_TYPE,
'modisk_perf' => $SCST::SCST::MODISKPERF_TYPE,
@@ -72,8 +72,8 @@ my %_HANDLER_MAP_ = ('cdrom' => $SCST::SCST::CDROM_TYPE,
my %_REVERSE_MAP_ = ($SCST::SCST::CDROM_TYPE => 'cdrom',
$SCST::SCST::CHANGER_TYPE => 'changer',
$SCST::SCST::DISK_TYPE => 'disk',
$SCST::SCST::DISKFILE_TYPE => 'disk_fileio',
$SCST::SCST::CDROMFILE_TYPE => 'cdrom_fileio',
$SCST::SCST::VDISK_TYPE => 'vdisk',
$SCST::SCST::VCDROM_TYPE => 'vcdrom',
$SCST::SCST::DISKPERF_TYPE => 'disk_perf',
$SCST::SCST::MODISK_TYPE => 'modisk',
$SCST::SCST::MODISKPERF_TYPE => 'modisk_perf',
+56 -18
View File
@@ -1,5 +1,5 @@
#!/usr/bin/perl
$Version = 'SCST Configurator v0.6';
$Version = 'SCST Configurator v0.6.1';
# Configures SCST
#
@@ -59,7 +59,7 @@ Debugging (limited support)
-debug : Debug mode - don\'t do anything destructive.
Available Handlers:
disk, disk_fileio, disk_perf, cdrom, changer, modisk, modisk_perf, tape, tape_perf
disk, vdisk, disk_perf, cdrom, vcdrom, changer, modisk, modisk_perf, tape, tape_perf
Available Options for create and open:
WRITE_THROUGH, READ_ONLY, O_DIRECT, NULLIO, NV_CACHE
@@ -75,7 +75,7 @@ Examples:
scstadmin -addgroup HOST01
Create a device given an already existing disk file:
scstadmin -adddev DISK01 -handler disk_fileio -path /vdisks/disk01.dsk -options READ_ONLY,WRITE_THROUGH
scstadmin -adddev DISK01 -handler vdisk -path /vdisks/disk01.dsk -options READ_ONLY,WRITE_THROUGH
Assign a device to a security group:
scstadmin -assigndev DISK01 -group HOST01 -lun 1
@@ -113,8 +113,8 @@ my $_DEBUG_;
my %_HANDLER_MAP_ = ('cdrom' => $SCST::SCST::CDROM_TYPE,
'changer' => $SCST::SCST::CHANGER_TYPE,
'disk' => $SCST::SCST::DISK_TYPE,
'disk_fileio' => $SCST::SCST::DISKFILE_TYPE,
'cdrom_fileio' => $SCST::SCST::CDROMFILE_TYPE,
'vdisk' => $SCST::SCST::VDISK_TYPE,
'vcdrom' => $SCST::SCST::VCDROM_TYPE,
'disk_perf' => $SCST::SCST::DISKPERF_TYPE,
'modisk' => $SCST::SCST::MODISK_TYPE,
'modisk_perf' => $SCST::SCST::MODISKPERF_TYPE,
@@ -124,8 +124,8 @@ my %_HANDLER_MAP_ = ('cdrom' => $SCST::SCST::CDROM_TYPE,
my %_REVERSE_MAP_ = ($SCST::SCST::CDROM_TYPE => 'cdrom',
$SCST::SCST::CHANGER_TYPE => 'changer',
$SCST::SCST::DISK_TYPE => 'disk',
$SCST::SCST::DISKFILE_TYPE => 'disk_fileio',
$SCST::SCST::CDROMFILE_TYPE => 'cdrom_fileio',
$SCST::SCST::VDISK_TYPE => 'vdisk',
$SCST::SCST::VCDROM_TYPE => 'vcdrom',
$SCST::SCST::DISKPERF_TYPE => 'disk_perf',
$SCST::SCST::MODISK_TYPE => 'modisk',
$SCST::SCST::MODISKPERF_TYPE => 'modisk_perf',
@@ -134,6 +134,8 @@ my %_REVERSE_MAP_ = ($SCST::SCST::CDROM_TYPE => 'cdrom',
$SIG{INT} = \&commitSuicide;
use vars qw($Version);
POSIX::setsid();
&main();
@@ -268,6 +270,8 @@ sub getArgs {
usage();
}
$_DEBUG_ = $TRUE if (defined($_DEBUG_));
$forceConfig = $TRUE if (defined($forceConfig));
$showSessions = $TRUE if (defined($showSessions));
@@ -403,6 +407,8 @@ sub readCurrentConfig {
my $eHandlers = $SCST->handlers();
immediateExit($SCST->errorString());
foreach my $handler (@{$eHandlers}) {
$HANDLERS{$handler}++; # For quick lookups
}
@@ -410,7 +416,10 @@ sub readCurrentConfig {
$TARGETS = targets();
$DEVICES = $SCST->devices();
immediateExit($SCST->errorString());
my $_eGroups = $SCST->groups();
immediateExit($SCST->errorString());
foreach my $group (@{$_eGroups}) {
$GROUPS{$group}++; # For quick lookups
@@ -445,14 +454,17 @@ sub writeConfiguration {
print "Writing current configuration to file '$file'.. ";
print $io "# Automatically generated by scst.\n\n";
print $io "# Automatically generated by $Version.\n\n";
# Device information
foreach my $handler (sort keys %HANDLERS) {
print $io "[HANDLER ".$_REVERSE_MAP_{$handler}."]\n";
print $io "#DEVICE <vdisk name>,<device path>,<options>,<block size>\n";
my $devices = $SCST->handlerDevices($handler);
immediateExit($SCST->errorString());
foreach my $device (sort keys %{$devices}) {
my $options = $$devices{$device}->{'OPTIONS'};
$options =~ s/\,/\|/;
@@ -469,6 +481,7 @@ sub writeConfiguration {
# User configuration
foreach my $group (sort keys %USERS) {
print $io "[GROUP $group]\n";
print $io "#USER <user wwn>\n";
foreach my $user (keys %{$USERS{$group}}) {
print $io "USER $user\n";
@@ -480,6 +493,7 @@ sub writeConfiguration {
# Assignments configuration
foreach my $group (sort keys %ASSIGNMENTS) {
print $io "[ASSIGNMENT $group]\n";
print $io "#DEVICE <device name>,<lun>\n";
my $pointer = $ASSIGNMENTS{$group};
foreach my $device (sort keys %{$pointer}) {
@@ -492,6 +506,7 @@ sub writeConfiguration {
# Targets configuration
foreach my $type ('enable', 'disable') {
print $io "[TARGETS $type]\n";
print $io "#HOST <wwn identifier>\n";
foreach my $target (sort keys %{$TARGETS}) {
if ((($type eq 'enable') && $$TARGETS{$target}->{'enabled'}) ||
@@ -827,6 +842,7 @@ sub clearConfiguration {
sub showSessions {
my $sessions = $SCST->sessions();
immediateExit($SCST->errorString());
print "\n\tTarget Name\tInitiator Name\t\t\tGroup Name\t\tCommand Count\n";
@@ -864,7 +880,8 @@ sub addDevice {
print "\t-> Opening virtual device '$device' at path '$path' using handler '$handler'..\n";
if ($SCST->openDevice($_handler, $device, $path, $options, $blocksize)) {
print "WARNING: Failed to open virtual device '$device' at path '$path'.\n";
print "WARNING: Failed to open virtual device '$device' at path '$path': ".
$SCST->errorString()."\n";
return $TRUE;
}
@@ -887,7 +904,8 @@ sub removeDevice {
print "\t-> Closing virtual device '$device'..\n";
if ($SCST->closeDevice($_handler, $device)) {
print "WARNING: Failed to close virtual device '$device'.\n";
print "WARNING: Failed to close virtual device '$device': ".
$SCST->errorString();
return $TRUE;
}
@@ -907,7 +925,8 @@ sub addGroup {
print "\t-> Creating security group '$group'..\n";
if ($SCST->addGroup($group)) {
print "WARNING: Failed to create security group '$group'.\n";
print "WARNING: Failed to create security group '$group': ".
$SCST->errorString()."\n";
return $TRUE;
}
@@ -927,7 +946,8 @@ sub removeGroup {
print "\t-> Removing security group '$group'..\n";
if ($SCST->removeGroup($group)) {
print "WARNING: Failed to remove security group '$group'.\n";
print "WARNING: Failed to remove security group '$group': ".
$SCST->errorString()."\n";
return $TRUE;
}
@@ -953,7 +973,8 @@ sub addUser {
print "\t-> Adding user '$user' to security group '$group'..\n";
if ($SCST->addUser($user, $group)) {
print "WARNING: Failed to add user '$user' to security group '$group'.\n";
print "WARNING: Failed to add user '$user' to security group '$group': ".
$SCST->errorString()."\n";
return $TRUE;
}
@@ -979,7 +1000,8 @@ sub removeUser {
print "\t-> Removing user '$user' from security group '$group'..\n";
if ($SCST->removeUser($user, $group)) {
print "WARNING: Failed to add user '$user' to security group '$group'.\n";
print "WARNING: Failed to add user '$user' to security group '$group': ".
$SCST->errorString()."\n";
return $TRUE;
}
@@ -999,7 +1021,8 @@ sub clearUsers {
print "\t-> Clearing users from security group '$group'..\n";
if ($SCST->clearUsers($group)) {
print "WARNING: Failed to clear users from security group '$group'.\n";
print "WARNING: Failed to clear users from security group '$group': ".
$SCST->errorString()."\n";
return $TRUE;
}
@@ -1052,7 +1075,8 @@ sub assignDevice {
print "\t-> Assign virtual device '$device' to group '$group' at LUN '$lun'..\n";
if ($SCST->assignDeviceToGroup($device, $group, $lun)) {
print "WARNING: Failed to assign device '$device' to group '$group'.\n";
print "WARNING: Failed to assign device '$device' to group '$group': ".
$SCST->errorString()."\n";
return $TRUE;
}
@@ -1085,7 +1109,8 @@ sub releaseDevice {
print "\t-> Release virtual device '$device' from group '$group'..\n";
if ($SCST->removeDeviceFromGroup($device, $group)) {
print "WARNING: Failed to release device '$device' from group '$group'.\n";
print "WARNING: Failed to release device '$device' from group '$group': ".
$SCST->errorString()."\n";
return $TRUE;
}
@@ -1107,7 +1132,8 @@ sub clearDevices {
print "\t-> Clear virtual devices from group '$group'..\n";
if ($SCST->clearGroupDevices($group)) {
print "WARNING: Failed to clear devices from group '$group'.\n";
print "WARNING: Failed to clear devices from group '$group': ".
$SCST->errorString()."\n";
return $TRUE;
}
@@ -1263,6 +1289,18 @@ sub unformatTarget {
return $target;
}
# If we have an unread error from SCST, exit immediately
sub immediateExit {
my $error = shift;
return if (!$error);
print "\n\nFATAL: Received the following error:\n\n\t";
print "$error\n\n";
exit 1;
}
# Hey! Stop that!
sub commitSuicide {
print "\n\nAborting immediately.\n";