6d4f60b163733df1bdf1f3713c5a28cbe5ff0b47
[mirror/scst/.git] / iscsi-scst / README_in-tree
1 iSCSI SCST target driver
2 ========================
3
4 ISCSI-SCST is a deeply reworked fork of iSCSI Enterprise Target (IET)
5 (http://iscsitarget.sourceforge.net). Reasons of the fork were:
6
7  - To be able to use full power of SCST core.
8
9  - To fix all the problems, corner cases issues and iSCSI standard
10    violations which IET has.
11
12 See more info at http://scst.sourceforge.net/target_iscsi.html.
13
14 Usage
15 -----
16
17 See in http://scst.sourceforge.net/iscsi-scst-howto.txt how to configure
18 iSCSI-SCST.
19
20 In 2.0.0 usage of iscsi-scstd.conf as well as iscsi-scst-adm utility is
21 obsolete. Use the sysfs interface facilities instead.
22
23 It is recommended to use TEST UNIT READY ("tur") command to check if
24 iSCSI-SCST target is alive in MPIO configurations.
25
26 IMPORTANT: In the procfs build all LUN information (access control)
27 =========  MUST be configured BEFORE iscsi-scstd started!
28
29 Also see SCST README file how to tune for the best performance.
30
31 CAUTION: Working of target and initiator on the same host isn't fully
32 =======  supported. See SCST README file for details.
33
34
35 Sysfs interface
36 ---------------
37
38 Starting from 2.0.0 iSCSI-SCST has sysfs interface. You can switch to it
39 by running "make disable_proc". To switch back to the procfs interface
40 you should run "make enable_proc". The procfs interface from version
41 2.0.0 is obsolete and will be removed in one of the next versions.
42
43 Root of SCST sysfs interface is /sys/kernel/scst_tgt. Root of iSCSI-SCST
44 is /sys/kernel/scst_tgt/targets/iscsi. It has the following entries:
45
46  - None, one or more subdirectories for targets with name equal to names
47    of the corresponding targets.
48
49  - IncomingUser[num] - optional one or more attributes containing user
50    name and password for incoming discovery user name. Not exist by
51    default and can be added through "mgmt" entry, see below.
52
53  - OutgoingUser - optional attribute containing user name and password
54    for outgoing discovery user name. Not exist by default and can be
55    added through "mgmt" entry, see below.
56
57  - iSNSServer - contains name or IP address of iSNS server with optional
58    "AccessControl" attribute, which allows to enable iSNS access
59    control. Empty by default.
60
61  - enabled - using this attribute you can enable or disable iSCSI-SCST
62    accept new connections. It allows to finish configuring global
63    iSCSI-SCST attributes before it starts accepting new connections. 0
64    by default.
65
66  - open_state - read-only attribute, which allows to see if the user
67    space part of iSCSI-SCST connected to the kernel part.
68
69  - trace_level - allows to enable and disable various tracing
70    facilities. See content of this file for help how to use it.
71
72  - version - read-only attribute, which allows to see version of
73    iSCSI-SCST and enabled optional features.
74
75  - mgmt - main management entry, which allows to configure iSCSI-SCST.
76    Namely, add/delete targets as well as add/delete optional global and
77    per-target attributes. See content of this file for help how to use
78    it.
79
80 Each iSCSI-SCST sysfs file (attribute) can contain in the last line mark
81 "[key]". It is automatically added mark used to allow scstadmin to see
82 which attributes it should save in the config file. You can ignore it.
83
84 Each target subdirectory contains the following entries:
85
86  - ini_group - subdirectory defining initiator groups for this target,
87    used to define per-initiator access control. See SCST core README for
88    more details.
89
90  - luns - subdirectory defining LUNs of this target. See SCST core
91    README for more details.
92
93  - sessions - subdirectory containing connected to this target sessions.
94
95  - IncomingUser[num] - optional one or more attributes containing user
96    name and password for incoming user name. Not exist by default and can
97    be added through the "mgmt" entry, see above.
98
99  - OutgoingUser - optional attribute containing user name and password
100    for outgoing user name. Not exist by default and can be added through
101    the "mgmt" entry, see above.
102
103  - Entries defining default iSCSI parameters values used during iSCSI
104    parameters negotiation. Only entries which can be changed or make
105    sense are listed there.
106
107  - QueuedCommands - defines maximum number of commands queued to any
108    session of this target. Default is 32 commands.
109
110  - RspTimeout - defines the maximum time in seconds a command can wait for
111    response from initiator, otherwise the corresponding connection will
112    be closed. For performance reasons it is implemented as a timer,
113    which once in RspTimeout time checks the oldest command waiting for
114    response and, if it's older than RspTimeout, then it closes the
115    connection. Hence, a stalled connection will be closed in time
116    between RspTimeout and 2*RspTimeout. Default is 30 seconds.
117
118  - NopInInterval - defines interval between NOP-In requests, which the
119    target will send on idle connections to check if the initiator is
120    still alive. If there is no NOP-Out reply from the initiator in
121    RspTimeout time, the corresponding connection will be closed. Default
122    is 30 seconds. If it's set to 0, then NOP-In requests are disabled.
123
124  - enabled - using this attribute you can enable or disable iSCSI-SCST
125    accept new connections to this target. It allows to finish
126    configuring it before it starts accepting new connections. 0 by
127    default.
128
129  - rel_tgt_id - allows to read or write SCSI Relative Target Port
130    Identifier attribute. This identifier is used to identify SCSI Target
131    Ports by some SCSI commands, mainly by Persistent Reservations
132    commands. This identifier must be unique among all SCST targets, but
133    for convenience SCST allows disabled targets to have not unique
134    rel_tgt_id. In this case SCST will not allow to enable this target
135    until rel_tgt_id becomes unique. This attribute initialized unique by
136    SCST by default.
137
138  - tid - TID of this target.
139
140 Subdirectory "sessions" contains one subdirectory for each connected
141 session with name equal to name of the connected initiator.
142
143 Each session subdirectory contains the following entries:
144
145  - One subdirectory for each TCP connection in this session. ISCSI-SCST
146    supports 1 connection per session, but the session subdirectory can
147    contain several connections: one active and other being closed.
148
149  - Entries defining negotiated iSCSI parameters. Only parameters which
150    can be changed or make sense are listed there.
151
152  - initiator_name - contains initiator name
153
154  - sid - contains SID of this session
155
156  - reinstating - contains reinstatement state of this session
157
158  - force_close - write-only attribute, which allows to force close this
159    session. This is the only writable session attribute.
160
161  - active_commands - contains number of active, i.e. not yet or being
162    executed, SCSI commands in this session.
163
164  - commands - contains overall number of SCSI commands in this session.
165
166 Each connection subdirectory contains the following entries:
167
168  - cid - contains CID of this connection.
169
170  - ip - contains IP address of the connected initiator.
171
172  - state - contains processing state of this connection.
173
174 Below is a sample script, which configures 1 virtual disk "disk1" using
175 /disk1 image and one target iqn.2006-10.net.vlnb:tgt with all default
176 parameters:
177
178 #!/bin/bash
179
180 modprobe scst
181 modprobe scst_vdisk
182
183 echo "add_device disk1 filename=/disk1; nv_cache=1" >/sys/kernel/scst_tgt/handlers/vdisk_fileio/mgmt
184
185 service iscsi-scst start
186
187 echo "add_target iqn.2006-10.net.vlnb:tgt" >/sys/kernel/scst_tgt/targets/iscsi/mgmt
188 echo "add disk1 0" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt/luns/mgmt
189
190 echo 1 >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt/enabled
191 echo 1 >/sys/kernel/scst_tgt/targets/iscsi/enabled
192
193 Below is more advanced sample script, which configures more virtual
194 devices of various types, including virtual CDROM and 2 targets, one
195 with all default parameters, another one with some not default
196 parameters, incoming and outgoing user names for CHAP authentification,
197 and special permissions for initiator iqn.2005-03.org.open-iscsi:cacdcd2520,
198 which will see another set of devices. Also this sample configures CHAP
199 authentication for discovery sessions and iSNS server with access control.
200
201 #!/bin/bash
202
203 modprobe scst
204 modprobe scst_vdisk
205
206 echo "add_device disk1 filename=/disk1; nv_cache=1" >/sys/kernel/scst_tgt/handlers/vdisk_fileio/mgmt
207 echo "add_device disk2 filename=/disk2; blocksize=4096; nv_cache=1" >/sys/kernel/scst_tgt/handlers/vdisk_fileio/mgmt
208 echo "add_device blockio filename=/dev/sda5" >/sys/kernel/scst_tgt/handlers/vdisk_blockio/mgmt
209 echo "add_device nullio" >/sys/kernel/scst_tgt/handlers/vdisk_nullio/mgmt
210 echo "add_device cdrom" >/sys/kernel/scst_tgt/handlers/vcdrom/mgmt
211
212 service iscsi-scst start
213
214 echo "192.168.1.16 AccessControl" >/sys/kernel/scst_tgt/targets/iscsi/iSNSServer
215 echo "add_attribute IncomingUser joeD 12charsecret" >/sys/kernel/scst_tgt/targets/iscsi/mgmt
216 echo "add_attribute OutgoingUser jackD 12charsecret1" >/sys/kernel/scst_tgt/targets/iscsi/mgmt
217
218 echo "add_target iqn.2006-10.net.vlnb:tgt" >/sys/kernel/scst_tgt/targets/iscsi/mgmt
219
220 echo "add disk1 0" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt/luns/mgmt
221 echo "add cdrom 1" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt/luns/mgmt
222
223 echo "add_target iqn.2006-10.net.vlnb:tgt1" >/sys/kernel/scst_tgt/targets/iscsi/mgmt
224 echo "add_target_attribute iqn.2006-10.net.vlnb:tgt1 IncomingUser1 joe2 12charsecret2" >/sys/kernel/scst_tgt/targets/iscsi/mgmt             
225 echo "add_target_attribute iqn.2006-10.net.vlnb:tgt1 IncomingUser joe 12charsecret" >/sys/kernel/scst_tgt/targets/iscsi/mgmt                
226 echo "add_target_attribute iqn.2006-10.net.vlnb:tgt1 OutgoingUser jim1 12charpasswd" >/sys/kernel/scst_tgt/targets/iscsi/mgmt               
227 echo "No" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/InitialR2T                                                          
228 echo "Yes" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/ImmediateData                                                      
229 echo "8192" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/MaxRecvDataSegmentLength                                          
230 echo "8192" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/MaxXmitDataSegmentLength                                          
231 echo "131072" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/MaxBurstLength                                                  
232 echo "32768" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/FirstBurstLength                                                 
233 echo "1" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/MaxOutstandingR2T                                                    
234 echo "CRC32C,None" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/HeaderDigest                                               
235 echo "CRC32C,None" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/DataDigest                                                 
236 echo "32" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/QueuedCommands                                                      
237
238 echo "add disk2 0" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/luns/mgmt
239 echo "add nullio 26" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/luns/mgmt
240
241 echo "create special_ini" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/ini_group/mgmt
242 echo "add blockio 0 read_only=1" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/ini_group/special_ini/luns/mgmt
243 echo "add iqn.2005-03.org.open-iscsi:cacdcd2520" >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/ini_group/special_ini/initiators/mgmt
244
245 echo 1 >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt/enabled
246 echo 1 >/sys/kernel/scst_tgt/targets/iscsi/iqn.2006-10.net.vlnb:tgt1/enabled
247
248 echo 1 >/sys/kernel/scst_tgt/targets/iscsi/enabled
249
250 The resulting overall SCST sysfs hierarchy with an initiator connected to
251 both iSCSI-SCST targets will look like:
252
253 /sys/kernel/scst_tgt
254 |-- devices
255 |   |-- blockio
256 |   |   |-- blocksize
257 |   |   |-- exported
258 |   |   |   `-- export0 -> ../../../targets/iscsi/iqn.2006-10.net.vlnb:tgt1/ini_group/special_ini/luns/0
259 |   |   |-- filename
260 |   |   |-- handler -> ../../handlers/vdisk_blockio
261 |   |   |-- read_only
262 |   |   |-- removable
263 |   |   |-- resync_size
264 |   |   |-- size_mb
265 |   |   |-- t10_dev_id
266 |   |   |-- type
267 |   |   `-- usn
268 |   |-- cdrom
269 |   |   |-- exported
270 |   |   |   `-- export0 -> ../../../targets/iscsi/iqn.2006-10.net.vlnb:tgt/luns/1
271 |   |   |-- filename
272 |   |   |-- handler -> ../../handlers/vcdrom
273 |   |   |-- size_mb
274 |   |   |-- t10_dev_id
275 |   |   |-- type
276 |   |   `-- usn
277 |   |-- disk1
278 |   |   |-- blocksize
279 |   |   |-- exported
280 |   |   |   `-- export0 -> ../../../targets/iscsi/iqn.2006-10.net.vlnb:tgt/luns/0
281 |   |   |-- filename
282 |   |   |-- handler -> ../../handlers/vdisk_fileio
283 |   |   |-- nv_cache
284 |   |   |-- o_direct
285 |   |   |-- read_only
286 |   |   |-- removable
287 |   |   |-- resync_size
288 |   |   |-- size_mb
289 |   |   |-- t10_dev_id
290 |   |   |-- type
291 |   |   |-- usn
292 |   |   `-- write_through
293 |   |-- disk2
294 |   |   |-- blocksize
295 |   |   |-- exported
296 |   |   |   `-- export0 -> ../../../targets/iscsi/iqn.2006-10.net.vlnb:tgt1/luns/0
297 |   |   |-- filename
298 |   |   |-- handler -> ../../handlers/vdisk_fileio
299 |   |   |-- nv_cache
300 |   |   |-- o_direct
301 |   |   |-- read_only
302 |   |   |-- removable
303 |   |   |-- resync_size
304 |   |   |-- size_mb
305 |   |   |-- t10_dev_id
306 |   |   |-- type
307 |   |   |-- usn
308 |   |   `-- write_through
309 |   `-- nullio
310 |       |-- blocksize
311 |       |-- exported
312 |       |   `-- export0 -> ../../../targets/iscsi/iqn.2006-10.net.vlnb:tgt1/luns/26
313 |       |-- handler -> ../../handlers/vdisk_nullio
314 |       |-- read_only
315 |       |-- removable
316 |       |-- size_mb
317 |       |-- t10_dev_id
318 |       |-- type
319 |       `-- usn
320 |-- handlers
321 |   |-- vcdrom
322 |   |   |-- cdrom -> ../../devices/cdrom
323 |   |   |-- mgmt
324 |   |   |-- trace_level
325 |   |   `-- type
326 |   |-- vdisk_blockio
327 |   |   |-- blockio -> ../../devices/blockio
328 |   |   |-- mgmt
329 |   |   |-- trace_level
330 |   |   `-- type
331 |   |-- vdisk_fileio
332 |   |   |-- disk1 -> ../../devices/disk1
333 |   |   |-- disk2 -> ../../devices/disk2
334 |   |   |-- mgmt
335 |   |   |-- trace_level
336 |   |   `-- type
337 |   `-- vdisk_nullio
338 |       |-- mgmt
339 |       |-- nullio -> ../../devices/nullio
340 |       |-- trace_level
341 |       `-- type
342 |-- sgv
343 |   |-- global_stats
344 |   |-- sgv
345 |   |   `-- stats
346 |   |-- sgv-clust
347 |   |   `-- stats
348 |   `-- sgv-dma
349 |       `-- stats
350 |-- targets
351 |   `-- iscsi
352 |       |-- IncomingUser
353 |       |-- OutgoingUser
354 |       |-- enabled
355 |       |-- iSNSServer
356 |       |-- iqn.2006-10.net.vlnb:tgt
357 |       |   |-- DataDigest
358 |       |   |-- FirstBurstLength
359 |       |   |-- HeaderDigest
360 |       |   |-- ImmediateData
361 |       |   |-- InitialR2T
362 |       |   |-- MaxBurstLength
363 |       |   |-- MaxOutstandingR2T
364 |       |   |-- MaxRecvDataSegmentLength
365 |       |   |-- MaxXmitDataSegmentLength
366 |       |   |-- QueuedCommands
367 |       |   |-- enabled
368 |       |   |-- ini_group
369 |       |   |   `-- mgmt
370 |       |   |-- luns
371 |       |   |   |-- 0
372 |       |   |   |   |-- device -> ../../../../../devices/disk1
373 |       |   |   |   `-- read_only
374 |       |   |   |-- 1
375 |       |   |   |   |-- device -> ../../../../../devices/cdrom
376 |       |   |   |   `-- read_only
377 |       |   |   `-- mgmt
378 |       |   |-- rel_tgt_id
379 |       |   |-- sessions
380 |       |   |   `-- iqn.2005-03.org.open-iscsi:cacdcd2520
381 |       |   |       |-- 10.170.75.2
382 |       |   |       |   |-- cid
383 |       |   |       |   |-- ip
384 |       |   |       |   `-- state
385 |       |   |       |-- DataDigest
386 |       |   |       |-- FirstBurstLength
387 |       |   |       |-- HeaderDigest
388 |       |   |       |-- ImmediateData
389 |       |   |       |-- InitialR2T
390 |       |   |       |-- MaxBurstLength
391 |       |   |       |-- MaxOutstandingR2T
392 |       |   |       |-- MaxRecvDataSegmentLength
393 |       |   |       |-- MaxXmitDataSegmentLength
394 |       |   |       |-- active_commands
395 |       |   |       |-- commands
396 |       |   |       |-- force_close
397 |       |   |       |-- initiator_name
398 |       |   |       |-- luns -> ../../luns
399 |       |   |       |-- reinstating
400 |       |   |       `-- sid
401 |       |   `-- tid
402 |       |-- iqn.2006-10.net.vlnb:tgt1
403 |       |   |-- DataDigest
404 |       |   |-- FirstBurstLength
405 |       |   |-- HeaderDigest
406 |       |   |-- ImmediateData
407 |       |   |-- IncomingUser
408 |       |   |-- IncomingUser1
409 |       |   |-- InitialR2T
410 |       |   |-- MaxBurstLength
411 |       |   |-- MaxOutstandingR2T
412 |       |   |-- MaxRecvDataSegmentLength
413 |       |   |-- MaxXmitDataSegmentLength
414 |       |   |-- OutgoingUser
415 |       |   |-- QueuedCommands
416 |       |   |-- enabled
417 |       |   |-- ini_group
418 |       |   |   |-- mgmt
419 |       |   |   `-- special_ini
420 |       |   |       |-- initiators
421 |       |   |       |   |-- iqn.2005-03.org.open-iscsi:cacdcd2520
422 |       |   |       |   `-- mgmt
423 |       |   |       `-- luns
424 |       |   |           |-- 0
425 |       |   |           |   |-- device -> ../../../../../../../devices/blockio
426 |       |   |           |   `-- read_only
427 |       |   |           `-- mgmt
428 |       |   |-- luns
429 |       |   |   |-- 0
430 |       |   |   |   |-- device -> ../../../../../devices/disk2
431 |       |   |   |   `-- read_only
432 |       |   |   |-- 26
433 |       |   |   |   |-- device -> ../../../../../devices/nullio
434 |       |   |   |   `-- read_only
435 |       |   |   `-- mgmt
436 |       |   |-- rel_tgt_id
437 |       |   |-- sessions
438 |       |   |   `-- iqn.2005-03.org.open-iscsi:cacdcd2520
439 |       |   |       |-- 10.170.75.2
440 |       |   |       |   |-- cid
441 |       |   |       |   |-- ip
442 |       |   |       |   `-- state
443 |       |   |       |-- DataDigest
444 |       |   |       |-- FirstBurstLength
445 |       |   |       |-- HeaderDigest
446 |       |   |       |-- ImmediateData
447 |       |   |       |-- InitialR2T
448 |       |   |       |-- MaxBurstLength
449 |       |   |       |-- MaxOutstandingR2T
450 |       |   |       |-- MaxRecvDataSegmentLength
451 |       |   |       |-- MaxXmitDataSegmentLength
452 |       |   |       |-- active_commands
453 |       |   |       |-- commands
454 |       |   |       |-- force_close
455 |       |   |       |-- initiator_name
456 |       |   |       |-- luns -> ../../ini_group/special_ini/luns
457 |       |   |       |-- reinstating
458 |       |   |       `-- sid
459 |       |   `-- tid
460 |       |-- mgmt
461 |       |-- open_state
462 |       |-- trace_level
463 |       `-- version
464 |-- threads
465 |-- trace_level
466 `-- version
467
468
469 Troubleshooting
470 ---------------
471
472 If you have any problems, start troubleshooting from looking at the
473 kernel and system logs. In the kernel log iSCSI-SCST and SCST core send
474 their messages, in the system log iscsi-scstd sends its messages. In
475 most Linux distributions both those logs are put to /var/log/messages
476 file.
477
478 Then, it might be helpful to increase level of logging. For kernel
479 modules you should make the debug build by enabling CONFIG_SCST_DEBUG.
480
481 If after looking on the logs the reason of your problem is still unclear
482 for you, report to SCST mailing list scst-devel@lists.sourceforge.net.
483
484
485 Work if target's backstorage or link is too slow
486 ------------------------------------------------
487
488 In some cases you can experience I/O stalls or see in the kernel log
489 abort or reset messages. It can happen under high I/O load, when your
490 target's backstorage gets overloaded, or working over a slow link, when
491 the link can't serve all the queued commands on time,
492
493 To workaround it you can reduce QueuedCommands parameter for the
494 corresponding target to some lower value, like 8 (default is 32).
495
496 Also see SCST README file for more details about that issue and ways to
497 prevent it.
498
499
500 Performance advices
501 -------------------
502
503 1. If you use Windows XP or Windows 2003+ as initiators, you should
504 consider to decrease TcpAckFrequency parameter to 1. See
505 http://support.microsoft.com/kb/328890/ or google for "TcpAckFrequency"
506 for more details.
507
508 2. See how to get the maximum throughput from iSCSI, for instance, at
509 http://virtualgeek.typepad.com/virtual_geek/2009/01/a-multivendor-post-to-help-our-mutual-iscsi-customers-using-vmware.html.
510 It's about VMware, but its recommendations apply to other environments
511 as well.
512
513 3. ISCSI initiators built in pre-CentOS/RHEL 5 reported to have some
514 performance problems. If you use it, it is strongly advised to upgrade.
515
516
517 Compilation options
518 -------------------
519
520 There are the following compilation options, that could be commented
521 in/out in the kernel's module Makefile:
522
523  - CONFIG_SCST_DEBUG - turns on some debugging code, including some logging.
524    Makes the driver considerably bigger and slower, producing large amount of
525    log data.
526
527  - CONFIG_SCST_TRACING - turns on ability to log events. Makes the driver
528    considerably bigger and leads to some performance loss.
529
530  - CONFIG_SCST_EXTRACHECKS - adds extra validity checks in the various places.
531
532  - CONFIG_SCST_ISCSI_DEBUG_DIGEST_FAILURES - simulates digest failures in
533    random places.
534
535
536 Credits
537 -------
538
539 Thanks to:
540
541  * Ming Zhang <blackmagic02881@gmail.com> for fixes
542
543  * Krzysztof Blaszkowski <kb@sysmikro.com.pl> for many fixes
544
545  * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> for comments and help in
546    debugging
547
548  * Tomasz Chmielewski <mangoo@wpkg.org> for testing and suggestions
549
550  * Bart Van Assche <bart.vanassche@gmail.com> for a lot of help
551
552 Vladislav Bolkhovitin <vst@vlnb.net>, http://scst.sourceforge.net