4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 1996-1998,2001-2003 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _SYS_FS_CACHEFS_IOCTL_H
28 #define _SYS_FS_CACHEFS_IOCTL_H
30 #pragma ident "%Z%%M% %I% %E% SMI"
36 /* set of subcommands to CACHEFSIO_DCMD */
38 CFSDCMD_DAEMONID
, CFSDCMD_STATEGET
, CFSDCMD_STATESET
,
39 CFSDCMD_XWAIT
, CFSDCMD_EXISTS
, CFSDCMD_LOSTFOUND
, CFSDCMD_GETINFO
,
40 CFSDCMD_CIDTOFID
, CFSDCMD_GETATTRFID
, CFSDCMD_GETATTRNAME
,
41 CFSDCMD_GETSTATS
, CFSDCMD_ROOTFID
,
42 CFSDCMD_CREATE
, CFSDCMD_REMOVE
, CFSDCMD_LINK
, CFSDCMD_RENAME
,
43 CFSDCMD_MKDIR
, CFSDCMD_RMDIR
, CFSDCMD_SYMLINK
, CFSDCMD_SETATTR
,
44 CFSDCMD_SETSECATTR
, CFSDCMD_PUSHBACK
46 typedef enum cfsdcmd_cmds cfsdcmd_cmds_t
;
48 /* file system states passed to stateset, returned from stateget */
49 #define CFS_FS_CONNECTED 0x00 /* fscache connected to backfs */
50 #define CFS_FS_DISCONNECTED 0x01 /* fscache disconnected from backfs */
51 #define CFS_FS_RECONNECTING 0x02 /* fscache is reconnecting to backfs */
53 /* bits returned by packinfo */
54 #define CACHEFS_PACKED_FILE 1 /* file is marked as packed */
55 #define CACHEFS_PACKED_DATA 2 /* file data is in the cache */
56 #define CACHEFS_PACKED_NOCACHE 4 /* file marked as not for caching */
58 struct cachefsio_pack
{
59 char p_name
[MAXNAMELEN
]; /* name of file */
60 int p_status
; /* status of operation */
62 typedef struct cachefsio_pack cachefsio_pack_t
;
64 struct cachefsio_dcmd
{
65 cfsdcmd_cmds_t d_cmd
; /* cmd to execute */
66 void *d_sdata
; /* data for command */
67 int d_slen
; /* len of data */
68 void *d_rdata
; /* data to return */
69 int d_rlen
; /* len of data */
71 typedef struct cachefsio_dcmd cachefsio_dcmd_t
;
73 struct cachefsio_getinfo
{
74 cfs_cid_t gi_cid
; /* entry to lookup */
75 int gi_modified
; /* returns if modified data */
76 cfs_vattr_t gi_attr
; /* return file attributes */
77 cfs_cid_t gi_pcid
; /* returns the parent dir */
78 uint_t gi_seq
; /* sequence number */
79 char gi_name
[MAXNAMELEN
]; /* returns name of file */
81 typedef struct cachefsio_getinfo cachefsio_getinfo_t
;
83 struct cachefsio_lostfound_arg
{
84 cfs_cid_t lf_cid
; /* file to move */
85 char lf_name
[MAXNAMELEN
]; /* suggested name */
87 typedef struct cachefsio_lostfound_arg cachefsio_lostfound_arg_t
;
89 struct cachefsio_lostfound_return
{
90 char lf_name
[MAXNAMELEN
]; /* returns actual name */
92 typedef struct cachefsio_lostfound_return cachefsio_lostfound_return_t
;
94 struct cachefsio_getattrfid
{
95 cfs_fid_t cg_backfid
; /* backfs fid of file */
96 dl_cred_t cg_cred
; /* creds */
97 gid_t cg_groups
[NGROUPS_MAX_DEFAULT
-1];
99 typedef struct cachefsio_getattrfid cachefsio_getattrfid_t
;
101 struct cachefsio_getattrname_arg
{
102 cfs_fid_t cg_dir
; /* backfs fid of directory */
103 char cg_name
[MAXNAMELEN
]; /* name of file in directory cg_dir */
104 dl_cred_t cg_cred
; /* creds */
105 gid_t cg_groups
[NGROUPS_MAX_DEFAULT
-1];
107 typedef struct cachefsio_getattrname_arg cachefsio_getattrname_arg_t
;
109 struct cachefsio_getattrname_return
{
110 cfs_vattr_t cg_attr
; /* returns attributes of file */
111 cfs_fid_t cg_fid
; /* returns fid of file */
113 typedef struct cachefsio_getattrname_return cachefsio_getattrname_return_t
;
115 struct cachefsio_getstats
{
116 int gs_total
; /* total blocks */
117 int gs_gc
; /* number of gc blocks */
118 int gs_active
; /* number of active blocks */
119 int gs_packed
; /* number of packed blocks */
120 int gs_free
; /* number of free blocks */
121 cfs_time_t gs_gctime
; /* atime of front of gc list */
123 typedef struct cachefsio_getstats cachefsio_getstats_t
;
125 struct cachefsio_create_arg
{
126 cfs_fid_t cr_backfid
; /* backfs fid of directory */
127 char cr_name
[MAXNAMELEN
]; /* name of file to create */
128 cfs_cid_t cr_cid
; /* cid of file being created */
129 cfs_vattr_t cr_va
; /* attributes for create */
130 int cr_exclusive
; /* exclusive create or not */
131 int cr_mode
; /* mode */
132 dl_cred_t cr_cred
; /* creds */
133 gid_t cr_groups
[NGROUPS_MAX_DEFAULT
-1];
135 typedef struct cachefsio_create_arg cachefsio_create_arg_t
;
137 struct cachefsio_create_return
{
138 cfs_fid_t cr_newfid
; /* returns fid of new file */
139 cfs_timestruc_t cr_ctime
; /* returns new ctime */
140 cfs_timestruc_t cr_mtime
; /* returns new mtime */
142 typedef struct cachefsio_create_return cachefsio_create_return_t
;
144 struct cachefsio_pushback_arg
{
145 cfs_cid_t pb_cid
; /* file to push back */
146 cfs_fid_t pb_fid
; /* back fs fid to push to */
147 dl_cred_t pb_cred
; /* creds */
148 gid_t pb_groups
[NGROUPS_MAX_DEFAULT
-1];
150 typedef struct cachefsio_pushback_arg cachefsio_pushback_arg_t
;
152 struct cachefsio_pushback_return
{
153 cfs_timestruc_t pb_ctime
; /* returns new ctime */
154 cfs_timestruc_t pb_mtime
; /* returns new mtime */
156 typedef struct cachefsio_pushback_return cachefsio_pushback_return_t
;
158 struct cachefsio_remove
{
159 cfs_cid_t rm_cid
; /* cid of deleted file */
160 cfs_fid_t rm_fid
; /* fid of parent directory */
161 char rm_name
[MAXNAMELEN
]; /* name of file to remove */
162 int rm_getctime
; /* 1 means return new ctime */
163 dl_cred_t rm_cred
; /* creds */
164 gid_t rm_groups
[NGROUPS_MAX_DEFAULT
-1];
166 typedef struct cachefsio_remove cachefsio_remove_t
;
168 struct cachefsio_link
{
169 cfs_fid_t ln_dirfid
; /* backfid of parent dir */
170 char ln_name
[MAXNAMELEN
]; /* name of new link */
171 cfs_fid_t ln_filefid
; /* backfid of file to link to */
172 cfs_cid_t ln_cid
; /* cid of link */
173 dl_cred_t ln_cred
; /* creds */
174 gid_t ln_groups
[NGROUPS_MAX_DEFAULT
-1];
176 typedef struct cachefsio_link cachefsio_link_t
;
178 struct cachefsio_rename_arg
{
179 cfs_fid_t rn_olddir
; /* backfs fid of old dir */
180 char rn_oldname
[MAXNAMELEN
]; /* old name of file */
181 cfs_fid_t rn_newdir
; /* backfs fid of new dir */
182 char rn_newname
[MAXNAMELEN
]; /* new name of file */
183 cfs_cid_t rn_cid
; /* cid of renamed file */
184 int rn_del_getctime
; /* 1 means fill in del_ctime */
185 cfs_cid_t rn_del_cid
; /* cid of deleted file */
186 dl_cred_t rn_cred
; /* creds */
187 gid_t rn_groups
[NGROUPS_MAX_DEFAULT
-1];
189 typedef struct cachefsio_rename_arg cachefsio_rename_arg_t
;
191 struct cachefsio_rename_return
{
192 cfs_timestruc_t rn_ctime
; /* returns new file ctime */
193 cfs_timestruc_t rn_del_ctime
; /* returns new del file ctime */
195 typedef struct cachefsio_rename_return cachefsio_rename_return_t
;
197 struct cachefsio_mkdir
{
198 cfs_fid_t md_dirfid
; /* backfs fid of dir */
199 char md_name
[MAXNAMELEN
]; /* name of the new dir */
200 cfs_cid_t md_cid
; /* cid of dir being created */
201 cfs_vattr_t md_vattr
; /* attributes */
202 dl_cred_t md_cred
; /* creds */
203 gid_t md_groups
[NGROUPS_MAX_DEFAULT
-1];
205 typedef struct cachefsio_mkdir cachefsio_mkdir_t
;
207 struct cachefsio_rmdir
{
208 cfs_fid_t rd_dirfid
; /* backfs fid of dir */
209 char rd_name
[MAXNAMELEN
]; /* name of the dir to delete */
210 dl_cred_t rd_cred
; /* creds */
211 gid_t rd_groups
[NGROUPS_MAX_DEFAULT
-1];
213 typedef struct cachefsio_rmdir cachefsio_rmdir_t
;
215 struct cachefsio_symlink_arg
{
216 cfs_fid_t sy_dirfid
; /* backfs fid of dir */
217 char sy_name
[MAXNAMELEN
]; /* name of symlink to create */
218 cfs_cid_t sy_cid
; /* cid of symlink */
219 char sy_link
[MAXPATHLEN
]; /* contents of the symlink */
220 cfs_vattr_t sy_vattr
; /* attributes */
221 dl_cred_t sy_cred
; /* creds */
222 gid_t sy_groups
[NGROUPS_MAX_DEFAULT
-1];
224 typedef struct cachefsio_symlink_arg cachefsio_symlink_arg_t
;
226 struct cachefsio_symlink_return
{
227 cfs_fid_t sy_newfid
; /* returns fid of symlink */
228 cfs_timestruc_t sy_ctime
; /* returns new ctime */
229 cfs_timestruc_t sy_mtime
; /* returns new mtime */
231 typedef struct cachefsio_symlink_return cachefsio_symlink_return_t
;
233 struct cachefsio_setattr_arg
{
234 cfs_fid_t sa_backfid
; /* backfs fid of file */
235 cfs_cid_t sa_cid
; /* cid of file */
236 cfs_vattr_t sa_vattr
; /* attributes */
237 int sa_flags
; /* flags */
238 dl_cred_t sa_cred
; /* creds */
239 gid_t sa_groups
[NGROUPS_MAX_DEFAULT
-1];
241 typedef struct cachefsio_setattr_arg cachefsio_setattr_arg_t
;
243 struct cachefsio_setattr_return
{
244 cfs_timestruc_t sa_ctime
; /* returns new ctime */
245 cfs_timestruc_t sa_mtime
; /* returns new mtime */
247 typedef struct cachefsio_setattr_return cachefsio_setattr_return_t
;
249 struct cachefsio_setsecattr_arg
{
250 cfs_fid_t sc_backfid
; /* backfs fid of file */
251 cfs_cid_t sc_cid
; /* cid of file */
252 uint_t sc_mask
; /* mask for setsec */
253 int sc_aclcnt
; /* count of ACLs */
254 int sc_dfaclcnt
; /* count of default ACLs */
255 aclent_t sc_acl
[MAX_ACL_ENTRIES
]; /* ACLs */
256 dl_cred_t sc_cred
; /* creds */
257 gid_t sc_groups
[NGROUPS_MAX_DEFAULT
-1];
259 typedef struct cachefsio_setsecattr_arg cachefsio_setsecattr_arg_t
;
261 struct cachefsio_setsecattr_return
{
262 cfs_timestruc_t sc_ctime
; /* returns new ctime */
263 cfs_timestruc_t sc_mtime
; /* returns new mtime */
265 typedef struct cachefsio_setsecattr_return cachefsio_setsecattr_return_t
;
270 * Solaris 64 - the following structs are used for user/kernel communication.
273 struct cachefsio_dcmd32
{
274 cfsdcmd_cmds_t d_cmd
; /* cmd to execute */
275 caddr32_t d_sdata
; /* data for command */
276 int32_t d_slen
; /* len of data */
277 caddr32_t d_rdata
; /* data to return */
278 int32_t d_rlen
; /* len of data */
280 typedef struct cachefsio_dcmd32 cachefsio_dcmd32_t
;
282 #endif /* _SYSCALL32 */
284 int cachefs_pack(vnode_t
*, char *, cred_t
*);
285 int cachefs_unpack(vnode_t
*, char *, cred_t
*);
286 int cachefs_packinfo(vnode_t
*dvp
, char *name
, int *statusp
, cred_t
*cr
);
287 int cachefs_unpackall(vnode_t
*);
289 int cachefs_io_daemonid(vnode_t
*vp
, void *dinp
, void *doutp
);
290 int cachefs_io_stateget(vnode_t
*vp
, void *dinp
, void *doutp
);
291 int cachefs_io_stateset(vnode_t
*vp
, void *dinp
, void *doutp
);
292 int cachefs_io_xwait(vnode_t
*vp
, void *dinp
, void *doutp
);
293 int cachefs_io_exists(vnode_t
*vp
, void *dinp
, void *doutp
);
294 int cachefs_io_lostfound(vnode_t
*vp
, void *dinp
, void *doutp
);
295 int cachefs_io_getinfo(vnode_t
*vp
, void *dinp
, void *doutp
);
296 int cachefs_io_cidtofid(vnode_t
*vp
, void *dinp
, void *doutp
);
297 int cachefs_io_getattrfid(vnode_t
*vp
, void *dinp
, void *doutp
);
298 int cachefs_io_getattrname(vnode_t
*vp
, void *dinp
, void *doutp
);
299 int cachefs_io_getstats(vnode_t
*vp
, void *dinp
, void *doutp
);
300 int cachefs_io_rootfid(vnode_t
*vp
, void *dinp
, void *doutp
);
301 int cachefs_io_create(vnode_t
*vp
, void *dinp
, void *doutp
);
302 int cachefs_io_remove(vnode_t
*vp
, void *dinp
, void *doutp
);
303 int cachefs_io_link(vnode_t
*vp
, void *dinp
, void *doutp
);
304 int cachefs_io_rename(vnode_t
*vp
, void *dinp
, void *doutp
);
305 int cachefs_io_mkdir(vnode_t
*vp
, void *dinp
, void *doutp
);
306 int cachefs_io_rmdir(vnode_t
*vp
, void *dinp
, void *doutp
);
307 int cachefs_io_symlink(vnode_t
*vp
, void *dinp
, void *doutp
);
308 int cachefs_io_setattr(vnode_t
*vp
, void *dinp
, void *doutp
);
309 int cachefs_io_setsecattr(vnode_t
*vp
, void *dinp
, void *doutp
);
310 int cachefs_io_pushback(vnode_t
*vp
, void *dinp
, void *doutp
);
316 #endif /* _SYS_FS_CACHEFS_IOCTL_H */