linux/include/uapi/linux/nfsd/nfsfh.h
<<
>>
Prefs
   1/*
   2 * This file describes the layout of the file handles as passed
   3 * over the wire.
   4 *
   5 * Copyright (C) 1995, 1996, 1997 Olaf Kirch <okir@monad.swb.de>
   6 */
   7
   8#ifndef _UAPI_LINUX_NFSD_FH_H
   9#define _UAPI_LINUX_NFSD_FH_H
  10
  11#include <linux/types.h>
  12#include <linux/nfs.h>
  13#include <linux/nfs2.h>
  14#include <linux/nfs3.h>
  15#include <linux/nfs4.h>
  16
  17/*
  18 * This is the old "dentry style" Linux NFSv2 file handle.
  19 *
  20 * The xino and xdev fields are currently used to transport the
  21 * ino/dev of the exported inode.
  22 */
  23struct nfs_fhbase_old {
  24        __u32           fb_dcookie;     /* dentry cookie - always 0xfeebbaca */
  25        __u32           fb_ino;         /* our inode number */
  26        __u32           fb_dirino;      /* dir inode number, 0 for directories */
  27        __u32           fb_dev;         /* our device */
  28        __u32           fb_xdev;
  29        __u32           fb_xino;
  30        __u32           fb_generation;
  31};
  32
  33/*
  34 * This is the new flexible, extensible style NFSv2/v3/v4 file handle.
  35 * by Neil Brown <neilb@cse.unsw.edu.au> - March 2000
  36 *
  37 * The file handle starts with a sequence of four-byte words.
  38 * The first word contains a version number (1) and three descriptor bytes
  39 * that tell how the remaining 3 variable length fields should be handled.
  40 * These three bytes are auth_type, fsid_type and fileid_type.
  41 *
  42 * All four-byte values are in host-byte-order.
  43 *
  44 * The auth_type field is deprecated and must be set to 0.
  45 *
  46 * The fsid_type identifies how the filesystem (or export point) is
  47 *    encoded.
  48 *  Current values:
  49 *     0  - 4 byte device id (ms-2-bytes major, ls-2-bytes minor), 4byte inode number
  50 *        NOTE: we cannot use the kdev_t device id value, because kdev_t.h
  51 *              says we mustn't.  We must break it up and reassemble.
  52 *     1  - 4 byte user specified identifier
  53 *     2  - 4 byte major, 4 byte minor, 4 byte inode number - DEPRECATED
  54 *     3  - 4 byte device id, encoded for user-space, 4 byte inode number
  55 *     4  - 4 byte inode number and 4 byte uuid
  56 *     5  - 8 byte uuid
  57 *     6  - 16 byte uuid
  58 *     7  - 8 byte inode number and 16 byte uuid
  59 *
  60 * The fileid_type identified how the file within the filesystem is encoded.
  61 *   The values for this field are filesystem specific, exccept that
  62 *   filesystems must not use the values '0' or '0xff'. 'See enum fid_type'
  63 *   in include/linux/exportfs.h for currently registered values.
  64 */
  65struct nfs_fhbase_new {
  66        __u8            fb_version;     /* == 1, even => nfs_fhbase_old */
  67        __u8            fb_auth_type;
  68        __u8            fb_fsid_type;
  69        __u8            fb_fileid_type;
  70        __u32           fb_auth[1];
  71/*      __u32           fb_fsid[0]; floating */
  72/*      __u32           fb_fileid[0]; floating */
  73};
  74
  75struct knfsd_fh {
  76        unsigned int    fh_size;        /* significant for NFSv3.
  77                                         * Points to the current size while building
  78                                         * a new file handle
  79                                         */
  80        union {
  81                struct nfs_fhbase_old   fh_old;
  82                __u32                   fh_pad[NFS4_FHSIZE/4];
  83                struct nfs_fhbase_new   fh_new;
  84        } fh_base;
  85};
  86
  87#define ofh_dcookie             fh_base.fh_old.fb_dcookie
  88#define ofh_ino                 fh_base.fh_old.fb_ino
  89#define ofh_dirino              fh_base.fh_old.fb_dirino
  90#define ofh_dev                 fh_base.fh_old.fb_dev
  91#define ofh_xdev                fh_base.fh_old.fb_xdev
  92#define ofh_xino                fh_base.fh_old.fb_xino
  93#define ofh_generation          fh_base.fh_old.fb_generation
  94
  95#define fh_version              fh_base.fh_new.fb_version
  96#define fh_fsid_type            fh_base.fh_new.fb_fsid_type
  97#define fh_auth_type            fh_base.fh_new.fb_auth_type
  98#define fh_fileid_type          fh_base.fh_new.fb_fileid_type
  99#define fh_fsid                 fh_base.fh_new.fb_auth
 100
 101/* Do not use, provided for userspace compatiblity. */
 102#define fh_auth                 fh_base.fh_new.fb_auth
 103
 104#endif /* _UAPI_LINUX_NFSD_FH_H */
 105