16863 implement C23 stdbit.h
[illumos-gate.git] / usr / src / uts / common / smbsrv / smb_ioctl.h
blob268f8fded9e3bb22e4444af1b224174a480f94bd
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
23 * Copyright 2017 Nexenta Systems, Inc. All rights reserved.
24 * Copyright 2017 Joyent, Inc.
25 * Copyright 2022 RackTop Systems, Inc.
28 #ifndef _SMB_IOCTL_H_
29 #define _SMB_IOCTL_H_
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
35 #include <sys/types.h>
36 #include <sys/param.h>
37 #include <smbsrv/smbinfo.h>
39 #define SMB_IOC_VERSION 0x534D4201 /* SMB1 */
41 #define SMB_IOC_BASE (('S' << 16) | ('B' << 8))
43 #define SMB_IOC_CONFIG _IOW(SMB_IOC_BASE, 1, int)
44 #define SMB_IOC_START _IOW(SMB_IOC_BASE, 2, int)
45 #define SMB_IOC_GMTOFF _IOW(SMB_IOC_BASE, 3, int)
46 #define SMB_IOC_SHARE _IOW(SMB_IOC_BASE, 4, int)
47 #define SMB_IOC_UNSHARE _IOW(SMB_IOC_BASE, 5, int)
48 #define SMB_IOC_NUMOPEN _IOW(SMB_IOC_BASE, 6, int)
49 #define SMB_IOC_SVCENUM _IOW(SMB_IOC_BASE, 7, int)
50 #define SMB_IOC_FILE_CLOSE _IOW(SMB_IOC_BASE, 8, int)
51 #define SMB_IOC_SESSION_CLOSE _IOW(SMB_IOC_BASE, 9, int)
52 #define SMB_IOC_STOP _IOW(SMB_IOC_BASE, 10, int)
53 #define SMB_IOC_EVENT _IOW(SMB_IOC_BASE, 11, int)
54 #define SMB_IOC_SHAREINFO _IOW(SMB_IOC_BASE, 12, int)
55 #define SMB_IOC_SHAREACCESS _IOW(SMB_IOC_BASE, 13, int)
56 #define SMB_IOC_SPOOLDOC _IOW(SMB_IOC_BASE, 14, int)
58 typedef struct smb_ioc_header {
59 uint32_t version;
60 uint32_t crc;
61 uint32_t len;
62 int cmd;
63 } smb_ioc_header_t;
65 typedef struct smb_ioc_spooldoc {
66 smb_ioc_header_t hdr;
67 smb_inaddr_t ipaddr;
68 uint32_t spool_num;
69 char username[MAXNAMELEN];
70 char path[MAXPATHLEN];
71 } smb_ioc_spooldoc_t;
73 typedef struct {
74 smb_ioc_header_t hdr;
75 int32_t offset;
76 } smb_ioc_gmt_t;
78 typedef struct smb_ioc_share {
79 smb_ioc_header_t hdr;
80 uint32_t shrlen;
81 char shr[1];
82 } smb_ioc_share_t;
84 typedef struct smb_ioc_shareinfo {
85 smb_ioc_header_t hdr;
86 char shrname[MAXNAMELEN];
87 uint32_t shortnames;
88 } smb_ioc_shareinfo_t;
90 typedef struct smb_ioc_shareaccess {
91 smb_ioc_header_t hdr;
92 uint64_t session_id;
93 uint64_t user_id;
94 char shrname[MAXNAMELEN];
95 } smb_ioc_shareaccess_t;
97 typedef struct smb_ioc_start {
98 smb_ioc_header_t hdr;
99 int opipe;
100 int lmshrd;
101 int udoor;
102 /* These are used only by libfksmbsrv */
103 void *opipe_func;
104 void *lmshr_func;
105 void *udoor_func;
106 } smb_ioc_start_t;
108 typedef struct smb_ioc_event {
109 smb_ioc_header_t hdr;
110 uint32_t txid;
111 } smb_ioc_event_t;
113 typedef struct smb_ioc_opennum {
114 smb_ioc_header_t hdr;
115 uint32_t open_users;
116 uint32_t open_trees;
117 uint32_t open_files;
118 uint32_t qualtype;
119 char qualifier[MAXNAMELEN];
120 } smb_ioc_opennum_t;
123 * For enumeration, user and session are synonymous, as are
124 * connection and tree.
126 #define SMB_SVCENUM_TYPE_USER 0x55534552 /* 'USER' */
127 #define SMB_SVCENUM_TYPE_TREE 0x54524545 /* 'TREE' */
128 #define SMB_SVCENUM_TYPE_FILE 0x46494C45 /* 'FILE' */
129 #define SMB_SVCENUM_TYPE_SHARE 0x53484152 /* 'SHAR' */
131 /* Maximum size of payload data an smbsrv ioctl may use. */
132 #define SMB_IOC_DATA_SIZE (256 * 1024)
134 typedef struct smb_svcenum {
135 uint32_t se_type; /* object type to enumerate */
136 uint32_t se_level; /* level of detail being requested */
137 uint32_t se_prefmaxlen; /* client max size buffer preference */
138 /* (ignored by kernel) */
139 uint32_t se_resume; /* client resume handle */
140 uint32_t se_bavail; /* remaining buffer space in bytes */
141 uint32_t se_bused; /* consumed buffer space in bytes */
142 uint32_t se_ntotal; /* total number of objects */
143 uint32_t se_nlimit; /* max number of objects to return */
144 uint32_t se_nitems; /* number of objects in buf */
145 uint32_t se_nskip; /* number of objects to skip */
146 uint32_t se_status; /* enumeration status */
147 uint32_t se_buflen; /* length of the buffer in bytes */
148 uint8_t se_buf[1]; /* buffer to hold enumeration data */
149 } smb_svcenum_t;
151 typedef struct smb_ioc_svcenum {
152 smb_ioc_header_t hdr;
153 smb_svcenum_t svcenum;
154 } smb_ioc_svcenum_t;
156 typedef struct smb_ioc_session {
157 smb_ioc_header_t hdr;
158 char client[MAXNAMELEN];
159 char username[MAXNAMELEN];
160 } smb_ioc_session_t;
162 typedef struct smb_ioc_fileid {
163 smb_ioc_header_t hdr;
164 uint32_t uniqid;
165 } smb_ioc_fileid_t;
167 /* See also: smb_kmod_cfg_t */
168 typedef struct smb_ioc_cfg {
169 smb_ioc_header_t hdr;
170 uint32_t maxworkers;
171 uint32_t maxconnections;
172 uint32_t keepalive;
173 int32_t restrict_anon;
174 int32_t signing_enable;
175 int32_t signing_required;
176 int32_t oplock_enable;
177 int32_t sync_enable;
178 int32_t secmode;
179 int32_t netbios_enable;
180 int32_t ipv6_enable;
181 int32_t print_enable;
182 int32_t traverse_mounts;
183 int32_t short_names;
184 uint32_t max_protocol;
185 uint32_t min_protocol;
186 uint32_t encrypt;
187 uint32_t encrypt_ciphers;
188 uint32_t exec_flags;
189 uint32_t negtok_len;
190 uint32_t max_opens; /* per client */
191 smb_version_t version;
192 uint16_t initial_credits;
193 uint16_t maximum_credits;
194 /* SMB negotiate protocol response. */
195 uuid_t machine_uuid;
196 uchar_t negtok[SMB_PI_MAX_NEGTOK];
197 char native_os[SMB_PI_MAX_NATIVE_OS];
198 char native_lm[SMB_PI_MAX_LANMAN];
199 char nbdomain[NETBIOS_NAME_SZ];
200 char fqdn[SMB_PI_MAX_DOMAIN];
201 char hostname[SMB_PI_MAX_HOST];
202 char system_comment[SMB_PI_MAX_COMMENT];
203 } smb_ioc_cfg_t;
205 typedef union smb_ioc {
206 smb_ioc_header_t ioc_hdr;
207 smb_ioc_gmt_t ioc_gmt;
208 smb_ioc_cfg_t ioc_cfg;
209 smb_ioc_start_t ioc_start;
210 smb_ioc_event_t ioc_event;
211 smb_ioc_opennum_t ioc_opennum;
212 smb_ioc_svcenum_t ioc_svcenum;
213 smb_ioc_session_t ioc_session;
214 smb_ioc_fileid_t ioc_fileid;
215 smb_ioc_share_t ioc_share;
216 smb_ioc_shareaccess_t ioc_shareaccess;
217 smb_ioc_shareinfo_t ioc_shareinfo;
218 smb_ioc_spooldoc_t ioc_spooldoc;
219 } smb_ioc_t;
221 uint32_t smb_crc_gen(uint8_t *, size_t);
223 /* fksmbd (init,open,close,ioctl) calls into libfksmbsrv */
224 int fksmbsrv_drv_open(void);
225 int fksmbsrv_drv_close(void);
226 int fksmbsrv_drv_ioctl(int cmd, void *arg);
227 void fksmbsrv_drv_load(void);
229 #ifdef __cplusplus
231 #endif
233 #endif /* _SMB_IOCTL_H_ */