3882 Remove xmod & friends
[illumos-gate.git] / usr / src / uts / common / smbsrv / smb_ioctl.h
blob84d1081c43c291e4d7edd41651097cd708d5ee49
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 2011 Nexenta Systems, Inc. All rights reserved.
26 #ifndef _SMB_IOCTL_H_
27 #define _SMB_IOCTL_H_
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
33 #include <sys/types.h>
34 #include <sys/param.h>
35 #include <smbsrv/smbinfo.h>
37 #define SMB_IOC_VERSION 0x534D4201 /* SMB1 */
39 #define SMB_IOC_BASE (('S' << 16) | ('B' << 8))
41 #define SMB_IOC_CONFIG _IOW(SMB_IOC_BASE, 1, int)
42 #define SMB_IOC_START _IOW(SMB_IOC_BASE, 2, int)
43 #define SMB_IOC_GMTOFF _IOW(SMB_IOC_BASE, 3, int)
44 #define SMB_IOC_SHARE _IOW(SMB_IOC_BASE, 4, int)
45 #define SMB_IOC_UNSHARE _IOW(SMB_IOC_BASE, 5, int)
46 #define SMB_IOC_NUMOPEN _IOW(SMB_IOC_BASE, 6, int)
47 #define SMB_IOC_SVCENUM _IOW(SMB_IOC_BASE, 7, int)
48 #define SMB_IOC_FILE_CLOSE _IOW(SMB_IOC_BASE, 8, int)
49 #define SMB_IOC_SESSION_CLOSE _IOW(SMB_IOC_BASE, 9, int)
50 #define SMB_IOC_STOP _IOW(SMB_IOC_BASE, 10, int)
51 #define SMB_IOC_EVENT _IOW(SMB_IOC_BASE, 11, int)
52 #define SMB_IOC_SHAREINFO _IOW(SMB_IOC_BASE, 12, int)
53 #define SMB_IOC_SPOOLDOC _IOW(SMB_IOC_BASE, 13, int)
55 typedef struct smb_ioc_header {
56 uint32_t version;
57 uint32_t crc;
58 uint32_t len;
59 int cmd;
60 } smb_ioc_header_t;
62 typedef struct smb_ioc_spooldoc {
63 smb_ioc_header_t hdr;
64 smb_inaddr_t ipaddr;
65 uint32_t spool_num;
66 char username[MAXNAMELEN];
67 char path[MAXPATHLEN];
68 } smb_ioc_spooldoc_t;
70 typedef struct {
71 smb_ioc_header_t hdr;
72 int32_t offset;
73 } smb_ioc_gmt_t;
75 typedef struct smb_ioc_share {
76 smb_ioc_header_t hdr;
77 uint32_t shrlen;
78 char shr[1];
79 } smb_ioc_share_t;
81 typedef struct smb_ioc_shareinfo {
82 smb_ioc_header_t hdr;
83 char shrname[MAXNAMELEN];
84 uint32_t shortnames;
85 } smb_ioc_shareinfo_t;
87 typedef struct smb_ioc_start {
88 smb_ioc_header_t hdr;
89 int opipe;
90 int lmshrd;
91 int udoor;
92 } smb_ioc_start_t;
94 typedef struct smb_ioc_event {
95 smb_ioc_header_t hdr;
96 uint32_t txid;
97 } smb_ioc_event_t;
99 typedef struct smb_ioc_opennum {
100 smb_ioc_header_t hdr;
101 uint32_t open_users;
102 uint32_t open_trees;
103 uint32_t open_files;
104 uint32_t qualtype;
105 char qualifier[MAXNAMELEN];
106 } smb_ioc_opennum_t;
109 * For enumeration, user and session are synonymous, as are
110 * connection and tree.
112 #define SMB_SVCENUM_TYPE_USER 0x55534552 /* 'USER' */
113 #define SMB_SVCENUM_TYPE_TREE 0x54524545 /* 'TREE' */
114 #define SMB_SVCENUM_TYPE_FILE 0x46494C45 /* 'FILE' */
115 #define SMB_SVCENUM_TYPE_SHARE 0x53484152 /* 'SHAR' */
117 typedef struct smb_svcenum {
118 uint32_t se_type; /* object type to enumerate */
119 uint32_t se_level; /* level of detail being requested */
120 uint32_t se_prefmaxlen; /* client max size buffer preference */
121 uint32_t se_resume; /* client resume handle */
122 uint32_t se_bavail; /* remaining buffer space in bytes */
123 uint32_t se_bused; /* consumed buffer space in bytes */
124 uint32_t se_ntotal; /* total number of objects */
125 uint32_t se_nlimit; /* max number of objects to return */
126 uint32_t se_nitems; /* number of objects in buf */
127 uint32_t se_nskip; /* number of objects to skip */
128 uint32_t se_status; /* enumeration status */
129 uint32_t se_buflen; /* length of the buffer in bytes */
130 uint8_t se_buf[1]; /* buffer to hold enumeration data */
131 } smb_svcenum_t;
133 typedef struct smb_ioc_svcenum {
134 smb_ioc_header_t hdr;
135 smb_svcenum_t svcenum;
136 } smb_ioc_svcenum_t;
138 typedef struct smb_ioc_session {
139 smb_ioc_header_t hdr;
140 char client[MAXNAMELEN];
141 char username[MAXNAMELEN];
142 } smb_ioc_session_t;
144 typedef struct smb_ioc_fileid {
145 smb_ioc_header_t hdr;
146 uint32_t uniqid;
147 } smb_ioc_fileid_t;
149 typedef struct smb_ioc_cfg {
150 smb_ioc_header_t hdr;
151 uint32_t maxworkers;
152 uint32_t maxconnections;
153 uint32_t keepalive;
154 int32_t restrict_anon;
155 int32_t signing_enable;
156 int32_t signing_required;
157 int32_t oplock_enable;
158 int32_t sync_enable;
159 int32_t secmode;
160 int32_t ipv6_enable;
161 int32_t print_enable;
162 int32_t traverse_mounts;
163 uint32_t exec_flags;
164 smb_version_t version;
165 char nbdomain[NETBIOS_NAME_SZ];
166 char fqdn[SMB_PI_MAX_DOMAIN];
167 char hostname[SMB_PI_MAX_HOST];
168 char system_comment[SMB_PI_MAX_COMMENT];
169 } smb_ioc_cfg_t;
171 typedef union smb_ioc {
172 smb_ioc_header_t ioc_hdr;
173 smb_ioc_gmt_t ioc_gmt;
174 smb_ioc_cfg_t ioc_cfg;
175 smb_ioc_start_t ioc_start;
176 smb_ioc_event_t ioc_event;
177 smb_ioc_opennum_t ioc_opennum;
178 smb_ioc_svcenum_t ioc_svcenum;
179 smb_ioc_session_t ioc_session;
180 smb_ioc_fileid_t ioc_fileid;
181 smb_ioc_share_t ioc_share;
182 smb_ioc_shareinfo_t ioc_shareinfo;
183 smb_ioc_spooldoc_t ioc_spooldoc;
184 } smb_ioc_t;
186 uint32_t smb_crc_gen(uint8_t *, size_t);
188 #ifdef __cplusplus
190 #endif
192 #endif /* _SMB_IOCTL_H_ */