mirror of
https://github.com/reactos/reactos.git
synced 2024-08-27 13:48:42 +00:00
250 lines
7.3 KiB
C
250 lines
7.3 KiB
C
/* NFSv4.1 client for Windows
|
|
* Copyright © 2012 The Regents of the University of Michigan
|
|
*
|
|
* Olga Kornievskaia <aglo@umich.edu>
|
|
* Casey Bodley <cbodley@umich.edu>
|
|
*
|
|
* This library 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 2.1 of the License, or (at
|
|
* your option) any later version.
|
|
*
|
|
* This library 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
|
|
*/
|
|
|
|
#ifndef __NFS41_DAEMON_TYPES_H__
|
|
#define __NFS41_DAEMON_TYPES_H__
|
|
|
|
#include "wintirpc.h"
|
|
#include "rpc/xdr.h"
|
|
#include "nfs41_const.h"
|
|
|
|
typedef char* caddr_t;
|
|
|
|
static const int64_t NFS4_INT64_MAX = 0x7fffffffffffffff;
|
|
static const uint64_t NFS4_UINT64_MAX = 0xffffffffffffffff;
|
|
static const int32_t NFS4_INT32_MAX = 0x7fffffff;
|
|
static const uint32_t NFS4_UINT32_MAX = 0xffffffff;
|
|
|
|
static const uint64_t NFS4_MAXFILELEN = 0xffffffffffffffff;
|
|
static const uint64_t NFS4_MAXFILEOFF = 0xfffffffffffffffe;
|
|
|
|
|
|
/* common nfs types */
|
|
typedef struct __nfs41_abs_path {
|
|
char path[NFS41_MAX_PATH_LEN];
|
|
unsigned short len;
|
|
SRWLOCK lock;
|
|
} nfs41_abs_path;
|
|
|
|
typedef struct __nfs41_component {
|
|
const char *name;
|
|
unsigned short len;
|
|
} nfs41_component;
|
|
|
|
typedef struct __nfs41_fh {
|
|
unsigned char fh[NFS4_FHSIZE];
|
|
uint32_t len;
|
|
uint64_t fileid;
|
|
struct __nfs41_superblock *superblock;
|
|
} nfs41_fh;
|
|
|
|
typedef struct __nfs41_path_fh {
|
|
nfs41_abs_path *path;
|
|
nfs41_component name;
|
|
nfs41_fh fh;
|
|
} nfs41_path_fh;
|
|
|
|
typedef struct __nfs41_fsid {
|
|
uint64_t major;
|
|
uint64_t minor;
|
|
} nfs41_fsid;
|
|
|
|
typedef struct __nfs41_readdir_cookie {
|
|
uint64_t cookie;
|
|
unsigned char verf[NFS4_VERIFIER_SIZE];
|
|
} nfs41_readdir_cookie;
|
|
|
|
typedef struct __nfs41_write_verf {
|
|
unsigned char verf[NFS4_VERIFIER_SIZE];
|
|
unsigned char expected[NFS4_VERIFIER_SIZE];
|
|
#ifdef __REACTOS__
|
|
uint32_t committed;
|
|
#else
|
|
enum stable_how4 committed;
|
|
#endif
|
|
} nfs41_write_verf;
|
|
|
|
typedef struct __netaddr4 {
|
|
char netid[NFS41_NETWORK_ID_LEN+1];
|
|
char uaddr[NFS41_UNIVERSAL_ADDR_LEN+1];
|
|
} netaddr4;
|
|
|
|
typedef struct __multi_addr4 {
|
|
netaddr4 arr[NFS41_ADDRS_PER_SERVER];
|
|
uint32_t count;
|
|
} multi_addr4;
|
|
|
|
typedef struct __bitmap4 {
|
|
uint32_t count;
|
|
uint32_t arr[3];
|
|
} bitmap4;
|
|
|
|
typedef struct __nfstime4 {
|
|
int64_t seconds;
|
|
uint32_t nseconds;
|
|
} nfstime4;
|
|
|
|
typedef struct __client_owner4 {
|
|
unsigned char co_verifier[NFS4_VERIFIER_SIZE];
|
|
uint32_t co_ownerid_len;
|
|
unsigned char co_ownerid[NFS4_OPAQUE_LIMIT];
|
|
} client_owner4;
|
|
|
|
typedef struct __server_owner4 {
|
|
uint64_t so_minor_id;
|
|
uint32_t so_major_id_len;
|
|
char so_major_id[NFS4_OPAQUE_LIMIT];
|
|
} server_owner4;
|
|
|
|
typedef struct __state_owner4 {
|
|
uint32_t owner_len;
|
|
unsigned char owner[NFS4_OPAQUE_LIMIT];
|
|
} state_owner4;
|
|
|
|
typedef struct __nfs_impl_id4 {
|
|
uint32_t nii_domain_len;
|
|
unsigned char *nii_domain;
|
|
uint32_t nii_name_len;
|
|
unsigned char *nii_name;
|
|
nfstime4 nii_date;
|
|
} nfs_impl_id4;
|
|
|
|
typedef struct __nfsace4 {
|
|
uint32_t acetype;
|
|
uint32_t aceflag;
|
|
uint32_t acemask;
|
|
char who[NFS4_OPAQUE_LIMIT];
|
|
} nfsace4;
|
|
|
|
typedef struct __nfsacl41 {
|
|
uint32_t flag;
|
|
nfsace4 *aces;
|
|
uint32_t count;
|
|
} nfsacl41;
|
|
|
|
typedef struct __stateid4 {
|
|
uint32_t seqid;
|
|
unsigned char other[NFS4_STATEID_OTHER];
|
|
} stateid4;
|
|
|
|
typedef struct __open_delegation4 {
|
|
stateid4 stateid;
|
|
nfsace4 permissions;
|
|
#ifdef __REACTOS__
|
|
uint32_t type;
|
|
#else
|
|
enum open_delegation_type4 type;
|
|
#endif
|
|
bool_t recalled;
|
|
} open_delegation4;
|
|
|
|
typedef struct __fattr4 {
|
|
bitmap4 attrmask;
|
|
uint32_t attr_vals_len;
|
|
unsigned char attr_vals[NFS4_OPAQUE_LIMIT];
|
|
} fattr4;
|
|
|
|
typedef struct __change_info4 {
|
|
bool_t atomic;
|
|
uint64_t before;
|
|
uint64_t after;
|
|
} change_info4;
|
|
|
|
typedef struct __fs_location_server {
|
|
/* 'address' represents one of a traditional DNS host name,
|
|
* IPv4 address, IPv6 address, or a zero-length string */
|
|
char address[NFS41_HOSTNAME_LEN+1];
|
|
} fs_location_server;
|
|
|
|
typedef struct __fs_location4 {
|
|
nfs41_abs_path path; /* path to fs from referred server's root */
|
|
fs_location_server *servers;
|
|
uint32_t server_count;
|
|
} fs_location4;
|
|
|
|
typedef struct __fs_locations4 {
|
|
nfs41_abs_path path; /* path to fs from referring server's root */
|
|
fs_location4 *locations;
|
|
uint32_t location_count;
|
|
} fs_locations4;
|
|
|
|
enum {
|
|
MDSTHRESH_READ = 0,
|
|
MDSTHRESH_WRITE,
|
|
MDSTHRESH_READ_IO,
|
|
MDSTHRESH_WRITE_IO,
|
|
|
|
MAX_MDSTHRESH_HINTS
|
|
};
|
|
typedef struct __threshold_item4 {
|
|
uint32_t type;
|
|
uint64_t hints[MAX_MDSTHRESH_HINTS];
|
|
} threshold_item4;
|
|
|
|
#define MAX_MDSTHRESHOLD_ITEMS 1
|
|
typedef struct __mdsthreshold4 {
|
|
uint32_t count;
|
|
threshold_item4 items[MAX_MDSTHRESHOLD_ITEMS];
|
|
} mdsthreshold4;
|
|
|
|
typedef struct __nfs41_file_info {
|
|
nfs41_fsid fsid;
|
|
mdsthreshold4 mdsthreshold;
|
|
nfstime4 time_access;
|
|
nfstime4 time_create;
|
|
nfstime4 time_modify;
|
|
nfsacl41 *acl;
|
|
nfstime4 *time_delta; /* XXX: per-fs */
|
|
bitmap4 attrmask;
|
|
bitmap4 *supported_attrs; /* XXX: per-fs */
|
|
bitmap4 *suppattr_exclcreat; /* XXX: per-fs */
|
|
uint64_t maxread; /* XXX: per-fs */
|
|
uint64_t maxwrite; /* XXX: per-fs */
|
|
uint64_t change;
|
|
uint64_t size;
|
|
uint64_t fileid;
|
|
uint64_t space_avail; /* XXX: per-fs */
|
|
uint64_t space_free; /* XXX: per-fs */
|
|
uint64_t space_total; /* XXX: per-fs */
|
|
uint32_t type;
|
|
uint32_t numlinks;
|
|
uint32_t rdattr_error;
|
|
uint32_t mode;
|
|
uint32_t mode_mask;
|
|
fs_locations4 *fs_locations; /* XXX: per-fs */
|
|
uint32_t lease_time; /* XXX: per-server */
|
|
uint32_t fs_layout_types; /* pnfs, XXX: per-fs */
|
|
bool_t hidden;
|
|
bool_t system;
|
|
bool_t archive;
|
|
bool_t cansettime; /* XXX: per-fs */
|
|
bool_t case_insensitive;
|
|
bool_t case_preserving;
|
|
bool_t symlink_dir;
|
|
bool_t symlink_support;
|
|
bool_t link_support;
|
|
char *owner;
|
|
char *owner_group;
|
|
uint32_t aclsupport;
|
|
} nfs41_file_info;
|
|
|
|
#endif /* !__NFS41_DAEMON_TYPES_H__ */
|