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