export.h 4.0 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13
/*
 * include/linux/nfsd/export.h
 * 
 * Public declarations for NFS exports. The definitions for the
 * syscall interface are in nfsctl.h
 *
 * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de>
 */

#ifndef NFSD_EXPORT_H
#define NFSD_EXPORT_H

# include <linux/types.h>
14
#ifdef __KERNEL__
L
Linus Torvalds 已提交
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
# include <linux/in.h>
#endif

/*
 * Important limits for the exports stuff.
 */
#define NFSCLNT_IDMAX		1024
#define NFSCLNT_ADDRMAX		16
#define NFSCLNT_KEYMAX		32

/*
 * Export flags.
 */
#define NFSEXP_READONLY		0x0001
#define NFSEXP_INSECURE_PORT	0x0002
#define NFSEXP_ROOTSQUASH	0x0004
#define NFSEXP_ALLSQUASH	0x0008
#define NFSEXP_ASYNC		0x0010
#define NFSEXP_GATHERED_WRITES	0x0020
/* 40 80 100 currently unused */
#define NFSEXP_NOHIDE		0x0200
#define NFSEXP_NOSUBTREECHECK	0x0400
#define	NFSEXP_NOAUTHNLM	0x0800		/* Don't authenticate NLM requests - just trust */
#define NFSEXP_MSNFS		0x1000	/* do silly things that MS clients expect */
#define NFSEXP_FSID		0x2000
#define	NFSEXP_CROSSMOUNT	0x4000
#define	NFSEXP_NOACL		0x8000	/* reserved for possible ACL related use */
#define NFSEXP_ALLFLAGS		0xFE3F

44
/* The flags that may vary depending on security flavor: */
45 46
#define NFSEXP_SECINFO_FLAGS	(NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
					| NFSEXP_ALLSQUASH)
L
Linus Torvalds 已提交
47 48 49

#ifdef __KERNEL__

50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
/*
 * FS Locations
 */

#define MAX_FS_LOCATIONS	128

struct nfsd4_fs_location {
	char *hosts; /* colon separated list of hosts */
	char *path;  /* slash separated list of path components */
};

struct nfsd4_fs_locations {
	uint32_t locations_count;
	struct nfsd4_fs_location *locations;
/* If we're not actually serving this data ourselves (only providing a
 * list of replicas that do serve it) then we set "migrated": */
	int migrated;
};

69 70 71 72 73 74 75 76 77 78 79 80 81
/*
 * We keep an array of pseudoflavors with the export, in order from most
 * to least preferred.  For the forseeable future, we don't expect more
 * than the eight pseudoflavors null, unix, krb5, krb5i, krb5p, skpm3,
 * spkm3i, and spkm3p (and using all 8 at once should be rare).
 */
#define MAX_SECINFO_LIST	8

struct exp_flavor_info {
	u32	pseudoflavor;
	u32	flags;
};

L
Linus Torvalds 已提交
82 83 84 85
struct svc_export {
	struct cache_head	h;
	struct auth_domain *	ex_client;
	int			ex_flags;
86 87
	struct path		ex_path;
	char			*ex_pathname;
L
Linus Torvalds 已提交
88 89 90
	uid_t			ex_anon_uid;
	gid_t			ex_anon_gid;
	int			ex_fsid;
91
	unsigned char *		ex_uuid; /* 16 byte fsid */
92
	struct nfsd4_fs_locations ex_fslocs;
93 94
	int			ex_nflavors;
	struct exp_flavor_info	ex_flavors[MAX_SECINFO_LIST];
L
Linus Torvalds 已提交
95 96 97
};

/* an "export key" (expkey) maps a filehandlefragement to an
98 99
 * svc_export for a given client.  There can be several per export,
 * for the different fsid types.
L
Linus Torvalds 已提交
100 101 102 103 104 105
 */
struct svc_expkey {
	struct cache_head	h;

	struct auth_domain *	ek_client;
	int			ek_fsidtype;
106
	u32			ek_fsid[6];
L
Linus Torvalds 已提交
107

108
	struct path		ek_path;
L
Linus Torvalds 已提交
109 110 111 112 113 114 115
};

#define EX_SECURE(exp)		(!((exp)->ex_flags & NFSEXP_INSECURE_PORT))
#define EX_ISSYNC(exp)		(!((exp)->ex_flags & NFSEXP_ASYNC))
#define EX_NOHIDE(exp)		((exp)->ex_flags & NFSEXP_NOHIDE)
#define EX_WGATHER(exp)		((exp)->ex_flags & NFSEXP_GATHERED_WRITES)

J
J. Bruce Fields 已提交
116
int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp);
117
__be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp);
L
Linus Torvalds 已提交
118 119 120 121

/*
 * Function declarations
 */
122
int			nfsd_export_init(void);
L
Linus Torvalds 已提交
123 124 125 126
void			nfsd_export_shutdown(void);
void			nfsd_export_flush(void);
void			exp_readlock(void);
void			exp_readunlock(void);
127 128 129 130 131 132
struct svc_export *	rqst_exp_get_by_name(struct svc_rqst *,
					     struct vfsmount *,
					     struct dentry *);
struct svc_export *	rqst_exp_parent(struct svc_rqst *,
					struct vfsmount *mnt,
					struct dentry *dentry);
L
Linus Torvalds 已提交
133 134
int			exp_rootfh(struct auth_domain *, 
					char *path, struct knfsd_fh *, int maxsize);
135
__be32			exp_pseudoroot(struct svc_rqst *, struct svc_fh *);
136
__be32			nfserrno(int errno);
L
Linus Torvalds 已提交
137

138
extern struct cache_detail svc_export_cache;
L
Linus Torvalds 已提交
139 140 141

static inline void exp_put(struct svc_export *exp)
{
142
	cache_put(&exp->h, &svc_export_cache);
L
Linus Torvalds 已提交
143 144 145 146 147 148
}

static inline void exp_get(struct svc_export *exp)
{
	cache_get(&exp->h);
}
149
struct svc_export * rqst_exp_find(struct svc_rqst *, int, u32 *);
L
Linus Torvalds 已提交
150 151 152 153 154

#endif /* __KERNEL__ */

#endif /* NFSD_EXPORT_H */