New version 2.0.0

- Works with SCST 2.0.0.x compiled for sysfs.

Changes for 1.0.11

- Added -noprompt option. Use with care!
- Added support for T10 device ID.
- Die if /proc/scsi_tgt/version doesn't exist.
- Replace croak() with die() in the module.

Changes for 1.0.10

- Added new [OPTIONS] section to config file.
- Added new ISSUE_LIP option for fc targets to issue a LIP after group
  assignment changes.
- Added new KEEP_CONFIG option to keep all options when overwriting a
  configuration file with -writeconfig.
- General cleanup.

Changes for 1.0.9

- Move a user from one group to another when applying the configuration instead
  of deleting from one and adding to another the same user.
- Replace a device on a given LUN when applying the configuration instead of removing
  the old device and assigning the new one.
- If target-oriented access control mode is used, Default_ groups will first be created
  as temporary groups and later renamed.
- Add the ability to specify options (ie: READ_ONLY) in assignments in scst.conf.
- Remove unused references to handler IOs that don't exist and cleanup the write
  configuration function to only write vdisk and vcdrom devices. All other devices
  are automatically claimed by their handler module. I'm not sure how this will work
  with devices we wish to change handlers for.
- Minor fix to readConfig() which wasn't fully allowing for empty groups.

Changes for 1.0.8

- Added the ability to specify options for -assigndev and -replacedev,
  mainly READ_ONLY for now.
- Updated module to accept more than one option for assignDeviceToGroup() and
  replaceDeviceInGroup().
- Incremented module version number and renamed module directory to reflect it.

Changes for 1.0.7

- Added -moveuser, -renamegroup and -ReplaceDev options and necessary -to argument.
- Fixed minor bug in new renameGroup() method in SCST::SCST.

Changes for 1.0.6

- Added -resyncdev option to work with the new SCST resync_size option.
- SCST.pm: Added resyncDevice()
- SCST.pm: General cleanup.

Changes for 1.0.5

- Fixed a removeDevice() case when using -ForceConfig.
- SCST.pm: Cosmetic changes to error messages - include the handler name.
- SCST.pm: Quote handlers, handler IOs, devices, users and groups in error messages.

Changes for 1.0.4

- Fixed a check in SCST::removeUser().
- Fixed enable/disable target and error produced.
- Minor cosmetic fixes.

Changes for 1.0.3

- Added patch from Witold Kowolik to allow for qla_isp enable/disable
  target mode. This is untested by me as I don't have one of these cards.

Changes for 1.0.2

- Simplified/fixed options parsing. Thanks to Witold Kowolik.
- Use cluck() instead of print in module.
- Added a new option REMOVABLE.
- Allow options to be specified lowercase.

Changes for 1.0.1

- Module install/uninstall added
- Added mapping NV -> NV_CACHE

Changes for 1.0.0

- Added a proper Makefile.PL to SCST::SCST so now we have a also a
  proper man page.
- Renamed Changes to ChangeLog
- Updated README to include instructions for installing the perl module.
- Renamed SCST perl module directory tp scst-0.7.4
- Added init enable instructions to "make install" and README file.
- Changed VERSION on top-level Makefile to MODULE_VERSION to be more clear.

Changes for 1.0.0 RC1

- Updated SCST/SCST.pm to add one more option mapping NV -> NV_CACHE.
- Install/uninstall added.

Changes for 0.9.6-pre2:

- Updated SCST/SCST.pm for vdisk/vcdrom from cdrom_fileio/disk_fileio
- Updated scstadmin for vdisk/vcdrom...
- Minor updates to scst_db for vdisk/vcdrom - UNTESTED
- Enhanced error messages in SCST/SCST.pm. Now has new method errorString()
- Added additional error messaging to scstadmin
- Changed SCST/SCST.pm to look for vdisk/vdisk instead of vdisk/type for
  valid device handler types.
- Fixed applyConfiguration() to remove entries before adding new ones.
- Fixed changes and differences counts
- Added intelligence around virtual/physical/performance type devices
- Fixed applyConfiguration() to apply a full config even in -ForceConfig mode
- Fixed device handler switches
- Fixed device assignment LUN changes
- Fixed handling of disabled handlers (like dev_disk, dev_cdrom, etc from compile time)
- Minor bug fixes

Changes for 0.9.5-pre0:

- Renamed scst to scstadmin
- Fixed writeConfiguration() to properly write DEVICE lines with no options
- Removed the comment which prevented a target from being enabled in enableTarget()
- Updated init.d/scst to use scstadmin instead of scst_db
- Fixup of README file

Changes for 0.9.2-pre2:

- List SCST sessions
- Verify specified config file against live configuration and show differences
- Write config file based on live configuration
- Force-apply configuration, even config deletions with a force flag.
- Added new option types
- Added support for specifying a blocksize
- Added "-reload-config" to init script
