📄 nfs.h
字号:
/* @(#)nfs.h 4.3 (ULTRIX) 2/28/91 *//************************************************************************ * * * Copyright (c) 1986 by * * Digital Equipment Corporation, Maynard, MA * * All rights reserved. * * * * This software is furnished under a license and may be used and * * copied only in accordance with the terms of such license and * * with the inclusion of the above copyright notice. This * * software or any other copies thereof may not be provided or * * otherwise made available to any other person. No title to and * * ownership of the software is hereby transferred. * * * * This software is derived from software received from the * * University of California, Berkeley, and from Bell * * Laboratories. Use, duplication, or disclosure is subject to * * restrictions under license agreements with University of * * California and with AT&T. * * * * The information in this software is subject to change without * * notice and should not be construed as a commitment by Digital * * Equipment Corporation. * * * * Digital assumes no responsibility for the use or reliability * * of its software on equipment which is not supplied by Digital. * * * ************************************************************************//* * Portions of this software have been licensed to * Digital Equipment Company, Maynard, MA. * Copyright (c) 1986 Sun Microsystems, Inc. ALL RIGHTS RESERVED. *//* * * Modification history: * * 28-Feb-91 -- dws * Cleaned up fhandle_t definition * * 02-Mar-87 -- logcher * Merged in diskless changes */#ifdef KERNEL#include "../h/ansi_compat.h"#else#include <ansi_compat.h>#endif/* 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 4 /* times to retry request *//* * 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)/* * Size of an fhandle in bytes */#define NFS_FHSIZE 32/* * File access handle * This structure is supposed to be opaque from the client side. * It is handed out by a server for the client to use in further * file transactions. */typedef union { struct svcfh { dev_t fsid; /* filesystem id */ u_long fno; /* file number */ u_long fgen; /* file generation */ /* export granting directory */ u_long eno; /* file number */ u_long egen; /* file generation */ } svcfh; /* fhandle must be NFS_FHSIZE bytes in length */ char fh_pad[NFS_FHSIZE];} fhandle_t;#ifdef NFSSERVER#define fh_fsid svcfh.fsid#define fh_fno svcfh.fno#define fh_fgen svcfh.fgen#define fh_eno svcfh.eno#define fh_egen svcfh.egen#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 exportdata { int x_flags; int x_rootmap;};struct export { int e_flags; dev_t e_fsid; u_long e_gnum; u_long e_gen; short e_rootmap; int e_pathlen; char *e_path; struct export *e_next;};/* * 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 */};/* * 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 count (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 buffer */};/* * Reply from remote read */struct nfsrdresult { enum nfsstat rr_status; /* status of read */ u_long rr_bufallocsize; /* size of reponse buffer needed to free */ char *rr_bufallocaddr; /* where the buffer has been allocated */ 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; /* size of client request (not xdr'ed)*/ u_long rd_bufallocsize;/* size of reponse buffer needed to free */ char *rd_bufallocaddr;/* where the buffer has been allocated */ 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/* Sun's multiple use of fs_bsize has caused problems. */ #define fsstat_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_drok();bool_t xdr_fattr();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_rrok();bool_t xdr_saargs();bool_t xdr_sattr();bool_t xdr_slargs();bool_t xdr_srok();bool_t xdr_timeval();bool_t xdr_writeargs();bool_t xdr_statfs();/* * 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -