138c8a9a5SSteve French /* SPDX-License-Identifier: GPL-2.0-or-later */
238c8a9a5SSteve French /*
338c8a9a5SSteve French * Copyright (C) 2018 Samsung Electronics Co., Ltd.
438c8a9a5SSteve French *
538c8a9a5SSteve French * linux-ksmbd-devel@lists.sourceforge.net
638c8a9a5SSteve French */
738c8a9a5SSteve French
838c8a9a5SSteve French #ifndef _LINUX_KSMBD_SERVER_H
938c8a9a5SSteve French #define _LINUX_KSMBD_SERVER_H
1038c8a9a5SSteve French
1138c8a9a5SSteve French #include <linux/types.h>
1238c8a9a5SSteve French
1338c8a9a5SSteve French /*
1438c8a9a5SSteve French * This is a userspace ABI to communicate data between ksmbd and user IPC
1538c8a9a5SSteve French * daemon using netlink. This is added to track and cache user account DB
1638c8a9a5SSteve French * and share configuration info from userspace.
1738c8a9a5SSteve French *
1838c8a9a5SSteve French * - KSMBD_EVENT_HEARTBEAT_REQUEST(ksmbd_heartbeat)
1938c8a9a5SSteve French * This event is to check whether user IPC daemon is alive. If user IPC
2038c8a9a5SSteve French * daemon is dead, ksmbd keep existing connection till disconnecting and
2138c8a9a5SSteve French * new connection will be denied.
2238c8a9a5SSteve French *
2338c8a9a5SSteve French * - KSMBD_EVENT_STARTING_UP(ksmbd_startup_request)
2438c8a9a5SSteve French * This event is to receive the information that initializes the ksmbd
2538c8a9a5SSteve French * server from the user IPC daemon and to start the server. The global
2638c8a9a5SSteve French * section parameters are given from smb.conf as initialization
2738c8a9a5SSteve French * information.
2838c8a9a5SSteve French *
2938c8a9a5SSteve French * - KSMBD_EVENT_SHUTTING_DOWN(ksmbd_shutdown_request)
3038c8a9a5SSteve French * This event is to shutdown ksmbd server.
3138c8a9a5SSteve French *
3238c8a9a5SSteve French * - KSMBD_EVENT_LOGIN_REQUEST/RESPONSE(ksmbd_login_request/response)
3338c8a9a5SSteve French * This event is to get user account info to user IPC daemon.
3438c8a9a5SSteve French *
3538c8a9a5SSteve French * - KSMBD_EVENT_SHARE_CONFIG_REQUEST/RESPONSE(ksmbd_share_config_request/response)
3638c8a9a5SSteve French * This event is to get net share configuration info.
3738c8a9a5SSteve French *
3838c8a9a5SSteve French * - KSMBD_EVENT_TREE_CONNECT_REQUEST/RESPONSE(ksmbd_tree_connect_request/response)
3938c8a9a5SSteve French * This event is to get session and tree connect info.
4038c8a9a5SSteve French *
4138c8a9a5SSteve French * - KSMBD_EVENT_TREE_DISCONNECT_REQUEST(ksmbd_tree_disconnect_request)
4238c8a9a5SSteve French * This event is to send tree disconnect info to user IPC daemon.
4338c8a9a5SSteve French *
4438c8a9a5SSteve French * - KSMBD_EVENT_LOGOUT_REQUEST(ksmbd_logout_request)
4538c8a9a5SSteve French * This event is to send logout request to user IPC daemon.
4638c8a9a5SSteve French *
4738c8a9a5SSteve French * - KSMBD_EVENT_RPC_REQUEST/RESPONSE(ksmbd_rpc_command)
4838c8a9a5SSteve French * This event is to make DCE/RPC request like srvsvc, wkssvc, lsarpc,
4938c8a9a5SSteve French * samr to be processed in userspace.
5038c8a9a5SSteve French *
5138c8a9a5SSteve French * - KSMBD_EVENT_SPNEGO_AUTHEN_REQUEST/RESPONSE(ksmbd_spnego_authen_request/response)
5238c8a9a5SSteve French * This event is to make kerberos authentication to be processed in
5338c8a9a5SSteve French * userspace.
5438c8a9a5SSteve French */
5538c8a9a5SSteve French
5638c8a9a5SSteve French #define KSMBD_GENL_NAME "SMBD_GENL"
5738c8a9a5SSteve French #define KSMBD_GENL_VERSION 0x01
5838c8a9a5SSteve French
5938c8a9a5SSteve French #define KSMBD_REQ_MAX_ACCOUNT_NAME_SZ 48
6038c8a9a5SSteve French #define KSMBD_REQ_MAX_HASH_SZ 18
6138c8a9a5SSteve French #define KSMBD_REQ_MAX_SHARE_NAME 64
6238c8a9a5SSteve French
6338c8a9a5SSteve French /*
6438c8a9a5SSteve French * IPC heartbeat frame to check whether user IPC daemon is alive.
6538c8a9a5SSteve French */
6638c8a9a5SSteve French struct ksmbd_heartbeat {
6738c8a9a5SSteve French __u32 handle;
6838c8a9a5SSteve French };
6938c8a9a5SSteve French
7038c8a9a5SSteve French /*
7138c8a9a5SSteve French * Global config flags.
7238c8a9a5SSteve French */
7338c8a9a5SSteve French #define KSMBD_GLOBAL_FLAG_INVALID (0)
7438c8a9a5SSteve French #define KSMBD_GLOBAL_FLAG_SMB2_LEASES BIT(0)
7538c8a9a5SSteve French #define KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION BIT(1)
7638c8a9a5SSteve French #define KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL BIT(2)
7738c8a9a5SSteve French #define KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION_OFF BIT(3)
788df4bcdbSNamjae Jeon #define KSMBD_GLOBAL_FLAG_DURABLE_HANDLE BIT(4)
7938c8a9a5SSteve French
8038c8a9a5SSteve French /*
8138c8a9a5SSteve French * IPC request for ksmbd server startup
8238c8a9a5SSteve French */
8338c8a9a5SSteve French struct ksmbd_startup_request {
8438c8a9a5SSteve French __u32 flags; /* Flags for global config */
8538c8a9a5SSteve French __s32 signing; /* Signing enabled */
8638c8a9a5SSteve French __s8 min_prot[16]; /* The minimum SMB protocol version */
8738c8a9a5SSteve French __s8 max_prot[16]; /* The maximum SMB protocol version */
8838c8a9a5SSteve French __s8 netbios_name[16];
8938c8a9a5SSteve French __s8 work_group[64]; /* Workgroup */
9038c8a9a5SSteve French __s8 server_string[64]; /* Server string */
9138c8a9a5SSteve French __u16 tcp_port; /* tcp port */
9238c8a9a5SSteve French __u16 ipc_timeout; /*
9338c8a9a5SSteve French * specifies the number of seconds
9438c8a9a5SSteve French * server will wait for the userspace to
9538c8a9a5SSteve French * reply to heartbeat frames.
9638c8a9a5SSteve French */
9738c8a9a5SSteve French __u32 deadtime; /* Number of minutes of inactivity */
9838c8a9a5SSteve French __u32 file_max; /* Limits the maximum number of open files */
9938c8a9a5SSteve French __u32 smb2_max_write; /* MAX write size */
10038c8a9a5SSteve French __u32 smb2_max_read; /* MAX read size */
10138c8a9a5SSteve French __u32 smb2_max_trans; /* MAX trans size */
10238c8a9a5SSteve French __u32 share_fake_fscaps; /*
10338c8a9a5SSteve French * Support some special application that
10438c8a9a5SSteve French * makes QFSINFO calls to check whether
10538c8a9a5SSteve French * we set the SPARSE_FILES bit (0x40).
10638c8a9a5SSteve French */
10738c8a9a5SSteve French __u32 sub_auth[3]; /* Subauth value for Security ID */
10838c8a9a5SSteve French __u32 smb2_max_credits; /* MAX credits */
10938c8a9a5SSteve French __u32 smbd_max_io_size; /* smbd read write size */
11038c8a9a5SSteve French __u32 max_connections; /* Number of maximum simultaneous connections */
11138c8a9a5SSteve French __u32 reserved[126]; /* Reserved room */
11238c8a9a5SSteve French __u32 ifc_list_sz; /* interfaces list size */
11338c8a9a5SSteve French __s8 ____payload[];
11438c8a9a5SSteve French };
11538c8a9a5SSteve French
11638c8a9a5SSteve French #define KSMBD_STARTUP_CONFIG_INTERFACES(s) ((s)->____payload)
11738c8a9a5SSteve French
11838c8a9a5SSteve French /*
11938c8a9a5SSteve French * IPC request to shutdown ksmbd server.
12038c8a9a5SSteve French */
12138c8a9a5SSteve French struct ksmbd_shutdown_request {
12238c8a9a5SSteve French __s32 reserved[16];
12338c8a9a5SSteve French };
12438c8a9a5SSteve French
12538c8a9a5SSteve French /*
12638c8a9a5SSteve French * IPC user login request.
12738c8a9a5SSteve French */
12838c8a9a5SSteve French struct ksmbd_login_request {
12938c8a9a5SSteve French __u32 handle;
13038c8a9a5SSteve French __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */
13138c8a9a5SSteve French __u32 reserved[16]; /* Reserved room */
13238c8a9a5SSteve French };
13338c8a9a5SSteve French
13438c8a9a5SSteve French /*
13538c8a9a5SSteve French * IPC user login response.
13638c8a9a5SSteve French */
13738c8a9a5SSteve French struct ksmbd_login_response {
13838c8a9a5SSteve French __u32 handle;
13938c8a9a5SSteve French __u32 gid; /* group id */
14038c8a9a5SSteve French __u32 uid; /* user id */
14138c8a9a5SSteve French __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */
14238c8a9a5SSteve French __u16 status;
14338c8a9a5SSteve French __u16 hash_sz; /* hash size */
14438c8a9a5SSteve French __s8 hash[KSMBD_REQ_MAX_HASH_SZ]; /* password hash */
14538c8a9a5SSteve French __u32 reserved[16]; /* Reserved room */
14638c8a9a5SSteve French };
14738c8a9a5SSteve French
14838c8a9a5SSteve French /*
14938c8a9a5SSteve French * IPC request to fetch net share config.
15038c8a9a5SSteve French */
15138c8a9a5SSteve French struct ksmbd_share_config_request {
15238c8a9a5SSteve French __u32 handle;
15338c8a9a5SSteve French __s8 share_name[KSMBD_REQ_MAX_SHARE_NAME]; /* share name */
15438c8a9a5SSteve French __u32 reserved[16]; /* Reserved room */
15538c8a9a5SSteve French };
15638c8a9a5SSteve French
15738c8a9a5SSteve French /*
15838c8a9a5SSteve French * IPC response to the net share config request.
15938c8a9a5SSteve French */
16038c8a9a5SSteve French struct ksmbd_share_config_response {
16138c8a9a5SSteve French __u32 handle;
16238c8a9a5SSteve French __u32 flags;
16338c8a9a5SSteve French __u16 create_mask;
16438c8a9a5SSteve French __u16 directory_mask;
16538c8a9a5SSteve French __u16 force_create_mode;
16638c8a9a5SSteve French __u16 force_directory_mode;
16738c8a9a5SSteve French __u16 force_uid;
16838c8a9a5SSteve French __u16 force_gid;
16938c8a9a5SSteve French __s8 share_name[KSMBD_REQ_MAX_SHARE_NAME];
170a637fabaSNamjae Jeon __u32 reserved[111]; /* Reserved room */
171a637fabaSNamjae Jeon __u32 payload_sz;
17238c8a9a5SSteve French __u32 veto_list_sz;
17338c8a9a5SSteve French __s8 ____payload[];
17438c8a9a5SSteve French };
17538c8a9a5SSteve French
17638c8a9a5SSteve French #define KSMBD_SHARE_CONFIG_VETO_LIST(s) ((s)->____payload)
17738c8a9a5SSteve French
17838c8a9a5SSteve French static inline char *
ksmbd_share_config_path(struct ksmbd_share_config_response * sc)17938c8a9a5SSteve French ksmbd_share_config_path(struct ksmbd_share_config_response *sc)
18038c8a9a5SSteve French {
18138c8a9a5SSteve French char *p = sc->____payload;
18238c8a9a5SSteve French
18338c8a9a5SSteve French if (sc->veto_list_sz)
18438c8a9a5SSteve French p += sc->veto_list_sz + 1;
18538c8a9a5SSteve French
18638c8a9a5SSteve French return p;
18738c8a9a5SSteve French }
18838c8a9a5SSteve French
18938c8a9a5SSteve French /*
19038c8a9a5SSteve French * IPC request for tree connection. This request include session and tree
19138c8a9a5SSteve French * connect info from client.
19238c8a9a5SSteve French */
19338c8a9a5SSteve French struct ksmbd_tree_connect_request {
19438c8a9a5SSteve French __u32 handle;
19538c8a9a5SSteve French __u16 account_flags;
19638c8a9a5SSteve French __u16 flags;
19738c8a9a5SSteve French __u64 session_id;
19838c8a9a5SSteve French __u64 connect_id;
19938c8a9a5SSteve French __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
20038c8a9a5SSteve French __s8 share[KSMBD_REQ_MAX_SHARE_NAME];
20138c8a9a5SSteve French __s8 peer_addr[64];
20238c8a9a5SSteve French __u32 reserved[16]; /* Reserved room */
20338c8a9a5SSteve French };
20438c8a9a5SSteve French
20538c8a9a5SSteve French /*
20638c8a9a5SSteve French * IPC Response structure for tree connection.
20738c8a9a5SSteve French */
20838c8a9a5SSteve French struct ksmbd_tree_connect_response {
20938c8a9a5SSteve French __u32 handle;
21038c8a9a5SSteve French __u16 status;
21138c8a9a5SSteve French __u16 connection_flags;
21238c8a9a5SSteve French __u32 reserved[16]; /* Reserved room */
21338c8a9a5SSteve French };
21438c8a9a5SSteve French
21538c8a9a5SSteve French /*
21638c8a9a5SSteve French * IPC Request struture to disconnect tree connection.
21738c8a9a5SSteve French */
21838c8a9a5SSteve French struct ksmbd_tree_disconnect_request {
21938c8a9a5SSteve French __u64 session_id; /* session id */
22038c8a9a5SSteve French __u64 connect_id; /* tree connection id */
22138c8a9a5SSteve French __u32 reserved[16]; /* Reserved room */
22238c8a9a5SSteve French };
22338c8a9a5SSteve French
22438c8a9a5SSteve French /*
22538c8a9a5SSteve French * IPC Response structure to logout user account.
22638c8a9a5SSteve French */
22738c8a9a5SSteve French struct ksmbd_logout_request {
22838c8a9a5SSteve French __s8 account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */
22938c8a9a5SSteve French __u32 account_flags;
23038c8a9a5SSteve French __u32 reserved[16]; /* Reserved room */
23138c8a9a5SSteve French };
23238c8a9a5SSteve French
23338c8a9a5SSteve French /*
23438c8a9a5SSteve French * RPC command structure to send rpc request like srvsvc or wkssvc to
23538c8a9a5SSteve French * IPC user daemon.
23638c8a9a5SSteve French */
23738c8a9a5SSteve French struct ksmbd_rpc_command {
23838c8a9a5SSteve French __u32 handle;
23938c8a9a5SSteve French __u32 flags;
24038c8a9a5SSteve French __u32 payload_sz;
24138c8a9a5SSteve French __u8 payload[];
24238c8a9a5SSteve French };
24338c8a9a5SSteve French
24438c8a9a5SSteve French /*
24538c8a9a5SSteve French * IPC Request Kerberos authentication
24638c8a9a5SSteve French */
24738c8a9a5SSteve French struct ksmbd_spnego_authen_request {
24838c8a9a5SSteve French __u32 handle;
24938c8a9a5SSteve French __u16 spnego_blob_len; /* the length of spnego_blob */
25038c8a9a5SSteve French __u8 spnego_blob[]; /*
25138c8a9a5SSteve French * the GSS token from SecurityBuffer of
25238c8a9a5SSteve French * SMB2 SESSION SETUP request
25338c8a9a5SSteve French */
25438c8a9a5SSteve French };
25538c8a9a5SSteve French
25638c8a9a5SSteve French /*
25738c8a9a5SSteve French * Response data which includes the GSS token and the session key generated by
25838c8a9a5SSteve French * user daemon.
25938c8a9a5SSteve French */
26038c8a9a5SSteve French struct ksmbd_spnego_authen_response {
26138c8a9a5SSteve French __u32 handle;
26238c8a9a5SSteve French struct ksmbd_login_response login_response; /*
26338c8a9a5SSteve French * the login response with
26438c8a9a5SSteve French * a user identified by the
26538c8a9a5SSteve French * GSS token from a client
26638c8a9a5SSteve French */
26738c8a9a5SSteve French __u16 session_key_len; /* the length of the session key */
26838c8a9a5SSteve French __u16 spnego_blob_len; /*
26938c8a9a5SSteve French * the length of the GSS token which will be
27038c8a9a5SSteve French * stored in SecurityBuffer of SMB2 SESSION
27138c8a9a5SSteve French * SETUP response
27238c8a9a5SSteve French */
27338c8a9a5SSteve French __u8 payload[]; /* session key + AP_REP */
27438c8a9a5SSteve French };
27538c8a9a5SSteve French
27638c8a9a5SSteve French /*
27738c8a9a5SSteve French * This also used as NETLINK attribute type value.
27838c8a9a5SSteve French *
27938c8a9a5SSteve French * NOTE:
28038c8a9a5SSteve French * Response message type value should be equal to
28138c8a9a5SSteve French * request message type value + 1.
28238c8a9a5SSteve French */
28338c8a9a5SSteve French enum ksmbd_event {
28438c8a9a5SSteve French KSMBD_EVENT_UNSPEC = 0,
28538c8a9a5SSteve French KSMBD_EVENT_HEARTBEAT_REQUEST,
28638c8a9a5SSteve French
28738c8a9a5SSteve French KSMBD_EVENT_STARTING_UP,
28838c8a9a5SSteve French KSMBD_EVENT_SHUTTING_DOWN,
28938c8a9a5SSteve French
29038c8a9a5SSteve French KSMBD_EVENT_LOGIN_REQUEST,
29138c8a9a5SSteve French KSMBD_EVENT_LOGIN_RESPONSE = 5,
29238c8a9a5SSteve French
29338c8a9a5SSteve French KSMBD_EVENT_SHARE_CONFIG_REQUEST,
29438c8a9a5SSteve French KSMBD_EVENT_SHARE_CONFIG_RESPONSE,
29538c8a9a5SSteve French
29638c8a9a5SSteve French KSMBD_EVENT_TREE_CONNECT_REQUEST,
29738c8a9a5SSteve French KSMBD_EVENT_TREE_CONNECT_RESPONSE,
29838c8a9a5SSteve French
29938c8a9a5SSteve French KSMBD_EVENT_TREE_DISCONNECT_REQUEST = 10,
30038c8a9a5SSteve French
30138c8a9a5SSteve French KSMBD_EVENT_LOGOUT_REQUEST,
30238c8a9a5SSteve French
30338c8a9a5SSteve French KSMBD_EVENT_RPC_REQUEST,
30438c8a9a5SSteve French KSMBD_EVENT_RPC_RESPONSE,
30538c8a9a5SSteve French
30638c8a9a5SSteve French KSMBD_EVENT_SPNEGO_AUTHEN_REQUEST,
30738c8a9a5SSteve French KSMBD_EVENT_SPNEGO_AUTHEN_RESPONSE = 15,
30838c8a9a5SSteve French
3099863a531SLin Ma __KSMBD_EVENT_MAX,
3109863a531SLin Ma KSMBD_EVENT_MAX = __KSMBD_EVENT_MAX - 1
31138c8a9a5SSteve French };
31238c8a9a5SSteve French
31338c8a9a5SSteve French /*
31438c8a9a5SSteve French * Enumeration for IPC tree connect status.
31538c8a9a5SSteve French */
31638c8a9a5SSteve French enum KSMBD_TREE_CONN_STATUS {
31738c8a9a5SSteve French KSMBD_TREE_CONN_STATUS_OK = 0,
31838c8a9a5SSteve French KSMBD_TREE_CONN_STATUS_NOMEM,
31938c8a9a5SSteve French KSMBD_TREE_CONN_STATUS_NO_SHARE,
32038c8a9a5SSteve French KSMBD_TREE_CONN_STATUS_NO_USER,
32138c8a9a5SSteve French KSMBD_TREE_CONN_STATUS_INVALID_USER,
32238c8a9a5SSteve French KSMBD_TREE_CONN_STATUS_HOST_DENIED = 5,
32338c8a9a5SSteve French KSMBD_TREE_CONN_STATUS_CONN_EXIST,
32438c8a9a5SSteve French KSMBD_TREE_CONN_STATUS_TOO_MANY_CONNS,
32538c8a9a5SSteve French KSMBD_TREE_CONN_STATUS_TOO_MANY_SESSIONS,
32638c8a9a5SSteve French KSMBD_TREE_CONN_STATUS_ERROR,
32738c8a9a5SSteve French };
32838c8a9a5SSteve French
32938c8a9a5SSteve French /*
33038c8a9a5SSteve French * User config flags.
33138c8a9a5SSteve French */
33238c8a9a5SSteve French #define KSMBD_USER_FLAG_INVALID (0)
33338c8a9a5SSteve French #define KSMBD_USER_FLAG_OK BIT(0)
33438c8a9a5SSteve French #define KSMBD_USER_FLAG_BAD_PASSWORD BIT(1)
33538c8a9a5SSteve French #define KSMBD_USER_FLAG_BAD_UID BIT(2)
33638c8a9a5SSteve French #define KSMBD_USER_FLAG_BAD_USER BIT(3)
33738c8a9a5SSteve French #define KSMBD_USER_FLAG_GUEST_ACCOUNT BIT(4)
33838c8a9a5SSteve French #define KSMBD_USER_FLAG_DELAY_SESSION BIT(5)
33938c8a9a5SSteve French
34038c8a9a5SSteve French /*
34138c8a9a5SSteve French * Share config flags.
34238c8a9a5SSteve French */
34338c8a9a5SSteve French #define KSMBD_SHARE_FLAG_INVALID (0)
34438c8a9a5SSteve French #define KSMBD_SHARE_FLAG_AVAILABLE BIT(0)
34538c8a9a5SSteve French #define KSMBD_SHARE_FLAG_BROWSEABLE BIT(1)
34638c8a9a5SSteve French #define KSMBD_SHARE_FLAG_WRITEABLE BIT(2)
34738c8a9a5SSteve French #define KSMBD_SHARE_FLAG_READONLY BIT(3)
34838c8a9a5SSteve French #define KSMBD_SHARE_FLAG_GUEST_OK BIT(4)
34938c8a9a5SSteve French #define KSMBD_SHARE_FLAG_GUEST_ONLY BIT(5)
35038c8a9a5SSteve French #define KSMBD_SHARE_FLAG_STORE_DOS_ATTRS BIT(6)
35138c8a9a5SSteve French #define KSMBD_SHARE_FLAG_OPLOCKS BIT(7)
35238c8a9a5SSteve French #define KSMBD_SHARE_FLAG_PIPE BIT(8)
35338c8a9a5SSteve French #define KSMBD_SHARE_FLAG_HIDE_DOT_FILES BIT(9)
35438c8a9a5SSteve French #define KSMBD_SHARE_FLAG_INHERIT_OWNER BIT(10)
35538c8a9a5SSteve French #define KSMBD_SHARE_FLAG_STREAMS BIT(11)
35638c8a9a5SSteve French #define KSMBD_SHARE_FLAG_FOLLOW_SYMLINKS BIT(12)
35738c8a9a5SSteve French #define KSMBD_SHARE_FLAG_ACL_XATTR BIT(13)
35838c8a9a5SSteve French #define KSMBD_SHARE_FLAG_UPDATE BIT(14)
3592b57a432SNamjae Jeon #define KSMBD_SHARE_FLAG_CROSSMNT BIT(15)
360*5a65254cSNamjae Jeon #define KSMBD_SHARE_FLAG_CONTINUOUS_AVAILABILITY BIT(16)
36138c8a9a5SSteve French
36238c8a9a5SSteve French /*
36338c8a9a5SSteve French * Tree connect request flags.
36438c8a9a5SSteve French */
36538c8a9a5SSteve French #define KSMBD_TREE_CONN_FLAG_REQUEST_SMB1 (0)
36638c8a9a5SSteve French #define KSMBD_TREE_CONN_FLAG_REQUEST_IPV6 BIT(0)
36738c8a9a5SSteve French #define KSMBD_TREE_CONN_FLAG_REQUEST_SMB2 BIT(1)
36838c8a9a5SSteve French
36938c8a9a5SSteve French /*
37038c8a9a5SSteve French * Tree connect flags.
37138c8a9a5SSteve French */
37238c8a9a5SSteve French #define KSMBD_TREE_CONN_FLAG_GUEST_ACCOUNT BIT(0)
37338c8a9a5SSteve French #define KSMBD_TREE_CONN_FLAG_READ_ONLY BIT(1)
37438c8a9a5SSteve French #define KSMBD_TREE_CONN_FLAG_WRITABLE BIT(2)
37538c8a9a5SSteve French #define KSMBD_TREE_CONN_FLAG_ADMIN_ACCOUNT BIT(3)
37638c8a9a5SSteve French #define KSMBD_TREE_CONN_FLAG_UPDATE BIT(4)
37738c8a9a5SSteve French
37838c8a9a5SSteve French /*
37938c8a9a5SSteve French * RPC over IPC.
38038c8a9a5SSteve French */
38138c8a9a5SSteve French #define KSMBD_RPC_METHOD_RETURN BIT(0)
38238c8a9a5SSteve French #define KSMBD_RPC_SRVSVC_METHOD_INVOKE BIT(1)
38338c8a9a5SSteve French #define KSMBD_RPC_SRVSVC_METHOD_RETURN (KSMBD_RPC_SRVSVC_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
38438c8a9a5SSteve French #define KSMBD_RPC_WKSSVC_METHOD_INVOKE BIT(2)
38538c8a9a5SSteve French #define KSMBD_RPC_WKSSVC_METHOD_RETURN (KSMBD_RPC_WKSSVC_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
38638c8a9a5SSteve French #define KSMBD_RPC_IOCTL_METHOD (BIT(3) | KSMBD_RPC_METHOD_RETURN)
38738c8a9a5SSteve French #define KSMBD_RPC_OPEN_METHOD BIT(4)
38838c8a9a5SSteve French #define KSMBD_RPC_WRITE_METHOD BIT(5)
38938c8a9a5SSteve French #define KSMBD_RPC_READ_METHOD (BIT(6) | KSMBD_RPC_METHOD_RETURN)
39038c8a9a5SSteve French #define KSMBD_RPC_CLOSE_METHOD BIT(7)
39138c8a9a5SSteve French #define KSMBD_RPC_RAP_METHOD (BIT(8) | KSMBD_RPC_METHOD_RETURN)
39238c8a9a5SSteve French #define KSMBD_RPC_RESTRICTED_CONTEXT BIT(9)
39338c8a9a5SSteve French #define KSMBD_RPC_SAMR_METHOD_INVOKE BIT(10)
39438c8a9a5SSteve French #define KSMBD_RPC_SAMR_METHOD_RETURN (KSMBD_RPC_SAMR_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
39538c8a9a5SSteve French #define KSMBD_RPC_LSARPC_METHOD_INVOKE BIT(11)
39638c8a9a5SSteve French #define KSMBD_RPC_LSARPC_METHOD_RETURN (KSMBD_RPC_LSARPC_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
39738c8a9a5SSteve French
39838c8a9a5SSteve French /*
39938c8a9a5SSteve French * RPC status definitions.
40038c8a9a5SSteve French */
40138c8a9a5SSteve French #define KSMBD_RPC_OK 0
40238c8a9a5SSteve French #define KSMBD_RPC_EBAD_FUNC 0x00000001
40338c8a9a5SSteve French #define KSMBD_RPC_EACCESS_DENIED 0x00000005
40438c8a9a5SSteve French #define KSMBD_RPC_EBAD_FID 0x00000006
40538c8a9a5SSteve French #define KSMBD_RPC_ENOMEM 0x00000008
40638c8a9a5SSteve French #define KSMBD_RPC_EBAD_DATA 0x0000000D
40738c8a9a5SSteve French #define KSMBD_RPC_ENOTIMPLEMENTED 0x00000040
40838c8a9a5SSteve French #define KSMBD_RPC_EINVALID_PARAMETER 0x00000057
40938c8a9a5SSteve French #define KSMBD_RPC_EMORE_DATA 0x000000EA
41038c8a9a5SSteve French #define KSMBD_RPC_EINVALID_LEVEL 0x0000007C
41138c8a9a5SSteve French #define KSMBD_RPC_SOME_NOT_MAPPED 0x00000107
41238c8a9a5SSteve French
41338c8a9a5SSteve French #define KSMBD_CONFIG_OPT_DISABLED 0
41438c8a9a5SSteve French #define KSMBD_CONFIG_OPT_ENABLED 1
41538c8a9a5SSteve French #define KSMBD_CONFIG_OPT_AUTO 2
41638c8a9a5SSteve French #define KSMBD_CONFIG_OPT_MANDATORY 3
41738c8a9a5SSteve French
41838c8a9a5SSteve French #endif /* _LINUX_KSMBD_SERVER_H */
419