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]
22 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
23 * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
24 * Copyright 2017 Joyent, Inc.
34 #include <sys/types.h>
35 #include <sys/param.h>
36 #include <smbsrv/smbinfo.h>
38 #define SMB_IOC_VERSION 0x534D4201 /* SMB1 */
40 #define SMB_IOC_BASE (('S' << 16) | ('B' << 8))
42 #define SMB_IOC_CONFIG _IOW(SMB_IOC_BASE, 1, int)
43 #define SMB_IOC_START _IOW(SMB_IOC_BASE, 2, int)
44 #define SMB_IOC_GMTOFF _IOW(SMB_IOC_BASE, 3, int)
45 #define SMB_IOC_SHARE _IOW(SMB_IOC_BASE, 4, int)
46 #define SMB_IOC_UNSHARE _IOW(SMB_IOC_BASE, 5, int)
47 #define SMB_IOC_NUMOPEN _IOW(SMB_IOC_BASE, 6, int)
48 #define SMB_IOC_SVCENUM _IOW(SMB_IOC_BASE, 7, int)
49 #define SMB_IOC_FILE_CLOSE _IOW(SMB_IOC_BASE, 8, int)
50 #define SMB_IOC_SESSION_CLOSE _IOW(SMB_IOC_BASE, 9, int)
51 #define SMB_IOC_STOP _IOW(SMB_IOC_BASE, 10, int)
52 #define SMB_IOC_EVENT _IOW(SMB_IOC_BASE, 11, int)
53 #define SMB_IOC_SHAREINFO _IOW(SMB_IOC_BASE, 12, int)
54 #define SMB_IOC_SPOOLDOC _IOW(SMB_IOC_BASE, 13, int)
56 typedef struct smb_ioc_header
{
63 typedef struct smb_ioc_spooldoc
{
67 char username
[MAXNAMELEN
];
68 char path
[MAXPATHLEN
];
76 typedef struct smb_ioc_share
{
82 typedef struct smb_ioc_shareinfo
{
84 char shrname
[MAXNAMELEN
];
86 } smb_ioc_shareinfo_t
;
88 typedef struct smb_ioc_start
{
93 /* These are used only by libfksmbsrv */
99 typedef struct smb_ioc_event
{
100 smb_ioc_header_t hdr
;
104 typedef struct smb_ioc_opennum
{
105 smb_ioc_header_t hdr
;
110 char qualifier
[MAXNAMELEN
];
114 * For enumeration, user and session are synonymous, as are
115 * connection and tree.
117 #define SMB_SVCENUM_TYPE_USER 0x55534552 /* 'USER' */
118 #define SMB_SVCENUM_TYPE_TREE 0x54524545 /* 'TREE' */
119 #define SMB_SVCENUM_TYPE_FILE 0x46494C45 /* 'FILE' */
120 #define SMB_SVCENUM_TYPE_SHARE 0x53484152 /* 'SHAR' */
122 /* Maximum size of payload data an smbsrv ioctl may use. */
123 #define SMB_IOC_DATA_SIZE (256 * 1024)
125 typedef struct smb_svcenum
{
126 uint32_t se_type
; /* object type to enumerate */
127 uint32_t se_level
; /* level of detail being requested */
128 uint32_t se_prefmaxlen
; /* client max size buffer preference */
129 /* (ignored by kernel) */
130 uint32_t se_resume
; /* client resume handle */
131 uint32_t se_bavail
; /* remaining buffer space in bytes */
132 uint32_t se_bused
; /* consumed buffer space in bytes */
133 uint32_t se_ntotal
; /* total number of objects */
134 uint32_t se_nlimit
; /* max number of objects to return */
135 uint32_t se_nitems
; /* number of objects in buf */
136 uint32_t se_nskip
; /* number of objects to skip */
137 uint32_t se_status
; /* enumeration status */
138 uint32_t se_buflen
; /* length of the buffer in bytes */
139 uint8_t se_buf
[1]; /* buffer to hold enumeration data */
142 typedef struct smb_ioc_svcenum
{
143 smb_ioc_header_t hdr
;
144 smb_svcenum_t svcenum
;
147 typedef struct smb_ioc_session
{
148 smb_ioc_header_t hdr
;
149 char client
[MAXNAMELEN
];
150 char username
[MAXNAMELEN
];
153 typedef struct smb_ioc_fileid
{
154 smb_ioc_header_t hdr
;
158 /* See also: smb_kmod_cfg_t */
159 typedef struct smb_ioc_cfg
{
160 smb_ioc_header_t hdr
;
162 uint32_t maxconnections
;
164 int32_t restrict_anon
;
165 int32_t signing_enable
;
166 int32_t signing_required
;
167 int32_t oplock_enable
;
170 int32_t netbios_enable
;
172 int32_t print_enable
;
173 int32_t traverse_mounts
;
174 uint32_t max_protocol
;
177 smb_version_t version
;
178 uint16_t initial_credits
;
179 uint16_t maximum_credits
;
180 /* SMB negotiate protocol response. */
182 uchar_t negtok
[SMB_PI_MAX_NEGTOK
];
183 char native_os
[SMB_PI_MAX_NATIVE_OS
];
184 char native_lm
[SMB_PI_MAX_LANMAN
];
185 char nbdomain
[NETBIOS_NAME_SZ
];
186 char fqdn
[SMB_PI_MAX_DOMAIN
];
187 char hostname
[SMB_PI_MAX_HOST
];
188 char system_comment
[SMB_PI_MAX_COMMENT
];
191 typedef union smb_ioc
{
192 smb_ioc_header_t ioc_hdr
;
193 smb_ioc_gmt_t ioc_gmt
;
194 smb_ioc_cfg_t ioc_cfg
;
195 smb_ioc_start_t ioc_start
;
196 smb_ioc_event_t ioc_event
;
197 smb_ioc_opennum_t ioc_opennum
;
198 smb_ioc_svcenum_t ioc_svcenum
;
199 smb_ioc_session_t ioc_session
;
200 smb_ioc_fileid_t ioc_fileid
;
201 smb_ioc_share_t ioc_share
;
202 smb_ioc_shareinfo_t ioc_shareinfo
;
203 smb_ioc_spooldoc_t ioc_spooldoc
;
206 uint32_t smb_crc_gen(uint8_t *, size_t);
208 /* fksmbd (init,open,close,ioctl) calls into libfksmbsrv */
209 int fksmbsrv_drv_open(void);
210 int fksmbsrv_drv_close(void);
211 int fksmbsrv_drv_ioctl(int cmd
, void *arg
);
212 void fksmbsrv_drv_load(void);
218 #endif /* _SMB_IOCTL_H_ */