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