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