]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - usr.sbin/ctladm/ctladm.8
MFC r318722:
[FreeBSD/stable/10.git] / usr.sbin / ctladm / ctladm.8
1 .\"
2 .\" Copyright (c) 2003 Silicon Graphics International Corp.
3 .\" Copyright (c) 2015 Alexander Motin <mav@FreeBSD.org>
4 .\" All rights reserved.
5 .\"
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
8 .\" are met:
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\"    notice, this list of conditions, and the following disclaimer,
11 .\"    without modification.
12 .\" 2. Redistributions in binary form must reproduce at minimum a disclaimer
13 .\"    substantially similar to the "NO WARRANTY" disclaimer below
14 .\"    ("Disclaimer") and any redistribution must be conditioned upon
15 .\"    including a substantially similar Disclaimer requirement for further
16 .\"    binary redistribution.
17 .\"
18 .\" NO WARRANTY
19 .\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 .\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 .\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
22 .\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 .\" HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
27 .\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
28 .\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 .\" POSSIBILITY OF SUCH DAMAGES.
30 .\"
31 .\" ctladm utility man page.
32 .\"
33 .\" Author: Ken Merry <ken@FreeBSD.org>
34 .\"
35 .\" $Id: //depot/users/kenm/FreeBSD-test2/usr.sbin/ctladm/ctladm.8#3 $
36 .\" $FreeBSD$
37 .\"
38 .Dd January 23, 2017
39 .Dt CTLADM 8
40 .Os
41 .Sh NAME
42 .Nm ctladm
43 .Nd CAM Target Layer control utility
44 .Sh SYNOPSIS
45 .Nm
46 .Aq Ar command
47 .Op lun
48 .Op generic args
49 .Op command args
50 .Nm
51 .Ic tur
52 .Aq lun
53 .Op general options
54 .Nm
55 .Ic inquiry
56 .Aq lun
57 .Op general options
58 .Nm
59 .Ic reqsense
60 .Aq lun
61 .Op general options
62 .Nm
63 .Ic reportluns
64 .Aq lun
65 .Op general options
66 .Nm
67 .Ic read
68 .Aq lun
69 .Op general options
70 .Aq Fl l Ar lba
71 .Aq Fl d Ar datalen
72 .Aq Fl f Ar file|-
73 .Aq Fl b Ar blocksize_bytes
74 .Op Fl c Ar cdbsize
75 .Op Fl N
76 .Nm
77 .Ic write
78 .Aq lun
79 .Op general options
80 .Aq Fl l Ar lba
81 .Aq Fl d Ar datalen
82 .Aq Fl f Ar file|-
83 .Aq Fl b Ar blocksize_bytes
84 .Op Fl c Ar cdbsize
85 .Op Fl N
86 .Nm
87 .Ic readcap
88 .Aq lun
89 .Op general options
90 .Op Fl c Ar cdbsize
91 .Nm
92 .Ic modesense
93 .Aq lun
94 .Aq Fl m Ar page | Fl l
95 .Op Fl P Ar pc
96 .Op Fl d
97 .Op Fl S Ar subpage
98 .Op Fl c Ar size
99 .Nm
100 .Ic start
101 .Aq lun
102 .Op general options
103 .Op Fl i
104 .Op Fl o
105 .Nm
106 .Ic stop
107 .Aq lun
108 .Op general options
109 .Op Fl i
110 .Op Fl o
111 .Nm
112 .Ic synccache
113 .Aq lun
114 .Op general options
115 .Op Fl l Ar lba
116 .Op Fl b Ar blockcount
117 .Op Fl r
118 .Op Fl i
119 .Op Fl c Ar cdbsize
120 .Nm
121 .Ic lunlist
122 .Nm
123 .Ic delay
124 .Aq lun
125 .Aq Fl l Ar datamove|done
126 .Aq Fl t Ar secs
127 .Op Fl T Ar oneshot|cont
128 .Nm
129 .Ic inject
130 .Aq Fl i Ar action
131 .Aq Fl p Ar pattern
132 .Op Fl r Ar lba,len
133 .Op Fl s Ar len fmt Op Ar args
134 .Op Fl c
135 .Op Fl d Ar delete_id
136 .Nm
137 .Ic create
138 .Aq Fl b Ar backend
139 .Op Fl B Ar blocksize
140 .Op Fl d Ar device_id
141 .Op Fl l Ar lun_id
142 .Op Fl o Ar name=value
143 .Op Fl s Ar size_bytes
144 .Op Fl S Ar serial_num
145 .Op Fl t Ar device_type
146 .Nm
147 .Ic remove
148 .Aq Fl b Ar backend
149 .Aq Fl l Ar lun_id
150 .Op Fl o Ar name=value
151 .Nm
152 .Ic modify
153 .Aq Fl b Ar backend
154 .Aq Fl l Ar lun_id
155 .Op Fl o Ar name=value
156 .Aq Fl s Ar size_bytes
157 .Nm
158 .Ic devlist
159 .Op Fl b Ar backend
160 .Op Fl v
161 .Op Fl x
162 .Nm
163 .Ic port
164 .Op Fl o Ar on|off
165 .Op Fl w Ar wwpn
166 .Op Fl W Ar wwnn
167 .Op Fl p Ar targ_port
168 .Op Fl t Ar fe_type
169 .Nm
170 .Ic portlist
171 .Op Fl f Ar frontend
172 .Op Fl i
173 .Op Fl l
174 .Op Fl p Ar targ_port
175 .Op Fl q
176 .Op Fl v
177 .Op Fl x
178 .Nm
179 .Ic lunmap
180 .Aq Fl p Ar targ_port
181 .Op Fl l Ar pLUN
182 .Op Fl L Ar cLUN
183 .Nm
184 .Ic dumpooa
185 .Nm
186 .Ic dumpstructs
187 .Nm
188 .Ic islist
189 .Op Fl v
190 .Op Fl x
191 .Nm
192 .Ic islogout
193 .Aq Fl a | Fl c Ar connection-id | Fl i Ar name | Fl p Ar portal
194 .Nm
195 .Ic isterminate
196 .Aq Fl a | Fl c Ar connection-id | Fl i Ar name | Fl p Ar portal
197 .Nm
198 .Ic help
199 .Sh DESCRIPTION
200 The
201 .Nm
202 utility is designed to provide a way to access and control the CAM Target
203 Layer (CTL).
204 It provides a way to send
205 .Tn SCSI
206 commands to the CTL layer, and also provides
207 some meta-commands that utilize
208 .Tn SCSI
209 commands.
210 (For instance, the
211 .Ic lunlist
212 command is implemented using the
213 .Tn SCSI
214 REPORT LUNS and INQUIRY commands.)
215 .Pp
216 The
217 .Nm
218 utility has a number of primary functions, many of which require a device
219 identifier.
220 The device identifier takes the following form:
221 .Bl -tag -width 14n
222 .It lun
223 Specify the LUN number to operate on.
224 .El
225 Many of the primary functions of the
226 .Nm
227 utility take the following optional arguments:
228 .Bl -tag -width 10n
229 .It Fl C Ar retries
230 Specify the number of times to retry a command in the event of failure.
231 .It Fl D Ar device
232 Specify the device to open.  This allows opening a device other than the
233 default device,
234 .Pa /dev/cam/ctl ,
235 to be opened for sending commands.
236 .It Fl I Ar id
237 Specify the initiator number to use.
238 By default,
239 .Nm
240 will use 7 as the initiator number.
241 .El
242 .Pp
243 Primary commands:
244 .Bl -tag -width 11n
245 .It Ic tur
246 Send the
247 .Tn SCSI
248 TEST UNIT READY command to the device and report whether or not it is
249 ready.
250 .It Ic inquiry
251 Send the
252 .Tn SCSI
253 INQUIRY command to the device and display some of the returned inquiry
254 data.
255 .It Ic reqsense
256 Send the
257 .Tn SCSI
258 REQUEST SENSE command to the device and display the returned sense
259 information.
260 .It Ic reportluns
261 Send the
262 .Tn SCSI
263 REPORT LUNS command to the device and display supported LUNs.
264 .It Ic read
265 Send a
266 .Tn SCSI
267 READ command to the device, and write the requested data to a file or
268 stdout.
269 .Bl -tag -width 12n
270 .It Fl l Ar lba
271 Specify the starting Logical Block Address for the READ.  This can be
272 specified in decimal, octal (starting with 0), hexadecimal (starting with
273 0x) or any other base supported by
274 .Xr strtoull 3 .
275 .It Fl d Ar datalen
276 Specify the length, in 512 byte blocks, of the READ request.
277 .It Fl f Ar file
278 Specify the destination for the data read by the READ command.  Either a
279 filename or
280 .Sq -
281 for stdout may be specified.
282 .It Fl c Ar cdbsize
283 Specify the minimum
284 .Tn SCSI
285 CDB (Command Data Block) size to be used for the READ request.  Allowable
286 values are 6, 10, 12 and 16.  Depending upon the LBA and amount of data
287 requested, a larger CDB size may be used to satisfy the request.  (e.g.,
288 for LBAs above 0xffffffff, READ(16) must be used to satisfy the request.)
289 .It Fl b Ar blocksize
290 Specify the blocksize of the underlying
291 .Tn SCSI
292 device, so the transfer length
293 can be calculated accurately.  The blocksize can be obtained via the
294 .Tn SCSI
295 READ CAPACITY command.
296 .It Fl N
297 Do not copy data to
298 .Nm
299 from the kernel when doing a read, just execute the command without copying
300 data.
301 This is to be used for performance testing.
302 .El
303 .It Ic write
304 Read data from a file or stdin, and write the data to the device using the
305 .Tn SCSI
306 WRITE command.
307 .Bl -tag -width 12n
308 .It Fl l Ar lba
309 Specify the starting Logical Block Address for the WRITE.  This can be
310 specified in decimal, octal (starting with 0), hexadecimal (starting with
311 0x) or any other base supported by
312 .Xr strtoull 3 .
313 .It Fl d Ar atalen
314 Specify the length, in 512 byte blocks, of the WRITE request.
315 .It Fl f Ar file
316 Specify the source for the data to be written by the WRITE command.  Either a
317 filename or
318 .Sq -
319 for stdin may be specified.
320 .It Fl c Ar cdbsize
321 Specify the minimum
322 .Tn SCSI
323 CDB (Command Data Block) size to be used for the READ request.  Allowable
324 values are 6, 10, 12 and 16.  Depending upon the LBA and amount of data
325 requested, a larger CDB size may be used to satisfy the request.  (e.g.,
326 for LBAs above 0xffffffff, READ(16) must be used to satisfy the request.)
327 .It Fl b Ar blocksize
328 Specify the blocksize of the underlying
329 .Tn SCSI
330 device, so the transfer length
331 can be calculated accurately.  The blocksize can be obtained via the
332 .Tn SCSI
333 READ CAPACITY command.
334 .It Fl N
335 Do not copy data to
336 .Nm
337 to the kernel when doing a write, just execute the command without copying
338 data.
339 This is to be used for performance testing.
340 .El
341 .It Ic readcap
342 Send the
343 .Tn SCSI
344 READ CAPACITY command to the device and display the device size and device
345 block size.  By default, READ CAPACITY(10) is
346 used.  If the device returns a maximum LBA of 0xffffffff, however,
347 .Nm
348 will automatically issue a READ CAPACITY(16), which is implemented as a
349 service action of the SERVICE ACTION IN(16) opcode.  The user can specify
350 the minimum CDB size with the
351 .Fl c
352 argument.  Valid values for the
353 .Fl c
354 option are 10 and 16.  If a 10 byte CDB is specified, the request will be
355 automatically reissued with a 16 byte CDB if the maximum LBA returned is
356 0xffffffff.
357 .It Ic modesense
358 Send a
359 .Tn SCSI
360 MODE SENSE command to the device, and display the requested mode page(s) or
361 page list.
362 .Bl -tag -width 10n
363 .It Fl m Ar page
364 Specify the mode page to display.  This option and the
365 .Fl l
366 option are mutually exclusive.  One of the two must be specified, though.
367 Mode page numbers may be specified in decimal or hexadecimal.
368 .It Fl l
369 Request that the list of mode pages supported by the device be returned.
370 This option and the
371 .Fl m
372 option are mutually exclusive.  One of the two must be specified, though.
373 .It Fl P Ar pc
374 Specify the mode page control value.  Possible values are:
375 .Bl -tag -width 2n -compact
376 .It 0
377 Current values.
378 .It 1
379 Changeable value bitmask.
380 .It 2
381 Default values.
382 .It 3
383 Saved values.
384 .El
385 .It Fl d
386 Disable block descriptors when sending the mode sense request.
387 .It Fl S Ar subpage
388 Specify the subpage used with the mode sense request.
389 .It Fl c Ar cdbsize
390 Specify the CDB size used for the mode sense request.  Supported values are
391 6 and 10.
392 .El
393 .It Ic start
394 Send the
395 .Tn SCSI
396 START STOP UNIT command to the specified LUN with the start
397 bit set.
398 .Bl -tag -width 4n
399 .It Fl i
400 Set the immediate bit in the CDB.  Note that CTL does not support the
401 immediate bit, so this is primarily useful for making sure that CTL returns
402 the proper error.
403 .El
404 .It Ic stop
405 Send the
406 .Tn SCSI
407 START STOP UNIT command to the specified LUN with the start
408 bit cleared.  We use an ordered tag to stop the LUN, so we can guarantee
409 that all pending I/O executes before it is stopped.  (CTL guarantees this
410 anyway, but
411 .Nm
412 sends an ordered tag for completeness.)
413 .Bl -tag -width 4n
414 .It Fl i
415 Set the immediate bit in the CDB.  Note that CTL does not support the
416 immediate bit, so this is primarily useful for making sure that CTL returns
417 the proper error.
418 .El
419 .It Ic synccache
420 Send the
421 .Tn SCSI
422 SYNCHRONIZE CACHE command to the device.  By default, SYNCHRONIZE
423 CACHE(10) is used.  If the specified starting LBA is greater than
424 0xffffffff or the length is greater than 0xffff, though,
425 SYNCHRONIZE CACHE(16) will be used.  The 16 byte command will also be used
426 if the user specifies a 16 byte CDB with the
427 .Fl c
428 argument.
429 .Bl -tag -width 14n
430 .It Fl l Ar lba
431 Specify the starting LBA of the cache region to synchronize.  This option is a
432 no-op for CTL.  If you send a SYNCHRONIZE CACHE command, it will sync the
433 cache for the entire LUN.
434 .It Fl b Ar blockcount
435 Specify the length of the cache region to synchronize.  This option is a
436 no-op for CTL.  If you send a SYNCHRONIZE CACHE command, it will sync the
437 cache for the entire LUN.
438 .It Fl r
439 Specify relative addressing for the starting LBA.  CTL does not support
440 relative addressing, since it only works for linked commands, and CTL
441 does not support linked commands.
442 .It Fl i
443 Tell the target to return status immediately after issuing the SYNCHRONIZE CACHE
444 command rather than waiting for the cache to finish syncing.  CTL does not
445 support this bit.
446 .It Fl c Ar cdbsize
447 Specify the minimum CDB size.  Valid values are 10 and 16 bytes.
448 .El
449 .It Ic lunlist
450 List all LUNs registered with CTL.
451 Because this command uses the ioctl port, it will only work when the FETDs
452 (Front End Target Drivers) are enabled.
453 This command is the equivalent of doing a REPORT LUNS on one LUN and then
454 an INQUIRY on each LUN in the system.
455 .It Ic delay
456 Delay commands at the given location.  There are two places where commands
457 may be delayed currently: before data is transferred
458 .Pq Dq datamove
459 and just prior to sending status to the host
460 .Pq Dq done .
461 One of the two must be supplied as an argument to the
462 .Fl l
463 option.  The
464 .Fl t
465 option must also be specified.
466 .Bl -tag -width 12n
467 .It Fl l Ar delayloc
468 Delay command(s) at the specified location.
469 This can either be at the data movement stage (datamove) or prior to
470 command completion (done).
471 .It Fl t Ar delaytime
472 Delay command(s) for the specified number of seconds.  This must be
473 specified.  If set to 0, it will clear out any previously set delay for
474 this particular location (datamove or done).
475 .It Fl T Ar delaytype
476 Specify the delay type.
477 By default, the
478 .Ic delay
479 option will delay the next command sent to the given LUN.
480 With the
481 .Fl T Ar cont
482 option, every command will be delayed by the specified period of time.
483 With the
484 .Fl T Ar oneshot
485 the next command sent to the given LUN will be delayed and all subsequent
486 commands will be completed normally.
487 This is the default.
488 .El
489 .It Ic inject
490 Inject the specified type of error for the LUN specified, when a command
491 that matches the given pattern is seen.
492 The sense data returned is in either fixed or descriptor format, depending
493 upon the status of the D_SENSE bit in the control mode page (page 0xa) for
494 the LUN.
495 .Pp
496 Errors are only injected for commands that have not already failed for
497 other reasons.
498 By default, only the first command matching the pattern specified is
499 returned with the supplied error.
500 .Pp
501 If the
502 .Fl c
503 flag is specified, all commands matching the pattern will be returned with
504 the specified error until the error injection command is deleted with
505 .Fl d
506 flag.
507 .Bl -tag -width 17n
508 .It Fl i Ar action
509 Specify the error to return:
510 .Bl -tag -width 10n
511 .It aborted
512 Return the next matching command on the specified LUN with the sense key
513 ABORTED COMMAND (0x0b), and the ASC/ASCQ 0x45,0x00 ("Select or reselect
514 failure").
515 .It mediumerr
516 Return the next matching command on the specified LUN with the sense key
517 MEDIUM ERROR (0x03) and the ASC/ASCQ 0x11,0x00 ("Unrecovered read error") for
518 reads, or ASC/ASCQ 0x0c,0x02 ("Write error - auto reallocation failed")
519 for write errors.
520 .It ua
521 Return the next matching command on the specified LUN with the sense key
522 UNIT ATTENTION (0x06) and the ASC/ASCQ 0x29,0x00 ("POWER ON, RESET, OR BUS
523 DEVICE RESET OCCURRED").
524 .It custom
525 Return the next matching command on the specified LUN with the supplied
526 sense data.
527 The
528 .Fl s
529 argument must be specified.
530 .El
531 .It Fl p Ar pattern
532 Specify which commands should be returned with the given error.
533 .Bl -tag -width 10n
534 .It read
535 The error should apply to READ(6), READ(10), READ(12), READ(16), etc.
536 .It write
537 The error should apply to WRITE(6), WRITE(10), WRITE(12), WRITE(16), WRITE
538 AND VERIFY(10), etc.
539 .It rw
540 The error should apply to both read and write type commands.
541 .It readcap
542 The error should apply to READ CAPACITY(10) and READ CAPACITY(16) commands.
543 .It tur
544 The error should apply to TEST UNIT READY commands.
545 .It any
546 The error should apply to any command.
547 .El
548 .It Fl r Ar lba,len
549 Specify the starting lba and length of the range of LBAs which should
550 trigger an error.
551 This option is only applies when read and/or write patterns are specified.
552 If used with other command types, the error will never be triggered.
553 .It Fl s Ar len fmt Op Ar args
554 Specify the sense data that is to be returned for custom actions.
555 If the format is
556 .Sq - ,
557 len bytes of sense data will be read from standard input and written to the
558 sense buffer.
559 If len is longer than 252 bytes (the maximum allowable
560 .Tn SCSI
561 sense data length), it will be truncated to that length.
562 The sense data format is described in
563 .Xr cam_cdparse 3 .
564 .It Fl c
565 The error injection should be persistent, instead of happening once.
566 Persistent errors must be deleted with the
567 .Fl d
568 argument.
569 .It Fl d Ar delete_id
570 Delete the specified error injection serial number.
571 The serial number is returned when the error is injected.
572 .El
573 .It Ic port
574 Perform one of several CTL frontend port operations.
575 Either get a list of frontend ports
576 .Pq Fl l ,
577 turn one or more frontends on
578 or off
579 .Pq Fl o Ar on|off ,
580 or set the World Wide Node Name
581 .Pq Fl w Ar wwnn
582 or World Wide Port Name
583 .Pq Fl W Ar wwpn
584 for a given port.
585 One of
586 .Fl l ,
587 .Fl o ,
588 or
589 .Fl w
590 or
591 .Fl W
592 must be specified.
593 The WWNN and WWPN may both be specified at the same time, but cannot be
594 combined with enabling/disabling or listing ports.
595 .Bl -tag -width 12n
596 .It Fl o Ar on|off
597 Turn the specified CTL frontend ports off or on.
598 If no port number or port type is specified, all ports are turned on or
599 off.
600 .It Fl p Ar targ_port
601 Specify the frontend port number.
602 The port numbers can be found in the frontend port list.
603 .It Fl t Ar fe_type
604 Specify the frontend type.
605 Currently defined port types are
606 .Dq fc
607 (Fibre Channel),
608 .Dq scsi
609 (Parallel SCSI),
610 .Dq ioctl
611 (CTL ioctl interface),
612 and
613 .Dq internal
614 (CTL CAM SIM).
615 .It Fl w Ar wwnn
616 Set the World Wide Node Name for the given port.
617 The
618 .Fl n
619 argument must be specified, since this is only possible to implement on a
620 single port.
621 As a general rule, the WWNN should be the same across all ports on the
622 system.
623 .It Fl W Ar wwpn
624 Set the World Wide Port Name for the given port.
625 The
626 .Fl n
627 argument must be specified, since this is only possible to implement on a
628 single port.
629 As a general rule, the WWPN must be different for every port in the system.
630 .El
631 .It Ic portlist
632 List CTL frontend ports.
633 .Bl -tag -width 12n
634 .It Fl f Ar frontend
635 Specify the frontend type.
636 .It Fl i
637 Report target and connected initiators addresses.
638 .It Fl l
639 Report LUN mapping.
640 .It Fl p Ar targ_port
641 Specify the frontend port number.
642 .It Fl q
643 Omit the header in the port list output.
644 .It Fl v
645 Enable verbose output (report all port options).
646 .It Fl x
647 Output the port list in XML format.
648 .El
649 .It Ic lunmap
650 Change LUN mapping for specified port.
651 If both
652 .Ar pLUN
653 and
654 .Ar cLUN
655 are specified -- LUN will be mapped.
656 If
657 .Ar pLUN
658 is specified, but
659 .Ar cLUN
660 is not -- LUN will be unmapped.
661 If neither
662 .Ar pLUN
663 nor
664 .Ar cLUN
665 are specified -- LUN mapping will be disabled, exposing all CTL LUNs.
666 .Bl -tag -width 12n
667 .It Fl p Ar targ_port
668 Specify the frontend port number.
669 .It Fl l Ar pLUN
670 LUN number visible by specified port.
671 .It Fl L Ar cLUN
672 CTL LUN number.
673 .El
674 .It Ic dumpooa
675 Dump the OOA (Order Of Arrival) queue for each LUN registered with CTL.
676 .It Ic dumpstructs
677 Dump the CTL structures to the console.
678 .It Ic create
679 Create a new LUN.
680 The backend must be specified, and depending upon the backend requested,
681 some of the other options may be required.
682 If the LUN is created successfully, the LUN configuration will be
683 displayed.
684 If LUN creation fails, a message will be displayed describing the failure.
685 .Bl -tag -width 14n
686 .It Fl b Ar backend
687 The
688 .Fl b
689 flag is required.
690 This specifies the name backend to use when creating the LUN.
691 Examples are
692 .Dq ramdisk
693 and
694 .Dq block .
695 .It Fl B Ar blocksize
696 Specify the blocksize of the backend in bytes.
697 .It Fl d Ar device_id
698 Specify the LUN-associated string to use in the
699 .Tn SCSI
700 INQUIRY VPD page 0x83 data.
701 .It Fl l Ar lun_id
702 Request that a particular LUN number be assigned.
703 If the requested LUN number is not available, the request will fail.
704 .It Fl o Ar name=value
705 Specify a backend-specific name/value pair.
706 Multiple
707 .Fl o
708 arguments may be specified.
709 Refer to the backend documentation for arguments that may be used.
710 .It Fl s Ar size_bytes
711 Specify the size of the LUN in bytes.
712 Some backends may allow setting the size (e.g. the ramdisk backend) and for
713 others the size may be implicit (e.g. the block backend).
714 .It Fl S Ar serial_num
715 Specify the serial number to be used in the
716 .Tn SCSI
717 INQUIRY VPD page 0x80 data.
718 .It Fl t Ar device_type
719 Specify the numeric SCSI device type to use when creating the LUN.
720 If this flag is not used, the type of LUN created is backend-specific.
721 Not all LUN types are supported.
722 Currently CTL supports Direct Access (type 0), Processor (type 3)
723 and CD/DVD (type 5) LUNs.
724 The backend requested may or may not support all of the LUN types that CTL
725 supports.
726 .El
727 .It Ic remove
728 Remove a LUN.
729 The backend must be specified, and the LUN number must also be specified.
730 Backend-specific options may also be specified with the
731 .Fl o
732 flag.
733 .Bl -tag -width 14n
734 .It Fl b Ar backend
735 Specify the backend that owns the LUN to be removed.
736 Examples are
737 .Dq ramdisk
738 and
739 .Dq block .
740 .It Fl l Ar lun_id
741 Specify the LUN number to remove.
742 .It Fl o Ar name=value
743 Specify a backend-specific name/value pair.
744 Multiple
745 .Fl o
746 arguments may be specified.
747 Refer to the backend documentation for arguments that may be used.
748 .El
749 .It Ic modify
750 Modify a LUN size.
751 The backend, the LUN number, and the size must be specified.
752 .Bl -tag -width 14n
753 .It Fl b Ar backend
754 Specify the backend that owns the LUN to be removed.
755 Examples are
756 .Dq ramdisk
757 and
758 .Dq block .
759 .It Fl l Ar lun_id
760 Specify the LUN number to remove.
761 .It Fl o Ar name=value
762 Specify a backend-specific name/value pair.
763 Multiple
764 .Fl o
765 arguments may be specified.
766 Refer to the backend documentation for arguments that may be used.
767 .It Fl s Ar size_bytes
768 Specify the size of the LUN in bytes.
769 For the
770 .Dq block
771 backend, an
772 .Dq auto
773 keyword may be passed instead; this will make CTL use the size of backing
774 file or device.
775 .El
776 .It Ic devlist
777 Get a list of all configured LUNs.
778 This also includes the LUN size and blocksize, serial number and device ID.
779 .Bl -tag -width 11n
780 .It Fl b Ar backend
781 Specify the backend.
782 This restricts the LUN list to the named backend.
783 Examples are
784 .Dq ramdisk
785 and
786 .Dq block .
787 .It Fl v
788 Be verbose.
789 This will also display any backend-specific LUN attributes in addition to
790 the standard per-LUN information.
791 .It Fl x
792 Dump the raw XML.
793 The LUN list information from the kernel comes in XML format, and this
794 option allows the display of the raw XML data.
795 This option and the
796 .Fl v
797 and
798 .Fl b
799 options are mutually exclusive.
800 If you specify
801 .Fl x ,
802 the entire LUN database is displayed in XML format.
803 .El
804 .It Ic islist
805 Get a list of currently running iSCSI connections.
806 This includes initiator and target names and the unique connection IDs.
807 .Bl -tag -width 11n
808 .It Fl v
809 Verbose mode.
810 .It Fl x
811 Dump the raw XML.
812 The connections list information from the kernel comes in XML format, and this
813 option allows the display of the raw XML data.
814 .El
815 .It Ic islogout
816 Ask the initiator to log out iSCSI connections matching criteria.
817 .Bl -tag -width 11n
818 .It Fl a
819 Log out all connections.
820 .It Fl c
821 Specify connection ID.
822 .It Fl i
823 Specify initiator name.
824 .It Fl p
825 Specify initiator portal (hostname or IP address).
826 .El
827 .It Ic isterminate
828 Forcibly terminate iSCSI connections matching criteria.
829 .Bl -tag -width 11n
830 .It Fl a
831 Terminate all connections.
832 .It Fl c
833 Specify connection ID.
834 .It Fl i
835 Specify initiator name.
836 .It Fl p
837 Specify initiator portal (hostname or IP address).
838 .El
839 .It Ic help
840 Display
841 .Nm
842 usage information.
843 .El
844 .Sh OPTIONS
845 Number of additional configuration options may be specified for LUNs.
846 Some options are global, others are backend-specific.
847 .Pp
848 Global options:
849 .Bl -tag -width 12n
850 .It Va vendor
851 Specifies LUN vendor string up to 8 chars.
852 .It Va product
853 Specifies LUN product string up to 16 chars.
854 .It Va revision
855 Specifies LUN revision string up to 4 chars.
856 .It Va scsiname
857 Specifies LUN SCSI name string.
858 .It Va eui
859 Specifies LUN EUI-64 identifier.
860 .It Va naa
861 Specifies LUN NAA identifier.
862 .It Va uuid
863 Specifies LUN locally assigned RFC 4122 UUID identifier.
864 EUI, NAA or UUID identifier should be set to UNIQUE value to allow
865 EXTENDED COPY command access the LUN.
866 Non-unique LUN identifiers may lead to data corruption.
867 Some initiators may not support later introduced UUID identifiers.
868 .It Va ha_role
869 Setting to "primary" or "secondary" overrides default role of the node
870 in HA cluster, set by kern.cam.ctl.ha_role sysctl.
871 .It Va insecure_tpc
872 Setting to "on" allows EXTENDED COPY command sent to this LUN access
873 other LUNs on this host, not accessible otherwise.
874 This allows to offload copying between different iSCSI targets residing
875 on the same host in trusted environments.
876 .It Va readcache
877 Set to "off", disables read caching for the LUN, if supported by the backend.
878 .It Va readonly
879 Set to "on", blocks all media write operations to the LUN, reporting it
880 as write protected.
881 .It Va removable
882 Set to "on", makes LUN removable.
883 .It Va reordering
884 Set to "unrestricted", allows target to process commands with SIMPLE task
885 attribute in arbitrary order.  Any data integrity exposures related to
886 command sequence order shall be explicitly handled by the application
887 client through the selection of appropriate commands and task attributes.
888 The default value is "restricted".  It improves data integrity, but may
889 introduce some additional delays.
890 .It Va serseq
891 Set to "on" to serialize conseсutive reads/writes.
892 Set to "read" to serialize conseсutive reads.
893 Set to "off" to allow them be issued in parallel.
894 Parallel issue of consecutive operations may confuse logic of the
895 backing file system, hurting performance; but it may improve performance
896 of backing stores without prefetch/write-back.
897 .It Va pblocksize
898 .It Va pblockoffset
899 Specify physical block size and offset of the device.
900 .It Va ublocksize
901 .It Va ublockoffset
902 Specify UNMAP block size and offset of the device.
903 .It Va rpm
904 Specifies medium rotation rate of the device: 0 -- not reported,
905 1 -- non-rotating (SSD), >1024 -- value in revolutions per minute.
906 .It Va formfactor
907 Specifies nominal form factor of the device: 0 -- not reported, 1 -- 5.25",
908 2 -- 3.5", 3 -- 2.5", 4 -- 1.8", 5 -- less then 1.8".
909 .It Va provisioning_type
910 When UNMAP support is enabled, this option specifies provisioning type:
911 "resource", "thin" or "unknown".
912 Default value is "thin".
913 Logical units without UNMAP support are reported as fully provisioned.
914 .It Va unmap
915 Setting to "on" or "off" controls UNMAP support for the logical unit.
916 Default value is "on" if supported by the backend.
917 .It Va unmap_max_lba
918 .It Va unmap_max_descr
919 Specify maximum allowed number of LBAs and block descriptors per UNMAP
920 command to report in Block Limits VPD page.
921 .It Va write_same_max_lba
922 Specify maximum allowed number of LBAs per WRITE SAME command to report
923 in Block Limits VPD page.
924 .It Va avail-threshold
925 .It Va used-threshold
926 .It Va pool-avail-threshold
927 .It Va pool-used-threshold
928 Set per-LUN/-pool thin provisioning soft thresholds.
929 LUN will establish UNIT ATTENTION condition if its or pool available space
930 get below configured avail values, or its or pool used space get above
931 configured used values.
932 Pool thresholds are working only for ZVOL-backed LUNs.
933 .It Va writecache
934 Set to "off", disables write caching for the LUN, if supported by the backend.
935 .El
936 .Pp
937 Options specific for block backend:
938 .Bl -tag -width 12n
939 .It Va file
940 Specifies file or device name to use for backing store.
941 .It Va num_threads
942 Specifies number of backend threads to use for this LUN.
943 .El
944 .Pp
945 Options specific for ramdisk backend:
946 .Bl -tag -width 12n
947 .It Va capacity
948 Specifies capacity of backing store (maximum RAM for data).
949 The default value is zero, that disables backing store completely,
950 making all writes go to nowhere, while all reads return zeroes.
951 .El
952 .Sh EXAMPLES
953 .Dl ctladm tur 1
954 .Pp
955 Send a
956 .Tn SCSI
957 TEST UNIT READY command to LUN 1.
958 .Pp
959 .Dl ctladm modesense 1 -l
960 .Pp
961 Display the list of mode pages supported by LUN 1.
962 .Pp
963 .Dl ctladm modesense 0 -m 10 -P 3 -d -c 10
964 .Pp
965 Display the saved version of the Control mode page (page 10) on LUN 0.
966 Disable fetching block descriptors, and use a 10 byte MODE SENSE command
967 instead of the default 6 byte command.
968 .Bd -literal
969 ctladm read 2 -l 0 -d 1 -b 512 -f - > foo
970 .Ed
971 .Pp
972 Read the first 512 byte block from LUN 2 and dump it to the file
973 .Pa foo .
974 .Bd -literal
975 ctladm write 3 -l 0xff432140 -d 20 -b 512 -f /tmp/bar
976 .Ed
977 .Pp
978 Read 10240 bytes from the file
979 .Pa /tmp/bar
980 and write it to LUN 3.
981 starting at LBA 0xff432140.
982 .Pp
983 .Dl ctladm create -b ramdisk -s 10485760000000000
984 .Pp
985 Create a LUN with the
986 .Dq fake
987 ramdisk as a backing store.
988 The LUN will claim to have a size of approximately 10 terabytes,
989 while having no real data store (all written data are lost).
990 .Pp
991 .Dl ctladm create -b ramdisk -s 10T -o capacity=10G
992 .Pp
993 Create a thin provisioned LUN with a ramdisk as a backing store.
994 The LUN will have maximal backing store capacity of 10 gigabytes,
995 while reporting size of 10 terabytes,
996 .Pp
997 .Dl ctladm create -b block -o file=src/usr.sbin/ctladm/ctladm.8
998 .Pp
999 Create a LUN using the block backend, and specify the file
1000 .Pa src/usr.sbin/ctladm/ctladm.8
1001 as the backing store.
1002 The size of the LUN will be derived from the size of the file.
1003 .Pp
1004 .Dl ctladm create -b block -o file=src/usr.sbin/ctladm/ctladm.8 -S MYSERIAL321 -d MYDEVID123
1005 .Pp
1006 Create a LUN using the block backend, specify the file
1007 .Pa src/usr.sbin/ctladm/ctladm.8
1008 as the backing store, and specify the
1009 .Tn SCSI
1010 VPD page 0x80 and 0x83 serial number
1011 .Fl ( S )
1012 and device ID
1013 .Fl ( d ) .
1014 .Pp
1015 .Dl ctladm remove -b block -l 12
1016 .Pp
1017 Remove LUN 12, which is handled by the block backend, from the system.
1018 .Pp
1019 .Dl ctladm devlist
1020 .Pp
1021 List configured LUNs in the system, along with their backend and serial
1022 number.
1023 This works when the Front End Target Drivers are enabled or disabled.
1024 .Pp
1025 .Dl ctladm lunlist
1026 .Pp
1027 List all LUNs in the system, along with their inquiry data and device type.
1028 This only works when the FETDs are enabled, since the commands go through the
1029 ioctl port.
1030 .Pp
1031 .Dl ctladm inject 6 -i mediumerr -p read -r 0,512 -c
1032 .Pp
1033 Inject a medium error on LUN 6 for every read that covers the first 512
1034 blocks of the LUN.
1035 .Bd -literal -offset indent
1036 ctladm inject 6 -i custom -p tur -s 18 "f0 0 02 s12 04 02"
1037 .Ed
1038 .Pp
1039 Inject a custom error on LUN 6 for the next TEST UNIT READY command only.
1040 This will result in a sense key of NOT READY (0x02), and an ASC/ASCQ of
1041 0x04,0x02 ("Logical unit not ready, initializing command required").
1042 .Sh SEE ALSO
1043 .Xr cam 3 ,
1044 .Xr cam_cdbparse 3 ,
1045 .Xr cam 4 ,
1046 .Xr ctl 4 ,
1047 .Xr xpt 4 ,
1048 .Xr camcontrol 8 ,
1049 .Xr ctld 8 ,
1050 .Xr ctlstat 8
1051 .Sh HISTORY
1052 The
1053 .Nm
1054 utility was originally written during the Winter/Spring of 2003 as an
1055 interface to CTL.
1056 .Sh AUTHORS
1057 .An Ken Merry Aq ken@FreeBSD.org