Home | History | Annotate | Download | only in nfsd
      1 /*
      2  * include/linux/nfsd/export.h
      3  *
      4  * Public declarations for NFS exports. The definitions for the
      5  * syscall interface are in nfsctl.h
      6  *
      7  * Copyright (C) 1995-1997 Olaf Kirch <okir (at) monad.swb.de>
      8  */
      9 
     10 #ifndef NFSD_EXPORT_H
     11 #define NFSD_EXPORT_H
     12 
     13 #include <asm/types.h>
     14 #ifdef __KERNEL__
     15 # include <linux/types.h>
     16 # include <linux/in.h>
     17 #endif
     18 
     19 /*
     20  * Important limits for the exports stuff.
     21  */
     22 #define NFSCLNT_IDMAX		1024
     23 #define NFSCLNT_ADDRMAX		16
     24 #define NFSCLNT_KEYMAX		32
     25 
     26 /*
     27  * Export flags.
     28  */
     29 #define NFSEXP_READONLY		0x0001
     30 #define NFSEXP_INSECURE_PORT	0x0002
     31 #define NFSEXP_ROOTSQUASH	0x0004
     32 #define NFSEXP_ALLSQUASH	0x0008
     33 #define NFSEXP_ASYNC		0x0010
     34 #define NFSEXP_GATHERED_WRITES	0x0020
     35 /* 40 80 100 currently unused */
     36 #define NFSEXP_NOHIDE		0x0200
     37 #define NFSEXP_NOSUBTREECHECK	0x0400
     38 #define	NFSEXP_NOAUTHNLM	0x0800		/* Don't authenticate NLM requests - just trust */
     39 #define NFSEXP_MSNFS		0x1000	/* do silly things that MS clients expect */
     40 #define NFSEXP_FSID		0x2000
     41 #define	NFSEXP_CROSSMOUNT	0x4000
     42 #define	NFSEXP_NOACL		0x8000	/* reserved for possible ACL related use */
     43 #define NFSEXP_ALLFLAGS		0xFE3F
     44 
     45 
     46 #ifdef __KERNEL__
     47 
     48 struct svc_export {
     49 	struct cache_head	h;
     50 	struct auth_domain *	ex_client;
     51 	int			ex_flags;
     52 	struct vfsmount *	ex_mnt;
     53 	struct dentry *		ex_dentry;
     54 	uid_t			ex_anon_uid;
     55 	gid_t			ex_anon_gid;
     56 	int			ex_fsid;
     57 };
     58 
     59 /* an "export key" (expkey) maps a filehandlefragement to an
     60  * svc_export for a given client.  There can be two per export, one
     61  * for type 0 (dev/ino), one for type 1 (fsid)
     62  */
     63 struct svc_expkey {
     64 	struct cache_head	h;
     65 
     66 	struct auth_domain *	ek_client;
     67 	int			ek_fsidtype;
     68 	u32			ek_fsid[3];
     69 
     70 	struct vfsmount *	ek_mnt;
     71 	struct dentry *		ek_dentry;
     72 };
     73 
     74 #define EX_SECURE(exp)		(!((exp)->ex_flags & NFSEXP_INSECURE_PORT))
     75 #define EX_ISSYNC(exp)		(!((exp)->ex_flags & NFSEXP_ASYNC))
     76 #define EX_RDONLY(exp)		((exp)->ex_flags & NFSEXP_READONLY)
     77 #define EX_NOHIDE(exp)		((exp)->ex_flags & NFSEXP_NOHIDE)
     78 #define EX_WGATHER(exp)		((exp)->ex_flags & NFSEXP_GATHERED_WRITES)
     79 
     80 
     81 /*
     82  * Function declarations
     83  */
     84 void			nfsd_export_init(void);
     85 void			nfsd_export_shutdown(void);
     86 void			nfsd_export_flush(void);
     87 void			exp_readlock(void);
     88 void			exp_readunlock(void);
     89 struct svc_export *	exp_get_by_name(struct auth_domain *clp,
     90 					struct vfsmount *mnt,
     91 					struct dentry *dentry,
     92 					struct cache_req *reqp);
     93 struct svc_export *	exp_parent(struct auth_domain *clp,
     94 				   struct vfsmount *mnt,
     95 				   struct dentry *dentry,
     96 				   struct cache_req *reqp);
     97 int			exp_rootfh(struct auth_domain *,
     98 					char *path, struct knfsd_fh *, int maxsize);
     99 int			exp_pseudoroot(struct auth_domain *, struct svc_fh *fhp, struct cache_req *creq);
    100 int			nfserrno(int errno);
    101 
    102 extern struct cache_detail svc_export_cache;
    103 
    104 static inline void exp_put(struct svc_export *exp)
    105 {
    106 	cache_put(&exp->h, &svc_export_cache);
    107 }
    108 
    109 static inline void exp_get(struct svc_export *exp)
    110 {
    111 	cache_get(&exp->h);
    112 }
    113 extern struct svc_export *
    114 exp_find(struct auth_domain *clp, int fsid_type, u32 *fsidv,
    115 	 struct cache_req *reqp);
    116 
    117 #endif /* __KERNEL__ */
    118 
    119 #endif /* NFSD_EXPORT_H */
    120 
    121