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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * linux/include/linux/nfsd/nfsd.h
  3.  *
  4.  * Hodge-podge collection of knfsd-related stuff.
  5.  * I will sort this out later.
  6.  *
  7.  * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de>
  8.  */
  9. #ifndef LINUX_NFSD_NFSD_H
  10. #define LINUX_NFSD_NFSD_H
  11. #include <linux/config.h>
  12. #include <linux/types.h>
  13. #include <linux/unistd.h>
  14. #include <linux/dirent.h>
  15. #include <linux/fs.h>
  16. #include <linux/nfsd/debug.h>
  17. #include <linux/nfsd/nfsfh.h>
  18. #include <linux/nfsd/export.h>
  19. #include <linux/nfsd/auth.h>
  20. #include <linux/nfsd/stats.h>
  21. #include <linux/nfsd/interface.h>
  22. /*
  23.  * nfsd version
  24.  */
  25. #define NFSD_VERSION "0.5"
  26. #ifdef __KERNEL__
  27. /*
  28.  * Special flags for nfsd_permission. These must be different from MAY_READ,
  29.  * MAY_WRITE, and MAY_EXEC.
  30.  */
  31. #define MAY_NOP 0
  32. #define MAY_SATTR 8
  33. #define MAY_TRUNC 16
  34. #define MAY_LOCK 32
  35. #define MAY_OWNER_OVERRIDE 64
  36. #if (MAY_SATTR | MAY_TRUNC | MAY_LOCK | MAX_OWNER_OVERRIDE) & (MAY_READ | MAY_WRITE | MAY_EXEC | MAY_OWNER_OVERRIDE)
  37. # error "please use a different value for MAY_SATTR or MAY_TRUNC or MAY_LOCK or MAY_OWNER_OVERRIDE."
  38. #endif
  39. #define MAY_CREATE (MAY_EXEC|MAY_WRITE)
  40. #define MAY_REMOVE (MAY_EXEC|MAY_WRITE|MAY_TRUNC)
  41. /*
  42.  * Callback function for readdir
  43.  */
  44. struct readdir_cd {
  45. struct svc_rqst * rqstp;
  46. struct svc_fh * dirfh;
  47. u32 * buffer;
  48. int buflen;
  49. u32 * offset; /* previous dirent->d_next */
  50. char plus; /* readdirplus */
  51. char eob; /* end of buffer */
  52. char dotonly;
  53. };
  54. typedef int (*encode_dent_fn)(struct readdir_cd *, const char *,
  55. int, loff_t, ino_t, unsigned int);
  56. typedef int (*nfsd_dirop_t)(struct inode *, struct dentry *, int, int);
  57. /*
  58.  * Procedure table for NFSv2
  59.  */
  60. extern struct svc_procedure nfsd_procedures2[];
  61. #ifdef CONFIG_NFSD_V3
  62. extern struct svc_procedure nfsd_procedures3[];
  63. #endif /* CONFIG_NFSD_V3 */
  64. extern struct svc_program nfsd_program;
  65. /*
  66.  * Function prototypes.
  67.  */
  68. int nfsd_svc(unsigned short port, int nrservs);
  69. /* nfsd/vfs.c */
  70. int fh_lock_parent(struct svc_fh *, struct dentry *);
  71. int nfsd_racache_init(int);
  72. void nfsd_racache_shutdown(void);
  73. int nfsd_lookup(struct svc_rqst *, struct svc_fh *,
  74. const char *, int, struct svc_fh *);
  75. int nfsd_setattr(struct svc_rqst *, struct svc_fh *,
  76. struct iattr *, int, time_t);
  77. int nfsd_create(struct svc_rqst *, struct svc_fh *,
  78. char *name, int len, struct iattr *attrs,
  79. int type, dev_t rdev, struct svc_fh *res);
  80. #ifdef CONFIG_NFSD_V3
  81. int nfsd_access(struct svc_rqst *, struct svc_fh *, u32 *);
  82. int nfsd_create_v3(struct svc_rqst *, struct svc_fh *,
  83. char *name, int len, struct iattr *attrs,
  84. struct svc_fh *res, int createmode,
  85. u32 *verifier);
  86. int nfsd_commit(struct svc_rqst *, struct svc_fh *,
  87. off_t, unsigned long);
  88. #endif /* CONFIG_NFSD_V3 */
  89. int nfsd_open(struct svc_rqst *, struct svc_fh *, int,
  90. int, struct file *);
  91. void nfsd_close(struct file *);
  92. int nfsd_read(struct svc_rqst *, struct svc_fh *,
  93. loff_t, char *, unsigned long *);
  94. int nfsd_write(struct svc_rqst *, struct svc_fh *,
  95. loff_t, char *, unsigned long, int *);
  96. int nfsd_readlink(struct svc_rqst *, struct svc_fh *,
  97. char *, int *);
  98. int nfsd_symlink(struct svc_rqst *, struct svc_fh *,
  99. char *name, int len, char *path, int plen,
  100. struct svc_fh *res, struct iattr *);
  101. int nfsd_link(struct svc_rqst *, struct svc_fh *,
  102. char *, int, struct svc_fh *);
  103. int nfsd_rename(struct svc_rqst *,
  104. struct svc_fh *, char *, int,
  105. struct svc_fh *, char *, int);
  106. int nfsd_remove(struct svc_rqst *,
  107. struct svc_fh *, char *, int);
  108. int nfsd_unlink(struct svc_rqst *, struct svc_fh *, int type,
  109. char *name, int len);
  110. int nfsd_truncate(struct svc_rqst *, struct svc_fh *,
  111. unsigned long size);
  112. int nfsd_readdir(struct svc_rqst *, struct svc_fh *,
  113. loff_t, encode_dent_fn,
  114. u32 *buffer, int *countp, u32 *verf);
  115. int nfsd_statfs(struct svc_rqst *, struct svc_fh *,
  116. struct statfs *);
  117. int nfsd_notify_change(struct inode *, struct iattr *);
  118. int nfsd_permission(struct svc_export *, struct dentry *, int);
  119. /*
  120.  * lockd binding
  121.  */
  122. void nfsd_lockd_init(void);
  123. void nfsd_lockd_shutdown(void);
  124. void nfsd_lockd_unexport(struct svc_client *);
  125. /*
  126.  * These macros provide pre-xdr'ed values for faster operation.
  127.  */
  128. #define nfs_ok __constant_htonl(NFS_OK)
  129. #define nfserr_perm __constant_htonl(NFSERR_PERM)
  130. #define nfserr_noent __constant_htonl(NFSERR_NOENT)
  131. #define nfserr_io __constant_htonl(NFSERR_IO)
  132. #define nfserr_nxio __constant_htonl(NFSERR_NXIO)
  133. #define nfserr_eagain __constant_htonl(NFSERR_EAGAIN)
  134. #define nfserr_acces __constant_htonl(NFSERR_ACCES)
  135. #define nfserr_exist __constant_htonl(NFSERR_EXIST)
  136. #define nfserr_xdev __constant_htonl(NFSERR_XDEV)
  137. #define nfserr_nodev __constant_htonl(NFSERR_NODEV)
  138. #define nfserr_notdir __constant_htonl(NFSERR_NOTDIR)
  139. #define nfserr_isdir __constant_htonl(NFSERR_ISDIR)
  140. #define nfserr_inval __constant_htonl(NFSERR_INVAL)
  141. #define nfserr_fbig __constant_htonl(NFSERR_FBIG)
  142. #define nfserr_nospc __constant_htonl(NFSERR_NOSPC)
  143. #define nfserr_rofs __constant_htonl(NFSERR_ROFS)
  144. #define nfserr_mlink __constant_htonl(NFSERR_MLINK)
  145. #define nfserr_opnotsupp __constant_htonl(NFSERR_OPNOTSUPP)
  146. #define nfserr_nametoolong __constant_htonl(NFSERR_NAMETOOLONG)
  147. #define nfserr_notempty __constant_htonl(NFSERR_NOTEMPTY)
  148. #define nfserr_dquot __constant_htonl(NFSERR_DQUOT)
  149. #define nfserr_stale __constant_htonl(NFSERR_STALE)
  150. #define nfserr_remote __constant_htonl(NFSERR_REMOTE)
  151. #define nfserr_wflush __constant_htonl(NFSERR_WFLUSH)
  152. #define nfserr_badhandle __constant_htonl(NFSERR_BADHANDLE)
  153. #define nfserr_notsync __constant_htonl(NFSERR_NOT_SYNC)
  154. #define nfserr_badcookie __constant_htonl(NFSERR_BAD_COOKIE)
  155. #define nfserr_notsupp __constant_htonl(NFSERR_NOTSUPP)
  156. #define nfserr_toosmall __constant_htonl(NFSERR_TOOSMALL)
  157. #define nfserr_serverfault __constant_htonl(NFSERR_SERVERFAULT)
  158. #define nfserr_badtype __constant_htonl(NFSERR_BADTYPE)
  159. #define nfserr_jukebox __constant_htonl(NFSERR_JUKEBOX)
  160. /* error code for internal use - if a request fails due to
  161.  * kmalloc failure, it gets dropped.  Client should resend eventually
  162.  */
  163. #define nfserr_dropit __constant_htonl(30000)
  164. /* Check for dir entries '.' and '..' */
  165. #define isdotent(n, l) (l < 3 && n[0] == '.' && (l == 1 || n[1] == '.'))
  166. /*
  167.  * Time of server startup
  168.  */
  169. extern struct timeval nfssvc_boot;
  170. #endif /* __KERNEL__ */
  171. #endif /* LINUX_NFSD_NFSD_H */