Newer Older
Uplink's avatar
Uplink committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353
CHANGES, mtx 1.3.10
- Add support for Microsoft Windows.
- Add support for Sony VGP-XL1B(2) Media Changer.
  Thanks to Will (nodenet at hotmail dot com)
- Add build support for Microsoft Windows using MinGW native and Linux
- Add build support for Microsoft Windows using Microsoft Visual Studio 2005.
- Add support for building on x86_64.
- Add more debugging information.
- Eliminate compiler warnings.

CHANGES, mtx 1.3.9
- Cleaned up scsi_linux.c a little to eliminate around 40 lines of code. 
- Change to using SG_IO ioctl rather than write-read interface. This
  should make us a little safer, as well as (on 2.6.x) letting us issue SCSI 
  commands to regular block devices as well as to /dev/sgXX devices. 
  WARNING: Can cause the system to *CRASH* if the SCSI device is in use, due 
  to brokenness inside the Linux kernel! It's always preferable to use the 
  /dev/sgXX device, which has specialness in its buffer handling that bypasses
  some of the brokenness elsewhere in the SCSI subsystem.
- Check SG version before using SG_IO interface, so that if we're run on a
  Linux 2.2 system and we were compiled on Linux 2.4 or above, 
- If a tape is in the drive, make tapeinfo print out its partition info. Seems
  to work on my DAT drive, anyhow (shrug). 
- Minor cleanups in mtxl.c (other cleanups necessary in tapeinfo and etc.). 

CHANGES, mtx 1.3.8
- Forgot about 8 bytes for header
- Handle pedantic loader whose firmware writer spends too much time
  parsing phrases in the SCSI spec and not enough time in the
  real world. 

CHANGES, mtx 1.3.6
- The You Gotta Be F'ing Kidding Release (see rant on mailing list)
- Added AIX support with GSC driver, courtesy
  of Steve Heck. 
- Make __WEIRD_CHAR_SUPPRESS the default to stop barcode garbling
- Fix core dump on invalid inputs in mtx.c
- Add retry with bigger ALLOCATION_LENGTH if 
  BYTE_COUNT_OF_REPORT_AVAILABLE is > than our original estimate. (see rant
  on mailing list). 
- Shut up the low-level SCSI sg_read and sg_write routines, which were poofting
  all over the place on innocuous things like no EAAP. 

CHANGES, mtx 1.3.5
- The I-Need-A-Job Release (see :-}
- Change Makefile so that it works w/systems whose 'install' program
  accepts only one argument. That's it. 
- Uncomment the Exabyte hack in the drive parsing code so that it works
  with ATL loaders again. 
- Add hack for ATL stacked loaders to keep them from reporting ghost slots

CHANGES, mtx 1.3.4
- Forward-ported the ATL/Exabyte patches from mtx 1.2
- Added progress indicator to 'tapeinfo' for DAT drives. (PLEASE TEST)
- Purged a few more out of the documentation, point to

CHANGES, mtx 1.3.3
- Reversed James' long descriptor patch until can figure out what's wrong with
- Fixed some debug declarations, courtesy of Kevin Wang. 
- Point COMPATIBILITY file at

CHANGES, mtx 1.3.2
- Merged Makefile changes from mtx-1.2 code
- Changes from James Dugal to get all info for newer loaders, fix debugging

CHANGES, mtx 1.3.1
- add an Exchange command

CHANGES, mtx 1.3.0
- New Linux SCSI subsystem interface for 2.4 kernels, ripped boldly 
  from sgtools by Doug Gilbert
- mtx 'next' now skips blank slots, courtesy of Christopher McCrory
- mtx 'unload' now prints an error message telling you that you need to
  eject the tape in the drive prior to unloading it, under certain
- Started work on 'nsmhack' for controlling NSM jukeboxes. 
- copy_barcode was off by one. 
- 'position to element' command now added, courtesy of Mahlon Stacy

CHANGES, mtx 1.2.15:
- Some Solaris fixes, courtesy of Matt Ward
- Fix URL in .spec file

CHANGES, mtx 1.2.14:
- Fix so it'll work if 0 is result of SCSI open (e.g., in cron jobs on Linux)
- Move changelog to end of .spec file for easier reading
- Added a bit of text to beginning of COMPATIBILITY file

CHANGES, mtx 1.2.13:
- Fixed some autoloader bugs w/autoloaders that don't report an arm. 
- Fixed barcode backoff.
- Added "nobarcode" option
- Increased timeout for 'mtx inventory' to 30 minutes
  (note: may increase this even more if needed, please let me know!)
- Shortened timeout for 'mtx inquiry' to 30 seconds
- tapeinfo now prints SCSI ID/LUN info if available (only on Linux at the
  moment, sigh). 
- update documentation w/new email addresses, updated compile directions,
  various fixes. 

CHANGES, mtx 1.2.12:
- Fix FreeBSD compile bugs
- Fix SGI compile bugs
- Add HP/UX port (I hope!), courtesy of William Smith. 
- Re-wrote ReadElementStatus to make work for %!@# brain dead firmware that
  reports non-existent drives (I hope!). Also has side-effect of now working
  with multiple-arm libraries (though it only sees first arm!).
- Cleaned up all -Wall messages.
- Cleaned up Linux Sparc, installs loaderinfo.1, courtesy of Matt Dainty.
- tapeinfo now reports status of CheckUnitReady.  
- tapeinfo no longer puts out Block Position if CheckUnitReady says 'no'.
- tapeinfo now puts out Density Code and Medium Type/Not Loaded (modification
    of patches sent in by Bob Rahe)

CHANGES, mtx 1.2.11:
- Added a GNU autoconf (still provide a Makefile for your use)
  *WARNING* autoconf is not yet working on all supported OS's! You may need
  to do the old-fashioned 'edit Makefile' bit!
- Changed mtx.h and mtxl.c to include and define various things based upon
  what features autoconf detected (e.g., if 'camlib.h', use FreeBSD-style
  'cam', if 'scsi/sg.h' use Linux-style 'sg', etc.). If I ever port to a
  Unix that has same SCSI interface as one of the existing ports, autoconf
  will handle it without me having to add another set of #if's or #ifdefs. 
- Went ahead and tossed mtxctl into contrib.
- In 'tapeinfo', skip \0 characters in serial numbers (some use \0 
  terminator, some do not, skip it if this one does). 
- in 'tapeinfo', dump out the block position and (if at BOP) the "BOP: Yes"
  flag. Also dump out other info such as block limits. 
- Put file 'sparc-patch1' contributed by Chaskiel M Grundman, and applied
  it (sigh)
- Added to 'contrib' directory
- Updated in 'contrib' directory
- Created 'loaderinfo' program to report some misc. info about loaders.
- Created 'scsitape' program so that I don't have to keep messing with
  #@$%@! tape ioctls on the various Unixes that I'm porting tape software
  to.  (But see the warnings!).
- Applied the Solaris patch to the read_element_status command (sigh). 
- Added timeout adjustment to the SCSI subsystem. 
  timeout changes to the SCSI subsystem. If anybody wishes to fix them,
  feel free to send me patches. 
- added contrib program "mtx-changer" (an Amanda tape changer script for
  ?Solaris? that uses mtx rather than stc)
- Jiggered Linux SCSI module for smarter error conditions handling (there are
  some error conditions that are normal for READ of tape drives).
- Added contrib program "" which should ease 
  setting up the 'sgen' driver on Solaris 8 (still no easy Solaris 7 or
  below config). 

CHANGES, mtx 1.2.10:
- Added FAQ and COMPATIBILITY (feel free to send me patches to these files!)
- Added serial number to 'tapeinfo' output. 
- Fixed stupid syntax error in mtx.c (compiled with gcc, not with others!)
- Fixed spec file for building rpms (maybe).
- Added an 'erase' command (undocumented) for use on Linux for doing
  short erases on tapes (the Linux device driver defaults to a long erase). 
- Made mtx inventory return an error code if the inventory
  fails, so that we can wait for inventory to be completed at system
  startup for libraries that auto-inventory (sigh). 

CHANGES, mtx 1.2.9:
- Added an 'eject' command that, if directed to a tape drive, will eject the
  tape, and for some autoloaders, if directed to LUN 1, will eject the entire
- Fixed the 'transfer' command to be 1 based rather than 0 based (sigh)
- Now properly reports bar code for the tape that's in the tape drive.
- Added some miscellaneous Python and Perl scripts to 'contrib'. Thanks
  to Frank Samuelson for the Perl scripts. 

CHANGES, mtx 1.2.8:
- Spec file has been changed to use the "portable" patch supplied by Red
  Hat so it should work on Linux Alpha and Linux SPARC too... maybe...
- Now will accept 4-byte element status for most element types, despite fact
  that these don't comply with SCSI standards :-(. This should make many
  older changers work, including HP optical changers. 
- Fixed PeripheralDeviceType table, courtesy of Rob Turk.
- Now looks for CHANGER environment variable if a device is not specified
  on the command line. If can't find CHANGER, then tries TAPE environment
- Properly sets TransportElementAddress in the CDB for the MOVE MEDIUM command
  with what was discovered via the READ_ELEMENT_STATUS command, rather
  than setting them to zero (SCSI spec says that zero should be the default
  arm, but at least one changer out there didn't like it). 
- Added a '--version' command (sigh). 
- Added an 'inventory' command for Breece Hill libraries that don't 
  automatically do an inventory at powerup. 

CHANGES, mtx 1.2.7:
- Fixed problem w/single drive Exabyte 220 reporting element status data for
  both drives (sigh).
- some general cleanup in the barcode fallback code (what a cruft!). Discovered
  that ADIC DAT AUTOCHANGER does not work w/mtx because it produces
  gibberish (will apparently only produce one element status page per request).
- Fixed the RPM .spec file to have updated file locations, doc locations.
- Fixed MoveMedium to say 'Output' for direction, to make it work with
  Solaris 8     
- Some changes to the Solaris low-level module to report more errors (though
   it still doesn't work as well as the Linux low-level module). Should now
   work properly with Solaris 2.6/7/8. (Solaris changes courtesy of Richard
   Fish of Enhanced Software Technologies). 

CHANGES, mtx 1.2.6:
- Fixed 'eepos' stuff to use | rather than || (whoops!)
- Accept a 4-byte element descriptor for the robot arm for certain older

CHANGES, mtx 1.2.5: 
- Added 'noattach' command. If on command line prior to other commands, forces
  them to use the regular SCSI changer API rather than the _ATTACHED API,
  no matter what the _ATTACHED bit in the Inquiry page said. 
- Created 'tapeinfo' program.

CHANGES, mtx 1.2.4:
- Major overhaul of element guts to dynamically allocate the arrays
  using the result of a MODE_SENSE on the Element Address Assignment
  Page. If mtx 1.2.3 works for you and mtx 1.2.4 does NOT work for you, 
  please un-comment the '#define DEBUG_MODE_SENSE' in file 'mtxl.c' and 
  EMAIL me the results.

CHANGES, mtx 1.2.3:
- Fixed the source storage element number stuff (again, sigh)
- Because of above fix, 'next' etc. ought to work right again.

CHANGES, mtx 1.2.2:
- Fixed that it was saying everything was an Import/Export element (oops!)
- Properly update the Import/Export element count.

CHANGES, mtx 1.2.1:
- Now explicitly output that a Storage element is in fact an Import/Export
- Added 'transfer' command to transfer between two Storage elements (so that
  you can get a tape to an Import/Export element.
- Added 'eepos' command for controlling tray retraction on the Breecehill
  import/export trays. (Works with "load" and "unload" commands too, though
  that is not documented on "mtx -h"). 

CHANGES, mtx 1.2.0:
- Re-numbered now that Leonard has asked me to take over maintenance of the
  'mtx' program.
- Temporarily treat Import/Export elements the same as Storage elements. Need
  to fix this eventually so that the GUI knows what kind of element we're
  talking about. 
- Removed quotes from the source element # to make it easier to parse
  from Perl or Python (just do a split on spaces). 
- Added sample program, 'mam2debug', showing how to use mtxl library for
  your own programs (this happens to dump the Exabyte Mammoth 2's internal 
  debug buffer to a file, using the Mammoth2-specific SCSI commands to do so).

CHANGES, mtxl 1.4.8:
- Whoops, report logical rather than physical when I have to scan for
  open slots :-).

CHANGES, mtxl 1.4.7:
- Update comment to reflect mtxl 1.4.6 stuff :-).
- Fix the part of the code that scans for open slots as sources for media.

CHANGES, mtxl 1.4.6:
- Don't use _ATTACHED interface if it reports itself as a Medium Changer!

CHANGES, mtxl 1.4.5:
- Changed "whoops" compile error on Linux (teach me to release w/o testing on
  the most popular platform!)
- Changed declarations to remove compile-time warnings.

CHANGES, mtxl 1.4.4:
- Added support for FreeBSD. (uses pass device, NOT native FreeBSD ch device).
- Change all 'int' DeviceFD to DEVICE_TYPE DeviceFD. Note that SGI and FreeBSD
  use a struct * to access the CAM SCSI layer, rather than a file fd. 
- Fixed goof where I'd hard-wired max # of elements to 127 for testing
  purposes (it should be sum of MAX_STORAGE_ELEMENTS + MAX_TRANSFER_ELEMENTS 
  + MAX_TRANSPORT_ELEMENTS from mtx.h -- change those if you need more
  elements, bearing in mind that the code for ReadElementStatus in
  mtxl.c maxes out at 255 elements unless you fix that too).
- Cleaned some cruft out of the MOVE_MEDIUM code.
- Must have GNU Make to process Makefile. In reality, I don't know of
  any machine where we voluntarily use the native 'make' command, because
  a) there's a half dozen native 'make' all with their own perverted
  syntaxes, and b) most of them are brain dead beyond belief. 

CHANGES, mtxl 1.4.3:
- Do an INQUIRY prior to doing a MOVE_MEDIUM or READ_ELEMENT_STATUS so that I
  can detect the MChanger bit and use MOVE_MEDIUM_ATTACHED or
- Successfully tested with dual drives!
- first, next, last now working 
- Created a man page
- Created a 'make install', edit Makefile to alter destinations. 

CHANGES, mtxl 1.4.2:
- Found the problem with the DAT changer! It was burping on the 
  'bar code' bit... so I intercept that sense key, re-issue w/out the
  'bar code' bit, and success!
- Added a 'TODO' file...

CHANGES, mtxl 1.4.1:
- Added 'invert' qualifier to 'load' and 'unload' commands to invert
  the media (for HP optical jukeboxes). Type './mtx' by itself to 
  see the syntax.
- Figured out why my code wasn't properly detecting errors --
  turns out the 'sg' device can return ok
  status even when there is sense data to be reported!
- Still to fix: *still* isn't working right with my Seagate 
  6-tape DDS-4 DAT changer... also need to put the
  second drive into the Exabyte 220 to make sure the dual-drive stuff 
  works properly (!). 

CHANGES, mtxl 1.4:
- Have now tested the barcode (volume tag) stuff. It works! (Well, there was
an index-by-one problem that I had to squash, but after that...)
- Changed to use SCSI Generic device API on Linux rather than 
SCSI_IOCTL_SEND_COMMAND API, which cut things off at 4095 bytes on i386
- Added a bunch of debugging output that needs to be ripped out :-(. 
Make sure you remove the -DDEBUG from the Makefile, and probably
   -DLONG_PRINT_REQUEST_SENSE too (unless you LIKE sense results that make
- Still have annoying bug on Linux of only reading 1st 16 bytes of sense
data. Alas, this appears to be a problem in the Linux 2.2 kernel, not in
anything that we're doing :-(. Hmm... cdrecord has the same problem, Mr.
Schilling says he's been saying it's a problem since 1997. Sigh. 
- Still need to test the dual-drive stuff!

CHANGES, mtxl 1.3:
- Hacked in the barcode (volume tag) stuff. NEED SOMEONE TO TEST
- started issuing redundant initial READ_ELEMENT_STATUS with Allocation Length
of 8 in order to get a BYTE_COUNT_OF_REPORT_AVAILABLE in order to calculate a
better Allocation Length for the "real" READ_ELEMENT_STATUS. Trying to send a
query to a small 6-tape changer with an Allocation Length suited for a 
200-element tape library was resulting in some errors and lockups on the
part of the tape changer device.
- first, last, next, previous are STILL broken. Sorry :-(. 

CHANGES, mtxl 1.2:

- Changed many output messages to make them more easily parsed by
scripts written in awk/perl/python
- Extracted out a library of SCSI tape library routines usable by "C"
programs (must be GPL'ed). Extensive re-arranging of code.
- Added support for multiple drives.
- Started adding support for tape changers that use the "MCHangr" 
bit rather than a separate ID or LUN.
- Increased limits so we could deal with LARGE tape libraries.
- Started adding support for barcode readers in said tape libraries
- broke first, last, next, previous. Sorry :-(. 
- Added ability to chain commands on command line. Thus could say 'mtx -f
/dev/sg4 unload 4 0 load 7 0' to unload a tape from drive 0 and load the
tape in slot 7 into drive 0.