1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _SMBSRV_SMB_VOPS_H
#define _SMBSRV_SMB_VOPS_H
/*
* Common file system interfaces and definitions.
*/
#include <sys/types.h>
#include <sys/param.h>
#include <sys/file.h>
#include <sys/time.h>
#include <sys/mntent.h>
#include <sys/uio.h>
#include <sys/vnode.h>
#include <sys/vfs.h>
#include <sys/refstr.h>
#include <sys/acl.h>
#include <sys/fcntl.h>
#include <smbsrv/string.h>
#ifdef __cplusplus
extern "C" {
#endif
#define ROOTVOL ""
#define XATTR_DIR "xattr_dir"
#define SMB_STREAM_PREFIX "SUNWsmb"
#define SMB_STREAM_PREFIX_LEN (sizeof (SMB_STREAM_PREFIX) - 1)
#define SMB_SHORTNAMELEN 14
#define SMB_MAXDIRSIZE 0x7FFFFFFF
struct smb_node;
struct smb_request;
/*
* Note: When specifying the mask for an smb_attr_t,
* the sa_mask, and not the sa_vattr.va_mask, should be
* filled in. The #define's that should be used are those
* prefixed with SMB_AT_*. Only FSIL routines should
* manipulate the sa_vattr.va_mask field.
*/
typedef struct smb_attr {
uint_t sa_mask; /* For both vattr and CIFS attr's */
vattr_t sa_vattr; /* Legacy vattr */
uint32_t sa_dosattr; /* DOS attributes */
timestruc_t sa_crtime; /* Creation time */
u_offset_t sa_allocsz; /* File allocation size in bytes */
} smb_attr_t;
#define SMB_AT_TYPE 0x00001
#define SMB_AT_MODE 0x00002
#define SMB_AT_UID 0x00004
#define SMB_AT_GID 0x00008
#define SMB_AT_FSID 0x00010
#define SMB_AT_NODEID 0x00020
#define SMB_AT_NLINK 0x00040
#define SMB_AT_SIZE 0x00080
#define SMB_AT_ATIME 0x00100
#define SMB_AT_MTIME 0x00200
#define SMB_AT_CTIME 0x00400
#define SMB_AT_RDEV 0x00800
#define SMB_AT_BLKSIZE 0x01000
#define SMB_AT_NBLOCKS 0x02000
#define SMB_AT_SEQ 0x08000
#define SMB_AT_DOSATTR 0x00100000
#define SMB_AT_CRTIME 0x00200000
#define SMB_AT_ALLOCSZ 0x00400000
#define SMB_AT_SMB (SMB_AT_DOSATTR|SMB_AT_CRTIME|SMB_AT_ALLOCSZ)
#define SMB_AT_ALL (SMB_AT_TYPE|SMB_AT_MODE|SMB_AT_UID|SMB_AT_GID|\
SMB_AT_FSID|SMB_AT_NODEID|SMB_AT_NLINK|SMB_AT_SIZE|\
SMB_AT_ATIME|SMB_AT_MTIME|SMB_AT_CTIME|SMB_AT_RDEV|\
SMB_AT_BLKSIZE|SMB_AT_NBLOCKS|SMB_AT_SEQ|SMB_AT_SMB)
#define SMB_AT_TIMES (SMB_AT_ATIME | SMB_AT_MTIME |\
SMB_AT_CTIME | SMB_AT_CRTIME)
int fhopen(const struct smb_node *, int);
int smb_vop_init(void);
void smb_vop_fini(void);
void smb_vop_start(void);
int smb_vop_open(vnode_t **, int, cred_t *);
void smb_vop_close(vnode_t *, int, cred_t *);
int smb_vop_read(vnode_t *, uio_t *, cred_t *);
int smb_vop_write(vnode_t *, uio_t *, int, uint32_t *, cred_t *);
int smb_vop_getattr(vnode_t *, vnode_t *, smb_attr_t *, int, cred_t *);
int smb_vop_setattr(vnode_t *, vnode_t *, smb_attr_t *, int, cred_t *);
int smb_vop_access(vnode_t *, int, int, vnode_t *, cred_t *);
void smb_vop_eaccess(vnode_t *, int *, int, vnode_t *, cred_t *);
int smb_vop_lookup(vnode_t *, char *, vnode_t **, char *, int, int *, vnode_t *,
smb_attr_t *, cred_t *);
int smb_vop_create(vnode_t *, char *, smb_attr_t *, vnode_t **, int, cred_t *,
vsecattr_t *);
int smb_vop_link(vnode_t *, vnode_t *, char *, int, cred_t *);
int smb_vop_remove(vnode_t *, char *, int, cred_t *);
int smb_vop_rename(vnode_t *, char *, vnode_t *, char *, int, cred_t *);
int smb_vop_mkdir(vnode_t *, char *, smb_attr_t *, vnode_t **, int, cred_t *,
vsecattr_t *);
int smb_vop_rmdir(vnode_t *, char *, int, cred_t *);
int smb_vop_readdir(vnode_t *, uint32_t, void *, int *, int *,
uint32_t, cred_t *);
int smb_vop_commit(vnode_t *, cred_t *);
int smb_vop_statfs(vnode_t *, struct statvfs64 *, cred_t *);
int smb_vop_stream_lookup(vnode_t *, char *, vnode_t **, char *, vnode_t **,
int, vnode_t *, cred_t *);
int smb_vop_stream_create(vnode_t *, char *, smb_attr_t *, vnode_t **,
vnode_t **, int, cred_t *);
int smb_vop_stream_remove(vnode_t *, char *, int, cred_t *);
int smb_vop_lookup_xattrdir(vnode_t *, vnode_t **, int, cred_t *);
int smb_vop_traverse_check(vnode_t **);
int smb_vop_acl_read(vnode_t *, acl_t **, int, acl_type_t, cred_t *);
int smb_vop_acl_write(vnode_t *, acl_t *, int, cred_t *);
acl_type_t smb_vop_acl_type(vnode_t *);
int smb_vop_shrlock(vnode_t *, uint32_t, uint32_t, uint32_t, cred_t *);
int smb_vop_unshrlock(vnode_t *, uint32_t, cred_t *);
int smb_vop_frlock(vnode_t *, cred_t *, int, flock64_t *);
int smb_vop_other_opens(vnode_t *, int);
void smb_vop_catia_v4tov5(char *, char *, int);
char *smb_vop_catia_v5tov4(char *, char *, int);
#ifdef __cplusplus
}
#endif
#endif /* _SMBSRV_SMB_VOPS_H */
|