nfs_xdr.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:8k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef _LINUX_NFS_XDR_H
  2. #define _LINUX_NFS_XDR_H
  3. extern struct rpc_program nfs_program;
  4. extern struct rpc_stat nfs_rpcstat;
  5. struct nfs_fattr {
  6. unsigned short valid; /* which fields are valid */
  7. __u64 pre_size; /* pre_op_attr.size   */
  8. __u64 pre_mtime; /* pre_op_attr.mtime   */
  9. __u64 pre_ctime; /* pre_op_attr.ctime   */
  10. enum nfs_ftype type; /* always use NFSv2 types */
  11. __u32 mode;
  12. __u32 nlink;
  13. __u32 uid;
  14. __u32 gid;
  15. __u64 size;
  16. union {
  17. struct {
  18. __u32 blocksize;
  19. __u32 blocks;
  20. } nfs2;
  21. struct {
  22. __u64 used;
  23. } nfs3;
  24. } du;
  25. __u32 rdev;
  26. __u64 fsid;
  27. __u64 fileid;
  28. __u64 atime;
  29. __u64 mtime;
  30. __u64 ctime;
  31. };
  32. #define NFS_ATTR_WCC 0x0001 /* pre-op WCC data    */
  33. #define NFS_ATTR_FATTR 0x0002 /* post-op attributes */
  34. #define NFS_ATTR_FATTR_V3 0x0004 /* NFSv3 attributes */
  35. /*
  36.  * Info on the file system
  37.  */
  38. struct nfs_fsinfo {
  39. __u32 rtmax; /* max.  read transfer size */
  40. __u32 rtpref; /* pref. read transfer size */
  41. __u32 rtmult; /* reads should be multiple of this */
  42. __u32 wtmax; /* max.  write transfer size */
  43. __u32 wtpref; /* pref. write transfer size */
  44. __u32 wtmult; /* writes should be multiple of this */
  45. __u32 dtpref; /* pref. readdir transfer size */
  46. __u64 maxfilesize;
  47. __u64 bsize; /* block size */
  48. __u64 tbytes; /* total size in bytes */
  49. __u64 fbytes; /* # of free bytes */
  50. __u64 abytes; /* # of bytes available to user */
  51. __u64 tfiles; /* # of files */
  52. __u64 ffiles; /* # of free files */
  53. __u64 afiles; /* # of files available to user */
  54. __u32 linkmax;/* max # of hard links */
  55. __u32 namelen;/* max name length */
  56. };
  57. /* Arguments to the read call.
  58.  * Note that NFS_READ_MAXIOV must be <= (MAX_IOVEC-2) from sunrpc/xprt.h
  59.  */
  60. #define NFS_READ_MAXIOV 8
  61. struct nfs_readargs {
  62. struct nfs_fh * fh;
  63. __u64 offset;
  64. __u32 count;
  65. unsigned int            nriov;
  66. struct iovec            iov[NFS_READ_MAXIOV];
  67. };
  68. struct nfs_readres {
  69. struct nfs_fattr * fattr;
  70. __u32 count;
  71. int                     eof;
  72. };
  73. /* Arguments to the write call.
  74.  * Note that NFS_WRITE_MAXIOV must be <= (MAX_IOVEC-2) from sunrpc/xprt.h
  75.  */
  76. #define NFS_WRITE_MAXIOV        8
  77. struct nfs_writeargs {
  78. struct nfs_fh * fh;
  79. __u64 offset;
  80. __u32 count;
  81. enum nfs3_stable_how stable;
  82. unsigned int nriov;
  83. struct iovec iov[NFS_WRITE_MAXIOV];
  84. };
  85. struct nfs_writeverf {
  86. enum nfs3_stable_how committed;
  87. __u32 verifier[2];
  88. };
  89. struct nfs_writeres {
  90. struct nfs_fattr * fattr;
  91. struct nfs_writeverf * verf;
  92. __u32 count;
  93. };
  94. /*
  95.  * Argument struct for decode_entry function
  96.  */
  97. struct nfs_entry {
  98. __u64 ino;
  99. __u64 cookie,
  100. prev_cookie;
  101. const char * name;
  102. unsigned int len;
  103. int eof;
  104. struct nfs_fh fh;
  105. struct nfs_fattr fattr;
  106. };
  107. /*
  108.  * The following types are for NFSv2 only.
  109.  */
  110. struct nfs_sattrargs {
  111. struct nfs_fh * fh;
  112. struct iattr * sattr;
  113. };
  114. struct nfs_diropargs {
  115. struct nfs_fh * fh;
  116. const char * name;
  117. unsigned int len;
  118. };
  119. struct nfs_createargs {
  120. struct nfs_fh * fh;
  121. const char * name;
  122. unsigned int len;
  123. struct iattr * sattr;
  124. };
  125. struct nfs_renameargs {
  126. struct nfs_fh * fromfh;
  127. const char * fromname;
  128. unsigned int fromlen;
  129. struct nfs_fh * tofh;
  130. const char * toname;
  131. unsigned int tolen;
  132. };
  133. struct nfs_linkargs {
  134. struct nfs_fh * fromfh;
  135. struct nfs_fh * tofh;
  136. const char * toname;
  137. unsigned int tolen;
  138. };
  139. struct nfs_symlinkargs {
  140. struct nfs_fh * fromfh;
  141. const char * fromname;
  142. unsigned int fromlen;
  143. const char * topath;
  144. unsigned int tolen;
  145. struct iattr * sattr;
  146. };
  147. struct nfs_readdirargs {
  148. struct nfs_fh * fh;
  149. __u32 cookie;
  150. void * buffer;
  151. unsigned int bufsiz;
  152. };
  153. struct nfs_diropok {
  154. struct nfs_fh * fh;
  155. struct nfs_fattr * fattr;
  156. };
  157. struct nfs_readlinkargs {
  158. struct nfs_fh * fh;
  159. void * buffer;
  160. unsigned int bufsiz;
  161. };
  162. struct nfs_readlinkres {
  163. void * buffer;
  164. unsigned int bufsiz;
  165. };
  166. struct nfs_readdirres {
  167. void * buffer;
  168. unsigned int bufsiz;
  169. };
  170. struct nfs3_sattrargs {
  171. struct nfs_fh * fh;
  172. struct iattr * sattr;
  173. unsigned int guard;
  174. __u64 guardtime;
  175. };
  176. struct nfs3_diropargs {
  177. struct nfs_fh * fh;
  178. const char * name;
  179. unsigned int len;
  180. };
  181. struct nfs3_accessargs {
  182. struct nfs_fh * fh;
  183. __u32 access;
  184. };
  185. struct nfs3_createargs {
  186. struct nfs_fh * fh;
  187. const char * name;
  188. unsigned int len;
  189. struct iattr * sattr;
  190. enum nfs3_createmode createmode;
  191. __u32 verifier[2];
  192. };
  193. struct nfs3_mkdirargs {
  194. struct nfs_fh * fh;
  195. const char * name;
  196. unsigned int len;
  197. struct iattr * sattr;
  198. };
  199. struct nfs3_symlinkargs {
  200. struct nfs_fh * fromfh;
  201. const char * fromname;
  202. unsigned int fromlen;
  203. const char * topath;
  204. unsigned int tolen;
  205. struct iattr * sattr;
  206. };
  207. struct nfs3_mknodargs {
  208. struct nfs_fh * fh;
  209. const char * name;
  210. unsigned int len;
  211. enum nfs3_ftype type;
  212. struct iattr * sattr;
  213. dev_t rdev;
  214. };
  215. struct nfs3_renameargs {
  216. struct nfs_fh * fromfh;
  217. const char * fromname;
  218. unsigned int fromlen;
  219. struct nfs_fh * tofh;
  220. const char * toname;
  221. unsigned int tolen;
  222. };
  223. struct nfs3_linkargs {
  224. struct nfs_fh * fromfh;
  225. struct nfs_fh * tofh;
  226. const char * toname;
  227. unsigned int tolen;
  228. };
  229. struct nfs3_readdirargs {
  230. struct nfs_fh * fh;
  231. __u64 cookie;
  232. __u32 verf[2];
  233. void * buffer;
  234. unsigned int bufsiz;
  235. int plus;
  236. };
  237. struct nfs3_diropres {
  238. struct nfs_fattr * dir_attr;
  239. struct nfs_fh * fh;
  240. struct nfs_fattr * fattr;
  241. };
  242. struct nfs3_accessres {
  243. struct nfs_fattr * fattr;
  244. __u32 access;
  245. };
  246. struct nfs3_readlinkargs {
  247. struct nfs_fh * fh;
  248. void * buffer;
  249. unsigned int bufsiz;
  250. };
  251. struct nfs3_readlinkres {
  252. struct nfs_fattr * fattr;
  253. void * buffer;
  254. unsigned int bufsiz;
  255. };
  256. struct nfs3_renameres {
  257. struct nfs_fattr * fromattr;
  258. struct nfs_fattr * toattr;
  259. };
  260. struct nfs3_linkres {
  261. struct nfs_fattr * dir_attr;
  262. struct nfs_fattr * fattr;
  263. };
  264. struct nfs3_readdirres {
  265. struct nfs_fattr * dir_attr;
  266. __u32 * verf;
  267. void * buffer;
  268. unsigned int bufsiz;
  269. int plus;
  270. };
  271. /*
  272.  * RPC procedure vector for NFSv2/NFSv3 demuxing
  273.  */
  274. struct nfs_rpc_ops {
  275. int version; /* Protocol version */
  276. int (*getroot) (struct nfs_server *, struct nfs_fh *,
  277.     struct nfs_fattr *);
  278. int (*getattr) (struct inode *, struct nfs_fattr *);
  279. int (*setattr) (struct inode *, struct nfs_fattr *,
  280.     struct iattr *);
  281. int (*lookup)  (struct inode *, struct qstr *,
  282.     struct nfs_fh *, struct nfs_fattr *);
  283. int (*access)  (struct inode *, int , int);
  284. int (*readlink)(struct inode *, void *, unsigned int);
  285. int (*read)    (struct inode *, struct rpc_cred *,
  286.     struct nfs_fattr *,
  287.     int, loff_t, unsigned int,
  288.     void *buffer, int *eofp);
  289. int (*write)   (struct inode *, struct rpc_cred *,
  290.     struct nfs_fattr *,
  291.     int, loff_t, unsigned int,
  292.     void *buffer, struct nfs_writeverf *verfp);
  293. int (*commit)  (struct inode *, struct nfs_fattr *,
  294.     unsigned long, unsigned int);
  295. int (*create)  (struct inode *, struct qstr *, struct iattr *,
  296.     int, struct nfs_fh *, struct nfs_fattr *);
  297. int (*remove)  (struct inode *, struct qstr *);
  298. int (*unlink_setup)  (struct rpc_message *,
  299.     struct dentry *, struct qstr *);
  300. void (*unlink_done) (struct dentry *, struct rpc_message *);
  301. int (*rename)  (struct inode *, struct qstr *,
  302.     struct inode *, struct qstr *);
  303. int (*link)    (struct inode *, struct inode *, struct qstr *);
  304. int (*symlink) (struct inode *, struct qstr *, struct qstr *,
  305.     struct iattr *, struct nfs_fh *,
  306.     struct nfs_fattr *);
  307. int (*mkdir)   (struct inode *, struct qstr *, struct iattr *,
  308.     struct nfs_fh *, struct nfs_fattr *);
  309. int (*rmdir)   (struct inode *, struct qstr *);
  310. int (*readdir) (struct inode *, struct rpc_cred *,
  311.     u64, void *, unsigned int, int);
  312. int (*mknod)   (struct inode *, struct qstr *, struct iattr *,
  313.     dev_t, struct nfs_fh *, struct nfs_fattr *);
  314. int (*statfs)  (struct nfs_server *, struct nfs_fh *,
  315.     struct nfs_fsinfo *);
  316. u32 * (*decode_dirent)(u32 *, struct nfs_entry *, int plus);
  317. };
  318. /*
  319.  *  NFS_CALL(getattr, inode, (fattr));
  320.  * into
  321.  * NFS_PROTO(inode)->getattr(fattr);
  322.  */
  323. #define NFS_CALL(op, inode, args) NFS_PROTO(inode)->op args
  324. /*
  325.  * Function vectors etc. for the NFS client
  326.  */
  327. extern struct nfs_rpc_ops nfs_v2_clientops;
  328. extern struct nfs_rpc_ops nfs_v3_clientops;
  329. extern struct rpc_version nfs_version2;
  330. extern struct rpc_version nfs_version3;
  331. extern struct rpc_program nfs_program;
  332. #endif