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