162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *   Copyright (C) 2018 Samsung Electronics Co., Ltd.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *   linux-ksmbd-devel@lists.sourceforge.net
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef _LINUX_KSMBD_SERVER_H
962306a36Sopenharmony_ci#define _LINUX_KSMBD_SERVER_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/types.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/*
1462306a36Sopenharmony_ci * This is a userspace ABI to communicate data between ksmbd and user IPC
1562306a36Sopenharmony_ci * daemon using netlink. This is added to track and cache user account DB
1662306a36Sopenharmony_ci * and share configuration info from userspace.
1762306a36Sopenharmony_ci *
1862306a36Sopenharmony_ci *  - KSMBD_EVENT_HEARTBEAT_REQUEST(ksmbd_heartbeat)
1962306a36Sopenharmony_ci *    This event is to check whether user IPC daemon is alive. If user IPC
2062306a36Sopenharmony_ci *    daemon is dead, ksmbd keep existing connection till disconnecting and
2162306a36Sopenharmony_ci *    new connection will be denied.
2262306a36Sopenharmony_ci *
2362306a36Sopenharmony_ci *  - KSMBD_EVENT_STARTING_UP(ksmbd_startup_request)
2462306a36Sopenharmony_ci *    This event is to receive the information that initializes the ksmbd
2562306a36Sopenharmony_ci *    server from the user IPC daemon and to start the server. The global
2662306a36Sopenharmony_ci *    section parameters are given from smb.conf as initialization
2762306a36Sopenharmony_ci *    information.
2862306a36Sopenharmony_ci *
2962306a36Sopenharmony_ci *  - KSMBD_EVENT_SHUTTING_DOWN(ksmbd_shutdown_request)
3062306a36Sopenharmony_ci *    This event is to shutdown ksmbd server.
3162306a36Sopenharmony_ci *
3262306a36Sopenharmony_ci *  - KSMBD_EVENT_LOGIN_REQUEST/RESPONSE(ksmbd_login_request/response)
3362306a36Sopenharmony_ci *    This event is to get user account info to user IPC daemon.
3462306a36Sopenharmony_ci *
3562306a36Sopenharmony_ci *  - KSMBD_EVENT_SHARE_CONFIG_REQUEST/RESPONSE(ksmbd_share_config_request/response)
3662306a36Sopenharmony_ci *    This event is to get net share configuration info.
3762306a36Sopenharmony_ci *
3862306a36Sopenharmony_ci *  - KSMBD_EVENT_TREE_CONNECT_REQUEST/RESPONSE(ksmbd_tree_connect_request/response)
3962306a36Sopenharmony_ci *    This event is to get session and tree connect info.
4062306a36Sopenharmony_ci *
4162306a36Sopenharmony_ci *  - KSMBD_EVENT_TREE_DISCONNECT_REQUEST(ksmbd_tree_disconnect_request)
4262306a36Sopenharmony_ci *    This event is to send tree disconnect info to user IPC daemon.
4362306a36Sopenharmony_ci *
4462306a36Sopenharmony_ci *  - KSMBD_EVENT_LOGOUT_REQUEST(ksmbd_logout_request)
4562306a36Sopenharmony_ci *    This event is to send logout request to user IPC daemon.
4662306a36Sopenharmony_ci *
4762306a36Sopenharmony_ci *  - KSMBD_EVENT_RPC_REQUEST/RESPONSE(ksmbd_rpc_command)
4862306a36Sopenharmony_ci *    This event is to make DCE/RPC request like srvsvc, wkssvc, lsarpc,
4962306a36Sopenharmony_ci *    samr to be processed in userspace.
5062306a36Sopenharmony_ci *
5162306a36Sopenharmony_ci *  - KSMBD_EVENT_SPNEGO_AUTHEN_REQUEST/RESPONSE(ksmbd_spnego_authen_request/response)
5262306a36Sopenharmony_ci *    This event is to make kerberos authentication to be processed in
5362306a36Sopenharmony_ci *    userspace.
5462306a36Sopenharmony_ci */
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci#define KSMBD_GENL_NAME		"SMBD_GENL"
5762306a36Sopenharmony_ci#define KSMBD_GENL_VERSION		0x01
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci#define KSMBD_REQ_MAX_ACCOUNT_NAME_SZ	48
6062306a36Sopenharmony_ci#define KSMBD_REQ_MAX_HASH_SZ		18
6162306a36Sopenharmony_ci#define KSMBD_REQ_MAX_SHARE_NAME	64
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci/*
6462306a36Sopenharmony_ci * IPC heartbeat frame to check whether user IPC daemon is alive.
6562306a36Sopenharmony_ci */
6662306a36Sopenharmony_cistruct ksmbd_heartbeat {
6762306a36Sopenharmony_ci	__u32	handle;
6862306a36Sopenharmony_ci};
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci/*
7162306a36Sopenharmony_ci * Global config flags.
7262306a36Sopenharmony_ci */
7362306a36Sopenharmony_ci#define KSMBD_GLOBAL_FLAG_INVALID		(0)
7462306a36Sopenharmony_ci#define KSMBD_GLOBAL_FLAG_SMB2_LEASES		BIT(0)
7562306a36Sopenharmony_ci#define KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION	BIT(1)
7662306a36Sopenharmony_ci#define KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL	BIT(2)
7762306a36Sopenharmony_ci#define KSMBD_GLOBAL_FLAG_SMB2_ENCRYPTION_OFF	BIT(3)
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci/*
8062306a36Sopenharmony_ci * IPC request for ksmbd server startup
8162306a36Sopenharmony_ci */
8262306a36Sopenharmony_cistruct ksmbd_startup_request {
8362306a36Sopenharmony_ci	__u32	flags;			/* Flags for global config */
8462306a36Sopenharmony_ci	__s32	signing;		/* Signing enabled */
8562306a36Sopenharmony_ci	__s8	min_prot[16];		/* The minimum SMB protocol version */
8662306a36Sopenharmony_ci	__s8	max_prot[16];		/* The maximum SMB protocol version */
8762306a36Sopenharmony_ci	__s8	netbios_name[16];
8862306a36Sopenharmony_ci	__s8	work_group[64];		/* Workgroup */
8962306a36Sopenharmony_ci	__s8	server_string[64];	/* Server string */
9062306a36Sopenharmony_ci	__u16	tcp_port;		/* tcp port */
9162306a36Sopenharmony_ci	__u16	ipc_timeout;		/*
9262306a36Sopenharmony_ci					 * specifies the number of seconds
9362306a36Sopenharmony_ci					 * server will wait for the userspace to
9462306a36Sopenharmony_ci					 * reply to heartbeat frames.
9562306a36Sopenharmony_ci					 */
9662306a36Sopenharmony_ci	__u32	deadtime;		/* Number of minutes of inactivity */
9762306a36Sopenharmony_ci	__u32	file_max;		/* Limits the maximum number of open files */
9862306a36Sopenharmony_ci	__u32	smb2_max_write;		/* MAX write size */
9962306a36Sopenharmony_ci	__u32	smb2_max_read;		/* MAX read size */
10062306a36Sopenharmony_ci	__u32	smb2_max_trans;		/* MAX trans size */
10162306a36Sopenharmony_ci	__u32	share_fake_fscaps;	/*
10262306a36Sopenharmony_ci					 * Support some special application that
10362306a36Sopenharmony_ci					 * makes QFSINFO calls to check whether
10462306a36Sopenharmony_ci					 * we set the SPARSE_FILES bit (0x40).
10562306a36Sopenharmony_ci					 */
10662306a36Sopenharmony_ci	__u32	sub_auth[3];		/* Subauth value for Security ID */
10762306a36Sopenharmony_ci	__u32	smb2_max_credits;	/* MAX credits */
10862306a36Sopenharmony_ci	__u32	smbd_max_io_size;	/* smbd read write size */
10962306a36Sopenharmony_ci	__u32	max_connections;	/* Number of maximum simultaneous connections */
11062306a36Sopenharmony_ci	__u32	reserved[126];		/* Reserved room */
11162306a36Sopenharmony_ci	__u32	ifc_list_sz;		/* interfaces list size */
11262306a36Sopenharmony_ci	__s8	____payload[];
11362306a36Sopenharmony_ci};
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci#define KSMBD_STARTUP_CONFIG_INTERFACES(s)	((s)->____payload)
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci/*
11862306a36Sopenharmony_ci * IPC request to shutdown ksmbd server.
11962306a36Sopenharmony_ci */
12062306a36Sopenharmony_cistruct ksmbd_shutdown_request {
12162306a36Sopenharmony_ci	__s32	reserved[16];
12262306a36Sopenharmony_ci};
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci/*
12562306a36Sopenharmony_ci * IPC user login request.
12662306a36Sopenharmony_ci */
12762306a36Sopenharmony_cistruct ksmbd_login_request {
12862306a36Sopenharmony_ci	__u32	handle;
12962306a36Sopenharmony_ci	__s8	account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */
13062306a36Sopenharmony_ci	__u32	reserved[16];				/* Reserved room */
13162306a36Sopenharmony_ci};
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci/*
13462306a36Sopenharmony_ci * IPC user login response.
13562306a36Sopenharmony_ci */
13662306a36Sopenharmony_cistruct ksmbd_login_response {
13762306a36Sopenharmony_ci	__u32	handle;
13862306a36Sopenharmony_ci	__u32	gid;					/* group id */
13962306a36Sopenharmony_ci	__u32	uid;					/* user id */
14062306a36Sopenharmony_ci	__s8	account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */
14162306a36Sopenharmony_ci	__u16	status;
14262306a36Sopenharmony_ci	__u16	hash_sz;			/* hash size */
14362306a36Sopenharmony_ci	__s8	hash[KSMBD_REQ_MAX_HASH_SZ];	/* password hash */
14462306a36Sopenharmony_ci	__u32	reserved[16];			/* Reserved room */
14562306a36Sopenharmony_ci};
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ci/*
14862306a36Sopenharmony_ci * IPC request to fetch net share config.
14962306a36Sopenharmony_ci */
15062306a36Sopenharmony_cistruct ksmbd_share_config_request {
15162306a36Sopenharmony_ci	__u32	handle;
15262306a36Sopenharmony_ci	__s8	share_name[KSMBD_REQ_MAX_SHARE_NAME]; /* share name */
15362306a36Sopenharmony_ci	__u32	reserved[16];		/* Reserved room */
15462306a36Sopenharmony_ci};
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci/*
15762306a36Sopenharmony_ci * IPC response to the net share config request.
15862306a36Sopenharmony_ci */
15962306a36Sopenharmony_cistruct ksmbd_share_config_response {
16062306a36Sopenharmony_ci	__u32	handle;
16162306a36Sopenharmony_ci	__u32	flags;
16262306a36Sopenharmony_ci	__u16	create_mask;
16362306a36Sopenharmony_ci	__u16	directory_mask;
16462306a36Sopenharmony_ci	__u16	force_create_mode;
16562306a36Sopenharmony_ci	__u16	force_directory_mode;
16662306a36Sopenharmony_ci	__u16	force_uid;
16762306a36Sopenharmony_ci	__u16	force_gid;
16862306a36Sopenharmony_ci	__s8	share_name[KSMBD_REQ_MAX_SHARE_NAME];
16962306a36Sopenharmony_ci	__u32	reserved[112];		/* Reserved room */
17062306a36Sopenharmony_ci	__u32	veto_list_sz;
17162306a36Sopenharmony_ci	__s8	____payload[];
17262306a36Sopenharmony_ci};
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci#define KSMBD_SHARE_CONFIG_VETO_LIST(s)	((s)->____payload)
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_cistatic inline char *
17762306a36Sopenharmony_ciksmbd_share_config_path(struct ksmbd_share_config_response *sc)
17862306a36Sopenharmony_ci{
17962306a36Sopenharmony_ci	char *p = sc->____payload;
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci	if (sc->veto_list_sz)
18262306a36Sopenharmony_ci		p += sc->veto_list_sz + 1;
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci	return p;
18562306a36Sopenharmony_ci}
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci/*
18862306a36Sopenharmony_ci * IPC request for tree connection. This request include session and tree
18962306a36Sopenharmony_ci * connect info from client.
19062306a36Sopenharmony_ci */
19162306a36Sopenharmony_cistruct ksmbd_tree_connect_request {
19262306a36Sopenharmony_ci	__u32	handle;
19362306a36Sopenharmony_ci	__u16	account_flags;
19462306a36Sopenharmony_ci	__u16	flags;
19562306a36Sopenharmony_ci	__u64	session_id;
19662306a36Sopenharmony_ci	__u64	connect_id;
19762306a36Sopenharmony_ci	__s8	account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ];
19862306a36Sopenharmony_ci	__s8	share[KSMBD_REQ_MAX_SHARE_NAME];
19962306a36Sopenharmony_ci	__s8	peer_addr[64];
20062306a36Sopenharmony_ci	__u32	reserved[16];		/* Reserved room */
20162306a36Sopenharmony_ci};
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_ci/*
20462306a36Sopenharmony_ci * IPC Response structure for tree connection.
20562306a36Sopenharmony_ci */
20662306a36Sopenharmony_cistruct ksmbd_tree_connect_response {
20762306a36Sopenharmony_ci	__u32	handle;
20862306a36Sopenharmony_ci	__u16	status;
20962306a36Sopenharmony_ci	__u16	connection_flags;
21062306a36Sopenharmony_ci	__u32	reserved[16];		/* Reserved room */
21162306a36Sopenharmony_ci};
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ci/*
21462306a36Sopenharmony_ci * IPC Request struture to disconnect tree connection.
21562306a36Sopenharmony_ci */
21662306a36Sopenharmony_cistruct ksmbd_tree_disconnect_request {
21762306a36Sopenharmony_ci	__u64	session_id;	/* session id */
21862306a36Sopenharmony_ci	__u64	connect_id;	/* tree connection id */
21962306a36Sopenharmony_ci	__u32	reserved[16];	/* Reserved room */
22062306a36Sopenharmony_ci};
22162306a36Sopenharmony_ci
22262306a36Sopenharmony_ci/*
22362306a36Sopenharmony_ci * IPC Response structure to logout user account.
22462306a36Sopenharmony_ci */
22562306a36Sopenharmony_cistruct ksmbd_logout_request {
22662306a36Sopenharmony_ci	__s8	account[KSMBD_REQ_MAX_ACCOUNT_NAME_SZ]; /* user account name */
22762306a36Sopenharmony_ci	__u32	account_flags;
22862306a36Sopenharmony_ci	__u32	reserved[16];				/* Reserved room */
22962306a36Sopenharmony_ci};
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci/*
23262306a36Sopenharmony_ci * RPC command structure to send rpc request like srvsvc or wkssvc to
23362306a36Sopenharmony_ci * IPC user daemon.
23462306a36Sopenharmony_ci */
23562306a36Sopenharmony_cistruct ksmbd_rpc_command {
23662306a36Sopenharmony_ci	__u32	handle;
23762306a36Sopenharmony_ci	__u32	flags;
23862306a36Sopenharmony_ci	__u32	payload_sz;
23962306a36Sopenharmony_ci	__u8	payload[];
24062306a36Sopenharmony_ci};
24162306a36Sopenharmony_ci
24262306a36Sopenharmony_ci/*
24362306a36Sopenharmony_ci * IPC Request Kerberos authentication
24462306a36Sopenharmony_ci */
24562306a36Sopenharmony_cistruct ksmbd_spnego_authen_request {
24662306a36Sopenharmony_ci	__u32	handle;
24762306a36Sopenharmony_ci	__u16	spnego_blob_len;	/* the length of spnego_blob */
24862306a36Sopenharmony_ci	__u8	spnego_blob[];		/*
24962306a36Sopenharmony_ci					 * the GSS token from SecurityBuffer of
25062306a36Sopenharmony_ci					 * SMB2 SESSION SETUP request
25162306a36Sopenharmony_ci					 */
25262306a36Sopenharmony_ci};
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ci/*
25562306a36Sopenharmony_ci * Response data which includes the GSS token and the session key generated by
25662306a36Sopenharmony_ci * user daemon.
25762306a36Sopenharmony_ci */
25862306a36Sopenharmony_cistruct ksmbd_spnego_authen_response {
25962306a36Sopenharmony_ci	__u32	handle;
26062306a36Sopenharmony_ci	struct ksmbd_login_response login_response; /*
26162306a36Sopenharmony_ci						     * the login response with
26262306a36Sopenharmony_ci						     * a user identified by the
26362306a36Sopenharmony_ci						     * GSS token from a client
26462306a36Sopenharmony_ci						     */
26562306a36Sopenharmony_ci	__u16	session_key_len; /* the length of the session key */
26662306a36Sopenharmony_ci	__u16	spnego_blob_len; /*
26762306a36Sopenharmony_ci				  * the length of  the GSS token which will be
26862306a36Sopenharmony_ci				  * stored in SecurityBuffer of SMB2 SESSION
26962306a36Sopenharmony_ci				  * SETUP response
27062306a36Sopenharmony_ci				  */
27162306a36Sopenharmony_ci	__u8	payload[]; /* session key + AP_REP */
27262306a36Sopenharmony_ci};
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci/*
27562306a36Sopenharmony_ci * This also used as NETLINK attribute type value.
27662306a36Sopenharmony_ci *
27762306a36Sopenharmony_ci * NOTE:
27862306a36Sopenharmony_ci * Response message type value should be equal to
27962306a36Sopenharmony_ci * request message type value + 1.
28062306a36Sopenharmony_ci */
28162306a36Sopenharmony_cienum ksmbd_event {
28262306a36Sopenharmony_ci	KSMBD_EVENT_UNSPEC			= 0,
28362306a36Sopenharmony_ci	KSMBD_EVENT_HEARTBEAT_REQUEST,
28462306a36Sopenharmony_ci
28562306a36Sopenharmony_ci	KSMBD_EVENT_STARTING_UP,
28662306a36Sopenharmony_ci	KSMBD_EVENT_SHUTTING_DOWN,
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_ci	KSMBD_EVENT_LOGIN_REQUEST,
28962306a36Sopenharmony_ci	KSMBD_EVENT_LOGIN_RESPONSE		= 5,
29062306a36Sopenharmony_ci
29162306a36Sopenharmony_ci	KSMBD_EVENT_SHARE_CONFIG_REQUEST,
29262306a36Sopenharmony_ci	KSMBD_EVENT_SHARE_CONFIG_RESPONSE,
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_ci	KSMBD_EVENT_TREE_CONNECT_REQUEST,
29562306a36Sopenharmony_ci	KSMBD_EVENT_TREE_CONNECT_RESPONSE,
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_ci	KSMBD_EVENT_TREE_DISCONNECT_REQUEST	= 10,
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci	KSMBD_EVENT_LOGOUT_REQUEST,
30062306a36Sopenharmony_ci
30162306a36Sopenharmony_ci	KSMBD_EVENT_RPC_REQUEST,
30262306a36Sopenharmony_ci	KSMBD_EVENT_RPC_RESPONSE,
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_ci	KSMBD_EVENT_SPNEGO_AUTHEN_REQUEST,
30562306a36Sopenharmony_ci	KSMBD_EVENT_SPNEGO_AUTHEN_RESPONSE	= 15,
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ci	__KSMBD_EVENT_MAX,
30862306a36Sopenharmony_ci	KSMBD_EVENT_MAX = __KSMBD_EVENT_MAX - 1
30962306a36Sopenharmony_ci};
31062306a36Sopenharmony_ci
31162306a36Sopenharmony_ci/*
31262306a36Sopenharmony_ci * Enumeration for IPC tree connect status.
31362306a36Sopenharmony_ci */
31462306a36Sopenharmony_cienum KSMBD_TREE_CONN_STATUS {
31562306a36Sopenharmony_ci	KSMBD_TREE_CONN_STATUS_OK		= 0,
31662306a36Sopenharmony_ci	KSMBD_TREE_CONN_STATUS_NOMEM,
31762306a36Sopenharmony_ci	KSMBD_TREE_CONN_STATUS_NO_SHARE,
31862306a36Sopenharmony_ci	KSMBD_TREE_CONN_STATUS_NO_USER,
31962306a36Sopenharmony_ci	KSMBD_TREE_CONN_STATUS_INVALID_USER,
32062306a36Sopenharmony_ci	KSMBD_TREE_CONN_STATUS_HOST_DENIED	= 5,
32162306a36Sopenharmony_ci	KSMBD_TREE_CONN_STATUS_CONN_EXIST,
32262306a36Sopenharmony_ci	KSMBD_TREE_CONN_STATUS_TOO_MANY_CONNS,
32362306a36Sopenharmony_ci	KSMBD_TREE_CONN_STATUS_TOO_MANY_SESSIONS,
32462306a36Sopenharmony_ci	KSMBD_TREE_CONN_STATUS_ERROR,
32562306a36Sopenharmony_ci};
32662306a36Sopenharmony_ci
32762306a36Sopenharmony_ci/*
32862306a36Sopenharmony_ci * User config flags.
32962306a36Sopenharmony_ci */
33062306a36Sopenharmony_ci#define KSMBD_USER_FLAG_INVALID		(0)
33162306a36Sopenharmony_ci#define KSMBD_USER_FLAG_OK		BIT(0)
33262306a36Sopenharmony_ci#define KSMBD_USER_FLAG_BAD_PASSWORD	BIT(1)
33362306a36Sopenharmony_ci#define KSMBD_USER_FLAG_BAD_UID		BIT(2)
33462306a36Sopenharmony_ci#define KSMBD_USER_FLAG_BAD_USER	BIT(3)
33562306a36Sopenharmony_ci#define KSMBD_USER_FLAG_GUEST_ACCOUNT	BIT(4)
33662306a36Sopenharmony_ci#define KSMBD_USER_FLAG_DELAY_SESSION	BIT(5)
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_ci/*
33962306a36Sopenharmony_ci * Share config flags.
34062306a36Sopenharmony_ci */
34162306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_INVALID		(0)
34262306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_AVAILABLE		BIT(0)
34362306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_BROWSEABLE		BIT(1)
34462306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_WRITEABLE		BIT(2)
34562306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_READONLY		BIT(3)
34662306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_GUEST_OK		BIT(4)
34762306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_GUEST_ONLY		BIT(5)
34862306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_STORE_DOS_ATTRS	BIT(6)
34962306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_OPLOCKS		BIT(7)
35062306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_PIPE			BIT(8)
35162306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_HIDE_DOT_FILES		BIT(9)
35262306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_INHERIT_OWNER		BIT(10)
35362306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_STREAMS		BIT(11)
35462306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_FOLLOW_SYMLINKS	BIT(12)
35562306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_ACL_XATTR		BIT(13)
35662306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_UPDATE			BIT(14)
35762306a36Sopenharmony_ci#define KSMBD_SHARE_FLAG_CROSSMNT		BIT(15)
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ci/*
36062306a36Sopenharmony_ci * Tree connect request flags.
36162306a36Sopenharmony_ci */
36262306a36Sopenharmony_ci#define KSMBD_TREE_CONN_FLAG_REQUEST_SMB1	(0)
36362306a36Sopenharmony_ci#define KSMBD_TREE_CONN_FLAG_REQUEST_IPV6	BIT(0)
36462306a36Sopenharmony_ci#define KSMBD_TREE_CONN_FLAG_REQUEST_SMB2	BIT(1)
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ci/*
36762306a36Sopenharmony_ci * Tree connect flags.
36862306a36Sopenharmony_ci */
36962306a36Sopenharmony_ci#define KSMBD_TREE_CONN_FLAG_GUEST_ACCOUNT	BIT(0)
37062306a36Sopenharmony_ci#define KSMBD_TREE_CONN_FLAG_READ_ONLY		BIT(1)
37162306a36Sopenharmony_ci#define KSMBD_TREE_CONN_FLAG_WRITABLE		BIT(2)
37262306a36Sopenharmony_ci#define KSMBD_TREE_CONN_FLAG_ADMIN_ACCOUNT	BIT(3)
37362306a36Sopenharmony_ci#define KSMBD_TREE_CONN_FLAG_UPDATE		BIT(4)
37462306a36Sopenharmony_ci
37562306a36Sopenharmony_ci/*
37662306a36Sopenharmony_ci * RPC over IPC.
37762306a36Sopenharmony_ci */
37862306a36Sopenharmony_ci#define KSMBD_RPC_METHOD_RETURN		BIT(0)
37962306a36Sopenharmony_ci#define KSMBD_RPC_SRVSVC_METHOD_INVOKE	BIT(1)
38062306a36Sopenharmony_ci#define KSMBD_RPC_SRVSVC_METHOD_RETURN	(KSMBD_RPC_SRVSVC_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
38162306a36Sopenharmony_ci#define KSMBD_RPC_WKSSVC_METHOD_INVOKE	BIT(2)
38262306a36Sopenharmony_ci#define KSMBD_RPC_WKSSVC_METHOD_RETURN	(KSMBD_RPC_WKSSVC_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
38362306a36Sopenharmony_ci#define KSMBD_RPC_IOCTL_METHOD		(BIT(3) | KSMBD_RPC_METHOD_RETURN)
38462306a36Sopenharmony_ci#define KSMBD_RPC_OPEN_METHOD		BIT(4)
38562306a36Sopenharmony_ci#define KSMBD_RPC_WRITE_METHOD		BIT(5)
38662306a36Sopenharmony_ci#define KSMBD_RPC_READ_METHOD		(BIT(6) | KSMBD_RPC_METHOD_RETURN)
38762306a36Sopenharmony_ci#define KSMBD_RPC_CLOSE_METHOD		BIT(7)
38862306a36Sopenharmony_ci#define KSMBD_RPC_RAP_METHOD		(BIT(8) | KSMBD_RPC_METHOD_RETURN)
38962306a36Sopenharmony_ci#define KSMBD_RPC_RESTRICTED_CONTEXT	BIT(9)
39062306a36Sopenharmony_ci#define KSMBD_RPC_SAMR_METHOD_INVOKE	BIT(10)
39162306a36Sopenharmony_ci#define KSMBD_RPC_SAMR_METHOD_RETURN	(KSMBD_RPC_SAMR_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
39262306a36Sopenharmony_ci#define KSMBD_RPC_LSARPC_METHOD_INVOKE	BIT(11)
39362306a36Sopenharmony_ci#define KSMBD_RPC_LSARPC_METHOD_RETURN	(KSMBD_RPC_LSARPC_METHOD_INVOKE | KSMBD_RPC_METHOD_RETURN)
39462306a36Sopenharmony_ci
39562306a36Sopenharmony_ci/*
39662306a36Sopenharmony_ci * RPC status definitions.
39762306a36Sopenharmony_ci */
39862306a36Sopenharmony_ci#define KSMBD_RPC_OK			0
39962306a36Sopenharmony_ci#define KSMBD_RPC_EBAD_FUNC		0x00000001
40062306a36Sopenharmony_ci#define KSMBD_RPC_EACCESS_DENIED	0x00000005
40162306a36Sopenharmony_ci#define KSMBD_RPC_EBAD_FID		0x00000006
40262306a36Sopenharmony_ci#define KSMBD_RPC_ENOMEM		0x00000008
40362306a36Sopenharmony_ci#define KSMBD_RPC_EBAD_DATA		0x0000000D
40462306a36Sopenharmony_ci#define KSMBD_RPC_ENOTIMPLEMENTED	0x00000040
40562306a36Sopenharmony_ci#define KSMBD_RPC_EINVALID_PARAMETER	0x00000057
40662306a36Sopenharmony_ci#define KSMBD_RPC_EMORE_DATA		0x000000EA
40762306a36Sopenharmony_ci#define KSMBD_RPC_EINVALID_LEVEL	0x0000007C
40862306a36Sopenharmony_ci#define KSMBD_RPC_SOME_NOT_MAPPED	0x00000107
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_ci#define KSMBD_CONFIG_OPT_DISABLED	0
41162306a36Sopenharmony_ci#define KSMBD_CONFIG_OPT_ENABLED	1
41262306a36Sopenharmony_ci#define KSMBD_CONFIG_OPT_AUTO		2
41362306a36Sopenharmony_ci#define KSMBD_CONFIG_OPT_MANDATORY	3
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_ci#endif /* _LINUX_KSMBD_SERVER_H */
416