1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12 /*
13 * Copyright 2017 Nexenta Systems, Inc. All rights reserved.
14 */
15
16 #ifndef _KRRP_ERROR_H
17 #define _KRRP_ERROR_H
18
19 #include <sys/types.h>
20 #include <sys/nvpair.h>
21
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25
26 #define krrp_error_init(error) (void) memset(error, 0, sizeof (krrp_error_t));
27
28 typedef enum {
29 KRRP_ESRC_COMMON = 1,
30 KRRP_ESRC_SESSION,
31 KRRP_ESRC_NETWORK,
32 KRRP_ESRC_STREAM,
33 KRRP_ESRC_SERVER,
34 KRRP_ESRC_PDU
35 } krrp_esrc_t;
36
37 typedef enum {
38 KRRP_ERRF_REMOTE = 0x1
39 } krrp_error_flag_t;
40
41
42 #define KRRP_ERRNO_MAP(X) \
43 X(INTR) \
44 X(INVAL) \
45 X(BUSY) \
46 X(NOMEM) \
47 X(SESS) \
48 X(CONN) \
49 X(PDUENGINE) \
50 X(STREAM) \
51 X(SESSID) \
52 X(KSTATID) \
53 X(ADDR) \
54 X(PORT) \
55 X(DBLKSZ) \
56 X(MAXMEMSZ) \
57 X(FAKEDSZ) \
58 X(SRCDS) \
59 X(DSTDS) \
60 X(CMNSNAP) \
61 X(SRCSNAP) \
62 X(BADRESP) \
63 X(BIGPAYLOAD) \
64 X(UNEXPCLOSE) \
65 X(UNEXPEND) \
66 X(ZFSGCTXFAIL) \
67 X(CREATEFAIL) \
68 X(BINDFAIL) \
69 X(LISTENFAIL) \
70 X(CONNFAIL) \
71 X(ACCEPTFAIL) \
72 X(SETSOCKOPTFAIL) \
73 X(SENDFAIL) \
74 X(SENDMBLKFAIL) \
75 X(RECVFAIL) \
76 X(READFAIL) \
77 X(WRITEFAIL) \
78 X(SNAPFAIL) \
79 X(FLCTRLVIOL) \
80 X(PINGTIMEOUT) \
81 X(PROTO) \
82 X(AUTH) \
83 X(CFGTYPE) \
84 X(CONNTIMEOUT) \
85 X(THROTTLE) \
86 X(AUTOSNAP) \
87 X(RESUMETOKEN) \
88 X(KEEPSNAPS) \
89 X(GETSOCKOPTFAIL) \
90 X(SKIP_SNAPS_MASK) \
91
92
93 #define KRRP_ERRNO_EXPAND(enum_name) KRRP_ERRNO_##enum_name,
94 typedef enum {
95 KRRP_ERRNO_OK = 0,
96 KRRP_ERRNO_UNKNOWN = 1000,
97 KRRP_ERRNO_MAP(KRRP_ERRNO_EXPAND)
98 KRRP_ERRNO_LAST /* To exclude lint-errors */
99 } krrp_errno_t;
100 #undef KRRP_ERRNO_EXPAND
101
102 typedef struct krrp_error_s {
103 /* Native KRRP ERRNO */
104 krrp_errno_t krrp_errno;
105
106 /*
107 * UNIX ERRNO that is returned by non-krrp functions
108 * for example ksocket_send/ksocket_recv/
109 * dmu_lend_recv_buffer/dmu_lend_send_buffer/...
110 */
111 int unix_errno;
112
113 /* Flags: see krrp_error_flag_t */
114 uint32_t flags;
115 } krrp_error_t;
116
117 #ifdef _KERNEL
118
119 void krrp_error_set_flag(krrp_error_t *, krrp_error_flag_t);
120 void krrp_error_set(krrp_error_t *, krrp_errno_t, int);
121
122 void krrp_error_to_nvl(krrp_error_t *, nvlist_t **);
123 int krrp_error_from_nvl(krrp_error_t *, nvlist_t *);
124
125 #endif /* _KERNEL */
126
127 const char *krrp_error_errno_to_str(krrp_errno_t krrp_errno);
128
129 #ifdef __cplusplus
130 }
131 #endif
132
133 #endif /* _KRRP_ERROR_H */