/* nfsCommon.h - nfsDrv header */ /* * Copyright (c) 2003-2007, 2011-2012 Wind River Systems, Inc. * * The right to copy, distribute, modify or otherwise make use * of this software may be licensed only pursuant to the terms * of an applicable Wind River license agreement. */ /* modification history -------------------- 01m,27jul12,txu fix WIND00356753: Removal of compiling warnings 01l,05jan12,txu fix WIND00326552: NFS client cannot send a too large packet 01k,31dec11,txu fix WIND00325978: Nfsv3 client using enlarging NFS package size optimization will cause S_rpcLib_RPC_CANTSEND error. 01j,07apr11,y_t fix WIND00254003:nfs client not correctly handle jukebox error from server. 01i,29apr10,pad Moved extern C statement after include statements. 01h,19jul07,jlk Fixed defect WIND00099010 01g,07sep06,mwv update include paths 01f,19dec05,pcm added NFS_CACHE structure to NFS_DEV; created new structure NFS_FD that is identical to 1st part of both NFS2_FD & NFS3_FD 01e,07dec05,pcm added NFS cache to NFS3_DEV structure 01d,26may05,mwv SPR#109563 work around for to avoid closing socket FD from incorrect RTP context. 01c,23aug04,rp merged from COMP_WN_IPV6_BASE6_ITER5_TO_UNIFIED_PRE_MERGE 01b,28may04,niq Merging from base6 label POST_ITER5_FRZ16_REBASE (ver /main/vdt/base6_itn5_networking-int/1) 01a,10oct03,snd Written */ #ifndef __INCnfsCommonh #define __INCnfsCommonh #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /* defines */ #ifndef UNUSED_VAL #define UNUSED_VAL (-1U) #endif /* file status types -- from the nfs protocol spec, if these change, then the FSTAT values in ioLib.h should also be changed */ #define NFS_FSTAT_DIR 0040000 /* directory */ #define NFS_FSTAT_CHR 0020000 /* character special file */ #define NFS_FSTAT_BLK 0060000 /* block special file */ #define NFS_FSTAT_REG 0100000 /* regular file */ #define NFS_FSTAT_LNK 0120000 /* symbolic link file */ #define NFS_FSTAT_NON 0140000 /* named socket */ /* nfsLib status codes */ #define S_nfsLib_NFS_AUTH_UNIX_FAILED (M_nfsLib | 1) #define S_nfsLib_NFS_INAPPLICABLE_FILE_TYPE (M_nfsLib | 2) #define S_nfsLib_NFS_OK (M_nfsStat | (int) NFS_OK) #define S_nfsLib_NFSERR_PERM (M_nfsStat | (int) NFSERR_PERM) #define S_nfsLib_NFSERR_NOENT (M_nfsStat | (int) NFSERR_NOENT) #define S_nfsLib_NFSERR_IO (M_nfsStat | (int) NFSERR_IO) #define S_nfsLib_NFSERR_NXIO (M_nfsStat | (int) NFSERR_NXIO) #define S_nfsLib_NFSERR_ACCESS (M_nfsStat | (int) NFSERR_ACCESS) #define S_nfsLib_NFSERR_EXIST (M_nfsStat | (int) NFSERR_EXIST) #define S_nfsLib_NFSERR_NODEV (M_nfsStat | (int) NFSERR_NODEV) #define S_nfsLib_NFSERR_NOTDIR (M_nfsStat | (int) NFSERR_NOTDIR) #define S_nfsLib_NFSERR_ISDIR (M_nfsStat | (int) NFSERR_ISDIR) #define S_nfsLib_NFSERR_INVAL (M_nfsStat | (int) NFSERR_INVAL) #define S_nfsLib_NFSERR_FBIG (M_nfsStat | (int) NFSERR_FBIG) #define S_nfsLib_NFSERR_NOSPC (M_nfsStat | (int) NFSERR_NOSPC) #define S_nfsLib_NFSERR_ROFS (M_nfsStat | (int) NFSERR_ROFS) #define S_nfsLib_NFSERR_NAMETOOLONG (M_nfsStat | (int) NFSERR_NAMETOOLONG) #define S_nfsLib_NFSERR_NOTEMPTY (M_nfsStat | (int) NFSERR_NOTEMPTY) #define S_nfsLib_NFSERR_DQUOT (M_nfsStat | (int) NFSERR_DQUOT) #define S_nfsLib_NFSERR_STALE (M_nfsStat | (int) NFSERR_STALE) #define S_nfsLib_NFSERR_WFLUSH (M_nfsStat | (int) NFSERR_WFLUSH) #define S_nfsLib_NFSERR_REMOTE (M_nfsStat | (int) NFSERR_REMOTE) #define S_nfsLib_NFSERR_BADHANDLE (M_nfsStat | (int) NFSERR_BADHANDLE) #define S_nfsLib_NFSERR_NOT_SYNC (M_nfsStat | (int) NFSERR_NOT_SYNC) #define S_nfsLib_NFSERR_BAD_COOKIE (M_nfsStat | (int) NFSERR_BAD_COOKIE) #define S_nfsLib_NFSERR_NOTSUPP (M_nfsStat | (int) NFSERR_NOTSUPP) #define S_nfsLib_NFSERR_TOOSMALL (M_nfsStat | (int) NFSERR_TOOSMALL) #define S_nfsLib_NFSERR_SERVERFAULT (M_nfsStat | (int) NFSERR_SERVERFAULT) #define S_nfsLib_NFSERR_BADTYPE (M_nfsStat | (int) NFSERR_BADTYPE) #define S_nfsLib_NFSERR_JUKEBOX (M_nfsStat | (int) NFSERR_JUKEBOX) /* default NFS parameters */ #define NFS_TIMEOUT_SEC 25 #define NFS_TIMEOUT_USEC 0 #ifdef _WRS_CONFIG_NFS3_BLKSIZE_FACTOR #define NFS_SOCKOPTVAL (_WRS_CONFIG_NFS3_BLKSIZE_FACTOR * 8800) #else #define NFS_SOCKOPTVAL 8800 #endif #define NFS_REXMIT_SEC 5 #define NFS_REXMIT_USEC 0 #define NFS_RETRY_SEC 2 #define AUTH_UNIX_FIELD_LEN 50 /* UNIX authentication info */ #define MAX_GRPS 20 /* max. # of groups that user is in */ /* The max size for UDP packet payload, 63K = 64512 = 0xFC00 */ #define NFS_CLNT_UDPPKT_MAXSIZE 64512 /* Max number of versions supported for the MOUNT protocol */ #define MAX_MNT_VERSIONS 4 #define MAX_MNT_SUPPORTED_VERSIONS 2 #define WRITE_PERMISSION 2 #define NFS_CACHE_WRITE_THROUGH 0x1 /* typedefs */ typedef struct nfs_fd { void * nfsDev; SEM_ID nfsFdSem; NFS_CACHE * pCache; char curFilename [NAME_MAX + 1]; voff_t offset; unsigned int mode; } NFS_FD; /* Static RPC information. Set on initial NFS invocation and re-used during subsequent calls on a per task basis. */ typedef struct moduleStatics { CLIENT *client; /* pointer to client structure */ int socket; /* socket associated with this client */ int oldprognum; /* last program number used with this client */ int oldversnum; /* last version number used with this client */ int authCount; /* auth count this client was built with */ int valid; /* if TRUE, then this client information is valid */ RTP_ID tempRtpId; /* SPR#109563 */ char oldhost [MAXHOSTNAMELEN + 1]; /* last host name that was used with this client */ } NFS_MODULE_STATICS; typedef struct /* NFS_AUTH_UNIX_TYPE - UNIX authentication structure */ { char machname [AUTH_UNIX_FIELD_LEN + 1]; /* host name where client is */ int uid; /* client's UNIX effective uid */ int gid; /* client's current group ID */ int len; /* element length of aup_gids */ int aup_gids [MAX_GRPS]; /* array of groups user is in */ } NFS_AUTH_UNIX_TYPE ; typedef struct /* NFS_DEV - nfs v2 device structure */ { DEV_HDR devHdr; /* nfs device header */ char host[MAXHOSTNAMELEN + 1]; /* host for this device */ nfs_fh2 fileHandle; /* handle for mounted file system */ NFS_CACHE nfsCache; /* * File system mounted on this dev - though it appears as a single * character, it is really a character array - the memory for the array * is allocated when an NFS_DEV struct is allocated. This change was * required for configurable file path length support. */ char fileSystem[1]; } NFS_DEV; typedef struct /* NFS_DEV - nfs device structure */ { DEV_HDR devHdr; /* nfs device header */ char host[MAXHOSTNAMELEN + 1]; /* host for this device */ nfs_fh3 fileHandle; /* handle for mounted file system */ NFS_CACHE nfsCache; /* * File system mounted on this dev - though it appears as a single * character, it is really a character array - the memory for the array * is allocated when an NFS_DEV struct is allocated. This change was * required for configurable file path length support. */ char fileSystem[1]; } NFS3_DEV; /* function declarations */ extern STATUS nfsExportShow (char *hostName); extern void nfsAuthUnixGet (char *machname, int *pUid, int *pGid, int *pNgids, int *gids); extern void nfsAuthUnixSet (char *machname, int uid, int gid, int ngids, int *aup_gids); extern void nfsAuthUnixPrompt (void); extern void nfsAuthUnixShow (void); extern void nfsHelp (void); extern void nfsIdSet (int uid); extern void nfsClientClose (void); extern STATUS nfsDevInfoGet(unsigned long nfsDevHandle, NFS_DEV_INFO * pnfsinfo); extern int nfsDevListGet (unsigned long nfsDevList[], int listsize); extern STATUS nfsExportFree(char * pExports); extern STATUS nfsInit(void); extern STATUS nfsComponentInit(void); extern STATUS nfsClientCall(const char * host, u_int prognum, u_int versnum, u_int procnum, xdrproc_t inproc, char * in, xdrproc_t outproc, char * out); extern int nfsChkFilePerms (int nfsPerms, int ruid, int rgid, int perm); extern void nfsErrnoSet (enum nfsstat status); #ifdef __cplusplus } #endif #endif /* __INCnfsCommonh */