mirror of
https://github.com/SCST-project/scst.git
synced 2026-08-22 07:06:22 +00:00
Make recent changes available to 1.0.1.x branch.
git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/1.0.1.x@787 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
Changes since 1.0.6
|
||||
|
||||
- Added -resyncdev option to work with the new SCST resync_size option.
|
||||
- SCST.pm: Added resyncDevice()
|
||||
- SCST.pm: General cleanup.
|
||||
|
||||
Changes since 1.0.5
|
||||
|
||||
- Fixed a removeDevice() case when using -ForceConfig.
|
||||
|
||||
@@ -2,7 +2,7 @@ package SCST::SCST;
|
||||
|
||||
# Author: Mark R. Buechler
|
||||
# License: GPLv2
|
||||
# Copyright (c) 2005-2008 Mark R. Buechler
|
||||
# Copyright (c) 2005-2009 Mark R. Buechler
|
||||
|
||||
use 5.005;
|
||||
use IO::Handle;
|
||||
@@ -10,9 +10,6 @@ use IO::File;
|
||||
use strict;
|
||||
use Carp qw(cluck);
|
||||
|
||||
my $TRUE = 1;
|
||||
my $FALSE = 0;
|
||||
|
||||
my $_SCST_DIR_ = '/proc/scsi_tgt';
|
||||
my $_SCST_IO_ = $_SCST_DIR_.'/scsi_tgt';
|
||||
my $_SCST_CDROM_IO_ = $_SCST_DIR_.'/dev_cdrom/dev_cdrom';
|
||||
@@ -55,7 +52,7 @@ $IOTYPE_PHYSICAL = 100;
|
||||
$IOTYPE_VIRTUAL = 101;
|
||||
$IOTYPE_PERFORMANCE = 102;
|
||||
|
||||
$VERSION = 0.7.7;
|
||||
$VERSION = 0.7.9;
|
||||
|
||||
my $_SCST_MIN_MAJOR_ = 0;
|
||||
my $_SCST_MIN_MINOR_ = 9;
|
||||
@@ -129,7 +126,7 @@ my %_AVAILABLE_OPTIONS_ = ('WRITE_THROUGH' => 'WRITE_THROUGH',
|
||||
sub new {
|
||||
my $this = shift;
|
||||
my $debug = shift;
|
||||
my $badVersion = $TRUE;
|
||||
my $badVersion = 1;
|
||||
|
||||
my $class = ref($this) || $this;
|
||||
my $self = {};
|
||||
@@ -143,9 +140,10 @@ sub new {
|
||||
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_)) ||
|
||||
(($major == $_SCST_MIN_MAJOR_) && ($minor == $_SCST_MIN_MINOR_) && ($release >= $_SCST_MIN_RELEASE_)));
|
||||
$badVersion = 0 if (($major > $_SCST_MIN_MAJOR_) ||
|
||||
(($major == $_SCST_MIN_MAJOR_) && ($minor > $_SCST_MIN_MINOR_)) ||
|
||||
(($major == $_SCST_MIN_MAJOR_) && ($minor == $_SCST_MIN_MINOR_) &&
|
||||
($release >= $_SCST_MIN_RELEASE_)));
|
||||
|
||||
croak("This module requires at least SCST version $_SCST_MIN_MAJOR_\.$_SCST_MIN_MINOR_\.".
|
||||
"$_SCST_MIN_RELEASE_ and version $scstVersion was found") if ($badVersion);
|
||||
@@ -157,7 +155,7 @@ sub scstVersion {
|
||||
my $self = shift;
|
||||
|
||||
my $io = new IO::File $_SCST_VERSION_IO_, O_RDONLY;
|
||||
return $TRUE if (!$io);
|
||||
return 1 if (!$io);
|
||||
|
||||
my $version = <$io>;
|
||||
chomp $version;
|
||||
@@ -189,10 +187,10 @@ sub groupExists {
|
||||
my $groups = $self->groups();
|
||||
|
||||
foreach my $_group (@{$groups}) {
|
||||
return $TRUE if ($group eq $_group);
|
||||
return 1 if ($group eq $_group);
|
||||
}
|
||||
|
||||
return $FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub addGroup {
|
||||
@@ -205,7 +203,7 @@ sub addGroup {
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "addGroup(): Failed to open handler IO '$_SCST_IO_'";
|
||||
return $TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
my $cmd = "add_group $group\n";
|
||||
@@ -218,7 +216,7 @@ sub addGroup {
|
||||
|
||||
close $io;
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return 0 if ($self->{'debug'});
|
||||
return !$self->groupExists($group);
|
||||
}
|
||||
|
||||
@@ -232,7 +230,7 @@ sub removeGroup {
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "removeGroup(): Failed to open handler IO '$_SCST_IO_'";
|
||||
return $TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
my $cmd = "del_group $group\n";
|
||||
@@ -245,7 +243,7 @@ sub removeGroup {
|
||||
|
||||
close $io;
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return 0 if ($self->{'debug'});
|
||||
return $self->groupExists($group);
|
||||
}
|
||||
|
||||
@@ -253,7 +251,7 @@ sub sgvStats {
|
||||
my $self = shift;
|
||||
my $io = new IO::File $_SCST_SGV_STATS_, O_RDONLY;
|
||||
my %stats;
|
||||
my $first = $TRUE;
|
||||
my $first = 1;
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "sgvStats(): Failed to open handler IO '$_SCST_IO_'";
|
||||
@@ -264,7 +262,7 @@ sub sgvStats {
|
||||
chomp $line;
|
||||
|
||||
if ($first || !$line) {
|
||||
$first = $FALSE;
|
||||
$first = 0;
|
||||
next;
|
||||
}
|
||||
|
||||
@@ -303,7 +301,7 @@ sub sessions {
|
||||
my $self = shift;
|
||||
my $io = new IO::File $_SCST_SESSIONS_, O_RDONLY;
|
||||
my %sessions;
|
||||
my $first = $TRUE;
|
||||
my $first = 1;
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "sessions(): Failed to open handler IO '$_SCST_IO_'";
|
||||
@@ -314,7 +312,7 @@ sub sessions {
|
||||
chomp $line;
|
||||
|
||||
if ($first) {
|
||||
$first = $FALSE;
|
||||
$first = 0;
|
||||
next;
|
||||
}
|
||||
|
||||
@@ -332,7 +330,7 @@ sub devices {
|
||||
my $self = shift;
|
||||
my $io = new IO::File $_SCST_IO_, O_RDONLY;
|
||||
my %devices;
|
||||
my $first = $TRUE;
|
||||
my $first = 1;
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "devices(): Failed to open handler IO '$_SCST_IO_'";
|
||||
@@ -343,7 +341,7 @@ sub devices {
|
||||
chomp $line;
|
||||
|
||||
if ($first) {
|
||||
$first = $FALSE;
|
||||
$first = 0;
|
||||
next;
|
||||
}
|
||||
|
||||
@@ -362,7 +360,7 @@ sub handlerDevices {
|
||||
my $self = shift;
|
||||
my $handler = shift;
|
||||
my $handler_io = $_IO_MAP_{$handler};
|
||||
my $first = $TRUE;
|
||||
my $first = 1;
|
||||
my $handler_name = $_REVERSE_MAP_{$handler};
|
||||
my %devices;
|
||||
|
||||
@@ -388,7 +386,7 @@ sub handlerDevices {
|
||||
chomp $line;
|
||||
|
||||
if ($first) {
|
||||
$first = $FALSE;
|
||||
$first = 0;
|
||||
next;
|
||||
}
|
||||
|
||||
@@ -425,9 +423,9 @@ sub handlerDeviceExists {
|
||||
my $devices = $self->handlerDevices($handler);
|
||||
|
||||
return -1 if (!defined($devices));
|
||||
return $TRUE if (defined($$devices{$device}));
|
||||
return 1 if (defined($$devices{$device}));
|
||||
|
||||
return $FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub handlerType {
|
||||
@@ -458,7 +456,6 @@ sub openDevice {
|
||||
|
||||
($options, $valid_opts) = $self->checkOptions($options);
|
||||
|
||||
|
||||
if (!$valid_opts) {
|
||||
$self->{'error'} = "openDevice(): Invalid option(s) '$options' given for device '$device'";
|
||||
return 1;
|
||||
@@ -489,7 +486,7 @@ sub openDevice {
|
||||
|
||||
my $rc = $self->handler_private($handler_io, $cmd);
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return 0 if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
|
||||
$rc = !$self->handlerDeviceExists($handler, $device);
|
||||
@@ -513,12 +510,12 @@ sub closeDevice {
|
||||
if (!$handler_io) {
|
||||
$self->{'error'} = "closeDevice(): Failed to open handler IO '$handler_io'".
|
||||
" or handler '$handler_name' ($handler) invalid";
|
||||
return $TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!$self->handlerExists($handler)) {
|
||||
$self->{'error'} = "closeDevice(): Handler '$handler_name' ($handler) does not exist";
|
||||
return $TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!$self->handlerDeviceExists($handler, $device)) {
|
||||
@@ -530,7 +527,7 @@ sub closeDevice {
|
||||
|
||||
my $rc = $self->handler_private($handler_io, $cmd);
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return 0 if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
|
||||
$rc = $self->handlerDeviceExists($handler, $device);
|
||||
@@ -543,6 +540,39 @@ sub closeDevice {
|
||||
return $rc;
|
||||
}
|
||||
|
||||
sub resyncDevice {
|
||||
my $self = shift;
|
||||
my $handler = shift;
|
||||
my $device = shift;
|
||||
my $handler_io = $_IO_MAP_{$handler};
|
||||
my $handler_name = $_REVERSE_MAP_{$handler};
|
||||
|
||||
if (!$handler_io) {
|
||||
$self->{'error'} = "resyncDevice(): Failed to open handler IO '$handler_io'".
|
||||
" or handler '$handler_name' ($handler) invalid";
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!$self->handlerExists($handler)) {
|
||||
$self->{'error'} = "resyncDevice(): Handler '$handler_name' ($handler) does not exist";
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!$self->handlerDeviceExists($handler, $device)) {
|
||||
$self->{'error'} = "resyncDevice(): Device '$device' does not exist";
|
||||
return 2;
|
||||
}
|
||||
|
||||
my $cmd = "resync_size $device\n";
|
||||
|
||||
my $rc = $self->handler_private($handler_io, $cmd);
|
||||
|
||||
return 0 if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
|
||||
return $rc;
|
||||
}
|
||||
|
||||
sub userExists {
|
||||
my $self = shift;
|
||||
my $user = shift;
|
||||
@@ -553,10 +583,10 @@ sub userExists {
|
||||
return -1 if (!defined($users));
|
||||
|
||||
foreach my $_user (@{$users}) {
|
||||
return $TRUE if ($user eq $_user);
|
||||
return 1 if ($user eq $_user);
|
||||
}
|
||||
|
||||
return $FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub users {
|
||||
@@ -604,7 +634,7 @@ sub addUser {
|
||||
|
||||
my $rc = $self->group_private($group, $_SCST_USERS_IO_, $cmd);
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return 0 if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
|
||||
$rc = !$self->userExists($user, $group);
|
||||
@@ -636,7 +666,7 @@ sub removeUser {
|
||||
|
||||
my $rc = $self->group_private($group, $_SCST_USERS_IO_, $cmd);
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return 0 if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
|
||||
$rc = $self->userExists($user, $group);
|
||||
@@ -655,14 +685,14 @@ sub clearUsers {
|
||||
|
||||
if (!$self->groupExists($group)) {
|
||||
$self->{'error'} = "clearUsers(): Group '$group' does not exist";
|
||||
return $TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
my $cmd = "clear\n";
|
||||
|
||||
my $rc = $self->group_private($group, $_SCST_USERS_IO_, $cmd);
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return 0 if ($self->{'debug'});
|
||||
|
||||
if ($rc) {
|
||||
$self->{'error'} = "clearUsers(): An error occured while clearing users from ".
|
||||
@@ -682,10 +712,10 @@ sub handlerExists {
|
||||
my $handlers = $self->handlers();
|
||||
|
||||
foreach my $_handler (@{$handlers}) {
|
||||
return $TRUE if ($handler eq $_handler);
|
||||
return 1 if ($handler eq $_handler);
|
||||
}
|
||||
|
||||
return $FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub handlers {
|
||||
@@ -718,19 +748,19 @@ sub groupDeviceExists {
|
||||
return -1 if (!defined($devices));
|
||||
|
||||
if (defined($lun)) {
|
||||
return $TRUE if ($$devices{$device} eq $lun);
|
||||
return 1 if ($$devices{$device} eq $lun);
|
||||
} else {
|
||||
return $TRUE if (defined($$devices{$device}));
|
||||
return 1 if (defined($$devices{$device}));
|
||||
}
|
||||
|
||||
return $FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub groupDevices {
|
||||
my $self = shift;
|
||||
my $group = shift;
|
||||
my %devices;
|
||||
my $first = $TRUE;
|
||||
my $first = 1;
|
||||
|
||||
if (!$self->groupExists($group)) {
|
||||
$self->{'error'} = "groupDevices(): Group '$group' does not exist";
|
||||
@@ -749,7 +779,7 @@ sub groupDevices {
|
||||
chomp $line;
|
||||
|
||||
if ($first) {
|
||||
$first = $FALSE;
|
||||
$first = 0;
|
||||
next;
|
||||
}
|
||||
|
||||
@@ -771,7 +801,7 @@ sub assignDeviceToGroup {
|
||||
|
||||
if (!$self->groupExists($group)) {
|
||||
$self->{'error'} = "assignDeviceToGroup(): Group '$group' does not exist";
|
||||
return $TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ($self->groupDeviceExists($device, $group, $lun)) {
|
||||
@@ -784,7 +814,7 @@ sub assignDeviceToGroup {
|
||||
|
||||
my $rc = $self->group_private($group, $_SCST_DEVICES_IO_, $cmd);
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return 0 if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
|
||||
$rc = !$self->groupDeviceExists($device, $group, $lun);
|
||||
@@ -807,12 +837,12 @@ sub assignDeviceToHandler {
|
||||
if (!$handler_io) {
|
||||
$self->{'error'} = "assignDeviceToHandler(): Failed to open handler IO '$handler_io' or ".
|
||||
"handler '$handler_name' ($handler) invalid";
|
||||
return $TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!$self->handlerExists($handler)) {
|
||||
$self->{'error'} = "assignDeviceToHandler(): Handler '$handler_name' ($handler) does not exist";
|
||||
return $TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ($self->handlerDeviceExists($handler, $device)) {
|
||||
@@ -825,7 +855,7 @@ sub assignDeviceToHandler {
|
||||
|
||||
my $rc = $self->scst_private($cmd);
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return 0 if ($self->{'debug'});
|
||||
return $rc if($rc);
|
||||
|
||||
$rc = !$self->handlerDeviceExists($handler, $device);
|
||||
@@ -845,7 +875,7 @@ sub removeDeviceFromGroup {
|
||||
|
||||
if (!$self->groupExists($group)) {
|
||||
$self->{'error'} = "removeDeviceFromGroup(): Group '$group' does not exist";
|
||||
return $TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!$self->groupDeviceExists($device, $group)) {
|
||||
@@ -857,7 +887,7 @@ sub removeDeviceFromGroup {
|
||||
|
||||
my $rc = $self->group_private($group, $_SCST_DEVICES_IO_, $cmd);
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return 0 if ($self->{'debug'});
|
||||
return $rc if ($rc);
|
||||
|
||||
$rc = $self->groupDeviceExists($device, $group);
|
||||
@@ -874,13 +904,13 @@ sub clearGroupDevices {
|
||||
my $self = shift;
|
||||
my $group = shift;
|
||||
|
||||
return $TRUE if (!$self->groupExists($group));
|
||||
return 1 if (!$self->groupExists($group));
|
||||
|
||||
my $cmd = "clear\n";
|
||||
|
||||
my $rc = $self->group_private($group, $_SCST_DEVICES_IO_, $cmd);
|
||||
|
||||
return $FALSE if ($self->{'debug'});
|
||||
return 0 if ($self->{'debug'});
|
||||
|
||||
if ($rc) {
|
||||
$self->{'error'} = "clearGroupDevices(): An error occured while clearing devices from ".
|
||||
@@ -902,7 +932,7 @@ sub handler_private {
|
||||
|
||||
if (!$io) {
|
||||
cluck("WARNING: SCST/SCST.pm: Failed to open handler IO $handler_io, assuming disabled");
|
||||
return $FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ($self->{'debug'}) {
|
||||
@@ -913,7 +943,7 @@ sub handler_private {
|
||||
|
||||
close $io;
|
||||
|
||||
return $FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub scst_private {
|
||||
@@ -924,7 +954,7 @@ sub scst_private {
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "SCST/SCST.pm: Failed to open handler IO '$_SCST_IO_'";
|
||||
return $TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ($self->{'debug'}) {
|
||||
@@ -935,7 +965,7 @@ sub scst_private {
|
||||
|
||||
close $io;
|
||||
|
||||
return $FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub group_private {
|
||||
@@ -948,7 +978,7 @@ sub group_private {
|
||||
|
||||
if (!$io) {
|
||||
$self->{'error'} = "SCST/SCST.pm: Failed to open handler IO '".$_SCST_GROUPS_DIR_."/$group/".$file."'";
|
||||
return $TRUE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ($self->{'debug'}) {
|
||||
@@ -959,7 +989,7 @@ sub group_private {
|
||||
|
||||
close $io;
|
||||
|
||||
return $FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub checkOptions {
|
||||
@@ -967,15 +997,15 @@ sub checkOptions {
|
||||
my $options = shift;
|
||||
my $o_string;
|
||||
my $b_string;
|
||||
my $bad = $FALSE;
|
||||
my $bad = 0;
|
||||
|
||||
return undef, $TRUE if (!$options);
|
||||
return undef, 1 if (!$options);
|
||||
|
||||
foreach my $option (split(/[\s+|\,]/, $options)) {
|
||||
my $map = $_AVAILABLE_OPTIONS_{$option};
|
||||
|
||||
if (!$map) {
|
||||
$bad = $TRUE;
|
||||
$bad = 1;
|
||||
$b_string .= ",$option";
|
||||
} else {
|
||||
$o_string .= ",$map";
|
||||
@@ -984,12 +1014,12 @@ sub checkOptions {
|
||||
|
||||
if ($bad) {
|
||||
$b_string =~ s/^\,//;
|
||||
return $b_string, $FALSE;
|
||||
return $b_string, 0;
|
||||
}
|
||||
|
||||
$o_string =~ s/^\,//;
|
||||
|
||||
return $o_string, $TRUE;
|
||||
return $o_string, 1;
|
||||
}
|
||||
|
||||
sub errorString {
|
||||
|
||||
+51
-15
@@ -1,11 +1,11 @@
|
||||
#!/usr/bin/perl
|
||||
$Version = 'SCST Configurator v1.0.5';
|
||||
$Version = 'SCST Configurator v1.0.6';
|
||||
|
||||
# Configures SCST
|
||||
#
|
||||
# Author: Mark R. Buechler
|
||||
# License: GPLv2
|
||||
# Copyright (c) 2005-2007 Mark R. Buechler
|
||||
# Copyright (c) 2005-2009 Mark R. Buechler
|
||||
|
||||
sub usage
|
||||
{
|
||||
@@ -24,16 +24,18 @@ Target Driver Operations
|
||||
-enable <wwn|host> : Enable target mode for driver at specified WWN or host.
|
||||
-disable <wwn|host> : Disable target mode for driver at specified WWN or host.
|
||||
|
||||
Devices Operations
|
||||
Device Operations
|
||||
-adddev <device> : Adds a device to a handler.
|
||||
-handler <handler>
|
||||
-path <path>
|
||||
-options <options>
|
||||
-blocksize <bytes>
|
||||
-resyncdev <device> : Resync the size of a device with the initiator(s).
|
||||
-handler <handler>
|
||||
-RemoveDev <device> : Remove a device from a handler.
|
||||
-handler <handler>
|
||||
|
||||
Users Operations
|
||||
User Operations
|
||||
-adduser <user> : Adds a user to a security group.
|
||||
-group <group>
|
||||
-RemoveUser <user> : Delete a user from a security group.
|
||||
@@ -41,11 +43,11 @@ Users Operations
|
||||
-ClearUsers : Clear all users from a given security group.
|
||||
-group <group>
|
||||
|
||||
Groups Operations
|
||||
Group Operations
|
||||
-addgroup <group> : Add a given group to available security groups.
|
||||
-RemoveGroup <group> : Remove a give group from available security groups.
|
||||
|
||||
Assignments Operations
|
||||
Assignment Operations
|
||||
-assigndev <device> : Assign a given device to a security group.
|
||||
-group <group>
|
||||
-lun <lun>
|
||||
@@ -169,6 +171,7 @@ sub getArgs {
|
||||
my $showSessions;
|
||||
my $addDev;
|
||||
my $devPath;
|
||||
my $resyncDev;
|
||||
my $removeDev;
|
||||
my $addUser;
|
||||
my $removeUser;
|
||||
@@ -204,6 +207,7 @@ sub getArgs {
|
||||
'addgroup=s' => \$addGroup,
|
||||
'RemoveGroup=s' => \$removeGroup,
|
||||
'assigndev=s' => \$assignDev,
|
||||
'resyncdev=s' => \$resyncDev,
|
||||
'ReleaseDev=s' => \$releaseDev,
|
||||
'ClearDevs' => \$clearDevs,
|
||||
'handler=s' => \$handler,
|
||||
@@ -250,6 +254,11 @@ sub getArgs {
|
||||
usage();
|
||||
}
|
||||
|
||||
if ($resyncDev && !$handler) {
|
||||
print "Please specify -handler with -resyncdev.\n\n";
|
||||
usage();
|
||||
}
|
||||
|
||||
if ($removeDev && !$handler) {
|
||||
print "Please specify -handler with -RemoveDev.\n\n";
|
||||
usage();
|
||||
@@ -298,8 +307,8 @@ sub getArgs {
|
||||
$enable =~ tr/A-Z/a-z/; $disable =~ tr/A-Z/a-z/;
|
||||
$options =~ tr/a-z/A-Z/ if ($options);
|
||||
|
||||
if ((defined($showSessions) + defined($addDev) + defined($removeDev) +
|
||||
defined($addUser) + defined($enable) + defined($disable) +
|
||||
if ((defined($showSessions) + defined($addDev) + defined($resyncDev) +
|
||||
defined($removeDev)+ defined($addUser) + defined($enable) + defined($disable) +
|
||||
defined($removeUser) + defined($clearUsers) + defined($assignDev) +
|
||||
defined($releaseDev) + defined($clearDevs) + defined($applyConfig) +
|
||||
defined($clearConfig) + defined($writeConfig) + defined($checkConfig)) > 1) {
|
||||
@@ -310,9 +319,9 @@ sub getArgs {
|
||||
$applyConfig = $_DEF_CONFIG_ if (defined($applyConfig) && !$applyConfig);
|
||||
$checkConfig = $_DEF_CONFIG_ if (defined($checkConfig) && !$checkConfig);
|
||||
|
||||
return ($enable, $disable, $addDev, $devPath, $devLun, $removeDev, $addUser, $removeUser,
|
||||
$clearUsers, $addGroup, $removeGroup, $assignDev, $releaseDev, $clearDevs,
|
||||
$handler, $group, $options, $blocksize, $applyConfig, $forceConfig,
|
||||
return ($enable, $disable, $addDev, $devPath, $devLun, $resyncDev, $removeDev, $addUser,
|
||||
$removeUser, $clearUsers, $addGroup, $removeGroup, $assignDev, $releaseDev,
|
||||
$clearDevs, $handler, $group, $options, $blocksize, $applyConfig, $forceConfig,
|
||||
$clearConfig, $writeConfig, $checkConfig, $showSessions);
|
||||
}
|
||||
|
||||
@@ -324,9 +333,9 @@ sub main {
|
||||
# We need to run as root
|
||||
if ( $> ) {die("This program must run as root.\n");}
|
||||
|
||||
my ($enable, $disable, $addDev, $devPath, $devLun, $removeDev, $addUser, $removeUser,
|
||||
$clearUsers, $addGroup, $removeGroup, $assignDev, $releaseDev, $clearDevs,
|
||||
$handler, $group, $options, $blocksize, $applyConfig, $forceConfig,
|
||||
my ($enable, $disable, $addDev, $devPath, $devLun, $resyncDev, $removeDev, $addUser,
|
||||
$removeUser, $clearUsers, $addGroup, $removeGroup, $assignDev, $releaseDev,
|
||||
$clearDevs, $handler, $group, $options, $blocksize, $applyConfig, $forceConfig,
|
||||
$clearConfig, $writeConfig, $checkConfig, $showSessions) = getArgs();
|
||||
|
||||
$SCST = new SCST::SCST($_DEBUG_);
|
||||
@@ -367,6 +376,10 @@ sub main {
|
||||
$rc = addDevice($handler, $addDev, $devPath, $options, $blocksize);
|
||||
last SWITCH;
|
||||
};
|
||||
$resyncDev && do {
|
||||
$rc = resyncDevice($handler, $resyncDev);
|
||||
last SWITCH;
|
||||
};
|
||||
$removeDev && do {
|
||||
$rc = removeDevice($handler, $removeDev);
|
||||
last SWITCH;
|
||||
@@ -958,7 +971,7 @@ sub clearConfiguration {
|
||||
print "If this is not what you intend, press ctrl-c now. Waiting 10 seconds.\n\n";
|
||||
sleep 10;
|
||||
|
||||
print "\nRemoving all user and groups:\n\n";
|
||||
print "\nRemoving all users and groups:\n\n";
|
||||
foreach my $group (keys %GROUPS) {
|
||||
$errs += removeGroup($group) if ($group ne $_DEFAULT_GROUP_);
|
||||
}
|
||||
@@ -1040,6 +1053,29 @@ sub addDevice {
|
||||
return $FALSE;
|
||||
}
|
||||
|
||||
sub resyncDevice {
|
||||
my $handler = shift;
|
||||
my $device = shift;
|
||||
|
||||
my $_handler = $_HANDLER_MAP_{$handler};
|
||||
my $htype = $SCST->handlerType($_handler);
|
||||
|
||||
if (!defined($$DEVICES{$device})) {
|
||||
print "WARNING: Device '$device' not defined.\n";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
print "\t-> Resync'ing virtual device '$device'..\n";
|
||||
|
||||
if ($SCST->resyncDevice($_handler, $device)) {
|
||||
print "WARNING: Failed to resync virtual device '$device': ".
|
||||
$SCST->errorString()."\n";
|
||||
return $TRUE;
|
||||
}
|
||||
|
||||
return $FALSE;
|
||||
}
|
||||
|
||||
sub removeDevice {
|
||||
my $handler = shift;
|
||||
my $device = shift;
|
||||
|
||||
Reference in New Issue
Block a user