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 <linux/types.h>
  14#ifdef __KERNEL__
  15# include <linux/in.h>
  16#endif
  17
  18/*
  19 * Important limits for the exports stuff.
  20 */
  21#define NFSCLNT_IDMAX           1024
  22#define NFSCLNT_ADDRMAX         16
  23#define NFSCLNT_KEYMAX          32
  24
  25/*
  26 * Export flags.
  27 */
  28#define NFSEXP_READONLY         0x0001
  29#define NFSEXP_INSECURE_PORT    0x0002
  30#define NFSEXP_ROOTSQUASH       0x0004
  31#define NFSEXP_ALLSQUASH        0x0008
  32#define NFSEXP_ASYNC            0x0010
  33#define NFSEXP_GATHERED_WRITES  0x0020
  34/* 40 80 100 currently unused */
  35#define NFSEXP_NOHIDE           0x0200
  36#define NFSEXP_NOSUBTREECHECK   0x0400
  37#define NFSEXP_NOAUTHNLM        0x0800          /* Don't authenticate NLM requests - just trust */
  38#define NFSEXP_MSNFS            0x1000  /* do silly things that MS clients expect */
  39#define NFSEXP_FSID             0x2000
  40#define NFSEXP_CROSSMOUNT       0x4000
  41#define NFSEXP_NOACL            0x8000  /* reserved for possible ACL related use */
  42#define NFSEXP_ALLFLAGS         0xFE3F
  43
  44/* The flags that may vary depending on security flavor: */
  45#define NFSEXP_SECINFO_FLAGS    (NFSEXP_READONLY | NFSEXP_ROOTSQUASH \
  46                                        | NFSEXP_ALLSQUASH)
  47
  48#ifdef __KERNEL__
  49
  50/*
  51 * FS Locations
  52 */
  53
  54#define MAX_FS_LOCATIONS        128
  55
  56struct nfsd4_fs_location {
  57        char *hosts; /* colon separated list of hosts */
  58        char *path;  /* slash separated list of path components */
  59};
  60
  61struct nfsd4_fs_locations {
  62        uint32_t locations_count;
  63        struct nfsd4_fs_location *locations;
  64/* If we're not actually serving this data ourselves (only providing a
  65 * list of replicas that do serve it) then we set "migrated": */
  66        int migrated;
  67};
  68
  69/*
  70 * We keep an array of pseudoflavors with the export, in order from most
  71 * to least preferred.  For the forseeable future, we don't expect more
  72 * than the eight pseudoflavors null, unix, krb5, krb5i, krb5p, skpm3,
  73 * spkm3i, and spkm3p (and using all 8 at once should be rare).
  74 */
  75#define MAX_SECINFO_LIST        8
  76
  77struct exp_flavor_info {
  78        u32     pseudoflavor;
  79        u32     flags;
  80};
  81
  82struct svc_export {
  83        struct cache_head       h;
  84        struct auth_domain *    ex_client;
  85        int                     ex_flags;
  86        struct path             ex_path;
  87        char                    *ex_pathname;
  88        uid_t                   ex_anon_uid;
  89        gid_t                   ex_anon_gid;
  90        int                     ex_fsid;
  91        unsigned char *         ex_uuid; /* 16 byte fsid */
  92        struct nfsd4_fs_locations ex_fslocs;
  93        int                     ex_nflavors;
  94        struct exp_flavor_info  ex_flavors[MAX_SECINFO_LIST];
  95};
  96
  97/* an "export key" (expkey) maps a filehandlefragement to an
  98 * svc_export for a given client.  There can be several per export,
  99 * for the different fsid types.
 100 */
 101struct svc_expkey {
 102        struct cache_head       h;
 103
 104        struct auth_domain *    ek_client;
 105        int                     ek_fsidtype;
 106        u32                     ek_fsid[6];
 107
 108        struct path             ek_path;
 109};
 110
 111#define EX_SECURE(exp)          (!((exp)->ex_flags & NFSEXP_INSECURE_PORT))
 112#define EX_ISSYNC(exp)          (!((exp)->ex_flags & NFSEXP_ASYNC))
 113#define EX_NOHIDE(exp)          ((exp)->ex_flags & NFSEXP_NOHIDE)
 114#define EX_WGATHER(exp)         ((exp)->ex_flags & NFSEXP_GATHERED_WRITES)
 115
 116int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp);
 117__be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp);
 118
 119/*
 120 * Function declarations
 121 */
 122int                     nfsd_export_init(void);
 123void                    nfsd_export_shutdown(void);
 124void                    nfsd_export_flush(void);
 125void                    exp_readlock(void);
 126void                    exp_readunlock(void);
 127struct svc_export *     rqst_exp_get_by_name(struct svc_rqst *,
 128                                             struct path *);
 129struct svc_export *     rqst_exp_parent(struct svc_rqst *,
 130                                        struct path *);
 131int                     exp_rootfh(struct auth_domain *, 
 132                                        char *path, struct knfsd_fh *, int maxsize);
 133__be32                  exp_pseudoroot(struct svc_rqst *, struct svc_fh *);
 134__be32                  nfserrno(int errno);
 135
 136extern struct cache_detail svc_export_cache;
 137
 138static inline void exp_put(struct svc_export *exp)
 139{
 140        cache_put(&exp->h, &svc_export_cache);
 141}
 142
 143static inline void exp_get(struct svc_export *exp)
 144{
 145        cache_get(&exp->h);
 146}
 147struct svc_export * rqst_exp_find(struct svc_rqst *, int, u32 *);
 148
 149#endif /* __KERNEL__ */
 150
 151#endif /* NFSD_EXPORT_H */
 152
 153