nfsd.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:6k
源码类别:

Linux/Unix编程

开发平台:

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