This is nfs.h in view mode; [Download] [Up]
/* @(#)nfs.h 2.2 88/05/20 NFSSRC4.0 from 2.36 88/02/08 SMI */ /* * HISTORY * 19-Dec-88 Peter King (king) at NeXT * NFS 4.0 Changes: Increased default timeouts. Minor structure * additions */ #ifndef __NFS_HEADER__ #define __NFS_HEADER__ /* Maximum size of data portion of a remote request */ #define NFS_MAXDATA 8192 #define NFS_MAXNAMLEN 255 #define NFS_MAXPATHLEN 1024 /* * Rpc retransmission parameters */ #define NFS_TIMEO 11 /* initial timeout in tenths of a sec. */ #define NFS_RETRIES 5 /* times to retry request */ /* * maximum transfer size for different interfaces */ #if NeXT /* Sun defined these things depending on their hardware devices! */ #define NFSTSIZE 8192 #else #define ECTSIZE 4096 #define IETSIZE 8192 #endif #if NeXT #define NFS_BLOCKSIZE 1024 /* no more DEV_BSIZE */ #endif /* * Error status * Should include all possible net errors. * For now we just cast errno into an enum nfsstat. */ enum nfsstat { NFS_OK = 0, /* no error */ NFSERR_PERM=EPERM, /* Not owner */ NFSERR_NOENT=ENOENT, /* No such file or directory */ NFSERR_IO=EIO, /* I/O error */ NFSERR_NXIO=ENXIO, /* No such device or address */ NFSERR_ACCES=EACCES, /* Permission denied */ NFSERR_EXIST=EEXIST, /* File exists */ NFSERR_NODEV=ENODEV, /* No such device */ NFSERR_NOTDIR=ENOTDIR, /* Not a directory */ NFSERR_ISDIR=EISDIR, /* Is a directory */ NFSERR_FBIG=EFBIG, /* File too large */ NFSERR_NOSPC=ENOSPC, /* No space left on device */ NFSERR_ROFS=EROFS, /* Read-only file system */ NFSERR_NAMETOOLONG=ENAMETOOLONG,/* File name too long */ NFSERR_NOTEMPTY=ENOTEMPTY, /* Directory not empty */ NFSERR_DQUOT=EDQUOT, /* Disc quota exceeded */ NFSERR_STALE=ESTALE, /* Stale NFS file handle */ NFSERR_WFLUSH /* write cache flushed */ }; #define puterrno(error) ((enum nfsstat)error) #define geterrno(status) ((int)status) /* * File types */ enum nfsftype { NFNON, NFREG, /* regular file */ NFDIR, /* directory */ NFBLK, /* block special */ NFCHR, /* character special */ NFLNK /* symbolic link */ }; /* * Special kludge for fifos (named pipes) [to adhere to NFS Protocol Spec] * * VFIFO is not in the protocol spec (VNON will be replaced by VFIFO) * so the over-the-wire representation is VCHR with a '-1' device number. * * NOTE: This kludge becomes unnecessary with the Protocol Revision, * but it may be necessary to support it (backwards compatibility). */ #define NFS_FIFO_TYPE NFCHR #define NFS_FIFO_MODE S_IFCHR #define NFS_FIFO_DEV (~0) /* identify fifo in nfs attributes */ #define NA_ISFIFO(NA) (((NA)->na_type == NFS_FIFO_TYPE) && \ ((NA)->na_rdev == NFS_FIFO_DEV)) /* set fifo in nfs attributes */ #define NA_SETFIFO(NA) { \ (NA)->na_type = NFS_FIFO_TYPE; \ (NA)->na_rdev = NFS_FIFO_DEV; \ (NA)->na_mode = ((NA)->na_mode&~S_IFMT)|NFS_FIFO_MODE; \ } /* * Size of an fhandle in bytes */ #define NFS_FHSIZE 32 /* * File access handle * This structure is the Sun server representation of a file. * It is handed out by a server for the client to use in further * file transactions. */ #ifdef NFS_SERVER /* * This struct is only used to find the size of the data field in the * fhandle structure below. */ struct fhsize { fsid_t f1; u_short f2; char f3[4]; u_short f4; char f5[4]; }; #define NFS_FHMAXDATA ((NFS_FHSIZE - sizeof(struct fhsize) + 8) / 2) struct svcfh { fsid_t fh_fsid; /* filesystem id */ u_short fh_len; /* file number length */ char fh_data[NFS_FHMAXDATA]; /* and data */ u_short fh_xlen; /* export file number length */ char fh_xdata[NFS_FHMAXDATA];/* and data */ }; typedef struct svcfh fhandle_t; #else /* * This is the client view of an fhandle */ typedef struct { char fh_data[NFS_FHSIZE]; /* opaque data */ } fhandle_t; #endif /* * Arguments to remote write and writecache */ struct nfswriteargs { fhandle_t wa_fhandle; /* handle for file */ u_long wa_begoff; /* beginning byte offset in file */ u_long wa_offset; /* current byte offset in file */ u_long wa_totcount; /* total write count (to this offset)*/ u_long wa_count; /* size of this write */ char *wa_data; /* data to write (up to NFS_MAXDATA) */ struct mbuf *wa_mbuf; /* mbuf containing data */ }; /* * File attributes */ struct nfsfattr { enum nfsftype na_type; /* file type */ u_long na_mode; /* protection mode bits */ u_long na_nlink; /* # hard links */ u_long na_uid; /* owner user id */ u_long na_gid; /* owner group id */ u_long na_size; /* file size in bytes */ u_long na_blocksize; /* prefered block size */ u_long na_rdev; /* special device # */ u_long na_blocks; /* Kb of disk used by file */ u_long na_fsid; /* device # */ u_long na_nodeid; /* inode # */ struct timeval na_atime; /* time of last access */ struct timeval na_mtime; /* time of last modification */ struct timeval na_ctime; /* time of last change */ }; #define n2v_type(x) (NA_ISFIFO(x) ? VFIFO : (enum vtype)((x)->na_type)) #define n2v_rdev(x) (NA_ISFIFO(x) ? 0 : (x)->na_rdev) /* * Arguments to remote read */ struct nfsreadargs { fhandle_t ra_fhandle; /* handle for file */ u_long ra_offset; /* byte offset in file */ u_long ra_count; /* immediate read count */ u_long ra_totcount; /* total read cnt (from this offset)*/ }; /* * Status OK portion of remote read reply */ struct nfsrrok { struct nfsfattr rrok_attr; /* attributes, need for pagin */ u_long rrok_count; /* bytes of data */ char *rrok_data; /* data (up to NFS_MAXDATA bytes) */ struct buf *rrok_bp; /* buffer pointer for bread */ struct vnode *rrok_vp; /* vnode assoc. with mapping */ }; /* * Reply from remote read */ struct nfsrdresult { enum nfsstat rr_status; /* status of read */ union { struct nfsrrok rr_ok_u; /* attributes, need for pagin*/ } rr_u; }; #define rr_ok rr_u.rr_ok_u #define rr_attr rr_u.rr_ok_u.rrok_attr #define rr_count rr_u.rr_ok_u.rrok_count #define rr_data rr_u.rr_ok_u.rrok_data #define rr_bp rr_u.rr_ok_u.rrok_bp #define rr_vp rr_u.rr_ok_u.rrok_vp /* * File attributes which can be set */ struct nfssattr { u_long sa_mode; /* protection mode bits */ u_long sa_uid; /* owner user id */ u_long sa_gid; /* owner group id */ u_long sa_size; /* file size in bytes */ struct timeval sa_atime; /* time of last access */ struct timeval sa_mtime; /* time of last modification */ }; /* * Reply status with file attributes */ struct nfsattrstat { enum nfsstat ns_status; /* reply status */ union { struct nfsfattr ns_attr_u; /* NFS_OK: file attributes */ } ns_u; }; #define ns_attr ns_u.ns_attr_u /* * NFS_OK part of read sym link reply union */ struct nfssrok { u_long srok_count; /* size of string */ char *srok_data; /* string (up to NFS_MAXPATHLEN bytes) */ }; /* * Result of reading symbolic link */ struct nfsrdlnres { enum nfsstat rl_status; /* status of symlink read */ union { struct nfssrok rl_srok_u; /* name of linked to */ } rl_u; }; #define rl_srok rl_u.rl_srok_u #define rl_count rl_u.rl_srok_u.srok_count #define rl_data rl_u.rl_srok_u.srok_data /* * Arguments to readdir */ struct nfsrddirargs { fhandle_t rda_fh; /* directory handle */ u_long rda_offset; /* offset in directory (opaque) */ u_long rda_count; /* number of directory bytes to read */ }; /* * NFS_OK part of readdir result */ struct nfsrdok { u_long rdok_offset; /* next offset (opaque) */ u_long rdok_size; /* size in bytes of entries */ bool_t rdok_eof; /* true if last entry is in result*/ struct direct *rdok_entries; /* variable number of entries */ }; /* * Readdir result */ struct nfsrddirres { u_long rd_bufsize; /* client request size (not xdr'ed)*/ enum nfsstat rd_status; union { struct nfsrdok rd_rdok_u; } rd_u; }; #define rd_rdok rd_u.rd_rdok_u #define rd_offset rd_u.rd_rdok_u.rdok_offset #define rd_size rd_u.rd_rdok_u.rdok_size #define rd_eof rd_u.rd_rdok_u.rdok_eof #define rd_entries rd_u.rd_rdok_u.rdok_entries /* * Arguments for directory operations */ struct nfsdiropargs { fhandle_t da_fhandle; /* directory file handle */ char *da_name; /* name (up to NFS_MAXNAMLEN bytes) */ }; /* * NFS_OK part of directory operation result */ struct nfsdrok { fhandle_t drok_fhandle; /* result file handle */ struct nfsfattr drok_attr; /* result file attributes */ }; /* * Results from directory operation */ struct nfsdiropres { enum nfsstat dr_status; /* result status */ union { struct nfsdrok dr_drok_u; /* NFS_OK result */ } dr_u; }; #define dr_drok dr_u.dr_drok_u #define dr_fhandle dr_u.dr_drok_u.drok_fhandle #define dr_attr dr_u.dr_drok_u.drok_attr /* * arguments to setattr */ struct nfssaargs { fhandle_t saa_fh; /* fhandle of file to be set */ struct nfssattr saa_sa; /* new attributes */ }; /* * arguments to create and mkdir */ struct nfscreatargs { struct nfsdiropargs ca_da; /* file name to create and parent dir */ struct nfssattr ca_sa; /* initial attributes */ }; /* * arguments to link */ struct nfslinkargs { fhandle_t la_from; /* old file */ struct nfsdiropargs la_to; /* new file and parent dir */ }; /* * arguments to rename */ struct nfsrnmargs { struct nfsdiropargs rna_from; /* old file and parent dir */ struct nfsdiropargs rna_to; /* new file and parent dir */ }; /* * arguments to symlink */ struct nfsslargs { struct nfsdiropargs sla_from; /* old file and parent dir */ char *sla_tnm; /* new name */ struct nfssattr sla_sa; /* attributes */ }; /* * NFS_OK part of statfs operation */ struct nfsstatfsok { u_long fsok_tsize; /* preferred transfer size in bytes */ u_long fsok_bsize; /* fundamental file system block size */ u_long fsok_blocks; /* total blocks in file system */ u_long fsok_bfree; /* free blocks in fs */ u_long fsok_bavail; /* free blocks avail to non-superuser */ }; /* * Results of statfs operation */ struct nfsstatfs { enum nfsstat fs_status; /* result status */ union { struct nfsstatfsok fs_fsok_u; /* NFS_OK result */ } fs_u; }; #define fs_fsok fs_u.fs_fsok_u #define fs_tsize fs_u.fs_fsok_u.fsok_tsize #define fs_bsize fs_u.fs_fsok_u.fsok_bsize #define fs_blocks fs_u.fs_fsok_u.fsok_blocks #define fs_bfree fs_u.fs_fsok_u.fsok_bfree #define fs_bavail fs_u.fs_fsok_u.fsok_bavail /* * XDR routines for handling structures defined above */ bool_t xdr_attrstat(); bool_t xdr_creatargs(); bool_t xdr_diropargs(); bool_t xdr_diropres(); bool_t xdr_fhandle(); bool_t xdr_linkargs(); bool_t xdr_rddirargs(); bool_t xdr_putrddirres(); bool_t xdr_getrddirres(); bool_t xdr_rdlnres(); bool_t xdr_rdresult(); bool_t xdr_readargs(); bool_t xdr_rnmargs(); bool_t xdr_saargs(); bool_t xdr_slargs(); bool_t xdr_writeargs(); bool_t xdr_statfs(); #if STATIC_ONLY bool_t xdr_drok(); bool_t xdr_srok(); bool_t xdr_rrok(); bool_t xdr_fattr(); bool_t xdr_sattr(); bool_t xdr_timeval(); #endif /* * Remote file service routines */ #define RFS_NULL 0 #define RFS_GETATTR 1 #define RFS_SETATTR 2 #define RFS_ROOT 3 #define RFS_LOOKUP 4 #define RFS_READLINK 5 #define RFS_READ 6 #define RFS_WRITECACHE 7 #define RFS_WRITE 8 #define RFS_CREATE 9 #define RFS_REMOVE 10 #define RFS_RENAME 11 #define RFS_LINK 12 #define RFS_SYMLINK 13 #define RFS_MKDIR 14 #define RFS_RMDIR 15 #define RFS_READDIR 16 #define RFS_STATFS 17 #define RFS_NPROC 18 /* * remote file service numbers */ #define NFS_PROGRAM ((u_long)100003) #define NFS_VERSION ((u_long)2) #define NFS_PORT 2049 #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.