1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * Copyright (C) 2018 Samsung Electronics Co., Ltd.
5 * linux-ksmbd-devel@lists.sourceforge.net
8 #ifndef _LINUX_KSMBD_SERVER_H
9 #define _LINUX_KSMBD_SERVER_H
11 #include <linux/types.h>
13 #define KSMBD_GENL_NAME "SMBD_GENL"
14 #define KSMBD_GENL_VERSION 0x01
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
20 struct ksmbd_heartbeat {
25 * Global config flags.
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)
32 struct ksmbd_startup_request {
37 __s8 netbios_name[16];
39 __s8 server_string[64];
47 __u32 share_fake_fscaps;
53 #define KSMBD_STARTUP_CONFIG_INTERFACES(s) ((s)->____payload)
55 struct ksmbd_shutdown_request {
59 struct ksmbd_login_request {
61 __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
64 struct ksmbd_login_response {
68 __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
71 __s8 hash[KSMBD_REQ_MAX_HASH_SZ];
74 struct ksmbd_share_config_request {
76 __s8 share_name[KSMBD_REQ_MAX_SHARE_NAME];
79 struct ksmbd_share_config_response {
84 __u16 force_create_mode;
85 __u16 force_directory_mode;
92 #define KSMBD_SHARE_CONFIG_VETO_LIST(s) ((s)->____payload)
95 ksmbd_share_config_path(struct ksmbd_share_config_response *sc)
97 char *p = sc->____payload;
100 p += sc->veto_list_sz + 1;
105 struct ksmbd_tree_connect_request {
111 __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
112 __s8 share[KSMBD_REQ_MAX_SHARE_NAME];
116 struct ksmbd_tree_connect_response {
119 __u16 connection_flags;
122 struct ksmbd_tree_disconnect_request {
127 struct ksmbd_logout_request {
128 __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
131 struct ksmbd_rpc_command {
138 struct ksmbd_spnego_authen_request {
140 __u16 spnego_blob_len;
144 struct ksmbd_spnego_authen_response {
146 struct ksmbd_login_response login_response;
147 __u16 session_key_len;
148 __u16 spnego_blob_len;
149 __u8 payload[]; /* session key + AP_REP */
153 * This also used as NETLINK attribute type value.
156 * Response message type value should be equal to
157 * request message type value + 1.
160 KSMBD_EVENT_UNSPEC = 0,
161 KSMBD_EVENT_HEARTBEAT_REQUEST,
163 KSMBD_EVENT_STARTING_UP,
164 KSMBD_EVENT_SHUTTING_DOWN,
166 KSMBD_EVENT_LOGIN_REQUEST,
167 KSMBD_EVENT_LOGIN_RESPONSE = 5,
169 KSMBD_EVENT_SHARE_CONFIG_REQUEST,
170 KSMBD_EVENT_SHARE_CONFIG_RESPONSE,
172 KSMBD_EVENT_TREE_CONNECT_REQUEST,
173 KSMBD_EVENT_TREE_CONNECT_RESPONSE,
175 KSMBD_EVENT_TREE_DISCONNECT_REQUEST = 10,
177 KSMBD_EVENT_LOGOUT_REQUEST,
179 KSMBD_EVENT_RPC_REQUEST,
180 KSMBD_EVENT_RPC_RESPONSE,
182 KSMBD_EVENT_SPNEGO_AUTHEN_REQUEST,
183 KSMBD_EVENT_SPNEGO_AUTHEN_RESPONSE = 15,
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,
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)
212 * Share config flags.
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)
231 * Tree connect request flags.
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)
238 * Tree connect flags.
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)
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)
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
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
282 #endif /* _LINUX_KSMBD_SERVER_H */