1*1b8adde7SWilliam Kucharski #ifndef _NFS_H 2*1b8adde7SWilliam Kucharski #define _NFS_H 3*1b8adde7SWilliam Kucharski 4*1b8adde7SWilliam Kucharski #define SUNRPC_PORT 111 5*1b8adde7SWilliam Kucharski 6*1b8adde7SWilliam Kucharski #define PROG_PORTMAP 100000 7*1b8adde7SWilliam Kucharski #define PROG_NFS 100003 8*1b8adde7SWilliam Kucharski #define PROG_MOUNT 100005 9*1b8adde7SWilliam Kucharski 10*1b8adde7SWilliam Kucharski #define MSG_CALL 0 11*1b8adde7SWilliam Kucharski #define MSG_REPLY 1 12*1b8adde7SWilliam Kucharski 13*1b8adde7SWilliam Kucharski #define PORTMAP_GETPORT 3 14*1b8adde7SWilliam Kucharski 15*1b8adde7SWilliam Kucharski #define MOUNT_ADDENTRY 1 16*1b8adde7SWilliam Kucharski #define MOUNT_UMOUNTALL 4 17*1b8adde7SWilliam Kucharski 18*1b8adde7SWilliam Kucharski #define NFS_LOOKUP 4 19*1b8adde7SWilliam Kucharski #define NFS_READLINK 5 20*1b8adde7SWilliam Kucharski #define NFS_READ 6 21*1b8adde7SWilliam Kucharski 22*1b8adde7SWilliam Kucharski #define NFS_FHSIZE 32 23*1b8adde7SWilliam Kucharski 24*1b8adde7SWilliam Kucharski #define NFSERR_PERM 1 25*1b8adde7SWilliam Kucharski #define NFSERR_NOENT 2 26*1b8adde7SWilliam Kucharski #define NFSERR_ACCES 13 27*1b8adde7SWilliam Kucharski #define NFSERR_ISDIR 21 28*1b8adde7SWilliam Kucharski #define NFSERR_INVAL 22 29*1b8adde7SWilliam Kucharski 30*1b8adde7SWilliam Kucharski /* Block size used for NFS read accesses. A RPC reply packet (including all 31*1b8adde7SWilliam Kucharski * headers) must fit within a single Ethernet frame to avoid fragmentation. 32*1b8adde7SWilliam Kucharski * Chosen to be a power of two, as most NFS servers are optimized for this. */ 33*1b8adde7SWilliam Kucharski #define NFS_READ_SIZE 1024 34*1b8adde7SWilliam Kucharski 35*1b8adde7SWilliam Kucharski #define NFS_MAXLINKDEPTH 16 36*1b8adde7SWilliam Kucharski 37*1b8adde7SWilliam Kucharski struct rpc_t { 38*1b8adde7SWilliam Kucharski struct iphdr ip; 39*1b8adde7SWilliam Kucharski struct udphdr udp; 40*1b8adde7SWilliam Kucharski union { 41*1b8adde7SWilliam Kucharski uint8_t data[300]; /* longest RPC call must fit!!!! */ 42*1b8adde7SWilliam Kucharski struct { 43*1b8adde7SWilliam Kucharski uint32_t id; 44*1b8adde7SWilliam Kucharski uint32_t type; 45*1b8adde7SWilliam Kucharski uint32_t rpcvers; 46*1b8adde7SWilliam Kucharski uint32_t prog; 47*1b8adde7SWilliam Kucharski uint32_t vers; 48*1b8adde7SWilliam Kucharski uint32_t proc; 49*1b8adde7SWilliam Kucharski uint32_t data[1]; 50*1b8adde7SWilliam Kucharski } call; 51*1b8adde7SWilliam Kucharski struct { 52*1b8adde7SWilliam Kucharski uint32_t id; 53*1b8adde7SWilliam Kucharski uint32_t type; 54*1b8adde7SWilliam Kucharski uint32_t rstatus; 55*1b8adde7SWilliam Kucharski uint32_t verifier; 56*1b8adde7SWilliam Kucharski uint32_t v2; 57*1b8adde7SWilliam Kucharski uint32_t astatus; 58*1b8adde7SWilliam Kucharski uint32_t data[1]; 59*1b8adde7SWilliam Kucharski } reply; 60*1b8adde7SWilliam Kucharski } u; 61*1b8adde7SWilliam Kucharski }; 62*1b8adde7SWilliam Kucharski 63*1b8adde7SWilliam Kucharski #endif /* _NFS_H */ 64