blob: 762f9a0b597255fffd13ecce4fa58fb9750a82d3 [file] [log] [blame]
/*
*
*
* Copyright CEA/DAM/DIF (2008)
* contributeur : Philippe DENIEL philippe.deniel@cea.fr
* Thomas LEIBOVICI thomas.leibovici@cea.fr
* Eshel Marc eshel@us.ibm.com
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 3 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* ---------------------------------------
*/
/**
* @file nfs_fh.h
* @brief Prototypes for the file handle in v3 and v4
*/
#ifndef NFS_FH_H
#define NFS_FH_H
#ifndef __FreeBSD__
#include "byteswap.h"
#endif
/*
* Structure of the filehandle
* these structures must be naturally aligned. The xdr buffer from/to which
* they come/go are 4 byte aligned.
*/
#define GANESHA_FH_VERSION 0x43
#define FILE_HANDLE_V4_FLAG_DS 0x01 /*< handle for a DS */
#define FH_FSAL_BIG_ENDIAN 0x40 /*< FSAL FH is big endian */
/**
* @brief An NFSv3 handle
*
* This may be up to 64 bytes long, aligned on 32 bits
*/
typedef struct file_handle_v3 {
uint8_t fhversion; /*< Set to GANESHA_FH_VERSION */
uint8_t fhflags1; /*< To replace things like ds_flag */
uint16_t exportid; /*< Must be correlated to exportlist_t::id */
uint8_t fs_len; /*< Actual length of opaque handle */
uint8_t fsopaque[]; /*< Persistent part of FSAL handle,
<= 59 bytes */
} file_handle_v3_t;
/**
* @brief An NFSv4 filehandle
*
* This may be up to 128 bytes, aligned on 32 bits.
*/
typedef struct __attribute__ ((__packed__)) file_handle_v4 {
uint8_t fhversion; /*< Set to 0x41 to separate from Linux knfsd */
uint8_t fhflags1; /*< To replace things like ds_flag */
union {
uint16_t exports; /*< FSAL exports, export_by_id */
uint16_t servers; /*< FSAL servers, server_by_id */
} id;
uint8_t fs_len; /*< Length of opaque handle */
uint8_t fsopaque[]; /*< FSAL handle */
} file_handle_v4_t;
#endif /* NFS_FH_H */