Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
client.h
Go to the documentation of this file.
1 /*
2  * include/net/9p/client.h
3  *
4  * 9P Client Definitions
5  *
6  * Copyright (C) 2008 by Eric Van Hensbergen <[email protected]>
7  * Copyright (C) 2007 by Latchesar Ionkov <[email protected]>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2
11  * as published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to:
20  * Free Software Foundation
21  * 51 Franklin Street, Fifth Floor
22  * Boston, MA 02111-1301 USA
23  *
24  */
25 
26 #ifndef NET_9P_CLIENT_H
27 #define NET_9P_CLIENT_H
28 
29 /* Number of requests per row */
30 #define P9_ROW_MAXTAG 255
31 
42 };
43 
44 
60 };
61 
88 };
89 
112 struct p9_req_t {
113  int status;
114  int t_err;
116  struct p9_fcall *tc;
117  struct p9_fcall *rc;
118  void *aux;
119 
121 };
122 
152 struct p9_client {
153  spinlock_t lock; /* protect client structure */
154  unsigned int msize;
155  unsigned char proto_version;
158  void *trans;
159  struct p9_conn *conn;
160 
163 
166  int max_tag;
167 };
168 
184 struct p9_fid {
185  struct p9_client *clnt;
187  int mode;
188  struct p9_qid qid;
191 
192  void *rdir;
193 
194  struct list_head flist;
195  struct list_head dlist; /* list of all fids attached to a dentry */
196 };
197 
206 struct p9_dirent {
207  struct p9_qid qid;
209  unsigned char d_type;
210  char d_name[256];
211 };
212 
213 int p9_client_statfs(struct p9_fid *fid, struct p9_rstatfs *sb);
214 int p9_client_rename(struct p9_fid *fid, struct p9_fid *newdirfid,
215  const char *name);
216 int p9_client_renameat(struct p9_fid *olddirfid, const char *old_name,
217  struct p9_fid *newdirfid, const char *new_name);
218 struct p9_client *p9_client_create(const char *dev_name, char *options);
219 void p9_client_destroy(struct p9_client *clnt);
220 void p9_client_disconnect(struct p9_client *clnt);
221 void p9_client_begin_disconnect(struct p9_client *clnt);
222 struct p9_fid *p9_client_attach(struct p9_client *clnt, struct p9_fid *afid,
223  char *uname, u32 n_uname, char *aname);
224 struct p9_fid *p9_client_walk(struct p9_fid *oldfid, uint16_t nwname,
225  char **wnames, int clone);
226 int p9_client_open(struct p9_fid *fid, int mode);
227 int p9_client_fcreate(struct p9_fid *fid, char *name, u32 perm, int mode,
228  char *extension);
229 int p9_client_link(struct p9_fid *fid, struct p9_fid *oldfid, char *newname);
230 int p9_client_symlink(struct p9_fid *fid, char *name, char *symname, gid_t gid,
231  struct p9_qid *qid);
232 int p9_client_create_dotl(struct p9_fid *ofid, char *name, u32 flags, u32 mode,
233  gid_t gid, struct p9_qid *qid);
234 int p9_client_clunk(struct p9_fid *fid);
235 int p9_client_fsync(struct p9_fid *fid, int datasync);
236 int p9_client_remove(struct p9_fid *fid);
237 int p9_client_unlinkat(struct p9_fid *dfid, const char *name, int flags);
238 int p9_client_read(struct p9_fid *fid, char *data, char __user *udata,
239  u64 offset, u32 count);
240 int p9_client_write(struct p9_fid *fid, char *data, const char __user *udata,
241  u64 offset, u32 count);
242 int p9_client_readdir(struct p9_fid *fid, char *data, u32 count, u64 offset);
243 int p9dirent_read(struct p9_client *clnt, char *buf, int len,
244  struct p9_dirent *dirent);
245 struct p9_wstat *p9_client_stat(struct p9_fid *fid);
246 int p9_client_wstat(struct p9_fid *fid, struct p9_wstat *wst);
247 int p9_client_setattr(struct p9_fid *fid, struct p9_iattr_dotl *attr);
248 
250  u64 request_mask);
251 
252 int p9_client_mknod_dotl(struct p9_fid *oldfid, char *name, int mode,
253  dev_t rdev, gid_t gid, struct p9_qid *);
254 int p9_client_mkdir_dotl(struct p9_fid *fid, char *name, int mode,
255  gid_t gid, struct p9_qid *);
256 int p9_client_lock_dotl(struct p9_fid *fid, struct p9_flock *flock, u8 *status);
257 int p9_client_getlock_dotl(struct p9_fid *fid, struct p9_getlock *fl);
258 struct p9_req_t *p9_tag_lookup(struct p9_client *, u16);
259 void p9_client_cb(struct p9_client *c, struct p9_req_t *req);
260 
261 int p9_parse_header(struct p9_fcall *, int32_t *, int8_t *, int16_t *, int);
262 int p9stat_read(struct p9_client *, char *, int, struct p9_wstat *);
263 void p9stat_free(struct p9_wstat *);
264 
265 int p9_is_proto_dotu(struct p9_client *clnt);
266 int p9_is_proto_dotl(struct p9_client *clnt);
267 struct p9_fid *p9_client_xattrwalk(struct p9_fid *, const char *, u64 *);
268 int p9_client_xattrcreate(struct p9_fid *, const char *, u64, int);
269 int p9_client_readlink(struct p9_fid *fid, char **target);
270 
271 #endif /* NET_9P_CLIENT_H */