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@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
48struct 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 */
63struct 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 */
84void			nfsd_export_init(void);
85void			nfsd_export_shutdown(void);
86void			nfsd_export_flush(void);
87void			exp_readlock(void);
88void			exp_readunlock(void);
89struct svc_export *	exp_get_by_name(struct auth_domain *clp,
90					struct vfsmount *mnt,
91					struct dentry *dentry,
92					struct cache_req *reqp);
93struct svc_export *	exp_parent(struct auth_domain *clp,
94				   struct vfsmount *mnt,
95				   struct dentry *dentry,
96				   struct cache_req *reqp);
97int			exp_rootfh(struct auth_domain *,
98					char *path, struct knfsd_fh *, int maxsize);
99int			exp_pseudoroot(struct auth_domain *, struct svc_fh *fhp, struct cache_req *creq);
100int			nfserrno(int errno);
101
102extern struct cache_detail svc_export_cache;
103
104static inline void exp_put(struct svc_export *exp)
105{
106	cache_put(&exp->h, &svc_export_cache);
107}
108
109static inline void exp_get(struct svc_export *exp)
110{
111	cache_get(&exp->h);
112}
113extern struct svc_export *
114exp_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