/* SPDX-License-Identifier: LGPL-2.1 */
/*
 *
 *   Copyright (c) International Business Machines  Corp., 2002,2004
 *   Author(s): Steve French (sfrench@us.ibm.com)
 *
 *   See Error Codes section of the SNIA CIFS Specification
 *   for more information
 *
 */

struct smb_to_posix_error {
	__u16 smb_err;
	int posix_code;
};

/* The request was successful. */
#define SUCCESS	0x00
/* Error is from the core DOS operating system set */
#define ERRDOS	0x01
/* Error is generated by the file server daemon */
#define ERRSRV	0x02
/* Error is a hardware error. */
#define ERRHRD	0x03
/* Command was not in the "SMB" format. */
#define ERRCMD	0xFF

/* The following error codes may be generated with the SUCCESS error class.*/

/*#define SUCCESS	0	The request was successful. */

/*
 * The following error codes may be generated with the ERRDOS error class.
 * The comment at the end of each definition indicates the POSIX error
 * code; it is used to generate the `mapping_table_ERRDOS` array.
 */

/*
 * Invalid function. The server did not
 * recognize or could not perform a
 * system call generated by the server,
 * e.g., set the DIRECTORY attribute on
 * a data file, invalid seek mode.
 */
#define ERRbadfunc		1	// -EINVAL
/*
 * File not found. The last component
 * of a file's pathname could not be
 * found.
 */
#define ERRbadfile		2	// -ENOENT
/*
 * Directory invalid. A directory
 * component in a pathname could not be
 * found.
 */
#define ERRbadpath		3	// -ENOTDIR
/*
 * Too many open files. The server has
 * no file handles available.
 */
#define ERRnofids		4	// -EMFILE
/*
 * Access denied, the client's context
 * does not permit the requested
 * function. This includes the
 * following conditions: invalid rename
 * command, write to Fid open for read
 * only, read on Fid open for write
 * only, attempt to delete a non-empty
 * directory
 */
#define ERRnoaccess		5	// -EACCES
/*
 * Invalid file handle. The file handle
 * specified was not recognized by the
 * server.
 */
#define ERRbadfid		6	// -EBADF
/* Memory control blocks destroyed. */
#define ERRbadmcb		7	// -EIO
/*
 * Insufficient server memory to
 * perform the requested function.
 */
#define ERRnomem		8	// -EREMOTEIO
/* Invalid memory block address. */
#define ERRbadmem		9	// -EFAULT
/* Invalid environment. */
#define ERRbadenv		10	// -EFAULT
/* Invalid format. */
#define ERRbadformat		11	// -EINVAL
/* Invalid open mode. */
#define ERRbadaccess		12	// -EACCES
/*
 * Invalid data (generated only by
 * IOCTL calls within the server).
 */
#define ERRbaddata		13	// -EIO
/* Invalid drive specified. */
#define ERRbaddrive		15	// -ENXIO
/*
 * A Delete Directory request attempted
 * to remove the server's current
 * directory.
 */
#define ERRremcd		16	// -EACCES
/*
 * Not same device (e.g., a cross
 * volume rename was attempted
 */
#define ERRdiffdevice		17	// -EXDEV
/*
 * A File Search command can find no
 * more files matching the specified
 * criteria.
 */
#define ERRnofiles		18	// -ENOENT
/* media is write protected */
#define ERRwriteprot		19	// -EROFS
#define ERRgeneral		31
/*
 * The sharing mode specified for an
 * Open conflicts with existing FIDs on
 * the file.
 */
#define ERRbadshare		32	// -EBUSY
/*
 * A Lock request conflicted with an
 * existing lock or specified an
 * invalid mode, or an Unlock requested
 * attempted to remove a lock held by
 * another process.
 */
#define ERRlock			33	// -EACCES
#define ERRunsup		50	// -EINVAL
#define ERRnosuchshare		67	// -ENXIO
/*
 * The file named in the request
 * already exists.
 */
#define ERRfilexists		80	// -EEXIST
#define ERRinvparm		87	// -EINVAL
#define ERRdiskfull		112	// -ENOSPC
#define ERRinvname		123	// -ENOENT
#define ERRunknownlevel		124	// -EOPNOTSUPP
#define ERRdirnotempty		145	// -ENOTEMPTY
#define ERRnotlocked		158	// -ENOLCK
#define ERRcancelviolation	173	// -ENOLCK
#define ERRalreadyexists	183	// -EEXIST
#define ERRbadpipe		230
#define ERRpipebusy		231
#define ERRpipeclosing		232
#define ERRnotconnected		233
#define ERRmoredata		234	// -EOVERFLOW
#define ERReasnotsupported	282	// -EOPNOTSUPP
/*
 * The operation would cause a quota
 * limit to be exceeded.
 */
#define ErrQuota		0x200	// -EDQUOT
/*
 * A link operation was performed on a
 * pathname that was not a link.
 */
#define ErrNotALink		0x201	// -ENOLINK
#define ERRnetlogonNotStarted	2455	// -ENOPROTOOPT

/* Below errors are used internally (do not come over the wire) for passthrough
   from STATUS codes to POSIX only  */
#define ERRsymlink              0xFFFD	// -EOPNOTSUPP
#define ErrTooManyLinks         0xFFFE	// -EMLINK

/*
 * The following error codes may be generated with the ERRSRV error class.
 * The comment at the end of each definition indicates the POSIX error
 * code; it is used to generate the `mapping_table_ERRSRV` array.
 */

/*
 * Non-specific error code. It is
 * returned under the following
 * conditions: resource other than disk
 * space exhausted (e.g. TIDs), first
 * SMB command was not negotiate,
 * multiple negotiates attempted, and
 * internal server error.
 */
#define ERRerror		1	// -EIO
/*
 * Bad password - name/password pair in
 * a TreeConnect or Session Setup are
 * invalid.
 */
#define ERRbadpw		2	// -EACCES
/*
 * used for indicating DFS referral
 * needed
 */
#define ERRbadtype		3	// -EREMOTE
/*
 * The client does not have the
 * necessary access rights within the
 * specified context for requested
 * function.
 */
#define ERRaccess		4	// -EACCES
/*
 * The Tid specified in a command was
 * invalid.
 */
#define ERRinvtid		5	// -ENXIO
/*
 * Invalid network name in tree
 * connect.
 */
#define ERRinvnetname		6	// -ENXIO
/*
 * Invalid device - printer request
 * made to non-printer connection or
 * non-printer request made to printer
 * connection.
 */
#define ERRinvdevice		7	// -ENXIO
/*
 * Print queue full (files) -- returned
 * by open print file.
 */
#define ERRqfull		49	// -ENOSPC
/* Print queue full -- no space. */
#define ERRqtoobig		50	// -ENOSPC
/* EOF on print queue dump */
#define ERRqeof			51	// -EIO
/* Invalid print file FID. */
#define ERRinvpfid		52	// -EBADF
/*
 * The server did not recognize the
 * command received.
 */
#define ERRsmbcmd		64	// -EBADRQC
/*
 * The server encountered an internal
 * error, e.g., system file
 * unavailable.
 */
#define ERRsrverror		65	// -EIO
/* (obsolete) */
#define ERRbadBID		66	// -EIO
/*
 * The Fid and pathname parameters
 * contained an invalid combination of
 * values.
 */
#define ERRfilespecs		67	// -EINVAL
/* (obsolete) */
#define ERRbadLink		68	// -EIO
/*
 * The access permissions specified for
 * a file or directory are not a valid
 * combination.
 */
#define ERRbadpermits		69	// -EINVAL
#define ERRbadPID		70	// -ESRCH
/* attribute (mode) is invalid */
#define ERRsetattrmode		71	// -EINVAL
/* Server is paused */
#define ERRpaused		81	// -EHOSTDOWN
/* reserved - messaging off */
#define ERRmsgoff		82	// -EHOSTDOWN
/* reserved - no room for message */
#define ERRnoroom		83	// -ENOSPC
/* reserved - too many remote names */
#define ERRrmuns		87	// -EUSERS
/* operation timed out */
#define ERRtimeout		88	// -ETIME
/* No resources available for request */
#define ERRnoresource		89	// -EREMOTEIO
/* Too many UIDs active on this session */
#define ERRtoomanyuids		90	// -EUSERS
/* The UID is not known as a valid user */
#define ERRbaduid		91	// -EACCES
/* temporarily unable to use raw */
#define ERRusempx		250	// -EIO
/*
 * temporarily unable to use either raw
 * or mpx
 */
#define ERRusestd		251	// -EIO
#define ERR_NOTIFY_ENUM_DIR	1024	// -ENOBUFS
/* user account does not exist */
#define ERRnoSuchUser		2238	// -EACCES
#define ERRaccountexpired	2239	// -EKEYEXPIRED
/* can not logon from this client */
#define ERRbadclient		2240	// -EACCES
/* logon hours do not allow this */
#define ERRbadLogonTime		2241	// -EACCES
#define ERRpasswordExpired	2242	// -EKEYEXPIRED
#define ERRnosupport		0xFFFF	// -EINVAL
