xref: /openbmc/linux/fs/smb/server/ksmbd_netlink.h (revision 5a65254c)
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)
3605a65254cSNamjae 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