1 /* $NetBSD: smbfs_subr.h,v 1.19 2008/06/28 01:34:05 rumble Exp $ */
4 * Copyright (c) 2000-2001, Boris Popov
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 * must display the following acknowledgement:
17 * This product includes software developed by Boris Popov.
18 * 4. Neither the name of the author nor the names of any co-contributors
19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission.
22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * FreeBSD: src/sys/fs/smbfs/smbfs_subr.h,v 1.2 2001/12/10 08:09:46 obrien Exp
36 #ifndef _FS_SMBFS_SMBFS_SUBR_H_
37 #define _FS_SMBFS_SMBFS_SUBR_H_
39 MALLOC_DECLARE(M_SMBNODENAME
);
40 MALLOC_DECLARE(M_SMBFSDATA
);
42 #define SMBFSERR(format, ...) printf("%s: "format, __func__, __VA_ARGS__)
44 #ifdef SMB_VNODE_DEBUG
45 #define SMBVDEBUG0(format) printf("%s: "format, __func__);
46 #define SMBVDEBUG(format, ...) printf("%s: "format, __func__, __VA_ARGS__)
48 #define SMBVDEBUG0(format)
49 #define SMBVDEBUG(format, ...)
53 * Possible lock commands
55 #define SMB_LOCK_EXCL 0
56 #define SMB_LOCK_SHARED 1
57 #define SMB_LOCK_RELEASE 2
69 struct timespec fa_atime
;
70 struct timespec fa_ctime
;
71 struct timespec fa_mtime
;
76 * Context to perform findfirst/findnext/findclose operations
78 #define SMBFS_RDD_FINDFIRST 0x01
79 #define SMBFS_RDD_EOF 0x02
80 #define SMBFS_RDD_FINDSINGLE 0x04
81 #define SMBFS_RDD_USESEARCH 0x08
82 #define SMBFS_RDD_NOCLOSE 0x10
83 #define SMBFS_RDD_GOTRNAME 0x1000
86 * Search context supplied by server
88 #define SMB_SKEYLEN 21 /* search context */
89 #define SMB_DENTRYLEN (SMB_SKEYLEN + 22) /* entire entry */
95 int f_flags
; /* SMBFS_RDD_ */
99 struct smbfattr f_attr
; /* current attributes */
100 char * f_name
; /* current file name */
101 int f_nmlen
; /* name len */
105 int f_limit
; /* maximum number of entries */
106 int f_attrmask
; /* SMB_FA_ */
108 const char * f_wildcard
;
109 struct smbnode
* f_dnp
;
110 struct smb_cred
*f_scred
;
111 struct smb_share
*f_ssp
;
113 struct smb_rq
* uf_rq
;
114 struct smb_t2rq
* uf_t2
;
116 int f_left
; /* entries left */
117 int f_ecnt
; /* entries left in the current reponse */
118 int f_eofs
; /* entry offset in the parameter block */
119 u_char f_skey
[SMB_SKEYLEN
]; /* server side search context */
120 char f_fname
[8 + 1 + 3 + 1]; /* common case for 8.3 filenames */
122 u_int16_t f_infolevel
;
124 char * f_rname
; /* resume name/key */
128 #define f_rq f_urq.uf_rq
129 #define f_t2 f_urq.uf_t2
134 int smbfs_smb_lock(struct smbnode
*np
, int op
, void *id
,
135 off_t start
, off_t end
, struct smb_cred
*scred
);
136 int smbfs_smb_statvfs(struct smb_share
*ssp
, struct statvfs
*sbp
,
137 struct smb_cred
*scred
);
138 int smbfs_smb_setfsize(struct smbnode
*np
, u_quad_t newsize
,
139 struct smb_cred
*scred
);
141 int smbfs_smb_setpattr(struct smbnode
*np
, u_int16_t attr
,
142 struct timespec
*mtime
, struct smb_cred
*scred
);
143 int smbfs_smb_setptime2(struct smbnode
*np
, struct timespec
*mtime
,
144 struct timespec
*atime
, int attr
, struct smb_cred
*scred
);
146 int smbfs_smb_setpattrNT(struct smbnode
*np
, u_int16_t attr
,
147 struct timespec
*mtime
, struct timespec
*atime
, struct smb_cred
*scred
);
150 int smbfs_smb_setftime(struct smbnode
*np
, struct timespec
*mtime
,
151 struct timespec
*atime
, struct smb_cred
*scred
);
152 int smbfs_smb_setfattrNT(struct smbnode
*np
, u_int16_t attr
,
153 struct timespec
*mtime
, struct timespec
*atime
, struct smb_cred
*scred
);
155 int smbfs_smb_open(struct smbnode
*np
, int accmode
, struct smb_cred
*scred
);
156 int smbfs_smb_close(struct smb_share
*ssp
, u_int16_t fid
,
157 struct timespec
*mtime
, struct smb_cred
*scred
);
158 int smbfs_smb_create(struct smbnode
*dnp
, const char *name
, int len
,
159 struct smb_cred
*scred
);
160 int smbfs_smb_delete(struct smbnode
*np
, struct smb_cred
*scred
);
161 int smbfs_smb_rename(struct smbnode
*src
, struct smbnode
*tdnp
,
162 const char *tname
, int tnmlen
, struct smb_cred
*scred
);
163 int smbfs_smb_move(struct smbnode
*src
, struct smbnode
*tdnp
,
164 const char *tname
, int tnmlen
, u_int16_t flags
, struct smb_cred
*scred
);
165 int smbfs_smb_mkdir(struct smbnode
*dnp
, const char *name
, int len
,
166 struct smb_cred
*scred
);
167 int smbfs_smb_rmdir(struct smbnode
*np
, struct smb_cred
*scred
);
168 int smbfs_smb_ntcreatex(struct smbnode
*, int accmode
, struct smb_cred
*);
169 int smbfs_smb_nt_dirnotify_setup(struct smbnode
*, struct smb_rq
**, struct smb_cred
*, void (*)(void *), void *);
170 int smbfs_smb_nt_dirnotify_fetch(struct smb_rq
*, int *);
171 int smbfs_smb_ntcancel(struct smb_connobj
*, u_int16_t
, struct smb_cred
*);
172 int smbfs_findopen(struct smbnode
*dnp
, const char *wildcard
, int wclen
,
173 int attr
, struct smb_cred
*scred
, struct smbfs_fctx
**ctxpp
);
174 int smbfs_findnext(struct smbfs_fctx
*ctx
, int limit
, struct smb_cred
*scred
);
175 int smbfs_findclose(struct smbfs_fctx
*ctx
, struct smb_cred
*scred
);
176 int smbfs_fullpath(struct mbchain
*mbp
, struct smb_vc
*vcp
,
177 struct smbnode
*dnp
, const char *name
, int nmlen
);
178 int smbfs_smb_lookup(struct smbnode
*dnp
, const char *name
, int nmlen
,
179 struct smbfattr
*fap
, struct smb_cred
*scred
);
181 int smbfs_fname_tolocal(struct smb_vc
*vcp
, char *name
, int nmlen
, int caseopt
);
183 void smb_time_local2server(struct timespec
*tsp
, int tzoff
, u_long
*seconds
);
184 void smb_time_server2local(u_long seconds
, int tzoff
, struct timespec
*tsp
);
185 void smb_time_NT2local(int64_t nsec
, int tzoff
, struct timespec
*tsp
);
186 void smb_time_local2NT(struct timespec
*tsp
, int tzoff
, int64_t *nsec
);
187 void smb_time_unix2dos(struct timespec
*tsp
, int tzoff
, u_int16_t
*ddp
,
188 u_int16_t
*dtp
, u_int8_t
*dhp
);
189 void smb_dos2unixtime (u_int dd
, u_int dt
, u_int dh
, int tzoff
, struct timespec
*tsp
);
191 #endif /* !_FS_SMBFS_SMBFS_SUBR_H_ */