ksmbd: use f_bsize in FS_SECTOR_SIZE_INFORMATION
[linux-2.6-microblaze.git] / fs / cifsd / ksmbd_server.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  *   Copyright (C) 2018 Samsung Electronics Co., Ltd.
4  *
5  *   linux-ksmbd-devel@lists.sourceforge.net
6  */
7
8 #ifndef _LINUX_KSMBD_SERVER_H
9 #define _LINUX_KSMBD_SERVER_H
10
11 #include <linux/types.h>
12
13 #define KSMBD_GENL_NAME         "SMBD_GENL"
14 #define KSMBD_GENL_VERSION              0x01
15
16 #define KSMBD_REQ_MAX_ACCOUNT_NAME_SZ   48
17 #define KSMBD_REQ_MAX_HASH_SZ           18
18 #define KSMBD_REQ_MAX_SHARE_NAME        64
19
20 struct ksmbd_heartbeat {
21         __u32   handle;
22 };
23
24 /*
25  * Global config flags.
26  */
27 #define KSMBD_GLOBAL_FLAG_INVALID               (0)
28 #define KSMBD_GLOBAL_FLAG_SMB2_LEASES           BIT(0)
29 #define KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION       BIT(1)
30 #define KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL     BIT(2)
31
32 struct ksmbd_startup_request {
33         __u32   flags;
34         __s32   signing;
35         __s8    min_prot[16];
36         __s8    max_prot[16];
37         __s8    netbios_name[16];
38         __s8    work_group[64];
39         __s8    server_string[64];
40         __u16   tcp_port;
41         __u16   ipc_timeout;
42         __u32   deadtime;
43         __u32   file_max;
44         __u32   smb2_max_write;
45         __u32   smb2_max_read;
46         __u32   smb2_max_trans;
47         __u32   share_fake_fscaps;
48         __u32   sub_auth[3];
49         __u32   ifc_list_sz;
50         __s8    ____payload[];
51 };
52
53 #define KSMBD_STARTUP_CONFIG_INTERFACES(s)      ((s)->____payload)
54
55 struct ksmbd_shutdown_request {
56         __s32   reserved;
57 };
58
59 struct ksmbd_login_request {
60         __u32   handle;
61         __s8    account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
62 };
63
64 struct ksmbd_login_response {
65         __u32   handle;
66         __u32   gid;
67         __u32   uid;
68         __s8    account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
69         __u16   status;
70         __u16   hash_sz;
71         __s8    hash[KSMBD_REQ_MAX_HASH_SZ];
72 };
73
74 struct ksmbd_share_config_request {
75         __u32   handle;
76         __s8    share_name[KSMBD_REQ_MAX_SHARE_NAME];
77 };
78
79 struct ksmbd_share_config_response {
80         __u32   handle;
81         __u32   flags;
82         __u16   create_mask;
83         __u16   directory_mask;
84         __u16   force_create_mode;
85         __u16   force_directory_mode;
86         __u16   force_uid;
87         __u16   force_gid;
88         __u32   veto_list_sz;
89         __s8    ____payload[];
90 };
91
92 #define KSMBD_SHARE_CONFIG_VETO_LIST(s) ((s)->____payload)
93
94 static inline char *
95 ksmbd_share_config_path(struct ksmbd_share_config_response *sc)
96 {
97         char *p = sc->____payload;
98
99         if (sc->veto_list_sz)
100                 p += sc->veto_list_sz + 1;
101
102         return p;
103 }
104
105 struct ksmbd_tree_connect_request {
106         __u32   handle;
107         __u16   account_flags;
108         __u16   flags;
109         __u64   session_id;
110         __u64   connect_id;
111         __s8    account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
112         __s8    share[KSMBD_REQ_MAX_SHARE_NAME];
113         __s8    peer_addr[64];
114 };
115
116 struct ksmbd_tree_connect_response {
117         __u32   handle;
118         __u16   status;
119         __u16   connection_flags;
120 };
121
122 struct ksmbd_tree_disconnect_request {
123         __u64   session_id;
124         __u64   connect_id;
125 };
126
127 struct ksmbd_logout_request {
128         __s8    account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
129 };
130
131 struct ksmbd_rpc_command {
132         __u32   handle;
133         __u32   flags;
134         __u32   payload_sz;
135         __u8    payload[];
136 };
137
138 struct ksmbd_spnego_authen_request {
139         __u32   handle;
140         __u16   spnego_blob_len;
141         __u8    spnego_blob[0];
142 };
143
144 struct ksmbd_spnego_authen_response {
145         __u32   handle;
146         struct ksmbd_login_response     login_response;
147         __u16   session_key_len;
148         __u16   spnego_blob_len;
149         __u8    payload[];              /* session key + AP_REP */
150 };
151
152 /*
153  * This also used as NETLINK attribute type value.
154  *
155  * NOTE:
156  * Response message type value should be equal to
157  * request message type value + 1.
158  */
159 enum ksmbd_event {
160         KSMBD_EVENT_UNSPEC                      = 0,
161         KSMBD_EVENT_HEARTBEAT_REQUEST,
162
163         KSMBD_EVENT_STARTING_UP,
164         KSMBD_EVENT_SHUTTING_DOWN,
165
166         KSMBD_EVENT_LOGIN_REQUEST,
167         KSMBD_EVENT_LOGIN_RESPONSE              = 5,
168
169         KSMBD_EVENT_SHARE_CONFIG_REQUEST,
170         KSMBD_EVENT_SHARE_CONFIG_RESPONSE,
171
172         KSMBD_EVENT_TREE_CONNECT_REQUEST,
173         KSMBD_EVENT_TREE_CONNECT_RESPONSE,
174
175         KSMBD_EVENT_TREE_DISCONNECT_REQUEST     = 10,
176
177         KSMBD_EVENT_LOGOUT_REQUEST,
178
179         KSMBD_EVENT_RPC_REQUEST,
180         KSMBD_EVENT_RPC_RESPONSE,
181
182         KSMBD_EVENT_SPNEGO_AUTHEN_REQUEST,
183         KSMBD_EVENT_SPNEGO_AUTHEN_RESPONSE      = 15,
184
185         KSMBD_EVENT_MAX
186 };
187
188 enum KSMBD_TREE_CONN_STATUS {
189         KSMBD_TREE_CONN_STATUS_OK               = 0,
190         KSMBD_TREE_CONN_STATUS_NOMEM,
191         KSMBD_TREE_CONN_STATUS_NO_SHARE,
192         KSMBD_TREE_CONN_STATUS_NO_USER,
193         KSMBD_TREE_CONN_STATUS_INVALID_USER,
194         KSMBD_TREE_CONN_STATUS_HOST_DENIED      = 5,
195         KSMBD_TREE_CONN_STATUS_CONN_EXIST,
196         KSMBD_TREE_CONN_STATUS_TOO_MANY_CONNS,
197         KSMBD_TREE_CONN_STATUS_TOO_MANY_SESSIONS,
198         KSMBD_TREE_CONN_STATUS_ERROR,
199 };
200
201 /*
202  * User config flags.
203  */
204 #define KSMBD_USER_FLAG_INVALID         (0)
205 #define KSMBD_USER_FLAG_OK              BIT(0)
206 #define KSMBD_USER_FLAG_BAD_PASSWORD    BIT(1)
207 #define KSMBD_USER_FLAG_BAD_UID         BIT(2)
208 #define KSMBD_USER_FLAG_BAD_USER        BIT(3)
209 #define KSMBD_USER_FLAG_GUEST_ACCOUNT   BIT(4)
210
211 /*
212  * Share config flags.
213  */
214 #define KSMBD_SHARE_FLAG_INVALID                (0)
215 #define KSMBD_SHARE_FLAG_AVAILABLE              BIT(0)
216 #define KSMBD_SHARE_FLAG_BROWSEABLE             BIT(1)
217 #define KSMBD_SHARE_FLAG_WRITEABLE              BIT(2)
218 #define KSMBD_SHARE_FLAG_READONLY               BIT(3)
219 #define KSMBD_SHARE_FLAG_GUEST_OK               BIT(4)
220 #define KSMBD_SHARE_FLAG_GUEST_ONLY             BIT(5)
221 #define KSMBD_SHARE_FLAG_STORE_DOS_ATTRS        BIT(6)
222 #define KSMBD_SHARE_FLAG_OPLOCKS                BIT(7)
223 #define KSMBD_SHARE_FLAG_PIPE                   BIT(8)
224 #define KSMBD_SHARE_FLAG_HIDE_DOT_FILES         BIT(9)
225 #define KSMBD_SHARE_FLAG_INHERIT_OWNER          BIT(10)
226 #define KSMBD_SHARE_FLAG_STREAMS                BIT(11)
227 #define KSMBD_SHARE_FLAG_FOLLOW_SYMLINKS        BIT(12)
228 #define KSMBD_SHARE_FLAG_ACL_XATTR              BIT(13)
229
230 /*
231  * Tree connect request flags.
232  */
233 #define KSMBD_TREE_CONN_FLAG_REQUEST_SMB1       (0)
234 #define KSMBD_TREE_CONN_FLAG_REQUEST_IPV6       BIT(0)
235 #define KSMBD_TREE_CONN_FLAG_REQUEST_SMB2       BIT(1)
236
237 /*
238  * Tree connect flags.
239  */
240 #define KSMBD_TREE_CONN_FLAG_GUEST_ACCOUNT      BIT(0)
241 #define KSMBD_TREE_CONN_FLAG_READ_ONLY          BIT(1)
242 #define KSMBD_TREE_CONN_FLAG_WRITABLE           BIT(2)
243 #define KSMBD_TREE_CONN_FLAG_ADMIN_ACCOUNT      BIT(3)
244
245 /*
246  * RPC over IPC.
247  */
248 #define KSMBD_RPC_METHOD_RETURN         BIT(0)
249 #define KSMBD_RPC_SRVSVC_METHOD_INVOKE  BIT(1)
250 #define KSMBD_RPC_SRVSVC_METHOD_RETURN  (KSMBD_RPC_SRVSVC_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
251 #define KSMBD_RPC_WKSSVC_METHOD_INVOKE  BIT(2)
252 #define KSMBD_RPC_WKSSVC_METHOD_RETURN  (KSMBD_RPC_WKSSVC_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
253 #define KSMBD_RPC_IOCTL_METHOD          (BIT(3) | KSMBD_RPC_METHOD_RETURN)
254 #define KSMBD_RPC_OPEN_METHOD           BIT(4)
255 #define KSMBD_RPC_WRITE_METHOD          BIT(5)
256 #define KSMBD_RPC_READ_METHOD           (BIT(6) | KSMBD_RPC_METHOD_RETURN)
257 #define KSMBD_RPC_CLOSE_METHOD          BIT(7)
258 #define KSMBD_RPC_RAP_METHOD            (BIT(8) | KSMBD_RPC_METHOD_RETURN)
259 #define KSMBD_RPC_RESTRICTED_CONTEXT    BIT(9)
260 #define KSMBD_RPC_SAMR_METHOD_INVOKE    BIT(10)
261 #define KSMBD_RPC_SAMR_METHOD_RETURN    (KSMBD_RPC_SAMR_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
262 #define KSMBD_RPC_LSARPC_METHOD_INVOKE  BIT(11)
263 #define KSMBD_RPC_LSARPC_METHOD_RETURN  (KSMBD_RPC_LSARPC_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
264
265 #define KSMBD_RPC_OK                    0
266 #define KSMBD_RPC_EBAD_FUNC             0x00000001
267 #define KSMBD_RPC_EACCESS_DENIED        0x00000005
268 #define KSMBD_RPC_EBAD_FID              0x00000006
269 #define KSMBD_RPC_ENOMEM                0x00000008
270 #define KSMBD_RPC_EBAD_DATA             0x0000000D
271 #define KSMBD_RPC_ENOTIMPLEMENTED       0x00000040
272 #define KSMBD_RPC_EINVALID_PARAMETER    0x00000057
273 #define KSMBD_RPC_EMORE_DATA            0x000000EA
274 #define KSMBD_RPC_EINVALID_LEVEL        0x0000007C
275 #define KSMBD_RPC_SOME_NOT_MAPPED       0x00000107
276
277 #define KSMBD_CONFIG_OPT_DISABLED       0
278 #define KSMBD_CONFIG_OPT_ENABLED        1
279 #define KSMBD_CONFIG_OPT_AUTO           2
280 #define KSMBD_CONFIG_OPT_MANDATORY      3
281
282 #endif /* _LINUX_KSMBD_SERVER_H */