export.h 3.5 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 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 44 45 46 47
/*
 * 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 <asm/types.h>
#ifdef __KERNEL__
# include <linux/types.h>
# 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


#ifdef __KERNEL__

48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
/*
 * 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;
};

L
Linus Torvalds 已提交
67 68 69 70 71 72
struct svc_export {
	struct cache_head	h;
	struct auth_domain *	ex_client;
	int			ex_flags;
	struct vfsmount *	ex_mnt;
	struct dentry *		ex_dentry;
73
	char *			ex_path;
L
Linus Torvalds 已提交
74 75 76
	uid_t			ex_anon_uid;
	gid_t			ex_anon_gid;
	int			ex_fsid;
77
	struct nfsd4_fs_locations ex_fslocs;
L
Linus Torvalds 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90
};

/* an "export key" (expkey) maps a filehandlefragement to an
 * svc_export for a given client.  There can be two per export, one
 * for type 0 (dev/ino), one for type 1 (fsid)
 */
struct svc_expkey {
	struct cache_head	h;

	struct auth_domain *	ek_client;
	int			ek_fsidtype;
	u32			ek_fsid[3];

91 92
	struct vfsmount *	ek_mnt;
	struct dentry *		ek_dentry;
L
Linus Torvalds 已提交
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
};

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


/*
 * Function declarations
 */
void			nfsd_export_init(void);
void			nfsd_export_shutdown(void);
void			nfsd_export_flush(void);
void			exp_readlock(void);
void			exp_readunlock(void);
struct svc_export *	exp_get_by_name(struct auth_domain *clp,
					struct vfsmount *mnt,
					struct dentry *dentry,
					struct cache_req *reqp);
struct svc_export *	exp_parent(struct auth_domain *clp,
				   struct vfsmount *mnt,
				   struct dentry *dentry,
				   struct cache_req *reqp);
int			exp_rootfh(struct auth_domain *, 
					char *path, struct knfsd_fh *, int maxsize);
int			exp_pseudoroot(struct auth_domain *, struct svc_fh *fhp, struct cache_req *creq);
int			nfserrno(int errno);

123
extern struct cache_detail svc_export_cache;
L
Linus Torvalds 已提交
124 125 126

static inline void exp_put(struct svc_export *exp)
{
127
	cache_put(&exp->h, &svc_export_cache);
L
Linus Torvalds 已提交
128 129 130 131 132 133
}

static inline void exp_get(struct svc_export *exp)
{
	cache_get(&exp->h);
}
134
extern struct svc_export *
L
Linus Torvalds 已提交
135
exp_find(struct auth_domain *clp, int fsid_type, u32 *fsidv,
136
	 struct cache_req *reqp);
L
Linus Torvalds 已提交
137 138 139 140 141

#endif /* __KERNEL__ */

#endif /* NFSD_EXPORT_H */