1da6c28aaSamw /*
2da6c28aaSamw  * CDDL HEADER START
3da6c28aaSamw  *
4da6c28aaSamw  * The contents of this file are subject to the terms of the
5da6c28aaSamw  * Common Development and Distribution License (the "License").
6da6c28aaSamw  * You may not use this file except in compliance with the License.
7da6c28aaSamw  *
8da6c28aaSamw  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9da6c28aaSamw  * or http://www.opensolaris.org/os/licensing.
10da6c28aaSamw  * See the License for the specific language governing permissions
11da6c28aaSamw  * and limitations under the License.
12da6c28aaSamw  *
13da6c28aaSamw  * When distributing Covered Code, include this CDDL HEADER in each
14da6c28aaSamw  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15da6c28aaSamw  * If applicable, add the following below this CDDL HEADER, with the
16da6c28aaSamw  * fields enclosed by brackets "[]" replaced with your own identifying
17da6c28aaSamw  * information: Portions Copyright [yyyy] [name of copyright owner]
18da6c28aaSamw  *
19da6c28aaSamw  * CDDL HEADER END
20da6c28aaSamw  */
21da6c28aaSamw /*
22*dc20a302Sas  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23da6c28aaSamw  * Use is subject to license terms.
24da6c28aaSamw  */
25da6c28aaSamw 
26da6c28aaSamw #ifndef _SMBSRV_SMB_FSOPS_H
27da6c28aaSamw #define	_SMBSRV_SMB_FSOPS_H
28da6c28aaSamw 
29da6c28aaSamw #pragma ident	"%Z%%M%	%I%	%E% SMI"
30da6c28aaSamw 
31da6c28aaSamw /*
32da6c28aaSamw  * This header file contains all the functions for the interface between
33da6c28aaSamw  * the smb layer and the fs layer.
34da6c28aaSamw  */
35da6c28aaSamw #include <smbsrv/smb_i18n.h>
36da6c28aaSamw #include <smbsrv/smbinfo.h>
37da6c28aaSamw #include <smbsrv/smb_vops.h>
3855bf511dSas #include <smbsrv/smbvar.h>
39*dc20a302Sas #include <sys/callb.h>
40*dc20a302Sas #include <sys/flock.h>
41da6c28aaSamw 
42da6c28aaSamw #ifdef	__cplusplus
43da6c28aaSamw extern "C" {
44da6c28aaSamw #endif
45da6c28aaSamw 
46*dc20a302Sas extern caller_context_t smb_ct;
47*dc20a302Sas 
48da6c28aaSamw int smb_fsop_open(smb_ofile_t *of);
49da6c28aaSamw 
50da6c28aaSamw int smb_fsop_close(smb_ofile_t *of);
51da6c28aaSamw 
52da6c28aaSamw int smb_fsop_create(struct smb_request *sr, cred_t *cr, smb_node_t *snode,
53da6c28aaSamw     char *name, smb_attr_t *attr, smb_node_t **ret_snode, smb_attr_t *ret_attr);
54da6c28aaSamw 
55da6c28aaSamw int smb_fsop_mkdir(struct smb_request *sr, cred_t *cr, smb_node_t *snode,
56da6c28aaSamw     char *name, smb_attr_t *attr, smb_node_t **ret_snode, smb_attr_t *ret_attr);
57da6c28aaSamw 
58da6c28aaSamw int smb_fsop_remove(struct smb_request *sr, cred_t *cr, smb_node_t *dir_snode,
59da6c28aaSamw     char *name, int od);
60da6c28aaSamw 
61da6c28aaSamw int smb_fsop_rmdir(struct smb_request *sr, cred_t *cr, smb_node_t *dir_snode,
62da6c28aaSamw     char *name, int od);
63da6c28aaSamw 
64da6c28aaSamw int smb_fsop_getattr(struct smb_request *sr, cred_t *cr, smb_node_t *snode,
65da6c28aaSamw     smb_attr_t *attr);
66da6c28aaSamw 
67da6c28aaSamw int smb_fsop_readdir(struct smb_request *sr, cred_t *cr, smb_node_t *snode,
68da6c28aaSamw     uint32_t *cookie, char *name, int *namelen, ino64_t *fileid,
69da6c28aaSamw     struct fs_stream_info *stream_info, smb_node_t **ret_snode,
70da6c28aaSamw     smb_attr_t *ret_attr);
71da6c28aaSamw 
72da6c28aaSamw int smb_fsop_getdents(struct smb_request *sr, cred_t *cr,
73da6c28aaSamw     struct smb_node *dir_snode, uint32_t *cookie, uint64_t *verifierp,
74da6c28aaSamw     int32_t *maxcnt, char *args, char *pattern);
75da6c28aaSamw 
76da6c28aaSamw int smb_maybe_mangled_name(char *name);
77da6c28aaSamw 
78da6c28aaSamw int smb_fsop_rename(struct smb_request *sr, cred_t *cr,
79da6c28aaSamw     smb_node_t *from_snode, char *from_name, smb_node_t *to_snode,
80da6c28aaSamw     char *to_name);
81da6c28aaSamw 
82da6c28aaSamw int smb_fsop_setattr(struct smb_request *sr, cred_t *cr, smb_node_t *snode,
83da6c28aaSamw     smb_attr_t *set_attr, smb_attr_t *ret_attr);
84da6c28aaSamw 
85da6c28aaSamw int smb_fsop_read(struct smb_request *sr, cred_t *cr,
86da6c28aaSamw     smb_node_t *snode, uio_t *uio, smb_attr_t *ret_attr);
87da6c28aaSamw 
88da6c28aaSamw int smb_fsop_write(struct smb_request *sr, cred_t *cr, smb_node_t *snode,
89da6c28aaSamw     uio_t *uio, uint32_t *lcount, smb_attr_t *ret_attr,
90da6c28aaSamw     uint32_t *stability);
91da6c28aaSamw 
92da6c28aaSamw int smb_fsop_statfs(cred_t *cr, struct smb_node *snode,
93da6c28aaSamw     struct statvfs64 *statp);
94da6c28aaSamw 
95da6c28aaSamw int smb_fsop_remove_streams(struct smb_request *sr, cred_t *cr,
96da6c28aaSamw     smb_node_t *fnode);
97da6c28aaSamw 
98da6c28aaSamw int smb_fsop_access(smb_request_t *sr, cred_t *cr, smb_node_t *snode,
99da6c28aaSamw     uint32_t faccess);
100da6c28aaSamw 
101da6c28aaSamw void smb_fsop_eaccess(smb_request_t *sr, cred_t *cr, smb_node_t *snode,
102da6c28aaSamw     uint32_t *faccess);
103da6c28aaSamw 
104da6c28aaSamw int smb_fsop_lookup_name(struct smb_request *sr, cred_t *cr, int flags,
105da6c28aaSamw     smb_node_t *root_node, smb_node_t *dir_snode, char *name,
106da6c28aaSamw     smb_node_t **ret_snode, smb_attr_t *ret_attr);
107da6c28aaSamw 
108da6c28aaSamw int smb_fsop_lookup(struct smb_request *sr, cred_t *cr, int flags,
109da6c28aaSamw     smb_node_t *root_node, smb_node_t *dir_snode, char *name,
110da6c28aaSamw     smb_node_t **ret_snode, smb_attr_t *ret_attr, char *ret_shortname,
111da6c28aaSamw     char *ret_name83);
112da6c28aaSamw 
113da6c28aaSamw int smb_fsop_commit(smb_request_t *sr, cred_t *cr, struct smb_node *snode);
114da6c28aaSamw 
115da6c28aaSamw int smb_fsop_stream_readdir(struct smb_request *sr, cred_t *cr,
116da6c28aaSamw     smb_node_t *fnode, uint32_t *cookiep, struct fs_stream_info *stream_info,
117da6c28aaSamw     smb_node_t **ret_snode, smb_attr_t *ret_attr);
118da6c28aaSamw 
11955bf511dSas int smb_fsop_aclread(smb_request_t *, cred_t *, smb_node_t *, smb_fssd_t *);
12055bf511dSas int smb_fsop_aclwrite(smb_request_t *, cred_t *, smb_node_t *, smb_fssd_t *);
12155bf511dSas acl_type_t smb_fsop_acltype(smb_node_t *);
12255bf511dSas int smb_fsop_sdread(smb_request_t *, cred_t *, smb_node_t *, smb_fssd_t *);
12355bf511dSas int smb_fsop_sdwrite(smb_request_t *, cred_t *, smb_node_t *, smb_fssd_t *,
12455bf511dSas     int);
125da6c28aaSamw 
126*dc20a302Sas uint32_t smb_fsop_shrlock(cred_t *cr, smb_node_t *node, uint32_t uniq_fid,
127*dc20a302Sas     uint32_t desired_access, uint32_t share_access);
128*dc20a302Sas 
129*dc20a302Sas void smb_fsop_unshrlock(cred_t *cr, smb_node_t *node, uint32_t uniq_fid);
130*dc20a302Sas 
131*dc20a302Sas int smb_fsop_frlock(smb_request_t *sr, smb_node_t *node, smb_lock_t *lock,
132*dc20a302Sas     boolean_t unlock);
133da6c28aaSamw 
134da6c28aaSamw /*
135da6c28aaSamw  * Lookup-related flags
136da6c28aaSamw  *
137da6c28aaSamw  * SMB_FOLLOW_LINKS	Follow symbolic links.
138da6c28aaSamw  * SMB_IGNORE_CASE	Perform case-insensitive lookup.
139da6c28aaSamw  *
140da6c28aaSamw  * Misc flags
141da6c28aaSamw  *
142da6c28aaSamw  * SMB_STREAM_RDDIR	use eflags=0 for streams readdirs this
143da6c28aaSamw  *			is currently a workaround because the
144da6c28aaSamw  *			vfs isn't filling in this flag
145da6c28aaSamw  */
146da6c28aaSamw 
147da6c28aaSamw #define	SMB_FOLLOW_LINKS	0x00000001
148da6c28aaSamw #define	SMB_IGNORE_CASE		0x00000002
149da6c28aaSamw #define	SMB_STREAM_RDDIR	0x00000004
150da6c28aaSamw 
151da6c28aaSamw #ifdef	__cplusplus
152da6c28aaSamw }
153da6c28aaSamw #endif
154da6c28aaSamw 
155da6c28aaSamw #endif /* _SMBSRV_SMB_FSOPS_H */
156