xref: /freebsd/contrib/openbsm/libbsm/bsm_errno.c (revision aa77200569e397d6ff1fdb4d255d0fa254d0a128)
17a0a89d2SRobert Watson /*-
27a0a89d2SRobert Watson  * Copyright (c) 2008 Apple Inc.
37a0a89d2SRobert Watson  * All rights reserved.
47a0a89d2SRobert Watson  *
57a0a89d2SRobert Watson  * Redistribution and use in source and binary forms, with or without
67a0a89d2SRobert Watson  * modification, are permitted provided that the following conditions
77a0a89d2SRobert Watson  * are met:
87a0a89d2SRobert Watson  * 1.  Redistributions of source code must retain the above copyright
97a0a89d2SRobert Watson  *     notice, this list of conditions and the following disclaimer.
107a0a89d2SRobert Watson  * 2.  Redistributions in binary form must reproduce the above copyright
117a0a89d2SRobert Watson  *     notice, this list of conditions and the following disclaimer in the
127a0a89d2SRobert Watson  *     documentation and/or other materials provided with the distribution.
137a0a89d2SRobert Watson  * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
147a0a89d2SRobert Watson  *     its contributors may be used to endorse or promote products derived
157a0a89d2SRobert Watson  *     from this software without specific prior written permission.
167a0a89d2SRobert Watson  *
177a0a89d2SRobert Watson  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND
187a0a89d2SRobert Watson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
197a0a89d2SRobert Watson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
207a0a89d2SRobert Watson  * ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR
217a0a89d2SRobert Watson  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
227a0a89d2SRobert Watson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
237a0a89d2SRobert Watson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
247a0a89d2SRobert Watson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
257a0a89d2SRobert Watson  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
267a0a89d2SRobert Watson  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
277a0a89d2SRobert Watson  * POSSIBILITY OF SUCH DAMAGE.
287a0a89d2SRobert Watson  *
29*aa772005SRobert Watson  * $P4: //depot/projects/trustedbsd/openbsm/libbsm/bsm_errno.c#22 $
307a0a89d2SRobert Watson  */
317a0a89d2SRobert Watson 
327a0a89d2SRobert Watson #include <sys/types.h>
337a0a89d2SRobert Watson 
347a0a89d2SRobert Watson #include <config/config.h>
357a0a89d2SRobert Watson 
367a0a89d2SRobert Watson #include <bsm/audit_errno.h>
377a0a89d2SRobert Watson #include <bsm/libbsm.h>
387a0a89d2SRobert Watson 
397a0a89d2SRobert Watson #include <errno.h>
407a0a89d2SRobert Watson #include <string.h>
417a0a89d2SRobert Watson 
427a0a89d2SRobert Watson /*
437a0a89d2SRobert Watson  * Different operating systems use different numeric constants for different
447a0a89d2SRobert Watson  * error numbers, and sometimes error numbers don't exist in more than one
457a0a89d2SRobert Watson  * operating system.  These routines convert between BSM and local error
467a0a89d2SRobert Watson  * number spaces, subject to the above realities.  BSM error numbers are
477a0a89d2SRobert Watson  * stored in a single 8-bit character, so don't have a byte order.
48c74c7b73SRobert Watson  *
49c74c7b73SRobert Watson  * Don't include string definitions when this code is compiled into a kernel.
507a0a89d2SRobert Watson  */
51c74c7b73SRobert Watson struct bsm_errno {
52c74c7b73SRobert Watson 	int		 be_bsm_errno;
53c74c7b73SRobert Watson 	int		 be_local_errno;
54c74c7b73SRobert Watson #if !defined(KERNEL) && !defined(_KERNEL)
557a0a89d2SRobert Watson 	const char	*be_strerror;
56c74c7b73SRobert Watson #endif
577a0a89d2SRobert Watson };
587a0a89d2SRobert Watson 
597a0a89d2SRobert Watson #define	ERRNO_NO_LOCAL_MAPPING	-600
607a0a89d2SRobert Watson 
61c74c7b73SRobert Watson #if !defined(KERNEL) && !defined(_KERNEL)
62c74c7b73SRobert Watson #define	ES(x)	x
63c74c7b73SRobert Watson #else
64c74c7b73SRobert Watson #define	ES(x)
65c74c7b73SRobert Watson #endif
66c74c7b73SRobert Watson 
677a0a89d2SRobert Watson /*
687a0a89d2SRobert Watson  * Mapping table -- please maintain in numeric sorted order with respect to
697a0a89d2SRobert Watson  * the BSM constant.  Today we do a linear lookup, but could switch to a
707a0a89d2SRobert Watson  * binary search if it makes sense.  We only ifdef errors that aren't
717a0a89d2SRobert Watson  * generally available, but it does make the table a lot more ugly.
727a0a89d2SRobert Watson  *
737a0a89d2SRobert Watson  * XXXRW: It would be nice to have a similar ordered table mapping to BSM
747a0a89d2SRobert Watson  * constant from local constant, but the order of local constants varies by
757a0a89d2SRobert Watson  * OS.  Really we need to build that table at compile-time but don't do that
767a0a89d2SRobert Watson  * yet.
777a0a89d2SRobert Watson  *
787a0a89d2SRobert Watson  * XXXRW: We currently embed English-language error strings here, but should
797a0a89d2SRobert Watson  * support catalogues; these are only used if the OS doesn't have an error
807a0a89d2SRobert Watson  * string using strerror(3).
817a0a89d2SRobert Watson  */
82c74c7b73SRobert Watson static const struct bsm_errno bsm_errnos[] = {
83c74c7b73SRobert Watson 	{ BSM_ERRNO_ESUCCESS, 0, ES("Success") },
84c74c7b73SRobert Watson 	{ BSM_ERRNO_EPERM, EPERM, ES("Operation not permitted") },
85c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOENT, ENOENT, ES("No such file or directory") },
86c74c7b73SRobert Watson 	{ BSM_ERRNO_ESRCH, ESRCH, ES("No such process") },
87c74c7b73SRobert Watson 	{ BSM_ERRNO_EINTR, EINTR, ES("Interrupted system call") },
88c74c7b73SRobert Watson 	{ BSM_ERRNO_EIO, EIO, ES("Input/output error") },
89c74c7b73SRobert Watson 	{ BSM_ERRNO_ENXIO, ENXIO, ES("Device not configured") },
90c74c7b73SRobert Watson 	{ BSM_ERRNO_E2BIG, E2BIG, ES("Argument list too long") },
91c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOEXEC, ENOEXEC, ES("Exec format error") },
92c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADF, EBADF, ES("Bad file descriptor") },
93c74c7b73SRobert Watson 	{ BSM_ERRNO_ECHILD, ECHILD, ES("No child processes") },
94c74c7b73SRobert Watson 	{ BSM_ERRNO_EAGAIN, EAGAIN, ES("Resource temporarily unavailable") },
95c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOMEM, ENOMEM, ES("Cannot allocate memory") },
96c74c7b73SRobert Watson 	{ BSM_ERRNO_EACCES, EACCES, ES("Permission denied") },
97c74c7b73SRobert Watson 	{ BSM_ERRNO_EFAULT, EFAULT, ES("Bad address") },
98c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTBLK, ENOTBLK, ES("Block device required") },
99c74c7b73SRobert Watson 	{ BSM_ERRNO_EBUSY, EBUSY, ES("Device busy") },
100c74c7b73SRobert Watson 	{ BSM_ERRNO_EEXIST, EEXIST, ES("File exists") },
101c74c7b73SRobert Watson 	{ BSM_ERRNO_EXDEV, EXDEV, ES("Cross-device link") },
102c74c7b73SRobert Watson 	{ BSM_ERRNO_ENODEV, ENODEV, ES("Operation not supported by device") },
103c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTDIR, ENOTDIR, ES("Not a directory") },
104c74c7b73SRobert Watson 	{ BSM_ERRNO_EISDIR, EISDIR, ES("Is a directory") },
105c74c7b73SRobert Watson 	{ BSM_ERRNO_EINVAL, EINVAL, ES("Invalid argument") },
106c74c7b73SRobert Watson 	{ BSM_ERRNO_ENFILE, ENFILE, ES("Too many open files in system") },
107c74c7b73SRobert Watson 	{ BSM_ERRNO_EMFILE, EMFILE, ES("Too many open files") },
108c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTTY, ENOTTY, ES("Inappropriate ioctl for device") },
109c74c7b73SRobert Watson 	{ BSM_ERRNO_ETXTBSY, ETXTBSY, ES("Text file busy") },
110c74c7b73SRobert Watson 	{ BSM_ERRNO_EFBIG, EFBIG, ES("File too large") },
111c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOSPC, ENOSPC, ES("No space left on device") },
112c74c7b73SRobert Watson 	{ BSM_ERRNO_ESPIPE, ESPIPE, ES("Illegal seek") },
113c74c7b73SRobert Watson 	{ BSM_ERRNO_EROFS, EROFS, ES("Read-only file system") },
114c74c7b73SRobert Watson 	{ BSM_ERRNO_EMLINK, EMLINK, ES("Too many links") },
115c74c7b73SRobert Watson 	{ BSM_ERRNO_EPIPE, EPIPE, ES("Broken pipe") },
116c74c7b73SRobert Watson 	{ BSM_ERRNO_EDOM, EDOM, ES("Numerical argument out of domain") },
117c74c7b73SRobert Watson 	{ BSM_ERRNO_ERANGE, ERANGE, ES("Result too large") },
118c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOMSG, ENOMSG, ES("No message of desired type") },
119c74c7b73SRobert Watson 	{ BSM_ERRNO_EIDRM, EIDRM, ES("Identifier removed") },
120c74c7b73SRobert Watson 	{ BSM_ERRNO_ECHRNG,
1217a0a89d2SRobert Watson #ifdef ECHRNG
1227a0a89d2SRobert Watson 	ECHRNG,
1237a0a89d2SRobert Watson #else
1247a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1257a0a89d2SRobert Watson #endif
126c74c7b73SRobert Watson 	ES("Channel number out of range") },
127c74c7b73SRobert Watson 	{ BSM_ERRNO_EL2NSYNC,
1287a0a89d2SRobert Watson #ifdef EL2NSYNC
1297a0a89d2SRobert Watson 	EL2NSYNC,
1307a0a89d2SRobert Watson #else
1317a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1327a0a89d2SRobert Watson #endif
133c74c7b73SRobert Watson 	ES("Level 2 not synchronized") },
134c74c7b73SRobert Watson 	{ BSM_ERRNO_EL3HLT,
1357a0a89d2SRobert Watson #ifdef EL3HLT
1367a0a89d2SRobert Watson 	EL3HLT,
1377a0a89d2SRobert Watson #else
1387a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1397a0a89d2SRobert Watson #endif
140c74c7b73SRobert Watson 	ES("Level 3 halted") },
141c74c7b73SRobert Watson 	{ BSM_ERRNO_EL3RST,
1427a0a89d2SRobert Watson #ifdef EL3RST
1437a0a89d2SRobert Watson 	EL3RST,
1447a0a89d2SRobert Watson #else
1457a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1467a0a89d2SRobert Watson #endif
147c74c7b73SRobert Watson 	ES("Level 3 reset") },
148c74c7b73SRobert Watson 	{ BSM_ERRNO_ELNRNG,
1497a0a89d2SRobert Watson #ifdef ELNRNG
1507a0a89d2SRobert Watson 	ELNRNG,
1517a0a89d2SRobert Watson #else
1527a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1537a0a89d2SRobert Watson #endif
154c74c7b73SRobert Watson 	ES("Link number out of range") },
155c74c7b73SRobert Watson 	{ BSM_ERRNO_EUNATCH,
1567a0a89d2SRobert Watson #ifdef EUNATCH
1577a0a89d2SRobert Watson 	EUNATCH,
1587a0a89d2SRobert Watson #else
1597a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1607a0a89d2SRobert Watson #endif
161c74c7b73SRobert Watson 	ES("Protocol driver not attached") },
162c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOCSI,
1637a0a89d2SRobert Watson #ifdef ENOCSI
1647a0a89d2SRobert Watson 	ENOCSI,
1657a0a89d2SRobert Watson #else
1667a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1677a0a89d2SRobert Watson #endif
168c74c7b73SRobert Watson 	ES("No CSI structure available") },
169c74c7b73SRobert Watson 	{ BSM_ERRNO_EL2HLT,
1707a0a89d2SRobert Watson #ifdef EL2HLT
1717a0a89d2SRobert Watson 	EL2HLT,
1727a0a89d2SRobert Watson #else
1737a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1747a0a89d2SRobert Watson #endif
175c74c7b73SRobert Watson 	ES("Level 2 halted") },
176c74c7b73SRobert Watson 	{ BSM_ERRNO_EDEADLK, EDEADLK, ES("Resource deadlock avoided") },
177c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOLCK, ENOLCK, ES("No locks available") },
178c74c7b73SRobert Watson 	{ BSM_ERRNO_ECANCELED, ECANCELED, ES("Operation canceled") },
179c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTSUP, ENOTSUP, ES("Operation not supported") },
180c74c7b73SRobert Watson 	{ BSM_ERRNO_EDQUOT, EDQUOT, ES("Disc quota exceeded") },
181c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADE,
1827a0a89d2SRobert Watson #ifdef EBADE
1837a0a89d2SRobert Watson 	EBADE,
1847a0a89d2SRobert Watson #else
1857a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1867a0a89d2SRobert Watson #endif
187c74c7b73SRobert Watson 	ES("Invalid exchange") },
188c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADR,
1897a0a89d2SRobert Watson #ifdef EBADR
1907a0a89d2SRobert Watson 	EBADR,
1917a0a89d2SRobert Watson #else
1927a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
1937a0a89d2SRobert Watson #endif
194c74c7b73SRobert Watson 	ES("Invalid request descriptor") },
195c74c7b73SRobert Watson 	{ BSM_ERRNO_EXFULL,
1967a0a89d2SRobert Watson #ifdef EXFULL
1977a0a89d2SRobert Watson 	EXFULL,
1987a0a89d2SRobert Watson #else
1997a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2007a0a89d2SRobert Watson #endif
201c74c7b73SRobert Watson 	ES("Exchange full") },
202c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOANO,
2037a0a89d2SRobert Watson #ifdef ENOANO
2047a0a89d2SRobert Watson 	ENOANO,
2057a0a89d2SRobert Watson #else
2067a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2077a0a89d2SRobert Watson #endif
208c74c7b73SRobert Watson 	ES("No anode") },
209c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADRQC,
2107a0a89d2SRobert Watson #ifdef EBADRQC
2117a0a89d2SRobert Watson 	EBADRQC,
2127a0a89d2SRobert Watson #else
2137a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2147a0a89d2SRobert Watson #endif
215c74c7b73SRobert Watson 	ES("Invalid request descriptor") },
216c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADSLT,
2177a0a89d2SRobert Watson #ifdef EBADSLT
2187a0a89d2SRobert Watson 	EBADSLT,
2197a0a89d2SRobert Watson #else
2207a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2217a0a89d2SRobert Watson #endif
222c74c7b73SRobert Watson 	ES("Invalid slot") },
223c74c7b73SRobert Watson 	{ BSM_ERRNO_EDEADLOCK,
2247a0a89d2SRobert Watson #ifdef EDEADLOCK
2257a0a89d2SRobert Watson 	EDEADLOCK,
2267a0a89d2SRobert Watson #else
2277a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2287a0a89d2SRobert Watson #endif
229c74c7b73SRobert Watson 	ES("Resource deadlock avoided") },
230c74c7b73SRobert Watson 	{ BSM_ERRNO_EBFONT,
2317a0a89d2SRobert Watson #ifdef EBFONT
2327a0a89d2SRobert Watson 	EBFONT,
2337a0a89d2SRobert Watson #else
2347a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2357a0a89d2SRobert Watson #endif
236c74c7b73SRobert Watson 	ES("Bad font file format") },
237c74c7b73SRobert Watson 	{ BSM_ERRNO_EOWNERDEAD,
2387a0a89d2SRobert Watson #ifdef EOWNERDEAD
2397a0a89d2SRobert Watson 	EOWNERDEAD,
2407a0a89d2SRobert Watson #else
2417a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2427a0a89d2SRobert Watson #endif
243c74c7b73SRobert Watson 	ES("Process died with the lock") },
244c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTRECOVERABLE,
2457a0a89d2SRobert Watson #ifdef ENOTRECOVERABLE
2467a0a89d2SRobert Watson 	ENOTRECOVERABLE,
2477a0a89d2SRobert Watson #else
2487a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2497a0a89d2SRobert Watson #endif
250c74c7b73SRobert Watson 	ES("Lock is not recoverable") },
251c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOSTR,
2527a0a89d2SRobert Watson #ifdef ENOSTR
2537a0a89d2SRobert Watson 	ENOSTR,
2547a0a89d2SRobert Watson #else
2557a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2567a0a89d2SRobert Watson #endif
257c74c7b73SRobert Watson 	ES("Device not a stream") },
258c74c7b73SRobert Watson 	{ BSM_ERRNO_ENONET,
2597a0a89d2SRobert Watson #ifdef ENONET
2607a0a89d2SRobert Watson 	ENONET,
2617a0a89d2SRobert Watson #else
2627a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2637a0a89d2SRobert Watson #endif
264c74c7b73SRobert Watson 	ES("Machine is not on the network") },
265c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOPKG,
2667a0a89d2SRobert Watson #ifdef ENOPKG
2677a0a89d2SRobert Watson 	ENOPKG,
2687a0a89d2SRobert Watson #else
2697a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2707a0a89d2SRobert Watson #endif
271c74c7b73SRobert Watson 	ES("Package not installed") },
272c74c7b73SRobert Watson 	{ BSM_ERRNO_EREMOTE, EREMOTE,
273c74c7b73SRobert Watson 	    ES("Too many levels of remote in path") },
274c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOLINK,
2757a0a89d2SRobert Watson #ifdef ENOLINK
2767a0a89d2SRobert Watson 	ENOLINK,
2777a0a89d2SRobert Watson #else
2787a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2797a0a89d2SRobert Watson #endif
280c74c7b73SRobert Watson 	ES("Link has been severed") },
281c74c7b73SRobert Watson 	{ BSM_ERRNO_EADV,
2827a0a89d2SRobert Watson #ifdef EADV
2837a0a89d2SRobert Watson 	EADV,
2847a0a89d2SRobert Watson #else
2857a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2867a0a89d2SRobert Watson #endif
287c74c7b73SRobert Watson 	ES("Advertise error") },
288c74c7b73SRobert Watson 	{ BSM_ERRNO_ESRMNT,
2897a0a89d2SRobert Watson #ifdef ESRMNT
2907a0a89d2SRobert Watson 	ESRMNT,
2917a0a89d2SRobert Watson #else
2927a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
2937a0a89d2SRobert Watson #endif
294c74c7b73SRobert Watson 	ES("srmount error") },
295c74c7b73SRobert Watson 	{ BSM_ERRNO_ECOMM,
2967a0a89d2SRobert Watson #ifdef ECOMM
2977a0a89d2SRobert Watson 	ECOMM,
2987a0a89d2SRobert Watson #else
2997a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3007a0a89d2SRobert Watson #endif
301c74c7b73SRobert Watson 	ES("Communication error on send") },
302c74c7b73SRobert Watson 	{ BSM_ERRNO_EPROTO,
3037a0a89d2SRobert Watson #ifdef EPROTO
3047a0a89d2SRobert Watson 	EPROTO,
3057a0a89d2SRobert Watson #else
3067a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3077a0a89d2SRobert Watson #endif
308c74c7b73SRobert Watson 	ES("Protocol error") },
309c74c7b73SRobert Watson 	{ BSM_ERRNO_ELOCKUNMAPPED,
3107a0a89d2SRobert Watson #ifdef ELOCKUNMAPPED
3117a0a89d2SRobert Watson 	ELOCKUNMAPPED,
3127a0a89d2SRobert Watson #else
3137a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3147a0a89d2SRobert Watson #endif
315c74c7b73SRobert Watson 	ES("Locked lock was unmapped") },
316c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTACTIVE,
3177a0a89d2SRobert Watson #ifdef ENOTACTIVE
3187a0a89d2SRobert Watson 	ENOTACTIVE,
3197a0a89d2SRobert Watson #else
3207a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3217a0a89d2SRobert Watson #endif
322c74c7b73SRobert Watson 	ES("Facility is not active") },
323c74c7b73SRobert Watson 	{ BSM_ERRNO_EMULTIHOP,
3247a0a89d2SRobert Watson #ifdef EMULTIHOP
3257a0a89d2SRobert Watson 	EMULTIHOP,
3267a0a89d2SRobert Watson #else
3277a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3287a0a89d2SRobert Watson #endif
329c74c7b73SRobert Watson 	ES("Multihop attempted") },
330c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADMSG,
3317a0a89d2SRobert Watson #ifdef EBADMSG
3327a0a89d2SRobert Watson 	EBADMSG,
3337a0a89d2SRobert Watson #else
3347a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3357a0a89d2SRobert Watson #endif
336c74c7b73SRobert Watson 	ES("Bad message") },
337c74c7b73SRobert Watson 	{ BSM_ERRNO_ENAMETOOLONG, ENAMETOOLONG, ES("File name too long") },
338c74c7b73SRobert Watson 	{ BSM_ERRNO_EOVERFLOW, EOVERFLOW,
339c74c7b73SRobert Watson 	    ES("Value too large to be stored in data type") },
340c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTUNIQ,
3417a0a89d2SRobert Watson #ifdef ENOTUNIQ
3427a0a89d2SRobert Watson 	ENOTUNIQ,
3437a0a89d2SRobert Watson #else
3447a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3457a0a89d2SRobert Watson #endif
346c74c7b73SRobert Watson 	ES("Given log name not unique") },
347c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADFD,
3487a0a89d2SRobert Watson #ifdef EBADFD
3497a0a89d2SRobert Watson 	EBADFD,
3507a0a89d2SRobert Watson #else
3517a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3527a0a89d2SRobert Watson #endif
353c74c7b73SRobert Watson 	ES("Given f.d. invalid for this operation") },
354c74c7b73SRobert Watson 	{ BSM_ERRNO_EREMCHG,
3557a0a89d2SRobert Watson #ifdef EREMCHG
3567a0a89d2SRobert Watson 	EREMCHG,
3577a0a89d2SRobert Watson #else
3587a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3597a0a89d2SRobert Watson #endif
360c74c7b73SRobert Watson 	ES("Remote address changed") },
361c74c7b73SRobert Watson 	{ BSM_ERRNO_ELIBACC,
3627a0a89d2SRobert Watson #ifdef ELIBACC
3637a0a89d2SRobert Watson 	ELIBACC,
3647a0a89d2SRobert Watson #else
3657a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3667a0a89d2SRobert Watson #endif
367c74c7b73SRobert Watson 	ES("Can't access a needed shared lib") },
368c74c7b73SRobert Watson 	{ BSM_ERRNO_ELIBBAD,
3697a0a89d2SRobert Watson #ifdef ELIBBAD
3707a0a89d2SRobert Watson 	ELIBBAD,
3717a0a89d2SRobert Watson #else
3727a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3737a0a89d2SRobert Watson #endif
374c74c7b73SRobert Watson 	ES("Accessing a corrupted shared lib") },
375c74c7b73SRobert Watson 	{ BSM_ERRNO_ELIBSCN,
3767a0a89d2SRobert Watson #ifdef ELIBSCN
3777a0a89d2SRobert Watson 	ELIBSCN,
3787a0a89d2SRobert Watson #else
3797a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3807a0a89d2SRobert Watson #endif
381c74c7b73SRobert Watson 	ES(".lib section in a.out corrupted") },
382c74c7b73SRobert Watson 	{ BSM_ERRNO_ELIBMAX,
3837a0a89d2SRobert Watson #ifdef ELIBMAX
3847a0a89d2SRobert Watson 	ELIBMAX,
3857a0a89d2SRobert Watson #else
3867a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3877a0a89d2SRobert Watson #endif
388c74c7b73SRobert Watson 	ES("Attempting to link in too many libs") },
389c74c7b73SRobert Watson 	{ BSM_ERRNO_ELIBEXEC,
3907a0a89d2SRobert Watson #ifdef ELIBEXEC
3917a0a89d2SRobert Watson 	ELIBEXEC,
3927a0a89d2SRobert Watson #else
3937a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
3947a0a89d2SRobert Watson #endif
395c74c7b73SRobert Watson 	ES("Attempting to exec a shared library") },
396c74c7b73SRobert Watson 	{ BSM_ERRNO_EILSEQ, EILSEQ, ES("Illegal byte sequence") },
397c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOSYS, ENOSYS, ES("Function not implemented") },
398c74c7b73SRobert Watson 	{ BSM_ERRNO_ELOOP, ELOOP, ES("Too many levels of symbolic links") },
399c74c7b73SRobert Watson 	{ BSM_ERRNO_ERESTART,
4007a0a89d2SRobert Watson #ifdef ERESTART
4017a0a89d2SRobert Watson 	ERESTART,
4027a0a89d2SRobert Watson #else
4037a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
4047a0a89d2SRobert Watson #endif
405c74c7b73SRobert Watson 	ES("Restart syscall") },
406c74c7b73SRobert Watson 	{ BSM_ERRNO_ESTRPIPE,
4077a0a89d2SRobert Watson #ifdef ESTRPIPE
4087a0a89d2SRobert Watson 	ESTRPIPE,
4097a0a89d2SRobert Watson #else
4107a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
4117a0a89d2SRobert Watson #endif
412c74c7b73SRobert Watson 	ES("If pipe/FIFO, don't sleep in stream head") },
413c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTEMPTY, ENOTEMPTY, ES("Directory not empty") },
414c74c7b73SRobert Watson 	{ BSM_ERRNO_EUSERS, EUSERS, ES("Too many users") },
415c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTSOCK, ENOTSOCK,
416c74c7b73SRobert Watson 	    ES("Socket operation on non-socket") },
417c74c7b73SRobert Watson 	{ BSM_ERRNO_EDESTADDRREQ, EDESTADDRREQ,
418c74c7b73SRobert Watson 	    ES("Destination address required") },
419c74c7b73SRobert Watson 	{ BSM_ERRNO_EMSGSIZE, EMSGSIZE, ES("Message too long") },
420c74c7b73SRobert Watson 	{ BSM_ERRNO_EPROTOTYPE, EPROTOTYPE,
421c74c7b73SRobert Watson 	    ES("Protocol wrong type for socket") },
422c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOPROTOOPT, ENOPROTOOPT, ES("Protocol not available") },
423c74c7b73SRobert Watson 	{ BSM_ERRNO_EPROTONOSUPPORT, EPROTONOSUPPORT,
424c74c7b73SRobert Watson 	    ES("Protocol not supported") },
425c74c7b73SRobert Watson 	{ BSM_ERRNO_ESOCKTNOSUPPORT, ESOCKTNOSUPPORT,
426c74c7b73SRobert Watson 	    ES("Socket type not supported") },
427c74c7b73SRobert Watson 	{ BSM_ERRNO_EOPNOTSUPP, EOPNOTSUPP, ES("Operation not supported") },
428c74c7b73SRobert Watson 	{ BSM_ERRNO_EPFNOSUPPORT, EPFNOSUPPORT,
429c74c7b73SRobert Watson 	    ES("Protocol family not supported") },
430c74c7b73SRobert Watson 	{ BSM_ERRNO_EAFNOSUPPORT, EAFNOSUPPORT,
431c74c7b73SRobert Watson 	    ES("Address family not supported by protocol family") },
432c74c7b73SRobert Watson 	{ BSM_ERRNO_EADDRINUSE, EADDRINUSE, ES("Address already in use") },
433c74c7b73SRobert Watson 	{ BSM_ERRNO_EADDRNOTAVAIL, EADDRNOTAVAIL,
434c74c7b73SRobert Watson 	    ES("Can't assign requested address") },
435c74c7b73SRobert Watson 	{ BSM_ERRNO_ENETDOWN, ENETDOWN, ES("Network is down") },
436c74c7b73SRobert Watson 	{ BSM_ERRNO_ENETRESET, ENETRESET,
437c74c7b73SRobert Watson 	    ES("Network dropped connection on reset") },
438c74c7b73SRobert Watson 	{ BSM_ERRNO_ECONNABORTED, ECONNABORTED,
439c74c7b73SRobert Watson 	    ES("Software caused connection abort") },
440c74c7b73SRobert Watson 	{ BSM_ERRNO_ECONNRESET, ECONNRESET, ES("Connection reset by peer") },
441c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOBUFS, ENOBUFS, ES("No buffer space available") },
442c74c7b73SRobert Watson 	{ BSM_ERRNO_EISCONN, EISCONN, ES("Socket is already connected") },
443c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTCONN, ENOTCONN, ES("Socket is not connected") },
444c74c7b73SRobert Watson 	{ BSM_ERRNO_ESHUTDOWN, ESHUTDOWN,
445c74c7b73SRobert Watson 	    ES("Can't send after socket shutdown") },
446c74c7b73SRobert Watson 	{ BSM_ERRNO_ETOOMANYREFS, ETOOMANYREFS,
447c74c7b73SRobert Watson 	    ES("Too many references: can't splice") },
448c74c7b73SRobert Watson 	{ BSM_ERRNO_ETIMEDOUT, ETIMEDOUT, ES("Operation timed out") },
449c74c7b73SRobert Watson 	{ BSM_ERRNO_ECONNREFUSED, ECONNREFUSED, ES("Connection refused") },
450c74c7b73SRobert Watson 	{ BSM_ERRNO_EHOSTDOWN, EHOSTDOWN, ES("Host is down") },
451c74c7b73SRobert Watson 	{ BSM_ERRNO_EHOSTUNREACH, EHOSTUNREACH, ES("No route to host") },
452c74c7b73SRobert Watson 	{ BSM_ERRNO_EALREADY, EALREADY, ES("Operation already in progress") },
453c74c7b73SRobert Watson 	{ BSM_ERRNO_EINPROGRESS, EINPROGRESS,
454c74c7b73SRobert Watson 	    ES("Operation now in progress") },
455c74c7b73SRobert Watson 	{ BSM_ERRNO_ESTALE, ESTALE, ES("Stale NFS file handle") },
456597df30eSRobert Watson 	{ BSM_ERRNO_EPROCLIM,
457597df30eSRobert Watson #ifdef EPROCLIM
458597df30eSRobert Watson 	EPROCLIM,
459597df30eSRobert Watson #else
460597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
461597df30eSRobert Watson #endif
462597df30eSRobert Watson 	ES("Too many processes") },
463597df30eSRobert Watson 	{ BSM_ERRNO_EBADRPC,
464597df30eSRobert Watson #ifdef EBADRPC
465597df30eSRobert Watson 	EBADRPC,
466597df30eSRobert Watson #else
467597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
468597df30eSRobert Watson #endif
469597df30eSRobert Watson 	ES("RPC struct is bad") },
470597df30eSRobert Watson 	{ BSM_ERRNO_ERPCMISMATCH,
471597df30eSRobert Watson #ifdef ERPCMISMATCH
472597df30eSRobert Watson 	ERPCMISMATCH,
473597df30eSRobert Watson #else
474597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
475597df30eSRobert Watson #endif
476597df30eSRobert Watson 	ES("RPC version wrong") },
477597df30eSRobert Watson 	{ BSM_ERRNO_EPROGUNAVAIL,
478597df30eSRobert Watson #ifdef EPROGUNAVAIL
479597df30eSRobert Watson 	EPROGUNAVAIL,
480597df30eSRobert Watson #else
481597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
482597df30eSRobert Watson #endif
483597df30eSRobert Watson 	ES("RPC prog. not avail") },
484597df30eSRobert Watson 	{ BSM_ERRNO_EPROGMISMATCH,
485597df30eSRobert Watson #ifdef EPROGMISMATCH
486597df30eSRobert Watson 	EPROGMISMATCH,
487597df30eSRobert Watson #else
488597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
489597df30eSRobert Watson #endif
490597df30eSRobert Watson 	ES("RPC version wrong") },
491597df30eSRobert Watson 	{ BSM_ERRNO_EPROCUNAVAIL,
492597df30eSRobert Watson #ifdef EPROCUNAVAIL
493597df30eSRobert Watson 	EPROCUNAVAIL,
494597df30eSRobert Watson #else
495597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
496597df30eSRobert Watson #endif
497597df30eSRobert Watson 	ES("Bad procedure for program") },
498597df30eSRobert Watson 	{ BSM_ERRNO_EFTYPE,
499597df30eSRobert Watson #ifdef EFTYPE
500597df30eSRobert Watson 	EFTYPE,
501597df30eSRobert Watson #else
502597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
503597df30eSRobert Watson #endif
504597df30eSRobert Watson 	ES("Inappropriate file type or format") },
505597df30eSRobert Watson 	{ BSM_ERRNO_EAUTH,
506597df30eSRobert Watson #ifdef EAUTH
507597df30eSRobert Watson 	EAUTH,
508597df30eSRobert Watson #else
509597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
510597df30eSRobert Watson #endif
511597df30eSRobert Watson 	ES("Authenticateion error") },
512597df30eSRobert Watson 	{ BSM_ERRNO_ENEEDAUTH,
513597df30eSRobert Watson #ifdef ENEEDAUTH
514597df30eSRobert Watson 	ENEEDAUTH,
515597df30eSRobert Watson #else
516597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
517597df30eSRobert Watson #endif
518597df30eSRobert Watson 	ES("Need authenticator") },
519597df30eSRobert Watson 	{ BSM_ERRNO_ENOATTR,
520597df30eSRobert Watson #ifdef ENOATTR
521597df30eSRobert Watson 	ENOATTR,
522597df30eSRobert Watson #else
523597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
524597df30eSRobert Watson #endif
525597df30eSRobert Watson 	ES("Attribute not found") },
526597df30eSRobert Watson 	{ BSM_ERRNO_EDOOFUS,
527597df30eSRobert Watson #ifdef EDOOFUS
528597df30eSRobert Watson 	EDOOFUS,
529597df30eSRobert Watson #else
530597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
531597df30eSRobert Watson #endif
532597df30eSRobert Watson 	ES("Programming error") },
533597df30eSRobert Watson 	{ BSM_ERRNO_EJUSTRETURN,
534597df30eSRobert Watson #ifdef EJUSTRETURN
535597df30eSRobert Watson 	EJUSTRETURN,
536597df30eSRobert Watson #else
537597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
538597df30eSRobert Watson #endif
539597df30eSRobert Watson 	ES("Just return") },
540597df30eSRobert Watson 	{ BSM_ERRNO_ENOIOCTL,
541597df30eSRobert Watson #ifdef ENOIOCTL
542597df30eSRobert Watson 	ENOIOCTL,
543597df30eSRobert Watson #else
544597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
545597df30eSRobert Watson #endif
546597df30eSRobert Watson 	ES("ioctl not handled by this layer") },
547597df30eSRobert Watson 	{ BSM_ERRNO_EDIRIOCTL,
548597df30eSRobert Watson #ifdef EDIRIOCTL
549597df30eSRobert Watson 	EDIRIOCTL,
550597df30eSRobert Watson #else
551597df30eSRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
552597df30eSRobert Watson #endif
553597df30eSRobert Watson 	ES("do direct ioctl in GEOM") },
554c74c7b73SRobert Watson 	{ BSM_ERRNO_EPWROFF,
5557a0a89d2SRobert Watson #ifdef EPWROFF
5567a0a89d2SRobert Watson 	EPWROFF,
5577a0a89d2SRobert Watson #else
5587a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5597a0a89d2SRobert Watson #endif
560c74c7b73SRobert Watson 	ES("Device power is off") },
561c74c7b73SRobert Watson 	{ BSM_ERRNO_EDEVERR,
5627a0a89d2SRobert Watson #ifdef EDEVERR
5637a0a89d2SRobert Watson 	EDEVERR,
5647a0a89d2SRobert Watson #else
5657a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5667a0a89d2SRobert Watson #endif
567c74c7b73SRobert Watson 	ES("Device error") },
568c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADEXEC,
5697a0a89d2SRobert Watson #ifdef EBADEXEC
5707a0a89d2SRobert Watson 	EBADEXEC,
5717a0a89d2SRobert Watson #else
5727a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5737a0a89d2SRobert Watson #endif
574c74c7b73SRobert Watson 	ES("Bad executable") },
575c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADARCH,
5767a0a89d2SRobert Watson #ifdef EBADARCH
5777a0a89d2SRobert Watson 	EBADARCH,
5787a0a89d2SRobert Watson #else
5797a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5807a0a89d2SRobert Watson #endif
581c74c7b73SRobert Watson 	ES("Bad CPU type in executable") },
582c74c7b73SRobert Watson 	{ BSM_ERRNO_ESHLIBVERS,
5837a0a89d2SRobert Watson #ifdef ESHLIBVERS
5847a0a89d2SRobert Watson 	ESHLIBVERS,
5857a0a89d2SRobert Watson #else
5867a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5877a0a89d2SRobert Watson #endif
588c74c7b73SRobert Watson 	ES("Shared library version mismatch") },
589c74c7b73SRobert Watson 	{ BSM_ERRNO_EBADMACHO,
5907a0a89d2SRobert Watson #ifdef EBADMACHO
5917a0a89d2SRobert Watson 	EBADMACHO,
5927a0a89d2SRobert Watson #else
5937a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
5947a0a89d2SRobert Watson #endif
59506edd2f1SRobert Watson 	ES("Malformed Macho file") },
596c74c7b73SRobert Watson 	{ BSM_ERRNO_EPOLICY,
5977a0a89d2SRobert Watson #ifdef EPOLICY
5987a0a89d2SRobert Watson 	EPOLICY,
5997a0a89d2SRobert Watson #else
6007a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6017a0a89d2SRobert Watson #endif
602c74c7b73SRobert Watson 	ES("Operation failed by policy") },
603c74c7b73SRobert Watson 	{ BSM_ERRNO_EDOTDOT,
6047a0a89d2SRobert Watson #ifdef EDOTDOT
6057a0a89d2SRobert Watson 	EDOTDOT,
6067a0a89d2SRobert Watson #else
6077a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6087a0a89d2SRobert Watson #endif
609c74c7b73SRobert Watson 	ES("RFS specific error") },
610c74c7b73SRobert Watson 	{ BSM_ERRNO_EUCLEAN,
6117a0a89d2SRobert Watson #ifdef EUCLEAN
6127a0a89d2SRobert Watson 	EUCLEAN,
6137a0a89d2SRobert Watson #else
6147a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6157a0a89d2SRobert Watson #endif
616c74c7b73SRobert Watson 	ES("Structure needs cleaning") },
617c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOTNAM,
6187a0a89d2SRobert Watson #ifdef ENOTNAM
6197a0a89d2SRobert Watson 	ENOTNAM,
6207a0a89d2SRobert Watson #else
6217a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6227a0a89d2SRobert Watson #endif
623c74c7b73SRobert Watson 	ES("Not a XENIX named type file") },
624c74c7b73SRobert Watson 	{ BSM_ERRNO_ENAVAIL,
6257a0a89d2SRobert Watson #ifdef ENAVAIL
6267a0a89d2SRobert Watson 	ENAVAIL,
6277a0a89d2SRobert Watson #else
6287a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6297a0a89d2SRobert Watson #endif
630c74c7b73SRobert Watson 	ES("No XENIX semaphores available") },
631c74c7b73SRobert Watson 	{ BSM_ERRNO_EISNAM,
6327a0a89d2SRobert Watson #ifdef EISNAM
6337a0a89d2SRobert Watson 	EISNAM,
6347a0a89d2SRobert Watson #else
6357a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6367a0a89d2SRobert Watson #endif
637c74c7b73SRobert Watson 	ES("Is a named type file") },
638c74c7b73SRobert Watson 	{ BSM_ERRNO_EREMOTEIO,
6397a0a89d2SRobert Watson #ifdef EREMOTEIO
6407a0a89d2SRobert Watson 	EREMOTEIO,
6417a0a89d2SRobert Watson #else
6427a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6437a0a89d2SRobert Watson #endif
644c74c7b73SRobert Watson 	ES("Remote I/O error") },
645c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOMEDIUM,
6467a0a89d2SRobert Watson #ifdef ENOMEDIUM
6477a0a89d2SRobert Watson 	ENOMEDIUM,
6487a0a89d2SRobert Watson #else
6497a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6507a0a89d2SRobert Watson #endif
651c74c7b73SRobert Watson 	ES("No medium found") },
652c74c7b73SRobert Watson 	{ BSM_ERRNO_EMEDIUMTYPE,
6537a0a89d2SRobert Watson #ifdef EMEDIUMTYPE
6547a0a89d2SRobert Watson 	EMEDIUMTYPE,
6557a0a89d2SRobert Watson #else
6567a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6577a0a89d2SRobert Watson #endif
658c74c7b73SRobert Watson 	ES("Wrong medium type") },
659c74c7b73SRobert Watson 	{ BSM_ERRNO_ENOKEY,
6607a0a89d2SRobert Watson #ifdef ENOKEY
6617a0a89d2SRobert Watson 	ENOKEY,
6627a0a89d2SRobert Watson #else
6637a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6647a0a89d2SRobert Watson #endif
665c74c7b73SRobert Watson 	ES("Required key not available") },
666c74c7b73SRobert Watson 	{ BSM_ERRNO_EKEYEXPIRED,
667*aa772005SRobert Watson #ifdef EKEYEXPIRED
6687a0a89d2SRobert Watson 	EKEYEXPIRED,
6697a0a89d2SRobert Watson #else
6707a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6717a0a89d2SRobert Watson #endif
672c74c7b73SRobert Watson 	ES("Key has expired") },
673c74c7b73SRobert Watson 	{ BSM_ERRNO_EKEYREVOKED,
6747a0a89d2SRobert Watson #ifdef EKEYREVOKED
6757a0a89d2SRobert Watson 	EKEYREVOKED,
6767a0a89d2SRobert Watson #else
6777a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6787a0a89d2SRobert Watson #endif
679c74c7b73SRobert Watson 	ES("Key has been revoked") },
680c74c7b73SRobert Watson 	{ BSM_ERRNO_EKEYREJECTED,
681*aa772005SRobert Watson #ifdef EKEYREJECTED
6827a0a89d2SRobert Watson 	EKEYREJECTED,
6837a0a89d2SRobert Watson #else
6847a0a89d2SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
6857a0a89d2SRobert Watson #endif
686c74c7b73SRobert Watson 	ES("Key was rejected by service") },
687*aa772005SRobert Watson 	{ BSM_ERRNO_ENOTCAPABLE,
688*aa772005SRobert Watson #ifdef ENOTCAPABLE
689*aa772005SRobert Watson 	ENOTCAPABLE,
690*aa772005SRobert Watson #else
691*aa772005SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
692*aa772005SRobert Watson #endif
693*aa772005SRobert Watson 	ES("Capabilities insufficient") },
694*aa772005SRobert Watson 	{ BSM_ERRNO_ECAPMODE,
695*aa772005SRobert Watson #ifdef ECAPMODE
696*aa772005SRobert Watson 	ECAPMODE,
697*aa772005SRobert Watson #else
698*aa772005SRobert Watson 	ERRNO_NO_LOCAL_MAPPING,
699*aa772005SRobert Watson #endif
700*aa772005SRobert Watson 	ES("Not permitted in capability mode") },
7017a0a89d2SRobert Watson };
702c74c7b73SRobert Watson static const int bsm_errnos_count = sizeof(bsm_errnos) / sizeof(bsm_errnos[0]);
7037a0a89d2SRobert Watson 
704c74c7b73SRobert Watson static const struct bsm_errno *
705c74c7b73SRobert Watson bsm_lookup_errno_local(int local_errno)
7067a0a89d2SRobert Watson {
7077a0a89d2SRobert Watson 	int i;
7087a0a89d2SRobert Watson 
709c74c7b73SRobert Watson 	for (i = 0; i < bsm_errnos_count; i++) {
710c74c7b73SRobert Watson 		if (bsm_errnos[i].be_local_errno == local_errno)
711c74c7b73SRobert Watson 			return (&bsm_errnos[i]);
7127a0a89d2SRobert Watson 	}
7137a0a89d2SRobert Watson 	return (NULL);
7147a0a89d2SRobert Watson }
7157a0a89d2SRobert Watson 
716c74c7b73SRobert Watson /*
717c74c7b73SRobert Watson  * Conversion to the BSM errno space isn't allowed to fail; we simply map to
718c74c7b73SRobert Watson  * BSM_ERRNO_UNKNOWN and let the remote endpoint deal with it.
719c74c7b73SRobert Watson  */
720c74c7b73SRobert Watson u_char
721c74c7b73SRobert Watson au_errno_to_bsm(int local_errno)
722c74c7b73SRobert Watson {
723c74c7b73SRobert Watson 	const struct bsm_errno *bsme;
724c74c7b73SRobert Watson 
725c74c7b73SRobert Watson 	bsme = bsm_lookup_errno_local(local_errno);
726c74c7b73SRobert Watson 	if (bsme == NULL)
727c74c7b73SRobert Watson 		return (BSM_ERRNO_UNKNOWN);
728c74c7b73SRobert Watson 	return (bsme->be_bsm_errno);
729c74c7b73SRobert Watson }
730c74c7b73SRobert Watson 
731c74c7b73SRobert Watson static const struct bsm_errno *
732c74c7b73SRobert Watson bsm_lookup_errno_bsm(u_char bsm_errno)
7337a0a89d2SRobert Watson {
7347a0a89d2SRobert Watson 	int i;
7357a0a89d2SRobert Watson 
736c74c7b73SRobert Watson 	for (i = 0; i < bsm_errnos_count; i++) {
737c74c7b73SRobert Watson 		if (bsm_errnos[i].be_bsm_errno == bsm_errno)
738c74c7b73SRobert Watson 			return (&bsm_errnos[i]);
7397a0a89d2SRobert Watson 	}
7407a0a89d2SRobert Watson 	return (NULL);
7417a0a89d2SRobert Watson }
7427a0a89d2SRobert Watson 
7437a0a89d2SRobert Watson /*
7447a0a89d2SRobert Watson  * Converstion from a BSM error to a local error number may fail if either
7457a0a89d2SRobert Watson  * OpenBSM doesn't recognize the error on the wire, or because there is no
746c74c7b73SRobert Watson  * appropriate local mapping.
7477a0a89d2SRobert Watson  */
7487a0a89d2SRobert Watson int
749c74c7b73SRobert Watson au_bsm_to_errno(u_char bsm_errno, int *errorp)
7507a0a89d2SRobert Watson {
751c74c7b73SRobert Watson 	const struct bsm_errno *bsme;
7527a0a89d2SRobert Watson 
753c74c7b73SRobert Watson 	bsme = bsm_lookup_errno_bsm(bsm_errno);
754c74c7b73SRobert Watson 	if (bsme == NULL || bsme->be_local_errno == ERRNO_NO_LOCAL_MAPPING)
7557a0a89d2SRobert Watson 		return (-1);
756c74c7b73SRobert Watson 	*errorp = bsme->be_local_errno;
7577a0a89d2SRobert Watson 	return (0);
7587a0a89d2SRobert Watson }
7597a0a89d2SRobert Watson 
7607a0a89d2SRobert Watson #if !defined(KERNEL) && !defined(_KERNEL)
7617a0a89d2SRobert Watson const char *
762c74c7b73SRobert Watson au_strerror(u_char bsm_errno)
7637a0a89d2SRobert Watson {
764c74c7b73SRobert Watson 	const struct bsm_errno *bsme;
7657a0a89d2SRobert Watson 
766c74c7b73SRobert Watson 	bsme = bsm_lookup_errno_bsm(bsm_errno);
7677a0a89d2SRobert Watson 	if (bsme == NULL)
7687a0a89d2SRobert Watson 		return ("Unrecognized BSM error");
769c74c7b73SRobert Watson 	if (bsme->be_local_errno != ERRNO_NO_LOCAL_MAPPING)
770c74c7b73SRobert Watson 		return (strerror(bsme->be_local_errno));
7717a0a89d2SRobert Watson 	return (bsme->be_strerror);
7727a0a89d2SRobert Watson }
7737a0a89d2SRobert Watson #endif
774