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