From: <mga...@us...> - 2010-07-22 16:29:33
|
Revision: 1863 http://scst.svn.sourceforge.net/scst/?rev=1863&view=rev Author: mgandalf Date: 2010-07-22 16:29:27 +0000 (Thu, 22 Jul 2010) Log Message: ----------- - When reading deprecated config files, don't configure empty groups. - Minor formatting fix in writeConfiguration(). Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-22 14:59:08 UTC (rev 1862) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-22 16:29:27 UTC (rev 1863) @@ -1056,6 +1056,9 @@ $t_lun_buff .= "\n"; } } + + $t_lun_buff .= "\n" if ($t_lun_buff); + my $groups = $CURRENT{'assign'}->{$driver}->{$target}->{'GROUP'}; my $group_buff; @@ -2981,8 +2984,10 @@ my $targets = $SCST->targets($driver); foreach my $target (@{$targets}) { - %{$new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{'0'}} = (); + my $enable = ($driver =~ /^qla/) ? 0 : 1; + %{$new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{$enable}} = (); + addAllGroupsToTarget(\%config, \%new, $driver, $target); } } @@ -3003,7 +3008,9 @@ my $targets = $SCST->targets($driver); foreach my $target (@{$targets}) { - $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{'0'} = () + my $enable = ($driver =~ /^qla/) ? 0 : 1; + + $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{$enable} = () if (!defined($new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target})); $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'LUN'}->{$lun}->{$device} = {}; @@ -3021,8 +3028,9 @@ if ($target eq $group) { foreach my $device (@{$config{'ASSIGNMENT'}->{$group}->{'DEVICE'}}) { my($device, $lun) = split(/\,/, $device); + my $enable = ($driver =~ /^qla/) ? 0 : 1; - $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{'0'} = () + $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{$enable} = () if (!defined($new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target})); $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'LUN'}->{$lun}->{$device} = {}; @@ -3050,8 +3058,9 @@ my $target = shift; foreach my $group (keys %{$$config{'GROUP'}}) { - %{$$new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'GROUP'}->{$group}} = (); if (defined($$config{'GROUP'}->{$group}->{'USER'})) { + %{$$new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'GROUP'}->{$group}} = (); + foreach my $user (@{$$config{'GROUP'}->{$group}->{'USER'}}) { %{$$new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'GROUP'}->{$group}->{'INITIATOR'}->{$user}} = (); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-07-28 13:28:03
|
Revision: 1883 http://scst.svn.sourceforge.net/scst/?rev=1883&view=rev Author: mgandalf Date: 2010-07-28 13:27:56 +0000 (Wed, 28 Jul 2010) Log Message: ----------- - Don't tream an hash like an array. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-28 10:15:33 UTC (rev 1882) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-28 13:27:56 UTC (rev 1883) @@ -848,7 +848,7 @@ if (!defined($$handler_attrs{$attribute})) { if (!$$attributes{$attribute}->{'static'}) { if (defined($$attributes{$attribute}->{'keys'})) { - foreach my $key (@{$$attributes{$attribute}->{'keys'}}) { + foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) { my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'}; $value = "\"$value\"" if ($value =~ / /); $attribute_buff .= "\t\t$attribute $value\n" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-07-28 14:07:03
|
Revision: 1884 http://scst.svn.sourceforge.net/scst/?rev=1884&view=rev Author: mgandalf Date: 2010-07-28 14:06:57 +0000 (Wed, 28 Jul 2010) Log Message: ----------- - Create targets from old Default_ groups for all drivers capable of dynamic target creation. - While converting an old config file, set 'enabled' to 1 for all non-qla drivers which have the 'enabled' attribute so their targets can become enabled as well. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-28 13:27:56 UTC (rev 1883) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-28 14:06:57 UTC (rev 1884) @@ -2993,13 +2993,12 @@ } } + my $drivers = $SCST->drivers(); + # Now handle default groups - foreach my $group (keys %{$config{'ASSIGNMENT'}}) { next if ($group !~ /^Default/); - my $drivers = $SCST->drivers(); - if ($group eq 'Default') { # Add to all targets foreach my $device (@{$config{'ASSIGNMENT'}->{$group}->{'DEVICE'}}) { my($device, $lun) = split(/\,/, $device); @@ -3018,14 +3017,15 @@ } } } else { - $group =~ s/^Default\_//; + my $group_t = $group; + $group_t =~ s/^Default\_//; my $found_t = FALSE; # Find the associated target foreach my $driver (@{$drivers}) { my $targets = $SCST->targets($driver); foreach my $target (@{$targets}) { - if ($target eq $group) { + if ($target eq $group_t) { foreach my $device (@{$config{'ASSIGNMENT'}->{$group}->{'DEVICE'}}) { my($device, $lun) = split(/\,/, $device); my $enable = ($driver =~ /^qla/) ? 0 : 1; @@ -3042,12 +3042,35 @@ } if (!$found_t) { - print "WARNING: Unable to find target $group. Please ". - "configure these assignments manually.\n\n"; + print "WARNING: Unable to find target $group. I will add this target to ". + "all drivers capable of creating targets.\n"; + + foreach my $driver (@{$drivers}) { + if ($SCST->driverIsVirtualCapable($driver)) { + foreach my $device (@{$config{'ASSIGNMENT'}->{$group}->{'DEVICE'}}) { + my($device, $lun) = split(/\,/, $device); + my $enable = ($driver =~ /^qla/) ? 0 : 1; + + $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$group_t}->{'enabled'}->{$enable} = (); + $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$group_t}->{'LUN'}->{$lun}->{$device} = {}; + } + } + } } } } + # Fix drivers 'enabled' attributes + foreach my $driver (@{$drivers}) { + next if ($driver =~ /^qla/); + + my $attributes = $SCST->driverAttributes($driver); + + if (defined($$attributes{'enabled'})) { + $new{'TARGET_DRIVER'}->{$driver}->{'enabled'}->{'1'} = (); + } + } + return \%new; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-07-28 14:46:47
|
Revision: 1885 http://scst.svn.sourceforge.net/scst/?rev=1885&view=rev Author: mgandalf Date: 2010-07-28 14:46:41 +0000 (Wed, 28 Jul 2010) Log Message: ----------- - Properly handling of auto-enabled targets/drivers while reading a deprecated config file. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-28 14:06:57 UTC (rev 1884) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-28 14:46:41 UTC (rev 1885) @@ -2959,43 +2959,10 @@ } } - foreach my $wwn (@{$config{'TARGETS'}->{'enable'}->{'HOST'}}) { - my $target = formatTarget($wwn); - - my $driver = findTargetDriver($target); - - if ($driver) { - %{$new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{'1'}} = (); - addAllGroupsToTarget(\%config, \%new, $driver, $target); - } else { - immediateExit("Unable to determine target driver information for target '$wwn'. ". - "Please ensure this target driver is loaded."); - } - } - - if (!scalar keys %{$new{'TARGET_DRIVER'}}) { - print "WARNING: No targets set to 'enable' within your configuration file. Please be sure to ". - "save write your configuration with -write_config and review it carefully.\n\n"; - - # Fill in with known targets, all disabled. - my $drivers = $SCST->drivers(); - - foreach my $driver (@{$drivers}) { - my $targets = $SCST->targets($driver); - - foreach my $target (@{$targets}) { - my $enable = ($driver =~ /^qla/) ? 0 : 1; - - %{$new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{$enable}} = (); - - addAllGroupsToTarget(\%config, \%new, $driver, $target); - } - } - } - my $drivers = $SCST->drivers(); + my %added_targets; - # Now handle default groups + # Handle default groups foreach my $group (keys %{$config{'ASSIGNMENT'}}) { next if ($group !~ /^Default/); @@ -3007,11 +2974,6 @@ my $targets = $SCST->targets($driver); foreach my $target (@{$targets}) { - my $enable = ($driver =~ /^qla/) ? 0 : 1; - - $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{$enable} = () - if (!defined($new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target})); - $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'LUN'}->{$lun}->{$device} = {}; } } @@ -3028,11 +2990,6 @@ if ($target eq $group_t) { foreach my $device (@{$config{'ASSIGNMENT'}->{$group}->{'DEVICE'}}) { my($device, $lun) = split(/\,/, $device); - my $enable = ($driver =~ /^qla/) ? 0 : 1; - - $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{$enable} = () - if (!defined($new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target})); - $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'LUN'}->{$lun}->{$device} = {}; } @@ -3049,10 +3006,8 @@ if ($SCST->driverIsVirtualCapable($driver)) { foreach my $device (@{$config{'ASSIGNMENT'}->{$group}->{'DEVICE'}}) { my($device, $lun) = split(/\,/, $device); - my $enable = ($driver =~ /^qla/) ? 0 : 1; - - $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$group_t}->{'enabled'}->{$enable} = (); $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$group_t}->{'LUN'}->{$lun}->{$device} = {}; + $added_targets{$driver}->{$group_t} = TRUE; } } } @@ -3060,15 +3015,57 @@ } } + my $has_enabled = FALSE; + foreach my $wwn (@{$config{'TARGETS'}->{'enable'}->{'HOST'}}) { + my $target = formatTarget($wwn); + my $driver = findTargetDriver($target); + + if ($driver) { + %{$new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{'1'}} = (); + addAllGroupsToTarget(\%config, \%new, $driver, $target); + $has_enabled = TRUE; + } else { + immediateExit("Unable to determine target driver information for target '$wwn'. ". + "Please ensure this target driver is loaded."); + } + } + + if (!$has_enabled) { + print "WARNING: No targets set to 'enable' within your configuration file. Please be sure to ". + "save write your configuration with -write_config and review it carefully.\n\n"; + + # Fill in with known targets, all disabled. + foreach my $driver (@{$drivers}) { + my $targets = $SCST->targets($driver); + + foreach my $target (@{$targets}) { + addAllGroupsToTarget(\%config, \%new, $driver, $target); + } + } + + # As well for any created targets + foreach my $driver (keys %added_targets) { + foreach my $target (keys %{$added_targets{$driver}}) { + addAllGroupsToTarget(\%config, \%new, $driver, $target); + } + } + } + # Fix drivers 'enabled' attributes - foreach my $driver (@{$drivers}) { + foreach my $driver (keys %{$new{'TARGET_DRIVER'}}) { next if ($driver =~ /^qla/); my $attributes = $SCST->driverAttributes($driver); if (defined($$attributes{'enabled'})) { - $new{'TARGET_DRIVER'}->{$driver}->{'enabled'}->{'1'} = (); + $new{'TARGET_DRIVER'}->{$driver}->{'enabled'}->{'1'} = {}; } + + foreach my $target (keys %{$new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}}) { + next if (defined($new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{'enabled'})); + + $new{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'enabled'}->{'1'} = {}; + } } return \%new; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-07-28 15:36:12
|
Revision: 1886 http://scst.svn.sourceforge.net/scst/?rev=1886&view=rev Author: mgandalf Date: 2010-07-28 15:36:06 +0000 (Wed, 28 Jul 2010) Log Message: ----------- - Set driver and handler attributes on commit as well. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-28 14:46:41 UTC (rev 1885) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-28 15:36:06 UTC (rev 1886) @@ -1396,11 +1396,7 @@ foreach my $handler (keys %{$handlers}) { foreach my $device (@{$$handlers{$handler}}) { - if (!defined($$config{'HANDLER'}) || - !defined($$config{'HANDLER'}->{$handler}) || - !defined($$config{'HANDLER'}->{$handler}->{'DEVICE'}) || - !defined($$config{'HANDLER'}->{$handler}->{'DEVICE'}->{$device})) { - + if (!defined($$config{'HANDLER'}->{$handler}->{'DEVICE'}->{$device})) { my $attributes = $SCST->deviceAttributes($device); next if (defined($$attributes{'scsi_device'})); @@ -1421,12 +1417,32 @@ my $devices = $$handlers{$handler}->{'DEVICE'}; foreach my $device (sort keys %{$devices}) { + my %_attributes; + foreach my $item (keys %{$$devices{$device}}) { + next if ($item eq 'CREATE_ATTRIBUTES'); + $_attributes{$item} = $$devices{$device}->{$item}; + } + + my $attributes = configToAttr(\%_attributes); + setDeviceAttributes($device, $attributes, $deletions) + if (scalar keys %{$attributes}); + next if (handlerHasDevice($handler, $device)); my $attributes = configToAttr($$devices{$device}->{'CREATE_ATTRIBUTES'}); openDevice($device, $handler, $attributes); } } + + my %_attributes; + foreach my $item (keys %{$$handlers{$handler}}) { + next if ($item eq 'DEVICE'); + $_attributes{$item} = $$handlers{$handler}->{$item}; + } + + my $attributes = configToAttr(\%_attributes); + setHandlerAttributes($handler, $attributes, $deletions) if (scalar keys %{$attributes}); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-07-29 15:27:30
|
Revision: 1892 http://scst.svn.sourceforge.net/scst/?rev=1892&view=rev Author: mgandalf Date: 2010-07-29 15:27:24 +0000 (Thu, 29 Jul 2010) Log Message: ----------- Big changes. 1. Simplify attribute setting to use a generic setAttributes() function for anything requiring non-dynamic attributes. 2. Reorder function argument to always be the same as their associated SCST::SCST methods. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-29 14:21:16 UTC (rev 1891) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-29 15:27:24 UTC (rev 1892) @@ -560,11 +560,11 @@ $all_good = TRUE; }; defined($listTarget) && do { - $rc = listTargets($listTarget, $driver); + $rc = listTargets($driver, $listTarget); $all_good = TRUE; }; defined($listGroup) && do { - $rc = listGroups($listGroup, $driver, $target); + $rc = listGroups($driver, $target, $listGroup); $all_good = TRUE; }; $listSessions && do { @@ -588,15 +588,15 @@ $all_good = TRUE; }; $listTargetAttr && do { - $rc = listTargetAttributes($listTargetAttr, $driver); + $rc = listTargetAttributes($driver, $listTargetAttr); $all_good = TRUE; }; $listLunAttr && do { - $rc = listLunAttributes($listLunAttr, $driver, $target, $group); + $rc = listLunAttributes($driver, $target, $group, $listLunAttr); $all_good = TRUE; }; $listInitiatorAttr && do { - $rc = listInitiatorAttributes($listInitiatorAttr, $driver, $target, $group); + $rc = listInitiatorAttributes($driver, $target, $group, $listInitiatorAttr); $all_good = TRUE; }; $setScstAttr && do { @@ -616,23 +616,23 @@ last SWITCH; }; $setTargetAttr && do { - $rc = setTargetAttributes($setTargetAttr, $driver, $attributes, FALSE); + $rc = setTargetAttributes($driver, $setTargetAttr, $attributes, FALSE); last SWITCH; }; $setLunAttr && do { - $rc = setLunAttributes($setLunAttr, $driver, $target, $attributes, $group); + $rc = setLunAttributes($driver, $target, $setLunAttr, $attributes, $group); last SWITCH; }; $setInitiatorAttr && do { - $rc = setInitiatorAttributes($setInitiatorAttr, $driver, $target, $group, $attributes); + $rc = setInitiatorAttributes($driver, $target, $group, $setInitiatorAttr, $attributes); last SWITCH; }; $openDev && do { - $rc = openDevice($openDev, $handler, $attributes); + $rc = openDevice($handler, $openDev, $attributes); last SWITCH; }; $closeDev && do { - $rc = closeDevice($closeDev, $handler, $force); + $rc = closeDevice($handler, $closeDev, $force); last SWITCH; }; $resyncDev && do { @@ -640,23 +640,23 @@ last SWITCH; }; $addGroup && do { - $rc = addGroup($addGroup, $driver, $target); + $rc = addGroup($driver, $target, $addGroup); last SWITCH; }; $removeGroup && do { - $rc = removeGroup($removeGroup, $driver, $target, $force); + $rc = removeGroup($driver, $target, $removeGroup, $force); last SWITCH; }; $addInitiator && do { - $rc = addInitiator($addInitiator, $driver, $target, $group); + $rc = addInitiator($driver, $target, $addInitiator, $group); last SWITCH; }; $removeInitiator && do { - $rc = removeInitiator($removeInitiator, $driver, $target, $group); + $rc = removeInitiator($driver, $target, $group, $removeInitiator); last SWITCH; }; $moveInitiator && do { - $rc = moveInitiator($moveInitiator, $driver, $target, $group, $to); + $rc = moveInitiator($driver, $target, $group, $moveInitiator, $to); last SWITCH; }; $clearInitiators && do { @@ -664,15 +664,15 @@ last SWITCH; }; $addLun && do { - $rc = addLun($addLun, $driver, $target, $device, $attributes, $group); + $rc = addLun($driver, $target, $device, $addLun, $attributes, $group); last SWITCH; }; $removeLun && do { - $rc = removeLun($removeLun, $driver, $target, $device, $group); + $rc = removeLun($driver, $target, $device, $removeLun, $group); last SWITCH; }; $replaceLun && do { - $rc = replaceLun($replaceLun, $driver, $target, $group, $device, $attributes); + $rc = replaceLun($driver, $target, $group, $replaceLun, $device, $attributes); last SWITCH; }; $clearLuns && do { @@ -1402,7 +1402,7 @@ next if (defined($$attributes{'scsi_device'})); if ($deletions) { - closeDevice($device, $handler, $deletions); + closeDevice($handler, $device, $deletions); } else { print "-> Device '$device' is not in configuration. Use -force to close it.\n"; } @@ -1424,13 +1424,18 @@ } my $attributes = configToAttr(\%_attributes); + + if (handlerHasDevice($handler, $device)) { + setDeviceAttributes($device, $attributes, $deletions) + if (scalar keys %{$attributes}); + next; + } + + my $create_attrs = configToAttr($$devices{$device}->{'CREATE_ATTRIBUTES'}); + openDevice($handler, $device, $create_attrs); + setDeviceAttributes($device, $attributes, $deletions) if (scalar keys %{$attributes}); - - next if (handlerHasDevice($handler, $device)); - - my $attributes = configToAttr($$devices{$device}->{'CREATE_ATTRIBUTES'}); - openDevice($device, $handler, $attributes); } } @@ -1463,7 +1468,7 @@ if (!defined($$def_group{'LUN'}->{$lun}->{$device})) { if ($deletions) { - removeLun($lun, $driver, $target, $device); + removeLun($driver, $target, $device, $lun); } else { print "-> Device '$device' at LUN '$lun' is not in configuration ". "for driver/target '$driver/$target'. ". @@ -1483,7 +1488,7 @@ if (!defined($$def_group{'LUN'}->{$lun}->{$device})) { if ($deletions) { - removeLun($lun, $driver, $target, $device, $group); + removeLun($driver, $target, $device, $lun, $group); } else { print "-> Device '$device' at LUN '$lun' is not in configuration ". "for driver/target/group '$driver/$target/$group'. ". @@ -1495,7 +1500,7 @@ foreach my $init (@{$inits}) { if (!defined($$def_group{'INITIATOR'}->{$init})) { if ($deletions) { - removeInitiator($init, $driver, $target, $group); + removeInitiator($driver, $target, $group, $init); } else { print "-> Initiator '$init' is not in configuration ". "for driver/target/group '$driver/$target/$group'. ". @@ -1506,7 +1511,7 @@ if (!defined($$config{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'GROUP'}->{$group})) { if ($deletions) { - removeGroup($group, $driver, $target); + removeGroup($driver, $target, $group); } else { print "-> Group '$group' is not in configuration. Use -force to remove.\n"; } @@ -1575,7 +1580,7 @@ my $attributes = configToAttr(\%_attributes); - setTargetAttributes($target, $driver, $attributes, $deletions); + setTargetAttributes($driver, $target, $attributes, $deletions); } } @@ -1586,7 +1591,7 @@ foreach my $group (sort keys %{$groups}) { if (!defined($CURRENT{'assign'}->{$driver}->{$target}->{'GROUP'}->{$group})) { - addGroup($group, $driver, $target); + addGroup($driver, $target, $group); } @@ -1605,7 +1610,7 @@ my $attributes = configToAttr(\%_attributes); - setGroupAttributes($target, $driver, $group, $attributes); + setGroupAttributes($driver, $target, $group, $attributes); } } @@ -1632,7 +1637,7 @@ foreach my $device (sort keys %{$$luns{$lun}}) { my $attributes = configToAttr($$luns{$lun}->{$device}); - addLun($lun, $driver, $target, $device, $attributes, $group); + addLun($driver, $target, $device, $lun, $attributes, $group); } } } @@ -1648,7 +1653,7 @@ foreach my $initiator (sort keys %{$initiators}) { if (!groupHasInitiator($c_inits, $initiator)) { - addInitiator($initiator, $driver, $target, $group); + addInitiator($driver, $target, $group, $initiator); } } } @@ -1664,7 +1669,7 @@ foreach my $group (sort keys %{$$assignments{$driver}->{$target}->{'GROUP'}}) { clearInitiators($driver, $target, $group); clearLuns($driver, $target, $group); - removeGroup($group, $driver, $target, $force); + removeGroup($driver, $target, $group, $force); } clearLuns($driver, $target); @@ -1683,7 +1688,7 @@ foreach my $device (@{$$handlers{$handler}}) { my $attributes = $SCST->deviceAttributes($device); if (!defined($$attributes{'scsi_device'})) { - closeDevice($device, $handler, $force); + closeDevice($handler, $device, $force); } } } @@ -1908,9 +1913,9 @@ } sub listGroups { - my $group = shift; my $driver = shift; my $target = shift; + my $group = shift; if ($group && $driver && $target) { return listGroup($driver, $target, $group); @@ -2061,82 +2066,243 @@ #################################################################### +sub setScstAttribute { + shift; + shift; + shift; + shift; + my $attribute = shift; + my $value = shift; + + print "-> Setting SCST attribute '$attribute' to value '$value': "; + my $rc = $SCST->setScstAttribute($attribute, $value); + print "done.\n"; + + return $rc; +} + sub setScstAttributes { my $attributes = shift; + my $error = "-> WARNING: SCST lacks the settable attribute '%s', ignoring.\n\n"; my $_attributes = $SCST->scstAttributes(); - foreach my $attribute (sort keys %{$attributes}) { - if (defined($$_attributes{$attribute}) && - !$$_attributes{$attribute}->{'static'}) { - my $value = $$attributes{$attribute}; + return setAttributes(undef, undef, undef, undef, $attributes, + $_attributes, $error, \&setScstAttribute); +} - next if ($$_attributes{$attribute}->{'value'} eq $value); +sub setDeviceAttribute { + shift; + shift; + shift; + my $device = shift; + my $attribute = shift; + my $value = shift; - print "-> Setting SCST attribute '$attribute' to '$value': "; + print "-> Setting device attribute '$attribute' to value '$value' for device '$device': "; + my $rc = $SCST->setDeviceAttribute($device, $attribute, $value); + print "done.\n"; - my $rc = $SCST->setScstAttribute($attribute, $value); + return $rc; +} - print "done.\n"; +sub setDeviceAttributes { + my $device = shift; + my $attributes = shift; - immediateExit($SCST->errorString($rc)) if ($rc); - } else { - print "-> WARNING: SCST lacks the settable ". - "attribute '$attribute', ignoring.\n\n"; - } - } + my $error = "-> WARNING: Device '$device' lacks the settable ". + "attribute '%s', ignoring.\n\n"; + my $_attributes = $SCST->deviceAttributes($device); + + return setAttributes(undef, undef, undef, $device, $attributes, + $_attributes, $error, \&setDeviceAttribute); } +sub setHandlerAttribute { + shift; + shift; + my $handler = shift; + my $attribute = shift; + my $value = shift; + + print "-> Setting handler attribute '$attribute' to value '$value' for handler '$handler': "; + my $rc = $SCST->setHandlerAttribute($handler, $attribute, $value); + print "done.\n"; + + return $rc; +} + sub setHandlerAttributes { my $handler = shift; my $attributes = shift; + my $error = "-> WARNING: Handler '$handler' lacks the settable ". + "attribute '%s', ignoring.\n\n"; my $_attributes = $SCST->handlerAttributes($handler); - foreach my $attribute (sort keys %{$attributes}) { - if (defined($$_attributes{$attribute}) && - !$$_attributes{$attribute}->{'static'}) { - my $value = $$attributes{$attribute}; + return setAttributes(undef, undef, $handler, $attributes, + $_attributes, $error, \&setHandlerAttribute); +} - print "-> Setting handler attribute '$attribute' to '$value' for handler '$handler': "; +sub setGroupAttribute { + shift; + my $driver = shift; + my $target = shift; + my $group = shift; + my $attribute = shift; + my $value = shift; - my $rc = $SCST->setHandlerAttribute($handler, $attribute, $value); + print "-> Setting group attribute '$attribute' to value '$value' for group '$group': "; + my $rc = $SCST->setGroupAttribute($driver, $target, $group, $attribute, $value); + print "done.\n"; - print "done.\n"; + return $rc; +} - immediateExit($SCST->errorString($rc)) if ($rc); - } else { - print "-> WARNING: Handler '$handler' lacks the settable ". - "attribute '$attribute', ignoring.\n\n"; - } +sub setGroupAttributes { + my $driver = shift; + my $target = shift; + my $group = shift; + my $attributes = shift; + + my $error = "-> WARNING: Driver/target/group '$driver/$target/$group' lacks the settable ". + "attribute '%s', ignoring.\n\n"; + my $_attributes = $SCST->groupAttributes($driver, $target, $group); + + return setAttributes(undef, $driver, $target, $group, $attributes, + $_attributes, $error, \&setGroupAttribute); +} + +sub setLunAttribute { + my $driver = shift; + my $target = shift; + my $lun = shift; + my $group = shift; + my $attribute = shift; + my $value = shift; + + if ($group) { + print "-> Setting LUN attribute '$attribute' to value '$value' for ". + "driver/target/group/LUN '$driver/$target/$group/$lun': "; + } else { + print "-> Setting LUN attribute '$attribute' to value '$value' for ". + "driver/target/LUN '$driver/$target/$lun': "; } + + my $rc = $SCST->setLunAttribute($driver, $target, $lun, $attribute, $value, $group); + print "done.\n"; + + return $rc; } -sub setDeviceAttributes { - my $device = shift; +sub setLunAttributes { + my $driver = shift; + my $target = shift; + my $lun = shift; my $attributes = shift; + my $group = shift; + my $error; - my $_attributes = $SCST->deviceAttributes($device); + if ($group) { + $error = "-> WARNING: Driver/target/group/LUN '$driver/$target/$group/$lun' ". + "lacks the settable attribute '%s', ignoring.\n\n"; + } else { + $error = "-> WARNING: Driver/target/LUN '$driver/$target/$lun' lacks the settable ". + "attribute '%s', ignoring.\n\n"; + } - foreach my $attribute (sort keys %{$attributes}) { - if (defined($$_attributes{$attribute}) && - !$$_attributes{$attribute}->{'static'}) { - my $value = $$attributes{$attribute}; + my $_attributes = $SCST->lunAttributes($driver, $target, $lun, $group); - next if ($$_attributes{$attribute}->{'value'} eq $value); + return setAttributes($driver, $target, $lun, $group, $attributes, + $_attributes, $error, \&setLunAttribute); +} - print "-> Setting device attribute '$attribute' to value '$value' for device '$device': "; +sub setInitiatorAttribute { + my $driver = shift; + my $target = shift; + my $group = shift; + my $initiator = shift; + my $attribute = shift; + my $value = shift; - my $rc = $SCST->setDeviceAttribute($device, $attribute, $value); + print "-> Setting initiator attribute '$attribute' to value '$value' for ". + "driver/target/group/initiator '$driver/$target/$group/initiator': "; + my $rc = $SCST->setInitiatorAttribute($driver, $target, $group, + $initiator, $attribute, $value); + print "done.\n"; - print "done.\n"; + return $rc; +} - immediateExit($SCST->errorString($rc)) if ($rc); +sub setInitiatorAttributes { + my $driver = shift; + my $target = shift; + my $group = shift; + my $initiator = shift; + my $attributes = shift; + + my $error = "-> WARNING: Driver/target/group/initiator '$driver/$target/$group/$initiator' ". + "lacks the settable attribute '%s', ignoring.\n\n"; + my $_attributes = $SCST->initiatorAttributes($driver, $target, $group, $initiator); + + return setAttributes($driver, $target, $group, $initiator, $attributes, + $_attributes, $error, \&setInitiatorAttribute); +} + +# Sets any non-dynamic attributes +sub setAttributes { + my $level1 = shift; + my $level2 = shift; + my $level3 = shift; + my $level4 = shift; + my $attributes = shift; + my $_attributes = shift; + my $error = shift; + my $callback = shift; + my %toset; + my %existing; + + # build caches for easier matching + foreach my $attribute (keys %{$attributes}) { + if (ref($$attributes{$attribute}) eq 'ARRAY') { + foreach my $value (@{$$attributes{$attribute}}) { + $toset{$attribute}->{$value}++; + } } else { - print "-> WARNING: Device '$device' lacks the settable ". - "attribute '$attribute', ignoring.\n\n"; + $toset{$attribute}->{$$attributes{$attribute}}++; } } + + foreach my $attribute (keys %{$_attributes}) { + next if ($$_attributes{$attribute}->{'static'}); + + if (defined($$_attributes{$attribute}->{'keys'})) { + foreach my $key (keys %{$$_attributes{$attribute}->{'keys'}}) { + my $value = $$_attributes{$attribute}->{'keys'}->{$key}->{'value'}; + $existing{$attribute}->{$value}++ + if (defined($value) && ($value ne '')); + } + } else { + my $value = $$_attributes{$attribute}->{'value'}; + $existing{$attribute}->{$value} = FALSE + if (defined($value) && ($value ne '')); + } + } + + foreach my $attribute (keys %toset) { + foreach my $value (keys %{$toset{$attribute}}) { + if (!defined($existing{$attribute})) { + print sprintf($error, $attribute); + next; + } + + # already set, move on + next if (defined($existing{$attribute}->{$value})); + + # Set the existing attribute + $callback->($level1, $level2, $level3, $level4, $attribute, $value); + } + } } sub setDriverAttribute { @@ -2195,6 +2361,10 @@ $driverCap && !$SCST->checkDriverDynamicAttributes($driver, $attribute)) { addDriverDynamicAttribute($driver, $attribute, $value); next; + } elsif (!defined($existing{$attribute})) { + print "-> WARNING: Driver '$driver' lacks the settable attribute ". + "'$attribute', ignoring.\n\n"; + next; } # already set, move on @@ -2257,8 +2427,8 @@ } sub setTargetAttribute { + my $driver = shift; my $target = shift; - my $driver = shift; my $attribute = shift; my $value = shift; @@ -2271,8 +2441,8 @@ } sub setTargetAttributes { + my $driver = shift; my $target = shift; - my $driver = shift; my $attributes = shift; my $deletions = shift; my %toset; @@ -2316,6 +2486,10 @@ $driverCap && !$SCST->checkTargetDynamicAttributes($driver, $attribute)) { addTargetDynamicAttribute($driver, $target, $attribute, $value); next; + } elsif (!defined($existing{$attribute})) { + print "-> WARNING: Driver/target '$driver/$target' lacks the settable attribute ". + "'$attribute', ignoring.\n\n"; + next; } # already set, move on @@ -2328,7 +2502,7 @@ if ($driverCap && !$SCST->checkTargetDynamicAttributes($driver, $attribute)) { addTargetDynamicAttribute($driver, $target, $attribute, $value); } else { - setTargetAttribute($target, $driver, $attribute, $value); + setTargetAttribute($driver, $target, $attribute, $value); } $existing{$attribute}->{$value} = TRUE; @@ -2380,104 +2554,11 @@ immediateExit($SCST->errorString($rc)) if ($rc); } -sub setGroupAttributes { - my $target = shift; - my $driver = shift; - my $group = shift; - my $attributes = shift; - - my $_attributes = $SCST->groupAttributes($driver, $target, $group); - - foreach my $attribute (sort keys %{$attributes}) { - if (defined($$_attributes{$attribute}) && - !$$_attributes{$attribute}->{'static'}) { - my $value = $$attributes{$attribute}; - - next if ($$_attributes{$attribute}->{'value'} eq $value); - - print "-> Setting group attribute '$attribute' to value '$value' for ". - "driver/target/group '$driver/$target/$group': "; - - my $rc = $SCST->setGroupAttribute($driver, $target, $group, $attribute, $value); - - print "done.\n"; - - immediateExit($SCST->errorString($rc)) if ($rc); - } else { - print "-> WARNING: Driver/target/group '$driver/$target/$group' lacks the settable ". - "attribute '$attribute', ignoring.\n\n"; - } - } -} - -sub setLunAttributes { - my $lun = shift; - my $driver = shift; - my $target = shift; - my $attributes = shift; - my $group = shift; - - my $_attributes = $SCST->lunAttributes($driver, $target, $lun, $group); - - foreach my $attribute (sort keys %{$attributes}) { - if (defined($$_attributes{$attribute}) && - !$$_attributes{$attribute}->{'static'}) { - my $value = $$attributes{$attribute}; - - next if ($$_attributes{$attribute}->{'value'} eq $value); - - print "-> Setting LUN attribute '$attribute' to value '$value' for ". - "driver/target/group/lun '$driver/$target/$group/$lun': "; - - my $rc = $SCST->setLunAttribute($driver, $target, $lun, $attribute, $value, $group); - - print "done.\n"; - - immediateExit($SCST->errorString($rc)) if ($rc); - } else { - print "-> WARNING: Driver/target/group/lun '$driver/$target/$group/$lun' lacks the settable ". - "attribute '$attribute', ignoring.\n\n"; - } - } -} - -sub setInitiatorAttributes { - my $initiator = shift; - my $driver = shift; - my $target = shift; - my $group = shift; - my $attributes = shift; - - my $_attributes = $SCST->initiatorAttributes($driver, $target, $group, $initiator); - - foreach my $attribute (sort keys %{$attributes}) { - if (defined($$_attributes{$attribute}) && - !$$_attributes{$attribute}->{'static'}) { - my $value = $$attributes{$attribute}; - - next if ($$_attributes{$attribute}->{'value'} eq $value); - - print "-> Setting initiator attribute '$attribute' to value '$value' for ". - "driver/target/group/initiator '$driver/$target/$group/$initiator': "; - - my $rc = $SCST->setInitiatorAttribute($driver, $target, $group, $initiator, - $attribute, $value); - - print "done.\n"; - - immediateExit($SCST->errorString($rc)) if ($rc); - } else { - print "-> WARNING: Driver/target/group/initiator '$driver/$target/$group/$initiator' ". - "lacks the settable attribute '$attribute', ignoring.\n\n"; - } - } -} - #################################################################### sub openDevice { + my $handler = shift; my $device = shift; - my $handler = shift; my $attributes = shift; print "-> Opening device '$device' using handler '$handler': "; @@ -2490,8 +2571,8 @@ } sub closeDevice { + my $handler = shift; my $device = shift; - my $handler = shift; my $force = shift; my $attributes = $SCST->deviceAttributes($device); @@ -2527,9 +2608,9 @@ #################################################################### sub addGroup { - my $group = shift; my $driver = shift; my $target = shift; + my $group = shift; print "-> Adding new group '$group' to driver/target '$driver/$target': "; @@ -2541,9 +2622,9 @@ } sub removeGroup { - my $group = shift; my $driver = shift; my $target = shift; + my $group = shift; my $force = shift; if (!$force) { @@ -2568,10 +2649,10 @@ #################################################################### sub addInitiator { - my $initiator = shift; my $driver = shift; my $target = shift; my $group = shift; + my $initiator = shift; print "-> Adding new initiator '$initiator' to driver/target/group ". "'$driver/$target/$group': "; @@ -2584,10 +2665,10 @@ } sub removeInitiator { - my $initiator = shift; my $driver = shift; my $target = shift; my $group = shift; + my $initiator = shift; print "-> Removing initiator '$initiator' from driver/target/group ". "'$driver/$target/$group': "; @@ -2600,10 +2681,10 @@ } sub moveInitiator { - my $initiator = shift; my $driver = shift; my $target = shift; my $group = shift; + my $initiator = shift; my $to = shift; print "-> Moving initiator '$initiator' from group '$group' to group '$to': "; @@ -2632,10 +2713,10 @@ #################################################################### sub addLun { - my $lun = shift; my $driver = shift; my $target = shift; my $device = shift; + my $lun = shift; my $attributes = shift; my $group = shift; @@ -2655,10 +2736,10 @@ } sub removeLun { - my $lun = shift; my $driver = shift; my $target = shift; my $device = shift; + my $lun = shift; my $group = shift; if ($group) { @@ -2677,10 +2758,10 @@ } sub replaceLun { - my $lun = shift; my $driver = shift; my $target = shift; my $group = shift; + my $lun = shift; my $device = shift; my $attributes = shift; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-07-29 16:44:39
|
Revision: 1893 http://scst.svn.sourceforge.net/scst/?rev=1893&view=rev Author: mgandalf Date: 2010-07-29 16:44:32 +0000 (Thu, 29 Jul 2010) Log Message: ----------- - Be less verbose with the 'enabled' attribute. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-29 15:27:24 UTC (rev 1892) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-07-29 16:44:32 UTC (rev 1893) @@ -2310,7 +2310,13 @@ my $attribute = shift; my $value = shift; - print "-> Setting driver attribute '$attribute' to value '$value' for driver '$driver': "; + if ($attribute eq 'enabled') { + my $onoff = $value ? 'Enabling' : 'Disabling'; + print "-> $onoff driver '$driver': "; + } else { + print "-> Setting driver attribute '$attribute' to value '$value' for driver '$driver': "; + } + my $rc = $SCST->setDriverAttribute($driver, $attribute, $value); print "done.\n"; @@ -2432,8 +2438,14 @@ my $attribute = shift; my $value = shift; - print "-> Setting target attribute '$attribute' to value '$value' for ". - "driver/target '$driver/$target': "; + if ($attribute eq 'enabled') { + my $onoff = $value ? 'Enabling' : 'Disabling'; + print "-> $onoff driver/target '$driver/$target': "; + } else { + print "-> Setting target attribute '$attribute' to value '$value' for ". + "driver/target '$driver/$target': "; + } + my $rc = $SCST->setTargetAttribute($driver, $target, $attribute, $value); print "done.\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-03 13:44:54
|
Revision: 1911 http://scst.svn.sourceforge.net/scst/?rev=1911&view=rev Author: mgandalf Date: 2010-08-03 13:44:49 +0000 (Tue, 03 Aug 2010) Log Message: ----------- - Enhance checkConfiguration() a bit. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 13:41:54 UTC (rev 1910) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 13:44:49 UTC (rev 1911) @@ -1243,6 +1243,8 @@ my $file = shift; my $no_drivers; my $no_handlers; + my $warnings = 0; + my $errors = 0; print "-> Checking configuration file '$file' for errors.\n"; @@ -1254,6 +1256,7 @@ print "\t-> WARNING: No TARGET_DRIVER section defined. ". "No target drivers will be configured.\n\n"; $no_drivers = TRUE; + $warnings++; } if (!defined($$CONFIG{'HANDLER'}) || @@ -1261,10 +1264,12 @@ print "\t-> WARNING: No HANDLER section defined. ". "Only physical media will be configured for targets.\n\n"; $no_handlers = TRUE; + $warnings++; } if ($no_drivers && $no_handlers) { - immediateExit("No target drivers or handlers defined, aborting!"); + print "FATAL: No target drivers or handlers defined, aborting!\n"; + $errors++; } if (!$no_drivers) { @@ -1273,12 +1278,14 @@ if (!defined($CURRENT{'assign'}->{$driver})) { print "\t-> WARNING: Target driver '$driver' is not loaded or available.\n\n"; + $warnings++; next; } if (!defined($$CONFIG{'TARGET_DRIVER'}->{$driver}->{'TARGET'}) || !(scalar keys %{$$CONFIG{'TARGET_DRIVER'}->{$driver}->{'TARGET'}})) { print "\t-> WARNING: Driver '$driver' has no configured targets.\n\n"; + $warnings++; $no_targets = TRUE; } @@ -1288,7 +1295,7 @@ if (!$SCST->driverIsVirtualCapable($driver)) { print "\t-> FATAL: Target '$target' for driver '$driver' ". "does not exist.\n"; - return TRUE; + $errors++; } } } @@ -1299,6 +1306,13 @@ my %cdevices; foreach my $handler (sort keys %{$$CONFIG{'HANDLER'}}) { + if (!$SCST->handlerExists($handler)) { + print "\t-> WARNING: No such handler '$handler' available, ignoring.\n"; + delete $$CONFIG{'HANDLER'}->{$handler}; + $warnings++; + next; + } + foreach my $device (sort keys %{$$CONFIG{'HANDLER'}->{$handler}->{'DEVICE'}}) { # Since some people may get confused with how to open # a vcdrom, we'll support having '/dev/cdrom' instead of just 'cdrom'. @@ -1310,15 +1324,16 @@ "not contain the full /dev path, please change to '$_device'.\n\n"; delete $$CONFIG{'HANDLER'}->{$handler}->{'DEVICE'}->{$device}; $$CONFIG{'HANDLER'}->{$handler}->{'DEVICE'}->{$_device} = $tree; + $warnings++; } elsif ($device =~ /\//) { print "\t-> FATAL: Device '$device' configured for handler '$handler' may not ". "contain character '/'.\n"; - return TRUE; + $errors++; } $cdevices{$device}++; } - } + } foreach my $driver (keys %{$$CONFIG{'TARGET_DRIVER'}}) { foreach my $target (keys %{$$CONFIG{'TARGET_DRIVER'}->{$driver}->{'TARGET'}}) { @@ -1332,6 +1347,7 @@ "'$driver/$target' at LUN $lun is not defined within configuration, ". "removing it.\n\n"; delete $$tgt{'LUN'}->{$lun}; + $warnings++; } } } @@ -1347,6 +1363,7 @@ "driver/target '$driver/$target' at LUN $lun is not ". "defined within configuration, removing it.\n\n"; delete $$tgt{'GROUP'}->{$group}->{'LUN'}->{$lun}; + $warnings++; } } } @@ -1356,6 +1373,13 @@ } } + if ($errors) { + print "\t-> Done, $errors errors found.\n"; + return TRUE; + } + + print "\t-> Done, $warnings warnings found.\n"; + return FALSE; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-03 14:59:43
|
Revision: 1912 http://scst.svn.sourceforge.net/scst/?rev=1912&view=rev Author: mgandalf Date: 2010-08-03 14:59:37 +0000 (Tue, 03 Aug 2010) Log Message: ----------- - Fix list_handler and build-out list_device. - Small fix to checkConfiguration(). Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 13:44:49 UTC (rev 1911) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 14:59:37 UTC (rev 1912) @@ -552,7 +552,7 @@ $all_good = TRUE; }; defined($listDevice) && do { - $rc = listDevices($listDevice); + $rc = listDevices($listDevice, $nonkey); $all_good = TRUE; }; defined($listDriver) && do { @@ -1378,7 +1378,7 @@ return TRUE; } - print "\t-> Done, $warnings warnings found.\n"; + print "\t-> Done, $warnings warnings found.\n\n"; return FALSE; } @@ -1760,46 +1760,136 @@ sub listHandler { my $handler = shift; + my %toprint; - my $devices = $SCST->devicesByHandler($handler); + my $got_handler = defined($handler); + my $handlers = $SCST->handlers(); - if ($#{$devices} > -1) { - my $l_device; - foreach my $device (@{$devices}) { - $l_device = length($device) if ($l_device < length($device)); + my $l_device; + my $l_handler; + + foreach my $_handler (@{$handlers}) { + $handler = $_handler if (!$got_handler); + + if ($handler eq $_handler) { + $toprint{$handler}++; + + $l_handler = length($handler) if ($l_handler < length($handler)); + + my $devices = $SCST->devicesByHandler($handler); + + if ($#{$devices} == -1) { + push @{$devices}, '-'; + } + + foreach my $device (@{$devices}) { + $l_device = length($device) if ($l_device < length($device)); + } } + } - printf("\t%-*s %-*s\n", length($handler), 'Handler', $l_device, 'Device'); + if (scalar keys %toprint) { + printf("\t%-*s %-*s\n", $l_handler, 'Handler', $l_device, 'Device'); print "\t"; - for (my $x = 0; $x < (length($handler) + $l_device + 2); $x++) { + for (my $x = 0; $x < ($l_handler + $l_device + 5); $x++) { print "-"; }; print "\n"; - my $first = TRUE; - foreach my $device (@{$devices}) { - if ($first) { - printf("\t%-*s %-*s\n", length($handler), $handler, $l_device, $device); - $first = FALSE; - } else { - printf("\t%-*s %-*s\n", length($handler), '', $l_device, $device); + foreach my $handler (keys %toprint) { + my $devices = $SCST->devicesByHandler($handler); + my $first = TRUE; + + if ($#{$devices} == -1) { + push @{$devices}, '-'; } + + foreach my $device (@{$devices}) { + if ($first) { + printf("\t%-*s %-*s\n", $l_handler, $handler, $l_device, $device); + $first = FALSE; + } else { + printf("\t%-*s %-*s\n", $l_handler, '', $l_device, $device); + } + } } } else { - print "\t(handler '$handler' has no assigned devices)\n"; + print "No such handler '$handler' found.\n"; } } sub listDevices { my $device = shift; + my $nonkey = shift; - listDevice($device) if ($device); - + return listDevice($device, $nonkey) if ($device); + return listHandler(); } sub listDevice { my $device = shift; + my $nonkey = shift; + my $l_attr; + my $l_value; + my $attributes = $SCST->deviceAttributes($device); + + print "No such device '$device' exists.\n" + if (!scalar(keys %{$attributes})); + + foreach my $attribute (keys %{$attributes}) { + if (defined($$attributes{$attribute}->{'keys'})) { + $l_attr = length($attribute) if ($l_attr < length($attribute)); + + foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) { + my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'}; + $l_value = length($value) if ($l_value < length($value)); + } + } elsif ($nonkey) { + $l_attr = length($attribute) if ($l_attr < length($attribute)); + my $value = $$attributes{$attribute}->{'value'}; + $l_value = length($value) if ($l_value < length($value)); + } + } + + printf("\t%-*s %-*s %-*s %-*s\n", $l_attr, 'Attribute', $l_value, + 'Value', 9, 'Writable', 3, 'KEY'); + print "\t"; + for (my $x = 0; $x < ($l_attr + $l_value + 27); $x++) { + print "-"; + }; + print "\n"; + + foreach my $attribute (keys %{$attributes}) { + my $first = TRUE; + + if (defined($$attributes{$attribute}->{'keys'})) { + foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) { + my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'}; + my $static = ($$attributes{$attribute}->{'static'}) ? 'Yes' : 'No'; + if ($first) { + printf("\t%-*s %-*s %-*s %-*s\n", + $l_attr, $attribute, $l_value, $value, 9, $static, 3, 'Yes'); + $first = FALSE; + } else { + printf("\t%-*s %-*s %-*s %-*s\n", + $l_attr, '', $l_value, $value, 9, $static, 3, 'Yes'); + } + } + } elsif ($nonkey) { + my $value = $$attributes{$attribute}->{'value'}; + next if (ref($value) eq 'HASH'); + $value = 'N/A' if (!defined($value)); + my $static = ($$attributes{$attribute}->{'static'}) ? 'Yes' : 'No'; + if ($first) { + printf("\t%-*s %-*s %-*s %-*s\n", + $l_attr, $attribute, $l_value, $value, 9, $static, 3, 'No'); + } else { + printf("\t%-*s %-*s %-*s %-*s\n", + $l_attr, '', $l_value, $value, 9, $static, 3, 'No'); + } + } + } } sub listDrivers { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-03 15:03:44
|
Revision: 1913 http://scst.svn.sourceforge.net/scst/?rev=1913&view=rev Author: mgandalf Date: 2010-08-03 15:03:37 +0000 (Tue, 03 Aug 2010) Log Message: ----------- - Fix list_driver. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 14:59:37 UTC (rev 1912) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 15:03:37 UTC (rev 1913) @@ -1919,41 +1919,51 @@ sub listTargets { my $target = shift; my $driver = shift; + my %toprint; return listGroups(undef, $driver, $target) if ($target && $driver); + my $got_driver = defined($driver); + my $drivers = $SCST->drivers(); my $l_driver; my $l_target; - foreach my $driver (@{$drivers}) { - $l_driver = length($driver) if ($l_driver < length($driver)); + foreach my $_driver (@{$drivers}) { + $driver = $_driver if (!$got_driver); - my $targets = $SCST->targets($driver); + if ($driver eq $_driver) { + $toprint{$driver}++; + $l_driver = length($driver) if ($l_driver < length($driver)); - foreach my $target (@{$targets}) { - $l_target = length($target) if ($l_target < length($target)); + my $targets = $SCST->targets($driver); + + foreach my $target (@{$targets}) { + $l_target = length($target) if ($l_target < length($target)); + } } } - printf("\t%-*s %-*s\n", $l_driver, 'Driver', $l_target, 'Target'); - print "\t"; - for (my $x = 0; $x < ($l_driver + $l_target + 1); $x++) { - print "-"; - } - print "\n"; + if (scalar(keys %toprint)) { + printf("\t%-*s %-*s\n", $l_driver, 'Driver', $l_target, 'Target'); + print "\t"; + for (my $x = 0; $x < ($l_driver + $l_target + 1); $x++) { + print "-"; + } + print "\n"; - my %p; + my %p; - foreach my $driver (@{$drivers}) { - my $targets = $SCST->targets($driver); + foreach my $driver (keys %toprint) { + my $targets = $SCST->targets($driver); - foreach my $target (@{$targets}) { - if (!defined($p{$driver})) { - printf("\t%-*s %-*s\n", $l_driver, $driver, $l_target, $target); - $p{$driver}++; - } else { - printf("\t%-*s %-*s\n", $l_driver, '', $l_target, $target); + foreach my $target (@{$targets}) { + if (!defined($p{$driver})) { + printf("\t%-*s %-*s\n", $l_driver, $driver, $l_target, $target); + $p{$driver}++; + } else { + printf("\t%-*s %-*s\n", $l_driver, '', $l_target, $target); + } } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-03 15:08:21
|
Revision: 1914 http://scst.svn.sourceforge.net/scst/?rev=1914&view=rev Author: mgandalf Date: 2010-08-03 15:08:15 +0000 (Tue, 03 Aug 2010) Log Message: ----------- - Fix list_target. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 15:03:37 UTC (rev 1913) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 15:08:15 UTC (rev 1914) @@ -1895,7 +1895,7 @@ sub listDrivers { my $driver = shift; - return listTargets(undef, $driver) if ($driver); + return listTargets($driver, undef) if ($driver); my $drivers = $SCST->drivers(); @@ -1917,8 +1917,8 @@ } sub listTargets { + my $driver = shift; my $target = shift; - my $driver = shift; my %toprint; return listGroups(undef, $driver, $target) if ($target && $driver); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-03 16:15:56
|
Revision: 1918 http://scst.svn.sourceforge.net/scst/?rev=1918&view=rev Author: mgandalf Date: 2010-08-03 16:15:50 +0000 (Tue, 03 Aug 2010) Log Message: ----------- - Fix list_group. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 15:38:57 UTC (rev 1917) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 16:15:50 UTC (rev 1918) @@ -1921,7 +1921,7 @@ my $target = shift; my %toprint; - return listGroups(undef, $driver, $target) if ($target && $driver); + return listGroups($driver, $target, undef) if ($target && $driver); my $got_driver = defined($driver); @@ -1929,11 +1929,13 @@ my $l_driver; my $l_target; + foreach my $_driver (@{$drivers}) { $driver = $_driver if (!$got_driver); if ($driver eq $_driver) { $toprint{$driver}++; + $l_driver = length($driver) if ($l_driver < length($driver)); my $targets = $SCST->targets($driver); @@ -2045,20 +2047,36 @@ return listGroup($driver, $target, $group); } + my $got_group = $group; + my $got_target = $target; + my $got_driver = $driver; + my $drivers = $SCST->drivers(); - foreach my $driver (@{$drivers}) { - my $targets = $SCST->targets($driver); - foreach my $target (@{$targets}) { - my $groups = $SCST->groups($driver, $target); - foreach my $group (@{$groups}) { - print "Driver: $driver\n"; - print "Target: $target\n"; - print "Group : $group\n\n"; + foreach my $_driver (@{$drivers}) { + $driver = $_driver if (!$got_driver); - listGroup($driver, $target, $group); + if ($driver eq $_driver) { + my $targets = $SCST->targets($driver); + foreach my $_target (@{$targets}) { + $target = $_target if (!$got_target); - print "\n\n"; + if ($target eq $_target) { + my $groups = $SCST->groups($driver, $target); + foreach my $_group (@{$groups}) { + $group = $_group if (!$got_group); + + if ($group eq $_group) { + print "Driver: $driver\n"; + print "Target: $target\n"; + print "Group : $group\n\n"; + + listGroup($driver, $target, $group); + + print "\n\n"; + } + } + } } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-03 16:38:55
|
Revision: 1919 http://scst.svn.sourceforge.net/scst/?rev=1919&view=rev Author: mgandalf Date: 2010-08-03 16:38:49 +0000 (Tue, 03 Aug 2010) Log Message: ----------- - Small fix to list_group. - Fix -list-scst-attr. - Fix -list_dev_attr. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 16:15:50 UTC (rev 1918) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 16:38:49 UTC (rev 1919) @@ -572,31 +572,31 @@ $all_good = TRUE; }; $listScstAttr && do { - $rc = listScstAttr(); + $rc = listScstAttributes($nonkey); $all_good = TRUE; }; $listHandlerAttr && do { - $rc = listHandlerAttributes($listHandlerAttr); + $rc = listHandlerAttributes($listHandlerAttr, $nonkey); $all_good = TRUE; }; $listDeviceAttr && do { - $rc = listDeviceAttributes($listDeviceAttr); + $rc = listDevice($listDeviceAttr, $nonkey); $all_good = TRUE; }; $listDriverAttr && do { - $rc = listDriverAttributes($listHandlerAttr); + $rc = listDriverAttributes($listHandlerAttr, $nonkey); $all_good = TRUE; }; $listTargetAttr && do { - $rc = listTargetAttributes($driver, $listTargetAttr); + $rc = listTargetAttributes($driver, $listTargetAttr, $nonkey); $all_good = TRUE; }; $listLunAttr && do { - $rc = listLunAttributes($driver, $target, $group, $listLunAttr); + $rc = listLunAttributes($driver, $target, $group, $listLunAttr, $nonkey); $all_good = TRUE; }; $listInitiatorAttr && do { - $rc = listInitiatorAttributes($driver, $target, $group, $listInitiatorAttr); + $rc = listInitiatorAttributes($driver, $target, $group, $listInitiatorAttr, $nonkey); $all_good = TRUE; }; $setScstAttr && do { @@ -1829,67 +1829,15 @@ sub listDevice { my $device = shift; my $nonkey = shift; - my $l_attr; - my $l_value; my $attributes = $SCST->deviceAttributes($device); - print "No such device '$device' exists.\n" - if (!scalar(keys %{$attributes})); - - foreach my $attribute (keys %{$attributes}) { - if (defined($$attributes{$attribute}->{'keys'})) { - $l_attr = length($attribute) if ($l_attr < length($attribute)); - - foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) { - my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'}; - $l_value = length($value) if ($l_value < length($value)); - } - } elsif ($nonkey) { - $l_attr = length($attribute) if ($l_attr < length($attribute)); - my $value = $$attributes{$attribute}->{'value'}; - $l_value = length($value) if ($l_value < length($value)); - } + if (!scalar(keys %{$attributes})) { + print "No such device '$device' exists.\n"; + return; } - printf("\t%-*s %-*s %-*s %-*s\n", $l_attr, 'Attribute', $l_value, - 'Value', 9, 'Writable', 3, 'KEY'); - print "\t"; - for (my $x = 0; $x < ($l_attr + $l_value + 27); $x++) { - print "-"; - }; - print "\n"; - - foreach my $attribute (keys %{$attributes}) { - my $first = TRUE; - - if (defined($$attributes{$attribute}->{'keys'})) { - foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) { - my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'}; - my $static = ($$attributes{$attribute}->{'static'}) ? 'Yes' : 'No'; - if ($first) { - printf("\t%-*s %-*s %-*s %-*s\n", - $l_attr, $attribute, $l_value, $value, 9, $static, 3, 'Yes'); - $first = FALSE; - } else { - printf("\t%-*s %-*s %-*s %-*s\n", - $l_attr, '', $l_value, $value, 9, $static, 3, 'Yes'); - } - } - } elsif ($nonkey) { - my $value = $$attributes{$attribute}->{'value'}; - next if (ref($value) eq 'HASH'); - $value = 'N/A' if (!defined($value)); - my $static = ($$attributes{$attribute}->{'static'}) ? 'Yes' : 'No'; - if ($first) { - printf("\t%-*s %-*s %-*s %-*s\n", - $l_attr, $attribute, $l_value, $value, 9, $static, 3, 'No'); - } else { - printf("\t%-*s %-*s %-*s %-*s\n", - $l_attr, '', $l_value, $value, 9, $static, 3, 'No'); - } - } - } + return listAttributes($attributes, $nonkey); } sub listDrivers { @@ -1968,6 +1916,8 @@ } } } + } else { + print "No such driver '$driver' exists.\n"; } } @@ -2042,6 +1992,7 @@ my $driver = shift; my $target = shift; my $group = shift; + my $found = FALSE; if ($group && $driver && $target) { return listGroup($driver, $target, $group); @@ -2067,6 +2018,7 @@ $group = $_group if (!$got_group); if ($group eq $_group) { + $found++; print "Driver: $driver\n"; print "Target: $target\n"; print "Group : $group\n\n"; @@ -2080,6 +2032,16 @@ } } } + + if (!$found) { + if ($got_driver && $got_target) { + print "Driver/target '$driver/$target' not found\n"; + } elsif (!$got_target) { + print "Driver '$driver' not found.\n"; + } else { + print "Target '$target' not found.\n"; + } + } } sub listExported { @@ -2133,52 +2095,97 @@ } } -sub listScstAttributes { -} +sub listAttributes { + my $attributes = shift; + my $nonkey = shift; + my $l_attr = 9; + my $l_value = 5; -sub listHandlerAttributes { - my $handler = shift; + foreach my $attribute (keys %{$attributes}) { + if (defined($$attributes{$attribute}->{'keys'})) { + $l_attr = length($attribute) if ($l_attr < length($attribute)); -} + foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) { + my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'}; + $l_value = length($value) if ($l_value < length($value)); + } + } elsif ($nonkey) { + $l_attr = length($attribute) if ($l_attr < length($attribute)); + my $value = $$attributes{$attribute}->{'value'}; + $l_value = length($value) if ($l_value < length($value)); + } + } -sub listDeviceAttributes { - my $device = shift; - my $l_attr; - my $l_val; + printf("\t%-*s %-*s %-*s %-*s\n", $l_attr, 'Attribute', $l_value, + 'Value', 9, 'Writable', 3, 'KEY'); + print "\t"; + for (my $x = 0; $x < ($l_attr + $l_value + 27); $x++) { + print "-"; + }; + print "\n"; - my $attributes = $SCST->deviceAttributes($device); - immediateExit($SCST->errorString()); + my $found = FALSE; - foreach my $attribute (sort keys %{$attributes}) { - my $value = $$attributes{$attribute}->{'value'}; + foreach my $attribute (keys %{$attributes}) { + my $first = TRUE; - next if (ref($value)); + if (defined($$attributes{$attribute}->{'keys'})) { + foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) { + my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'}; + my $static = ($$attributes{$attribute}->{'static'}) ? 'No' : 'Yes'; + $value = '<not set>' if ($value eq ''); + if ($first) { + printf("\t%-*s %-*s %-*s %-*s\n", + $l_attr, $attribute, $l_value, $value, 9, $static, 3, 'Yes'); + $first = FALSE; + } else { + printf("\t%-*s %-*s %-*s %-*s\n", + $l_attr, '', $l_value, $value, 9, $static, 3, 'Yes'); + } - $l_attr = length($attribute) if (length($attribute) > $l_attr); - $l_val = length($value) if (length($value) > $l_val); + $found++; + } + } elsif ($nonkey) { + my $value = $$attributes{$attribute}->{'value'}; + next if (ref($value) eq 'HASH'); + $value = 'N/A' if (!defined($value)); + $value = '<not set>' if ($value eq ''); + my $static = ($$attributes{$attribute}->{'static'}) ? 'No' : 'Yes'; + if ($first) { + printf("\t%-*s %-*s %-*s %-*s\n", + $l_attr, $attribute, $l_value, $value, 9, $static, 3, 'No'); + } else { + printf("\t%-*s %-*s %-*s %-*s\n", + $l_attr, '', $l_value, $value, 9, $static, 3, 'No'); + } + + $found++; + } } - print "Attributes for device '$device':\n\n"; - - printf("\t%-*s %-*s %-5s\n", $l_attr, 'Attribute', $l_val, 'Value', 'Static'); - print "\t"; - for (my $x = 0; $x < ($l_attr + $l_val + 8); $x++) { - print "-"; + if (!$found) { + print "\t(none)\n"; } - print "\n"; +} - foreach my $attribute (sort keys %{$attributes}) { - my $value = $$attributes{$attribute}->{'value'}; - my $static = $$attributes{$attribute}->{'static'}; +sub listScstAttributes { + my $nonkey = shift; - next if (ref($value)); - $value = '-' if (!defined($value)); - $static = ($static ? 'Yes' : 'No'); + my $attributes = $SCST->scstAttributes(); - printf("\t%-*s %-*s %-5s\n", $l_attr, $attribute, $l_val, $value, $static); + if (!scalar(keys %{$attributes})) { + print "FATAL: Unable to get a list of SCST attributes! Please make sure SCST is loaded.\n"; + return; } + + return listAttributes($attributes, $nonkey); } +sub listHandlerAttributes { + my $handler = shift; + +} + sub listDriverAttributes { my $driver = shift; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-03 18:50:42
|
Revision: 1925 http://scst.svn.sourceforge.net/scst/?rev=1925&view=rev Author: mgandalf Date: 2010-08-03 18:50:36 +0000 (Tue, 03 Aug 2010) Log Message: ----------- - Better list trace levels. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 18:46:37 UTC (rev 1924) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 18:50:36 UTC (rev 1925) @@ -2203,10 +2203,18 @@ if ($nonkey && defined($$attributes{'trace_level'})) { my $found = FALSE; - print "\n\tPossible trace levels (use trace_level=\"add <level>\", none, all or default to set):\n"; + print "\n\tPossible trace levels:\n". + "\t (use trace_level=\"add <level>\", none, all or default to set):\n"; + my $count = 0; foreach my $entry (@{$$attributes{'trace_level'}->{'set'}}) { - print "\t\t$entry\n"; + print "\t\t" if (!$count); + print "$entry, "; + $count++; + if ($count == 5) { + print "\n"; + $count = 0; + } } print "\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-03 20:24:54
|
Revision: 1927 http://scst.svn.sourceforge.net/scst/?rev=1927&view=rev Author: mgandalf Date: 2010-08-03 20:24:48 +0000 (Tue, 03 Aug 2010) Log Message: ----------- - Add a couple more options to the help screen which will be implemented in the coming days. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 19:19:39 UTC (rev 1926) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-03 20:24:48 UTC (rev 1927) @@ -91,6 +91,12 @@ -close_dev <device> : Closes a device belonging to handler <handler>. -handler <handler> +Target Operations + -add_target <target> : Add a dynamic target to a capable driver. + -driver <driver> + -remove_target <target> : Remove a dynamic target from a driver. + -driver <driver> + Group Operations -add_group <group> : Add a group to a given driver & target. -driver <driver> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-18 15:28:24
|
Revision: 1958 http://scst.svn.sourceforge.net/scst/?rev=1958&view=rev Author: mgandalf Date: 2010-08-18 15:28:18 +0000 (Wed, 18 Aug 2010) Log Message: ----------- - Minor fix for setting attributes which aren't readable. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-18 15:02:33 UTC (rev 1957) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-18 15:28:18 UTC (rev 1958) @@ -3709,13 +3709,11 @@ if (defined($$attributes{$attribute}->{'keys'})) { foreach my $key (keys %{$$attributes{$attribute}->{'keys'}}) { my $value = $$attributes{$attribute}->{'keys'}->{$key}->{'value'}; - $cache{$attribute}->{$value} = FALSE - if (defined($value) && ($value ne '')); + $cache{$attribute}->{$value} = FALSE; } } else { my $value = $$attributes{$attribute}->{'value'}; - $cache{$attribute}->{$value} = FALSE - if (defined($value) && ($value ne '')); + $cache{$attribute}->{$value} = FALSE; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-20 14:59:44
|
Revision: 1960 http://scst.svn.sourceforge.net/scst/?rev=1960&view=rev Author: mgandalf Date: 2010-08-20 14:59:38 +0000 (Fri, 20 Aug 2010) Log Message: ----------- - Added in add_target & rem_target options. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-19 12:39:26 UTC (rev 1959) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-20 14:59:38 UTC (rev 1960) @@ -94,7 +94,7 @@ Target Operations -add_target <target> : Add a dynamic target to a capable driver. -driver <driver> - -remove_target <target> : Remove a dynamic target from a driver. + -rem_target <target> : Remove a dynamic target from a driver. -driver <driver> Group Operations @@ -259,6 +259,9 @@ my $closeDev; my $resyncDev; + my $addTarget; + my $removeTarget; + my $addGroup; my $removeGroup; @@ -328,6 +331,9 @@ 'close_dev=s' => \$closeDev, 'resync_dev=s' => \$resyncDev, + 'add_target=s' => \$addTarget, + 'rem_target=s' => \$removeTarget, + 'add_group=s' => \$addGroup, 'remove_group=s' => \$removeGroup, @@ -385,6 +391,7 @@ defined($openDev) + defined($closeDev) + defined($addGroup) + defined($removeGroup) + defined($addInitiator) + defined($removeInitiator) + defined($clearInitiators) + defined($addDriverAttr) + defined($addTargetAttr) + defined($remDriverAttr) + defined($remTargetAttr) + + defined($addTarget) + defined($removeTarget) + defined($addLun) + defined($removeLun) + defined($replaceLun) + defined($clearLuns) + defined($enableTarget) + defined($disableTarget) + defined($issueLip); @@ -477,6 +484,16 @@ usage(); } + if (defined($addTarget) && !defined($driver)) { + print "Please specify -driver with -add_target.\n"; + usage(); + } + + if (defined($removeTarget) && !defined($driver)) { + print "Please specify -driver with -rem_target.\n"; + usage(); + } + if ((defined($addGroup) || defined($removeGroup)) && (!defined($driver) || !defined($target))) { print "Please specify -driver and -target with -add_group/-remove_group.\n"; @@ -532,6 +549,7 @@ $setDriverAttr, $setTargetAttr, $setLunAttr, $setInitiatorAttr, $addDriverAttr, $addTargetAttr, $remDriverAttr, $remTargetAttr, $openDev, $closeDev, $resyncDev, + $addTarget, $removeTarget, $addGroup, $removeGroup, $addInitiator, $removeInitiator, $moveInitiator, $clearInitiators, $addLun, $removeLun, $replaceLun, $clearLuns, @@ -556,6 +574,7 @@ $setDriverAttr, $setTargetAttr, $setLunAttr, $setInitiatorAttr, $addDriverAttr, $addTargetAttr, $remDriverAttr, $remTargetAttr, $openDev, $closeDev, $resyncDev, + $addTarget, $removeTarget, $addGroup, $removeGroup, $addInitiator, $removeInitiator, $moveInitiator, $clearInitiators, $addLun, $removeLun, $replaceLun, $clearLuns, @@ -697,6 +716,14 @@ $rc = resyncDevice($resyncDev); last SWITCH; }; + defined($addTarget) && do { + $rc = addVirtualTarget($driver, $addTarget); + last SWITCH; + }; + defined($removeTarget) && do { + $rc = removeVirtualTarget($driver, $removeTarget); + last SWITCH; + }; defined($addGroup) && do { $rc = addGroup($driver, $target, $addGroup); last SWITCH; @@ -750,8 +777,6 @@ last SWITCH; }; - return if issueWarning($SCST->errorString($rc)); - if (!$all_good) { print "No valid operations specified.\n"; usage(); @@ -759,6 +784,8 @@ } } + issueWarning($SCST->errorString($rc)) if ($rc); + print "\nAll done.\n"; exit $rc; @@ -1642,11 +1669,7 @@ if (!$SCST->driverIsVirtualCapable($driver)) { immediateExit("Target '$target' for driver '$driver' does not exist."); } else { - # TODO: Add $attributes - print "-> Creating target '$target' for driver '$driver': "; - my $rc = $SCST->addVirtualTarget($driver, $target); - print "done.\n"; - + my $rc = addVirtualTarget($driver, $target); immediateExit($SCST->errorString($rc)) if ($rc); } } @@ -1759,7 +1782,8 @@ clearLuns($driver, $target); removeTargetDynamicAttributes($driver, $target); if ($SCST->targetType($driver, $target) == $SCST::SCST::TGT_TYPE_VIRTUAL) { - removeVirtualTarget($driver, $target); + my $rc = removeVirtualTarget($driver, $target); + issueWarning($rc) if ($rc); } } @@ -1781,6 +1805,19 @@ # TODO: should we disable all target drivers as well? } +sub addVirtualTarget { + my $driver = shift; + my $target = shift; + + # TODO: Add $attributes + + print "-> Creating target '$target' for driver '$driver': "; + my $rc = $SCST->addVirtualTarget($driver, $target); + print "done.\n"; + + return $rc; +} + sub removeVirtualTarget { my $driver = shift; my $target = shift; @@ -1789,7 +1826,7 @@ my $rc = $SCST->removeVirtualTarget($driver, $target); print "done.\n"; - # Todo - check return code + return $rc; } #################################################################### This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-20 15:20:19
|
Revision: 1961 http://scst.svn.sourceforge.net/scst/?rev=1961&view=rev Author: mgandalf Date: 2010-08-20 15:20:13 +0000 (Fri, 20 Aug 2010) Log Message: ----------- - Misc fixes to remaining options. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-20 14:59:38 UTC (rev 1960) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-20 15:20:13 UTC (rev 1961) @@ -101,7 +101,7 @@ -add_group <group> : Add a group to a given driver & target. -driver <driver> -target <target> - -remove_group <group> : Remove a group from a given driver & target. + -rem_group <group> : Remove a group from a given driver & target. -driver <driver> -target <target> @@ -110,7 +110,7 @@ -driver <driver> -target <target> -group <group> - -remove_init <user> : Removes an initiator from a group. + -rem_init <user> : Removes an initiator from a group. -driver <driver> -target <target> -group <group> @@ -131,7 +131,7 @@ -group <group> -device <device> -attributes <p=v,...> - -remove_lun <lun> : Remove a LUN from a group. + -rem_lun <lun> : Remove a LUN from a group. -driver <driver> -target <target> -group <group> @@ -335,17 +335,17 @@ 'rem_target=s' => \$removeTarget, 'add_group=s' => \$addGroup, - 'remove_group=s' => \$removeGroup, + 'rem_group=s' => \$removeGroup, 'add_init=s' => \$addInitiator, - 'remove_init=s' => \$removeInitiator, + 'rem_init=s' => \$removeInitiator, 'move_init=s' => \$moveInitiator, 'clear_inits' => \$clearInitiators, 'add_lun=s' => \$addLun, - 'remove_lun=s' => \$removeLun, + 'rem_lun=s' => \$removeLun, 'replace_lun=s' => \$replaceLun, - 'clear_luns=s' => \$clearLuns, + 'clear_luns' => \$clearLuns, 'enable_target=s' => \$enableTarget, 'disable_target=s' => \$disableTarget, @@ -520,7 +520,7 @@ } if (defined($clearLuns) && (!defined($driver) || !defined($target) || !defined($group))) { - print "Please specify -driver -target and -group with -remove_lun/-clear_luns.\n"; + print "Please specify -driver -target and -group with -clear_luns.\n"; usage(); } @@ -733,7 +733,7 @@ last SWITCH; }; defined($addInitiator) && do { - $rc = addInitiator($driver, $target, $addInitiator, $group); + $rc = addInitiator($driver, $target, $group, $addInitiator); last SWITCH; }; defined($removeInitiator) && do { @@ -765,11 +765,11 @@ last SWITCH; }; defined($enableTarget) && do { - $rc = enableTarget($enableTarget); + $rc = enableTarget($driver, $enableTarget); last SWITCH; }; defined($disableTarget) && do { - $rc = disableTarget($disableTarget); + $rc = disableTarget($driver, $disableTarget); last SWITCH; }; defined($issueLip) && do { @@ -3061,8 +3061,6 @@ sub resyncDevice { my $device = shift; - my $rc = FALSE; - my %attributes = ('resync_size', 1); setDeviceAttributes($device, \%attributes); @@ -3228,10 +3226,10 @@ my $device = shift; my $attributes = shift; - print "-> Replacing device '$device' at LUN $lun with device '$device' ". + print "-> Replacing device at LUN $lun with device '$device' ". "in driver/target/group '$driver/$target/$group': "; - my $rc = $SCST->replaceLun($driver, $target, $group, $lun, $device, $attributes); + my $rc = $SCST->replaceLun($driver, $target, $lun, $device, $attributes, $group); print "done.\n"; @@ -3308,13 +3306,19 @@ #################################################################### sub enableTarget { + my $driver = shift; my $target = shift; + my %attributes = ('enabled', 1); + setTargetAttributes($driver, $target, \%attributes); } sub disableTarget { + my $driver = shift; my $target = shift; + my %attributes = ('enabled', 0); + setTargetAttributes($driver, $target, \%attributes); } sub issueLip { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-23 16:50:13
|
Revision: 1976 http://scst.svn.sourceforge.net/scst/?rev=1976&view=rev Author: mgandalf Date: 2010-08-23 16:50:06 +0000 (Mon, 23 Aug 2010) Log Message: ----------- - Add in forgotten list_group_attr and set_group_attr options. - Add prompting and -noprompt options. - Fix small issue with setGroupAttributes(). - Fix error reporting when setting attributes. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-23 11:00:25 UTC (rev 1975) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-23 16:50:06 UTC (rev 1976) @@ -212,6 +212,7 @@ my $SCST; my $CONFIG; my $_DEBUG_; +my $_NOPROMPT_; my %CURRENT; @@ -237,6 +238,7 @@ my $listScstAttr; my $listHandlerAttr; my $listDeviceAttr; + my $listGroupAttr; my $listDriverAttr; my $listTargetAttr; my $listLunAttr; @@ -247,6 +249,7 @@ my $setDeviceAttr; my $setDriverAttr; my $setTargetAttr; + my $setGroupAttr; my $setLunAttr; my $setInitiatorAttr; @@ -289,7 +292,6 @@ my $device; my $nonkey; - my $noprompt; my $force; my $p = new Getopt::Long::Parser; @@ -311,6 +313,7 @@ 'list_dev_attr=s' => \$listDeviceAttr, 'list_drv_attr=s' => \$listDriverAttr, 'list_tgt_attr=s' => \$listTargetAttr, + 'list_grp_attr=s' => \$listGroupAttr, 'list_lun_attr=s' => \$listLunAttr, 'list_ini_attr=s' => \$listInitiatorAttr, @@ -319,6 +322,7 @@ 'set_dev_attr=s' => \$setDeviceAttr, 'set_drv_attr=s' => \$setDriverAttr, 'set_tgt_attr=s' => \$setTargetAttr, + 'set_grp_attr=s' => \$setGroupAttr, 'set_lun_attr=s' => \$setLunAttr, 'set_ini_attr=s' => \$setInitiatorAttr, @@ -361,16 +365,16 @@ 'device=s' => \$device, 'nonkey' => \$nonkey, - 'noprompt' => \$noprompt, + 'noprompt' => \$_NOPROMPT_, 'force' => \$force, 'debug' => \$_DEBUG_)) { usage(); } $_DEBUG_ = TRUE if (defined($_DEBUG_)); + $_NOPROMPT_ = TRUE if (defined($_NOPROMPT_)); $force = TRUE if (defined($force)); - $noprompt = TRUE if (defined($noprompt)); $clearInitiators = TRUE if (defined($clearInitiators)); $clearLuns = TRUE if (defined($clearLuns)); $issueLip = TRUE if (defined($issueLip)); @@ -382,10 +386,11 @@ my $query_mode = defined($listHandler) || defined($listDevice) || defined($listDriver) || defined($listTarget) || defined($listGroup) || defined($listSessions) || defined($listScstAttr) || defined($listHandlerAttr) || defined($listDeviceAttr) || defined($listDriverAttr) || - defined($listTargetAttr) || defined($listLunAttr) || defined($listInitiatorAttr); + defined($listTargetAttr) || defined($listGroupAttr) || defined($listLunAttr) || defined($listInitiatorAttr); my $set_mode = defined($setScstAttr) + defined($setHandlerAttr) + defined($setDeviceAttr) + - defined($setDriverAttr) + defined($setTargetAttr) + defined($setLunAttr) + defined($setInitiatorAttr); + defined($setDriverAttr) + defined($setTargetAttr) + defined($setGroupAttr) + + defined($setLunAttr) + defined($setInitiatorAttr); my $op_mode = defined($clearConfig) + defined($writeConfig) + defined($checkConfig) + defined($openDev) + defined($closeDev) + defined($addGroup) + defined($removeGroup) + @@ -410,6 +415,11 @@ usage(); } + if (defined($listGroupAttr) && (!defined($driver) || !defined($target))) { + print "Please specify -driver and -target with -list_grp_attr.\n"; + usage(); + } + if (defined($listLunAttr) && (!defined($driver) || !defined($target))) { print "Please specify -driver -target and -group with -list_lun_attr.\n"; usage(); @@ -445,6 +455,11 @@ usage(); } + if (defined($setGroupAttr) && (!defined($driver) || !defined($target) || !defined($attributes))) { + print "Please specify -driver -target and -attributes with -set_grp_attr.\n"; + usage(); + } + if (defined($setLunAttr) && (!defined($driver) || !defined($target) || !defined($attributes))) { print "Please specify -driver -target -group and -attributes with -set_lun_attr.\n"; @@ -545,8 +560,8 @@ return ($applyConfig, $clearConfig, $writeConfig, $checkConfig, $listScstAttr, $listHandler, $listDevice, $listDriver, $listTarget, $listGroup, $listSessions, $listHandlerAttr, $listDeviceAttr, $listDriverAttr, $listTargetAttr, - $listLunAttr, $listInitiatorAttr, $setScstAttr, $setHandlerAttr, $setDeviceAttr, - $setDriverAttr, $setTargetAttr, $setLunAttr, $setInitiatorAttr, + $listGroupAttr, $listLunAttr, $listInitiatorAttr, $setScstAttr, $setHandlerAttr, + $setDeviceAttr, $setDriverAttr, $setTargetAttr, $setGroupAttr, $setLunAttr, $setInitiatorAttr, $addDriverAttr, $addTargetAttr, $remDriverAttr, $remTargetAttr, $openDev, $closeDev, $resyncDev, $addTarget, $removeTarget, @@ -556,7 +571,7 @@ $enableTarget, $disableTarget, $issueLip, $handler, \%_attributes, $driver, $target, $group, $to, $device, - $nonkey, $noprompt, $force); + $nonkey, $force); } sub main { @@ -570,8 +585,8 @@ my ($applyConfig, $clearConfig, $writeConfig, $checkConfig, $listScstAttr, $listHandler, $listDevice, $listDriver, $listTarget, $listGroup, $listSessions, $listHandlerAttr, $listDeviceAttr, $listDriverAttr, $listTargetAttr, - $listLunAttr, $listInitiatorAttr, $setScstAttr, $setHandlerAttr, $setDeviceAttr, - $setDriverAttr, $setTargetAttr, $setLunAttr, $setInitiatorAttr, + $listGroupAttr, $listLunAttr, $listInitiatorAttr, $setScstAttr, $setHandlerAttr, + $setDeviceAttr, $setDriverAttr, $setTargetAttr, $setGroupAttr, $setLunAttr, $setInitiatorAttr, $addDriverAttr, $addTargetAttr, $remDriverAttr, $remTargetAttr, $openDev, $closeDev, $resyncDev, $addTarget, $removeTarget, @@ -581,7 +596,7 @@ $enableTarget, $disableTarget, $issueLip, $handler, $attributes, $driver, $target, $group, $to, $device, - $nonkey, $noprompt, $force) = getArgs(); + $nonkey, $force) = getArgs(); $SCST = new SCST::SCST($_DEBUG_); @@ -593,6 +608,7 @@ defined($applyConfig) && do { $rc = checkConfiguration($applyConfig); immediateExit("Configuration has errors, aborting.") if ($rc); + last if ($force && prompt()); $rc = applyConfiguration($applyConfig, $force); last SWITCH; }; @@ -605,7 +621,8 @@ last SWITCH; }; defined($clearConfig) && do { - $rc = clearConfiguration($noprompt, $force); + last if (prompt()); + $rc = clearConfiguration($force); last SWITCH; }; defined($listHandler) && do { @@ -652,6 +669,10 @@ $rc = listTargetAttributes($driver, $listTargetAttr, $nonkey); $all_good = TRUE; }; + defined($listGroupAttr) && do { + $rc = listGroupAttributes($driver, $target, $listGroupAttr, $nonkey); + $all_good = TRUE; + }; defined($listLunAttr) && do { $rc = listLunAttributes($driver, $target, $group, $listLunAttr, $nonkey); $all_good = TRUE; @@ -661,31 +682,43 @@ $all_good = TRUE; }; defined($setScstAttr) && do { - $rc = setScstAttributes($attributes, TRUE); + last if (prompt()); + setScstAttributes($attributes, TRUE); last SWITCH; }; defined($setHandlerAttr) && do { - $rc = setHandlerAttributes($setHandlerAttr, $attributes, TRUE); + last if (prompt()); + setHandlerAttributes($setHandlerAttr, $attributes, TRUE); last SWITCH; }; defined($setDeviceAttr) && do { - $rc = setDeviceAttributes($setDeviceAttr, $attributes, TRUE); + last if (prompt()); + setDeviceAttributes($setDeviceAttr, $attributes, TRUE); last SWITCH; }; defined($setDriverAttr) && do { - $rc = setDriverAttributes($setDriverAttr, $attributes, FALSE, TRUE); + last if (prompt()); + $rc = setDriverAttributes($setDriverAttr, $attributes, FALSE); last SWITCH; }; defined($setTargetAttr) && do { - $rc = setTargetAttributes($driver, $setTargetAttr, $attributes, FALSE, TRUE); + last if (prompt()); + $rc = setTargetAttributes($driver, $setTargetAttr, $attributes, FALSE); last SWITCH; }; + defined($setGroupAttr) && do { + last if (prompt()); + setGroupAttributes(undef, $driver, $target, $setGroupAttr, $attributes, TRUE); + last SWITCH; + }; defined($setLunAttr) && do { - $rc = setLunAttributes($driver, $target, $setLunAttr, $attributes, $group, TRUE); + last if (prompt()); + setLunAttributes($driver, $target, $setLunAttr, $attributes, $group, TRUE); last SWITCH; }; defined($setInitiatorAttr) && do { - $rc = setInitiatorAttributes($driver, $target, $group, $setInitiatorAttr, $attributes, TRUE); + last if (prompt()); + setInitiatorAttributes($driver, $target, $group, $setInitiatorAttr, $attributes, TRUE); last SWITCH; }; defined($addDriverAttr) && do { @@ -697,10 +730,12 @@ last SWITCH; }; defined($remDriverAttr) && do { + last if (prompt()); $rc = removeDriverDynamicAttributes($remDriverAttr, $attributes); last SWITCH; }; defined($remTargetAttr) && do { + last if (prompt()); $rc = removeTargetDynamicAttributes($driver, $remTargetAttr, $attributes); last SWITCH; }; @@ -709,6 +744,7 @@ last SWITCH; }; defined($closeDev) && do { + last if (prompt()); $rc = closeDevice($handler, $closeDev, $force); last SWITCH; }; @@ -721,6 +757,7 @@ last SWITCH; }; defined($removeTarget) && do { + last if (prompt()); $rc = removeVirtualTarget($driver, $removeTarget); last SWITCH; }; @@ -729,6 +766,7 @@ last SWITCH; }; defined($removeGroup) && do { + last if (prompt()); $rc = removeGroup($driver, $target, $removeGroup, $force); last SWITCH; }; @@ -737,14 +775,17 @@ last SWITCH; }; defined($removeInitiator) && do { + last if (prompt()); $rc = removeInitiator($driver, $target, $group, $removeInitiator); last SWITCH; }; defined($moveInitiator) && do { + last if (prompt()); $rc = moveInitiator($driver, $target, $group, $moveInitiator, $to); last SWITCH; }; defined($clearInitiators) && do { + last if (prompt()); $rc = clearInitiators($driver, $target, $group); last SWITCH; }; @@ -753,14 +794,17 @@ last SWITCH; }; defined($removeLun) && do { + last if (prompt()); $rc = removeLun($driver, $target, $removeLun, $group); last SWITCH; }; defined($replaceLun) && do { + last if (prompt()); $rc = replaceLun($driver, $target, $group, $replaceLun, $device, $attributes); last SWITCH; }; defined($clearLuns) && do { + last if (prompt()); $rc = clearLuns($driver, $target, $group); last SWITCH; }; @@ -769,6 +813,7 @@ last SWITCH; }; defined($disableTarget) && do { + last if (prompt()); $rc = disableTarget($driver, $disableTarget); last SWITCH; }; @@ -1717,7 +1762,7 @@ my $attributes = configToAttr(\%_attributes); - setGroupAttributes($driver, $target, $group, $attributes); + setGroupAttributes(undef, $driver, $target, $group, $attributes); } } @@ -1766,7 +1811,6 @@ } sub clearConfiguration { - my $noprompt = shift; my $force = shift; my $assignments = $CURRENT{'assign'}; @@ -2387,6 +2431,24 @@ return listAttributes($attributes, $nonkey); } +sub listGroupAttributes { + my $driver = shift; + my $target = shift; + my $group = shift; + my $nonkey = shift; + + my $attributes = $SCST->groupAttributes($driver, $target, $group); + + return if issueWarning($SCST->errorString()); + + if (!scalar(keys %{$attributes})) { + print "No suck driver/target/group '$driver/$target/$group' found.\n"; + return; + } + + return listAttributes($attributes, $nonkey); +} + sub listLunAttributes { my $driver = shift; my $target = shift; @@ -2690,7 +2752,8 @@ } # Set the existing attribute - $callback->($level1, $level2, $level3, $level4, $attribute, $value); + my $rc = $callback->($level1, $level2, $level3, $level4, $attribute, $value); + issueWarning($SCST->errorString($rc)) if ($rc); } } } @@ -2760,7 +2823,8 @@ if ($driverCap && !$SCST->checkDriverDynamicAttributes($driver, $attribute)) { addDriverDynamicAttribute($driver, $attribute, $value); } else { - setDriverAttribute($driver, $attribute, $value); + my $rc = setDriverAttribute($driver, $attribute, $value); + issueWarning($SCST->errorString($rc)) if ($rc); } $$existing{$attribute}->{$value} = TRUE; @@ -2919,7 +2983,8 @@ if ($driverCap && !$SCST->checkTargetDynamicAttributes($driver, $attribute)) { addTargetDynamicAttribute($driver, $target, $attribute, $value); } else { - setTargetAttribute($driver, $target, $attribute, $value); + my $rc = setTargetAttribute($driver, $target, $attribute, $value); + issueWarning($SCST->errorString($rc)) if ($rc); } $$existing{$attribute}->{$value} = TRUE; @@ -3789,6 +3854,22 @@ return TRUE; } +sub prompt { + return FALSE if ($_NOPROMPT_); + + print "Performing this action may result in lost or corrupt data, ". + "are you sure you wish to continue (y/[n]) ? "; + my $answer = <STDIN>; + + if (($answer =~ /^y$/i) || ($answer =~ /^yes$/i)) { + return FALSE; + } + + print "Aborting action.\n"; + + return TRUE; +} + # Hey! Stop that! sub commitSuicide { print "\n\nAborting immediately.\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-25 15:11:48
|
Revision: 1987 http://scst.svn.sourceforge.net/scst/?rev=1987&view=rev Author: mgandalf Date: 2010-08-25 15:11:42 +0000 (Wed, 25 Aug 2010) Log Message: ----------- - Fixed removing pass-through devices from handlers. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 15:01:07 UTC (rev 1986) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 15:11:42 UTC (rev 1987) @@ -1556,8 +1556,6 @@ if (!defined($$config{'HANDLER'}->{$handler}->{'DEVICE'}->{$device})) { my $attributes = $SCST->deviceAttributes($device); - next if (defined($$attributes{'scsi_device'})); - if ($deletions) { closeDevice($handler, $device, $deletions); } else { @@ -3147,8 +3145,6 @@ my $attributes = $SCST->deviceAttributes($device); - return if (defined($$attributes{'scsi_device'})); - if (!$force) { if (keys %{$$attributes{'exported'}}) { listExported($device, $attributes); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-25 17:52:41
|
Revision: 1989 http://scst.svn.sourceforge.net/scst/?rev=1989&view=rev Author: mgandalf Date: 2010-08-25 17:52:35 +0000 (Wed, 25 Aug 2010) Log Message: ----------- - Support changing assignment attributes with -force. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 16:53:22 UTC (rev 1988) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 17:52:35 UTC (rev 1989) @@ -1586,7 +1586,7 @@ my $old_create_attrs = $SCST->deviceAttributes($device); if (compareToKeyAttribute($create_attrs, $old_create_attrs)) { - print "-> Device '$device' is configured for different CREATE attributes.\n"; + print "-> Device '$device' is configured differently.\n"; if ($deletions) { print "\t-> Closing and re-opening with new attributes.\n"; @@ -1647,6 +1647,24 @@ "for driver/target '$driver/$target'. ". "Use -force to remove it.\n"; } + } else { + my $c_attrs = configToAttr($$config{'TARGET_DRIVER'}->{$driver}->{'TARGET'}->{$target}->{'LUN'}->{$lun}->{$device}); + my $o_attrs = $SCST->lunAttributes($driver, $target, $lun); + + filterCreateAttributes($driver, $target, undef, $c_attrs); + + if (compareToKeyAttribute($c_attrs, $o_attrs)) { + print "-> Device '$device' at LUN '$lun' is configured differently.\n"; + + if ($deletions) { + print "\t-> Re-assigning device with new attributes.\n"; + removeLun($driver, $target, $lun); + addLun($driver, $target, $device, $lun, $c_attrs); + } else { + print "\t-> Use -force to re-assign device with new attributes. ". + "NOTE: This will disrupt all initiators using this device.\n"; + } + } } } @@ -1838,6 +1856,22 @@ } } +sub filterCreateAttributes { + my $driver = shift; + my $target = shift; + my $group = shift; + my $attrs = shift; + + foreach my $attribute (keys %{$attrs}) { + my $bad = $SCST->checkLunCreateAttributes($driver, $target, $attribute, $group); + if ($bad == TRUE) { + delete $$attrs{$attribute}; + } elsif ($bad) { + immediateExit($SCST->errorString($bad)); + } + } +} + sub compareToKeyAttribute { my $first = shift; my $second = shift; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-25 18:43:56
|
Revision: 1992 http://scst.svn.sourceforge.net/scst/?rev=1992&view=rev Author: mgandalf Date: 2010-08-25 18:43:49 +0000 (Wed, 25 Aug 2010) Log Message: ----------- - Fix resetting a create/assignment attribute to default by removing it from the config file. - Fix closing pass-through devices on clearConfig(). Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 18:36:19 UTC (rev 1991) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 18:43:49 UTC (rev 1992) @@ -1877,10 +1877,21 @@ my $second = shift; foreach my $attr (keys %{$first}) { - next if (!defined($$second{$attr}->{'keys'}->{'0'}->{'value'}) && ($$first{$attr} == 0)); - return TRUE if ($$first{$attr} ne $$second{$attr}->{'keys'}->{'0'}->{'value'}); + if (defined($$second{$attr}->{'keys'})) { + next if (!defined($$second{$attr}->{'keys'}->{'0'}->{'value'}) && ($$first{$attr} == 0)); + return TRUE if ($$first{$attr} ne $$second{$attr}->{'keys'}->{'0'}->{'value'}); + } else { + next if (!defined($$second{$attr}->{'value'}) && ($$first{$attr} == 0)); + return TRUE if ($$first{$attr} ne $$second{$attr}->{'value'}); + } } + foreach my $attr (keys %{$second}) { + if (defined($$second{$attr}->{'keys'}) && !defined($$first{$attr})) { + return TRUE; + } + } + return FALSE; } @@ -1913,9 +1924,7 @@ foreach my $handler (sort keys %{$handlers}) { foreach my $device (@{$$handlers{$handler}}) { my $attributes = $SCST->deviceAttributes($device); - if (!defined($$attributes{'scsi_device'})) { - closeDevice($handler, $device, $force); - } + closeDevice($handler, $device, $force); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-25 19:59:36
|
Revision: 2002 http://scst.svn.sourceforge.net/scst/?rev=2002&view=rev Author: mgandalf Date: 2010-08-25 19:59:30 +0000 (Wed, 25 Aug 2010) Log Message: ----------- - Minor fixes to writeConfig(). Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 19:44:51 UTC (rev 2001) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 19:59:30 UTC (rev 2002) @@ -916,6 +916,8 @@ my $attributes = $SCST->scstAttributes(); immediateExit($SCST->errorString()); + my %nattrs; + foreach my $attribute (sort keys %{$attributes}) { next if (defined($$attributes{$attribute}->{'set'})); @@ -930,12 +932,20 @@ } elsif ($nonkey) { my $value = $$attributes{$attribute}->{'value'}; $value = "\"$value\"" if ($value =~ / /); - print $io "$attribute $value\n" + $nattrs{$attribute} = $value if (defined($value) && ($value ne '')); } } } + if ($nonkey && (scalar keys %nattrs)) { + print $io "# Non-key attributes\n"; + foreach my $attr (keys %nattrs) { + my $value = $nattrs{$attr}; + print $io "$attr $value\n"; + } + } + print $io "\n"; foreach my $handler (sort keys %{$CURRENT{'handler'}}) { @@ -1034,7 +1044,7 @@ } if ($attribute_buff_nk) { - $attribute_buff .= "\t\t# Non-key attributes\n"; + $attribute_buff .= "\n\t\t# Non-key attributes\n"; $attribute_buff .= $attribute_buff_nk; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-25 20:13:18
|
Revision: 2003 http://scst.svn.sourceforge.net/scst/?rev=2003&view=rev Author: mgandalf Date: 2010-08-25 20:13:12 +0000 (Wed, 25 Aug 2010) Log Message: ----------- - Remove -issue_lip since it's no longer supportable. - Fix help messaage. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 19:59:30 UTC (rev 2002) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 20:13:12 UTC (rev 2003) @@ -169,16 +169,12 @@ -attributes filename=/vdisks/disk01.dsk,read_only Setting the T10 Device ID of a device - scstadmin -set_dev_attr DISK01 -options t10_dev_id=0x2345 + scstadmin -set_dev_attr DISK01 -attributes t10_dev_id=0x2345 Create a new security group: scstadmin -add_group HOST01 -driver qla2x00t \ -target 50:06:0B:00:00:39:71:78 - Rename a security group: - scstadmin -rename_group HOST01 -to SERVER01 -driver qla2x00t \ - -target 50:06:0B:00:00:39:71:78 - Add a LUN to a group: scstadmin -add_lun 1 -driver qla2x00t -target 50:06:0B:00:00:39:71:78 \ -group HOST01 -device DISK01 -attributes read_only=1 @@ -281,7 +277,6 @@ my $enableTarget; my $disableTarget; - my $issueLip; my $handler; my $attributes; @@ -354,7 +349,6 @@ 'enable_target=s' => \$enableTarget, 'disable_target=s' => \$disableTarget, - 'issue_lip' => \$issueLip, 'handler=s' => \$handler, 'attributes=s' => \$attributes, @@ -378,7 +372,6 @@ $force = TRUE if (defined($force)); $clearInitiators = TRUE if (defined($clearInitiators)); $clearLuns = TRUE if (defined($clearLuns)); - $issueLip = TRUE if (defined($issueLip)); $listSessions = TRUE if (defined($listSessions)); $listScstAttr = TRUE if (defined($listScstAttr)); $setScstAttr = TRUE if (defined($setScstAttr)); @@ -399,7 +392,7 @@ defined($addDriverAttr) + defined($addTargetAttr) + defined($remDriverAttr) + defined($remTargetAttr) + defined($addTarget) + defined($removeTarget) + defined($addLun) + defined($removeLun) + defined($replaceLun) + defined($clearLuns) + - defined($enableTarget) + defined($disableTarget) + defined($issueLip); + defined($enableTarget) + defined($disableTarget); if (($query_mode + $set_mode + $op_mode) > 1) { print "Please specify only one non-query operation at a time.\n"; @@ -569,7 +562,7 @@ $addGroup, $removeGroup, $addInitiator, $removeInitiator, $moveInitiator, $clearInitiators, $addLun, $removeLun, $replaceLun, $clearLuns, - $enableTarget, $disableTarget, $issueLip, + $enableTarget, $disableTarget, $handler, \%_attributes, $driver, $target, $group, $to, $device, $nonkey, $force); @@ -594,7 +587,7 @@ $addGroup, $removeGroup, $addInitiator, $removeInitiator, $moveInitiator, $clearInitiators, $addLun, $removeLun, $replaceLun, $clearLuns, - $enableTarget, $disableTarget, $issueLip, + $enableTarget, $disableTarget, $handler, $attributes, $driver, $target, $group, $to, $device, $nonkey, $force) = getArgs(); @@ -821,10 +814,6 @@ $rc = disableTarget($driver, $disableTarget); last SWITCH; }; - defined($issueLip) && do { - $rc = issueLip(); - last SWITCH; - }; if (!$all_good) { print "No valid operations specified.\n"; @@ -3517,10 +3506,6 @@ setTargetAttributes($driver, $target, \%attributes); } -sub issueLip { - -} - #################################################################### sub readConfigFile { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mga...@us...> - 2010-08-25 20:14:16
|
Revision: 2004 http://scst.svn.sourceforge.net/scst/?rev=2004&view=rev Author: mgandalf Date: 2010-08-25 20:14:10 +0000 (Wed, 25 Aug 2010) Log Message: ----------- - Missed a couple -issue_lip's. Modified Paths: -------------- trunk/scstadmin/scstadmin.sysfs/scstadmin Modified: trunk/scstadmin/scstadmin.sysfs/scstadmin =================================================================== --- trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 20:13:12 UTC (rev 2003) +++ trunk/scstadmin/scstadmin.sysfs/scstadmin 2010-08-25 20:14:10 UTC (rev 2004) @@ -151,7 +151,6 @@ -driver <driver> -disable_target <t> : Disable target mode for a given driver & target. -driver <driver> - -issue_lip : Issue LIP on all target-enabled FC fabrics. Options -nonkey : When writing a configuration file or listing @@ -182,9 +181,6 @@ Enable target mode for fibre card specifying its WWN scstadmin -enable_target 50:06:0B:00:00:39:71:78 -driver qla2x00t - Tell all initiators to rescan LUNs: - scstadmin -issue_lip - EndUsage } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |