preprocessor cleanup: __sparc
[unleashed/tickless.git] / usr / src / lib / storage / libg_fc / common / errormsgs.c
blobdc55101937c562fd32a25a0f4218f37e9091ba94
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
27 /*LINTLIBRARY*/
30 * This module provides error messages to the
31 * a5k and g_fc libraries.
35 * I18N message number ranges
36 * This file: 10000 - 10499
37 * Shared common messages: 1 - 1999
40 /* #define _POSIX_SOURCE 1 */
43 /* Includes */
44 #include <stdlib.h>
45 #include <stdio.h>
46 #include <fcntl.h>
47 #include <nl_types.h>
48 #include <sys/scsi/scsi.h>
49 #include <stgcom.h>
50 #include <l_error.h> /* error msg defines. */
51 #include <l_common.h> /* I18N message define */
52 #include <g_state.h>
54 #include <string.h> /* For strerror */
55 #include <errno.h>
58 /* Defines */
59 #define MAXLEN 1000
64 * Decodes the SCSI sense byte to a string.
66 * RETURNS:
67 * character string
69 static char *
70 decode_sense_byte(uchar_t status)
72 switch (status & STATUS_MASK) {
73 case STATUS_GOOD:
74 return (MSGSTR(10000, "Good status"));
76 case STATUS_CHECK:
77 return (MSGSTR(128, "Check condition"));
79 case STATUS_MET:
80 return (MSGSTR(124, "Condition met"));
82 case STATUS_BUSY:
83 return (MSGSTR(37, "Busy"));
85 case STATUS_INTERMEDIATE:
86 return (MSGSTR(10001, "Intermediate"));
88 case STATUS_INTERMEDIATE_MET:
89 return (MSGSTR(10002, "Intermediate - condition met"));
91 case STATUS_RESERVATION_CONFLICT:
92 return (MSGSTR(10003, "Reservation_conflict"));
94 case STATUS_TERMINATED:
95 return (MSGSTR(126, "Command terminated"));
97 case STATUS_QFULL:
98 return (MSGSTR(83, "Queue full"));
100 default:
101 return (MSGSTR(4, "Unknown status"));
107 * This function finds a predefined error string to a given
108 * error number (errornum), allocates memory for the string
109 * and returns the corresponding error message to the caller.
111 * RETURNS
112 * error string if O.K.
113 * NULL otherwise
115 char
116 *g_get_errString(int errornum)
118 char err_msg[MAXLEN], *errStrg;
120 err_msg[0] = '\0'; /* Just in case */
121 if (errornum < L_BASE) {
122 /* Some sort of random system error most likely */
123 errStrg = strerror(errno);
124 if (errStrg != NULL) {
125 (void) strcpy(err_msg, errStrg);
126 } else { /* Something's _really_ messed up */
127 (void) sprintf(err_msg,
128 MSGSTR(10081,
129 " Error: could not decode the"
130 " error message.\n"
131 " The given error message is not"
132 " defined in the library.\n"
133 " Message number: %d.\n"), errornum);
136 /* Make sure ALL CASES set err_msg to something */
137 } else switch (errornum) {
138 case L_SCSI_ERROR:
139 (void) sprintf(err_msg,
140 MSGSTR(10096,
141 " Error: SCSI failure."));
142 break;
144 case L_PR_INVLD_TRNSFR_LEN:
145 (void) sprintf(err_msg,
146 MSGSTR(10005,
147 " Error: Persistant Reserve command"
148 " transfer length not word aligned."));
149 break;
151 case L_RD_NO_DISK_ELEM:
152 (void) sprintf(err_msg,
153 MSGSTR(10006,
154 " Error: Could not find the disk elements"
155 " in the Receive Diagnostic pages."));
156 break;
158 case L_RD_INVLD_TRNSFR_LEN:
159 (void) sprintf(err_msg,
160 MSGSTR(10007,
161 " Error: Receive Diagnostic command"
162 " transfer length not word aligned."));
163 break;
165 case L_ILLEGAL_MODE_SENSE_PAGE:
166 (void) sprintf(err_msg,
167 MSGSTR(10008,
168 " Error: Programming error - "
169 "illegal Mode Sense parameter."));
170 break;
172 case L_INVALID_NO_OF_ENVSEN_PAGES:
173 (void) sprintf(err_msg,
174 MSGSTR(10009,
175 " Error: Invalid no. of sense pages.\n"
176 " Could not get valid sense page"
177 " information from the device."));
178 break;
180 case L_INVALID_BUF_LEN:
181 (void) sprintf(err_msg,
182 MSGSTR(10010,
183 " Error: Invalid buffer length.\n"
184 " Could not get diagnostic "
185 " information from the device."));
186 break;
188 case L_INVALID_PATH:
189 (void) sprintf(err_msg,
190 MSGSTR(113,
191 " Error: Invalid pathname"));
192 break;
194 case L_NO_PHYS_PATH:
195 (void) sprintf(err_msg,
196 MSGSTR(10011,
197 " Error: Could not get"
198 " physical path to the device."));
199 break;
201 case L_NO_SES_PATH:
202 (void) sprintf(err_msg,
203 MSGSTR(10098,
204 " Error: No SES found"
205 " for the device path."));
206 break;
208 case L_INVLD_PATH_NO_SLASH_FND:
209 (void) sprintf(err_msg,
210 MSGSTR(10012,
211 "Error in the device physical path."));
212 break;
214 case L_INVLD_PATH_NO_ATSIGN_FND:
215 (void) sprintf(err_msg,
216 MSGSTR(10013,
217 " Error in the device physical path:"
218 " no @ found."));
219 break;
221 case L_INVALID_SLOT:
222 (void) sprintf(err_msg,
223 MSGSTR(10014,
224 " Error: Invalid path format."
225 " Invalid slot."));
226 break;
228 case L_INVALID_LED_RQST:
229 (void) sprintf(err_msg,
230 MSGSTR(10015,
231 " Error: Invalid LED request."));
232 break;
234 case L_INVALID_PATH_FORMAT:
235 (void) sprintf(err_msg,
236 MSGSTR(10016,
237 " Error: Invalid path format."));
238 break;
240 case L_OPEN_PATH_FAIL:
241 (void) sprintf(err_msg,
242 MSGSTR(10017,
243 " Error opening the path."));
244 break;
246 case L_INVALID_PASSWORD_LEN:
247 (void) sprintf(err_msg,
248 MSGSTR(10018,
249 "Error: Invalid password length."));
250 break;
252 case L_INVLD_PHYS_PATH_TO_DISK:
253 (void) sprintf(err_msg,
254 MSGSTR(10019,
255 " Error: Physical path not of a disk."));
256 break;
258 case L_INVLD_ID_FOUND:
259 (void) sprintf(err_msg,
260 MSGSTR(10020,
261 " Error in the device physical path:"
262 " Invalid ID found in the path."));
263 break;
265 case L_INVLD_WWN_FORMAT:
266 (void) sprintf(err_msg,
267 MSGSTR(10021,
268 " Error in the device physical path:"
269 " Invalid wwn format."));
271 break;
273 case L_NO_VALID_PATH:
274 (void) sprintf(err_msg,
275 MSGSTR(10022,
276 " Error: Could not find valid path to"
277 " the device."));
278 break;
280 case L_NO_WWN_FOUND_IN_PATH:
281 (void) sprintf(err_msg,
282 MSGSTR(10023,
283 " Error in the device physical path:"
284 " No WWN found."));
286 break;
288 case L_NO_NODE_WWN_IN_WWNLIST:
289 (void) sprintf(err_msg,
290 MSGSTR(10024,
291 " Error: Device's Node WWN is not"
292 " found in the WWN list.\n"));
293 break;
295 case L_NO_NODE_WWN_IN_BOXLIST:
296 (void) sprintf(err_msg,
297 MSGSTR(10025,
298 " Error: Device's Node WWN is not"
299 " found in the Box list.\n"));
300 break;
302 case L_NULL_WWN_LIST:
303 (void) sprintf(err_msg,
304 MSGSTR(10026,
305 " Error: Null WWN list found."));
306 break;
308 case L_NO_LOOP_ADDRS_FOUND:
309 (void) sprintf(err_msg,
310 MSGSTR(10027,
311 " Error: Could not find the loop address for "
312 " the device at physical path."));
314 break;
316 case L_INVLD_PORT_IN_PATH:
317 (void) sprintf(err_msg,
318 MSGSTR(10028,
319 "Error in the device physical path:"
320 " Invalid port number found."
321 " (Should be 0 or 1)."));
323 break;
325 case L_INVALID_LOOP_MAP:
326 (void) sprintf(err_msg,
327 MSGSTR(10029,
328 "Error: Invalid loop map found."));
329 break;
331 case L_SFIOCGMAP_IOCTL_FAIL:
332 (void) sprintf(err_msg,
333 MSGSTR(10030,
334 " Error: SFIOCGMAP ioctl failed."
335 " Cannot read loop map."));
336 break;
338 case L_FCIO_GETMAP_IOCTL_FAIL:
339 (void) sprintf(err_msg,
340 MSGSTR(10031,
341 " Error: FCIO_GETMAP ioctl failed."
342 " Cannot read loop map."));
343 break;
345 case L_FCIO_LINKSTATUS_FAILED:
346 (void) sprintf(err_msg,
347 MSGSTR(10032,
348 " Error: FCIO_LINKSTATUS ioctl failed."
349 " Cannot read loop map."));
350 break;
352 case L_FCIOGETMAP_INVLD_LEN:
353 (void) sprintf(err_msg,
354 MSGSTR(10033,
355 " Error: FCIO_GETMAP ioctl returned"
356 " an invalid parameter:"
357 " # entries to large."));
358 break;
360 case L_FCIO_FORCE_LIP_FAIL:
361 (void) sprintf(err_msg,
362 MSGSTR(10034,
363 " Error: FCIO_FORCE_LIP ioctl failed."));
364 break;
366 case L_FCIO_FORCE_LIP_PARTIAL_FAIL:
367 (void) sprintf(err_msg,
368 MSGSTR(10115,
369 " Error: FCIO_FORCE_LIP ioctl failed on one"
370 " or more (but not all) of the paths."));
371 break;
373 case L_DWNLD_CHKSUM_FAILED:
374 (void) sprintf(err_msg,
375 MSGSTR(10035,
376 "Error: Download file checksum failed."));
378 break;
380 case L_DWNLD_READ_HEADER_FAIL:
381 (void) sprintf(err_msg,
382 MSGSTR(10036,
383 " Error: Reading download file exec"
384 " header failed."));
385 break;
387 case L_DWNLD_READ_INCORRECT_BYTES:
388 (void) sprintf(err_msg,
389 MSGSTR(10037,
390 " Error: Incorrect number of bytes read."));
391 break;
393 case L_DWNLD_INVALID_TEXT_SIZE:
394 (void) sprintf(err_msg,
395 MSGSTR(10038,
396 " Error: Reading text segment: "
397 " Found wrong size."));
398 break;
400 case L_DWNLD_READ_ERROR:
401 (void) sprintf(err_msg,
402 MSGSTR(10039,
403 " Error: Failed to read download file."));
404 break;
406 case L_DWNLD_BAD_FRMWARE:
407 (void) sprintf(err_msg,
408 MSGSTR(10040,
409 " Error: Bad Firmware MAGIC."));
410 break;
412 case L_DWNLD_TIMED_OUT:
413 (void) sprintf(err_msg,
414 MSGSTR(10041,
415 " Error: Timed out in 5 minutes"
416 " waiting for the"
417 " IB to become available."));
418 break;
420 case L_REC_DIAG_PG1:
421 (void) sprintf(err_msg,
422 MSGSTR(10042,
423 " Error parsing the Receive"
424 " diagnostic page."));
425 break;
427 case L_TRANSFER_LEN:
428 (void) sprintf(err_msg,
429 MSGSTR(10043, " "));
430 break;
432 case L_REQUIRE_FILE:
433 (void) sprintf(err_msg,
434 MSGSTR(10109,
435 " Error: No default file. You must specify"
436 " the filename path."));
437 break;
439 case L_MALLOC_FAILED:
440 (void) sprintf(err_msg,
441 MSGSTR(10,
442 " Error: Unable to allocate memory."));
443 break;
445 case L_LOCALTIME_ERROR:
446 (void) sprintf(err_msg,
447 MSGSTR(10044,
448 " Error: Could not convert time"
449 " to broken-down time: Hrs/Mins/Secs."));
450 break;
452 case L_SELECT_ERROR:
453 (void) sprintf(err_msg,
454 MSGSTR(10045,
455 " select() error during retry:"
456 " Could not wait for"
457 " specified time."));
458 break;
460 case L_NO_DISK_DEV_FOUND:
461 (void) sprintf(err_msg,
462 MSGSTR(10046,
463 " Error: No disk devices found"
464 " in the /dev/rdsk"
465 " directory."));
466 break;
468 case L_NO_TAPE_DEV_FOUND:
469 (void) sprintf(err_msg,
470 MSGSTR(10047,
471 " Error: No tape devices found"
472 " in the /dev/rmt"
473 " directory."));
474 break;
476 case L_LSTAT_ERROR:
477 (void) sprintf(err_msg,
478 MSGSTR(10048,
479 " lstat() error: Cannot obtain status"
480 " for the device."));
481 break;
483 case L_SYMLINK_ERROR:
484 (void) sprintf(err_msg,
485 MSGSTR(10049,
486 " Error: Could not read the symbolic link."));
487 break;
489 case L_UNAME_FAILED:
490 (void) sprintf(err_msg,
491 MSGSTR(10050,
492 " uname() error: Could not obtain the"
493 " architeture of the host machine."));
494 break;
496 case L_DRVCONFIG_ERROR:
497 (void) sprintf(err_msg,
498 MSGSTR(10051,
499 " Error: Could not run drvconfig."));
500 break;
502 case L_DISKS_ERROR:
503 (void) sprintf(err_msg,
504 MSGSTR(10052,
505 " Error: Could not run disks."));
506 break;
508 case L_DEVLINKS_ERROR:
509 (void) sprintf(err_msg,
510 MSGSTR(10053,
511 " Error: Could not run devlinks."));
512 break;
514 case L_READ_DEV_DIR_ERROR:
515 (void) sprintf(err_msg,
516 MSGSTR(10054,
517 " Error: Could not read /dev/rdsk"
518 " directory."));
519 break;
521 case L_OPEN_ES_DIR_FAILED:
522 (void) sprintf(err_msg,
523 MSGSTR(10055,
524 " Error: Could not open /dev/es"
525 " directory."));
526 break;
528 case L_LSTAT_ES_DIR_ERROR:
529 (void) sprintf(err_msg,
530 MSGSTR(10056,
531 " lstat() error: Could not get status"
532 " for /dev/es directory."));
533 break;
535 case L_DEV_BUSY:
536 (void) sprintf(err_msg,
537 MSGSTR(10057,
538 " Error: Could not offline the device\n"
539 " May be Busy."));
540 break;
542 case L_EXCL_OPEN_FAILED:
543 (void) sprintf(err_msg,
544 MSGSTR(10058,
545 " Error: Could not open device in"
546 " exclusive mode."
547 " May already be open."));
548 break;
550 case L_DEVICE_RESERVED:
551 (void) sprintf(err_msg,
552 MSGSTR(10059,
553 " Error: Disk is reserved."));
554 break;
556 case L_DISKS_RESERVED:
557 (void) sprintf(err_msg,
558 MSGSTR(10060,
559 " Error: One or more disks in"
560 " SENA are reserved."));
561 break;
563 case L_SLOT_EMPTY:
564 (void) sprintf(err_msg,
565 MSGSTR(10061,
566 " Error: Slot is empty."));
567 break;
569 case L_ACQUIRE_FAIL:
570 (void) sprintf(err_msg,
571 MSGSTR(10062,
572 " Error: Could not acquire"
573 " the device."));
574 break;
576 case L_POWER_OFF_FAIL_BUSY:
577 (void) sprintf(err_msg,
578 MSGSTR(10063,
579 " Error: Could not power off the device.\n"
580 " May be Busy."));
581 break;
583 case L_ENCL_NAME_CHANGE_FAIL:
584 (void) sprintf(err_msg,
585 MSGSTR(10064,
586 " Error: The Enclosure name change failed."));
587 break;
589 case L_DUPLICATE_ENCLOSURES:
590 (void) sprintf(err_msg,
591 MSGSTR(10065,
592 " Error: There are two or more enclosures"
593 " with the same name."
594 " Please use a logical or physical"
595 " pathname."));
596 break;
598 case L_INVALID_NUM_DISKS_ENCL:
599 (void) sprintf(err_msg,
600 MSGSTR(10066,
601 " Error: The number of disks in the"
602 " front & rear of the enclosure are"
603 " different."
604 " This is not a supported configuration."));
605 break;
607 case L_ENCL_INVALID_PATH:
608 (void) sprintf(err_msg,
609 MSGSTR(10067,
610 " Error: Invalid path."
611 " Device is not a SENA subsystem."));
612 break;
614 case L_NO_ENCL_LIST_FOUND:
615 (void) sprintf(err_msg,
616 MSGSTR(10068,
617 " Error: Cannot get the Box list."));
618 break;
620 case L_IB_NO_ELEM_FOUND:
621 (void) sprintf(err_msg,
622 MSGSTR(10069,
623 " Error: No elements returned from"
624 " enclosure (IB)."));
625 break;
627 case L_GET_STATUS_FAILED:
628 (void) sprintf(err_msg,
629 MSGSTR(10070,
630 " Error: Get status failed."));
631 break;
633 case L_RD_PG_MIN_BUFF:
634 (void) sprintf(err_msg,
635 MSGSTR(10071,
636 " Error: Reading page from IB.\n"
637 " Buffer size too small."));
638 break;
640 case L_RD_PG_INVLD_CODE:
641 (void) sprintf(err_msg,
642 MSGSTR(10072,
643 " Error: Reading page from IB\n"
644 " Invalid page code or page len found."));
645 break;
647 case L_BP_BUSY_RESERVED:
648 (void) sprintf(err_msg,
649 MSGSTR(10073,
650 " Error: There is a busy or reserved disk"
651 " attached to this backplane.\n"
652 " You must close the disk,\n"
653 " or release the disk,\n"
654 " or resubmit the command using"
655 " the Force option."));
656 break;
658 case L_BP_BUSY:
659 (void) sprintf(err_msg,
660 MSGSTR(10074,
661 " Error: There is a busy disk"
662 " attached to this backplane.\n"
663 " You must close the disk,\n"
664 " or resubmit the command using"
665 " the Force option."));
666 break;
668 case L_BP_RESERVED:
669 (void) sprintf(err_msg,
670 MSGSTR(10075,
671 " Error: There is a reserved disk"
672 " attached to this backplane.\n"
673 " You must release the disk,\n"
674 " or resubmit the subcommand using"
675 " the Force option."));
676 break;
678 case L_NO_BP_ELEM_FOUND:
679 (void) sprintf(err_msg,
680 MSGSTR(10076,
681 " Error: No Back plane elements found"
682 " in the enclosure."));
683 break;
685 case L_SSA_CONFLICT:
686 (void) sprintf(err_msg,
687 MSGSTR(10077,
688 " There is a conflict between the "
689 "enclosure name and an SSA name of "
690 "same form, cN.\n"
691 " Please use a logical or physical "
692 "pathname."));
693 break;
695 case L_WARNING:
696 (void) sprintf(err_msg,
697 MSGSTR(10078, " Warning:"));
699 break;
701 case L_TH_JOIN:
702 (void) sprintf(err_msg,
703 MSGSTR(10079,
704 " Error: Thread join failed."));
705 break;
707 case L_FCIO_RESET_LINK_FAIL:
708 (void) sprintf(err_msg,
709 MSGSTR(10082,
710 " Error: FCIO_RESET_LINK ioctl failed.\n"
711 " Could not reset the loop."));
712 break;
714 case L_FCIO_GET_FCODE_REV_FAIL:
715 (void) sprintf(err_msg,
716 MSGSTR(10083,
717 " Error: FCIO_GET_FCODE_REV ioctl failed.\n"
718 " Could not get the fcode version."));
719 break;
721 case L_FCIO_GET_FW_REV_FAIL:
722 (void) sprintf(err_msg,
723 MSGSTR(10084,
724 " Error: FCIO_GET_FW_REV ioctl failed.\n"
725 " Could not get the firmware revision."));
726 break;
728 case L_NO_DEVICES_FOUND:
729 (void) sprintf(err_msg,
730 MSGSTR(10085,
731 " No FC devices found."));
732 break;
734 case L_INVALID_DEVICE_COUNT:
735 (void) sprintf(err_msg,
736 MSGSTR(10086,
737 " Error: FCIO_GET_DEV_LIST ioctl returned"
738 " an invalid device count."));
739 break;
741 case L_FCIO_GET_NUM_DEVS_FAIL:
742 (void) sprintf(err_msg,
743 MSGSTR(10087,
744 " Error: FCIO_GET_NUM_DEVS ioctl failed.\n"
745 " Could not get the number of devices."));
746 break;
748 case L_FCIO_GET_DEV_LIST_FAIL:
749 (void) sprintf(err_msg,
750 MSGSTR(10088,
751 " Error: FCIO_GET_DEV_LIST ioctl failed.\n"
752 " Could not get the device list."));
753 break;
755 case L_FCIO_GET_LINK_STATUS_FAIL:
756 (void) sprintf(err_msg,
757 MSGSTR(10089,
758 " Error: FCIO_GET_LINK_STATUS ioctl failed.\n"
759 " Could not get the link status."));
760 break;
762 case L_PORT_OFFLINE_FAIL:
763 (void) sprintf(err_msg,
764 MSGSTR(10090,
765 " Error: ioctl to offline the port failed."));
766 break;
768 case L_PORT_OFFLINE_UNSUPPORTED:
769 (void) sprintf(err_msg,
770 MSGSTR(10091,
771 " Error: The driver does not support ioctl to"
772 " disable the FCA port."));
773 break;
775 case L_PORT_ONLINE_FAIL:
776 (void) sprintf(err_msg,
777 MSGSTR(10092,
778 " Error: ioctl to online the port failed."));
779 break;
781 case L_PORT_ONLINE_UNSUPPORTED:
782 (void) sprintf(err_msg,
783 MSGSTR(10093,
784 " Error: The driver does not support ioctl to"
785 " enable the FCA port."));
786 break;
788 case L_FCP_TGT_INQUIRY_FAIL:
789 (void) sprintf(err_msg,
790 MSGSTR(10094,
791 " Error: FCP_TGT_INQUIRY ioctl failed.\n"
792 " Could not get the target inquiry data"
793 " from FCP."));
794 break;
796 case L_FSTAT_ERROR:
797 (void) sprintf(err_msg,
798 MSGSTR(10095,
799 " fstat() error: Cannot obtain status"
800 " for the device."));
801 break;
803 case L_FCIO_GET_HOST_PARAMS_FAIL:
804 (void) sprintf(err_msg,
805 MSGSTR(10097,
806 " Error: FCIO_GET_HOST_PARAMS ioctl failed.\n"
807 " Could not get the host parameters."));
808 break;
810 case L_STAT_ERROR:
811 (void) sprintf(err_msg,
812 MSGSTR(10099,
813 " stat() error: Cannot obtain status"
814 " for the device."));
815 break;
817 case L_DEV_SNAPSHOT_FAILED:
818 (void) sprintf(err_msg,
819 MSGSTR(10100,
820 " Error: Could not retrieve device tree"
821 " snapshot."));
822 break;
824 case L_LOOPBACK_UNSUPPORTED:
825 (void) sprintf(err_msg,
826 MSGSTR(10101,
827 " Error: Loopback mode is unsupported for this"
828 " device."));
829 break;
831 case L_LOOPBACK_FAILED:
832 (void) sprintf(err_msg,
833 MSGSTR(10102,
834 " Error: Error occurred during loopback mode"
835 " set."));
836 break;
838 case L_FCIO_GET_TOPOLOGY_FAIL:
839 (void) sprintf(err_msg,
840 MSGSTR(10103,
841 " Error: FCIO_GET_TOPOLOGY ioctl failed.\n"
842 " Could not get the fca port topology."));
843 break;
845 case L_UNEXPECTED_FC_TOPOLOGY:
846 (void) sprintf(err_msg,
847 MSGSTR(10104,
848 " Error: Unexpected Fibre Channel topology"
849 " found."));
850 break;
852 case L_INVALID_PRIVATE_LOOP_ADDRESS:
853 (void) sprintf(err_msg,
854 MSGSTR(10105,
855 " Error: AL_PA is not a valid private loop"
856 " address."));
857 break;
859 case L_NO_FABRIC_ADDR_FOUND:
860 (void) sprintf(err_msg,
861 MSGSTR(10106,
862 " Error: Could not find the fabric address"
863 " for the device at physical path."));
864 break;
866 case L_INVALID_FABRIC_ADDRESS:
867 (void) sprintf(err_msg,
868 MSGSTR(10107,
869 " Error: Device port address on the Fabric"
870 " topology is not valid."));
871 break;
873 case L_PT_PT_FC_TOP_NOT_SUPPORTED:
874 (void) sprintf(err_msg,
875 MSGSTR(10108,
876 " Error: Point to Point Fibre Channel "
877 "topology is currently not supported."));
878 break;
880 case L_FCIO_DEV_LOGIN_FAIL:
881 (void) sprintf(err_msg,
882 MSGSTR(10310,
883 " Error: FCIO_DEV_LOGIN ioctl failed."));
884 break;
886 case L_FCIO_DEV_LOGOUT_FAIL:
887 (void) sprintf(err_msg,
888 MSGSTR(10311,
889 " Error: FCIO_DEV_LOGOUT ioctl failed."));
890 break;
892 case L_OPNOSUPP_ON_TOPOLOGY:
893 (void) sprintf(err_msg,
894 MSGSTR(10312,
895 " Error: operation not supported "
896 "on connected topology."));
897 break;
899 case L_INVALID_PATH_TYPE:
900 (void) sprintf(err_msg,
901 MSGSTR(10313,
902 " Error: operation not supported "
903 "on the path."));
904 break;
906 case L_FCIO_GET_STATE_FAIL:
907 (void) sprintf(err_msg,
908 MSGSTR(10314,
909 " Error: FCIO_GET_STATE ioctl failed."));
910 break;
912 case L_WWN_NOT_FOUND_IN_DEV_LIST:
913 (void) sprintf(err_msg,
914 MSGSTR(10315,
915 " Error: device WWN not found in "
916 "device list."));
917 break;
919 case L_STAT_RMT_DIR_ERROR:
920 (void) sprintf(err_msg,
921 MSGSTR(10110,
922 " stat() error: Could not get status"
923 " for /dev/rmt directory."));
924 break;
926 case L_STAT_DEV_DIR_ERROR:
927 (void) sprintf(err_msg,
928 MSGSTR(10111,
929 " stat() error: Could not get status"
930 " for /dev/dsk directory."));
931 break;
933 case L_PROM_INIT_FAILED:
934 (void) sprintf(err_msg,
935 MSGSTR(10234,
936 " Error: di_prom_init failure"));
937 break;
939 case L_PORT_DRIVER_NOT_FOUND:
940 (void) sprintf(err_msg,
941 MSGSTR(10113,
942 " Error: requested port driver"
943 " does not exist"));
944 break;
946 case L_PHYS_PATH_NOT_FOUND:
947 (void) sprintf(err_msg,
948 MSGSTR(10114,
949 " Error: requested phys path does not exist"));
950 break;
952 case L_GET_DEV_LIST_ULP_FAILURE:
953 (void) sprintf(err_msg,
954 MSGSTR(10150,
955 " Error: g_get_dev_list failed on ULP "
956 "processing of target device(s)"));
957 break;
959 case L_SCSI_VHCI_ERROR:
960 (void) sprintf(err_msg,
961 MSGSTR(10230,
962 " Error: Unable to perform failover"));
963 break;
965 case L_SCSI_VHCI_ALREADY_ACTIVE:
966 (void) sprintf(err_msg,
967 MSGSTR(10231,
968 " Error: Pathclass already active"));
969 break;
971 case L_NO_DEVID:
972 (void) sprintf(err_msg,
973 MSGSTR(10232,
974 " Error: No device identifier found"));
975 break;
977 case L_DRIVER_NOTSUPP:
978 (void) sprintf(err_msg,
979 MSGSTR(10233,
980 " Error: Driver not supported"));
981 break;
983 case L_PROC_WWN_ARG_ERROR:
984 (void) sprintf(err_msg,
985 MSGSTR(10235,
986 " Error: process WWN argument"));
987 break;
989 case L_NO_WWN_PROP_FOUND:
990 (void) sprintf(err_msg,
991 MSGSTR(10236,
992 " Error: WWN prop not found"));
993 break;
995 case L_NO_DRIVER_NODES_FOUND:
996 (void) sprintf(err_msg,
997 MSGSTR(10237,
998 " Error: Requested driver nodes not found"));
999 break;
1001 case L_INVALID_MAP_DEV_ADDR:
1002 (void) sprintf(err_msg,
1003 MSGSTR(10330,
1004 " Error: Invalid map device handle found"));
1005 break;
1007 case L_INVALID_MAP_DEV_PROP_TYPE:
1008 (void) sprintf(err_msg,
1009 MSGSTR(10331,
1010 " Error: Invalid device property type found"));
1011 break;
1013 case L_INVALID_MAP_DEV_PROP_NAME:
1014 (void) sprintf(err_msg,
1015 MSGSTR(10332,
1016 " Error: Invalid device property name found"));
1017 break;
1019 case L_INVALID_MAP_DEV_PROP:
1020 (void) sprintf(err_msg,
1021 MSGSTR(10333,
1022 " Error: Invalid device property handle "
1023 "found"));
1024 break;
1026 case L_SCSI_VHCI_NO_STANDBY:
1027 (void) sprintf(err_msg,
1028 MSGSTR(10334,
1029 " Error: Unable to perform failover, "
1030 "standby path unavailable"));
1031 break;
1033 case L_SCSI_VHCI_FAILOVER_NOTSUP:
1034 (void) sprintf(err_msg,
1035 MSGSTR(10335,
1036 " Error: Device does not support failover"));
1037 break;
1039 case L_SCSI_VHCI_FAILOVER_BUSY:
1040 (void) sprintf(err_msg,
1041 MSGSTR(10336,
1042 " Error: Failover currently in progress"));
1043 break;
1045 case L_NO_SUCH_DEV_FOUND:
1046 (void) sprintf(err_msg,
1047 MSGSTR(10337,
1048 " Error: No such device found"));
1049 break;
1051 case L_NO_SUCH_PROP_FOUND:
1052 (void) sprintf(err_msg,
1053 MSGSTR(10338,
1054 " Error: No such property found"));
1055 break;
1057 case L_INVALID_ARG:
1058 (void) sprintf(err_msg,
1059 MSGSTR(10339,
1060 " Error: Invalid argument found"));
1061 break;
1063 default:
1065 if (((L_SCSI_ERROR ^ errornum) == STATUS_GOOD) ||
1066 ((L_SCSI_ERROR ^ errornum) == STATUS_BUSY) ||
1067 ((L_SCSI_ERROR ^ errornum) == STATUS_CHECK) ||
1068 ((L_SCSI_ERROR ^ errornum) == STATUS_MET) ||
1069 ((L_SCSI_ERROR ^ errornum) == STATUS_INTERMEDIATE) ||
1070 ((L_SCSI_ERROR ^ errornum) == STATUS_INTERMEDIATE_MET) ||
1071 ((L_SCSI_ERROR ^ errornum) == STATUS_RESERVATION_CONFLICT) ||
1072 ((L_SCSI_ERROR ^ errornum) == STATUS_TERMINATED) ||
1073 ((L_SCSI_ERROR ^ errornum) == STATUS_QFULL)) {
1074 (void) sprintf(err_msg,
1075 MSGSTR(10080,
1076 " SCSI Error - Sense Byte:(0x%x) %s \n"
1077 " Error: Retry failed."),
1078 (L_SCSI_ERROR ^ errornum) & STATUS_MASK,
1079 decode_sense_byte((uchar_t)L_SCSI_ERROR ^ errornum));
1080 } else {
1081 (void) sprintf(err_msg,
1082 MSGSTR(10081,
1083 " Error: could not decode the"
1084 " error message.\n"
1085 " The given error message is not"
1086 " defined in the library.\n"
1087 " Message number: %d.\n"), errornum);
1090 } /* end of switch */
1092 errStrg = g_alloc_string(err_msg);
1094 return (errStrg);