From 05c75109bc6971347a31479018fe7cd2c4a5bdc5 Mon Sep 17 00:00:00 2001 From: Mark Buechler Date: Thu, 23 Sep 2010 13:59:07 +0000 Subject: [PATCH] Merge from trunk r2203. git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/2.0.0.x@2204 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- .../scst-0.9.00/lib/SCST/SCST.pm | 10 ++++-- scstadmin/scstadmin.sysfs/scstadmin | 32 +++++++++++++++---- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm b/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm index 382c83ffa..16e39d0fd 100644 --- a/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm +++ b/scstadmin/scstadmin.sysfs/scst-0.9.00/lib/SCST/SCST.pm @@ -812,8 +812,14 @@ sub addVirtualTarget { my $o_string; foreach my $attribute (keys %{$attributes}) { - my $value = $$attributes{$attribute}; - $o_string .= "$attribute=$value; "; + if (ref($$attributes{$attribute}) eq 'ARRAY') { + foreach my $value (@{$$attributes{$attribute}}) { + $o_string .= "$attribute=$value;"; + } + } else { + my $value = $$attributes{$attribute}; + $o_string .= "$attribute=$value;"; + } } $o_string =~ s/\s$//; diff --git a/scstadmin/scstadmin.sysfs/scstadmin b/scstadmin/scstadmin.sysfs/scstadmin index 1ca8cd68b..6f2bb6895 100755 --- a/scstadmin/scstadmin.sysfs/scstadmin +++ b/scstadmin/scstadmin.sysfs/scstadmin @@ -747,7 +747,7 @@ sub main { last SWITCH; }; defined($addTarget) && do { - $rc = addVirtualTarget($driver, $addTarget); + $rc = addVirtualTarget($driver, $addTarget, $attributes); last SWITCH; }; defined($removeTarget) && do { @@ -1873,12 +1873,31 @@ sub applyTargetAssignments { } } + my $possible; + + my $is_virtual = $SCST->driverIsVirtualCapable($driver); + + if ($is_virtual) { + $possible = $SCST->targetCreateAttributes($driver); + } + foreach my $target (sort keys %{$targets}) { if (!defined($CURRENT{'assign'}->{$driver}->{$target})) { - if (!$SCST->driverIsVirtualCapable($driver)) { + if (!$is_virtual) { immediateExit("Target '$target' for driver '$driver' does not exist."); } else { - my $rc = addVirtualTarget($driver, $target); + my %_attributes; + + foreach my $item (keys %{$$targets{$target}}) { + next if ($item eq 'GROUP'); + next if ($item eq 'LUN'); + $_attributes{$item} = $$targets{$target}->{$item}; + } + + my $attributes = configToAttr(\%_attributes); + filterCreateAttributes($possible, $attributes, FALSE); + + my $rc = addVirtualTarget($driver, $target, $attributes); immediateExit($SCST->errorString($rc)) if ($rc); } } @@ -1896,7 +1915,7 @@ sub applyTargetAssignments { } my $attributes = configToAttr(\%_attributes); - + filterCreateAttributes($possible, $attributes, TRUE); setTargetAttributes($driver, $target, $attributes, $deletions); } } @@ -2036,11 +2055,10 @@ sub clearConfiguration { sub addVirtualTarget { my $driver = shift; my $target = shift; - - # TODO: Add $attributes + my $attributes = shift; print "-> Creating target '$target' for driver '$driver': "; - my $rc = $SCST->addVirtualTarget($driver, $target); + my $rc = $SCST->addVirtualTarget($driver, $target, $attributes); print "done.\n"; return $rc;