linux/include/linux/nfsd/export.h
<<
>>
Prefs
   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/* The flags that may vary depending on security flavor: */
  46#define NFSEXP_SECINFO_FLAGS    (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
  47                                        | NFSEXP_ALLSQUASH)
  48
  49#ifdef __KERNEL__
  50
  51/*
  52 * FS Locations
  53 */
  54
  55#define MAX_FS_LOCATIONS        128
  56
  57struct nfsd4_fs_location {
  58        char *hosts; /* colon separated list of hosts */
  59        char *path;  /* slash separated list of path components */
  60};
  61
  62struct nfsd4_fs_locations {
  63        uint32_t locations_count;
  64        struct nfsd4_fs_location *locations;
  65/* If we're not actually serving this data ourselves (only providing a
  66 * list of replicas that do serve it) then we set "migrated": */
  67        int migrated;
  68};
  69
  70/*
  71 * We keep an array of pseudoflavors with the export, in order from most
  72 * to least preferred.  For the forseeable future, we don't expect more
  73 * than the eight pseudoflavors null, unix, krb5, krb5i, krb5p, skpm3,
  74 * spkm3i, and spkm3p (and using all 8 at once should be rare).
  75 */
  76#define MAX_SECINFO_LIST        8
  77
  78struct exp_flavor_info {
  79        u32     pseudoflavor;
  80        u32     flags;
  81};
  82
  83struct svc_export {
  84        struct cache_head       h;
  85        struct auth_domain *    ex_client;
  86        int                     ex_flags;
  87        struct vfsmount *       ex_mnt;
  88        struct dentry *         ex_dentry;
  89        char *                  ex_path;
  90        uid_t                   ex_anon_uid;
  91        gid_t                   ex_anon_gid;
  92        int                     ex_fsid;
  93        unsigned char *         ex_uuid; /* 16 byte fsid */
  94        struct nfsd4_fs_locations ex_fslocs;
  95        int                     ex_nflavors;
  96        struct exp_flavor_info  ex_flavors[MAX_SECINFO_LIST];
  97};
  98
  99/* an "export key" (expkey) maps a filehandlefragement to an
 100 * svc_export for a given client.  There can be several per export,
 101 * for the different fsid types.
 102 */
 103struct svc_expkey {
 104        struct cache_head       h;
 105
 106        struct auth_domain *    ek_client;
 107        int                     ek_fsidtype;
 108        u32                     ek_fsid[6];
 109
 110        struct vfsmount *       ek_mnt;
 111        struct dentry *         ek_dentry;
 112};
 113
 114#define EX_SECURE(exp)          (!((exp)->ex_flags & NFSEXP_INSECURE_PORT))
 115#define EX_ISSYNC(exp)          (!((exp)->ex_flags & NFSEXP_ASYNC))
 116#define EX_NOHIDE(exp)          ((exp)->ex_flags & NFSEXP_NOHIDE)
 117#define EX_WGATHER(exp)         ((exp)->ex_flags & NFSEXP_GATHERED_WRITES)
 118
 119int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp);
 120__be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp);
 121
 122/*
 123 * Function declarations
 124 */
 125void                    nfsd_export_init(void);
 126void                    nfsd_export_shutdown(void);
 127void                    nfsd_export_flush(void);
 128void                    exp_readlock(void);
 129void                    exp_readunlock(void);
 130struct svc_export *     rqst_exp_get_by_name(struct svc_rqst *,
 131                                             struct vfsmount *,
 132                                             struct dentry *);
 133struct svc_export *     rqst_exp_parent(struct svc_rqst *,
 134                                        struct vfsmount *mnt,
 135                                        struct dentry *dentry);
 136int                     exp_rootfh(struct auth_domain *, 
 137                                        char *path, struct knfsd_fh *, int maxsize);
 138__be32                  exp_pseudoroot(struct svc_rqst *, struct svc_fh *);
 139__be32                  nfserrno(int errno);
 140
 141extern struct cache_detail svc_export_cache;
 142
 143static inline void exp_put(struct svc_export *exp)
 144{
 145        cache_put(&exp->h, &svc_export_cache);
 146}
 147
 148static inline void exp_get(struct svc_export *exp)
 149{
 150        cache_get(&exp->h);
 151}
 152struct svc_export * rqst_exp_find(struct svc_rqst *, int, u32 *);
 153
 154#endif /* __KERNEL__ */
 155
 156#endif /* NFSD_EXPORT_H */
 157
 158