183d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */ 2cbd8a35cSwdenk /* 3cbd8a35cSwdenk * (C) Masami Komiya <mkomiya@sonare.it> 2004 4cbd8a35cSwdenk */ 5cbd8a35cSwdenk 6cbd8a35cSwdenk #ifndef __NFS_H__ 7cbd8a35cSwdenk #define __NFS_H__ 8cbd8a35cSwdenk 9cbd8a35cSwdenk #define SUNRPC_PORT 111 10cbd8a35cSwdenk 11cbd8a35cSwdenk #define PROG_PORTMAP 100000 12cbd8a35cSwdenk #define PROG_NFS 100003 13cbd8a35cSwdenk #define PROG_MOUNT 100005 14cbd8a35cSwdenk 15cbd8a35cSwdenk #define MSG_CALL 0 16cbd8a35cSwdenk #define MSG_REPLY 1 17cbd8a35cSwdenk 18cbd8a35cSwdenk #define PORTMAP_GETPORT 3 19cbd8a35cSwdenk 20cbd8a35cSwdenk #define MOUNT_ADDENTRY 1 21cbd8a35cSwdenk #define MOUNT_UMOUNTALL 4 22cbd8a35cSwdenk 23cbd8a35cSwdenk #define NFS_LOOKUP 4 24cbd8a35cSwdenk #define NFS_READLINK 5 25cbd8a35cSwdenk #define NFS_READ 6 26cbd8a35cSwdenk 27b0baca98SGuillaume GARDET #define NFS3PROC_LOOKUP 3 28b0baca98SGuillaume GARDET 29cbd8a35cSwdenk #define NFS_FHSIZE 32 30b0baca98SGuillaume GARDET #define NFS3_FHSIZE 64 31cbd8a35cSwdenk 32cbd8a35cSwdenk #define NFSERR_PERM 1 33cbd8a35cSwdenk #define NFSERR_NOENT 2 34cbd8a35cSwdenk #define NFSERR_ACCES 13 35cbd8a35cSwdenk #define NFSERR_ISDIR 21 36cbd8a35cSwdenk #define NFSERR_INVAL 22 37cbd8a35cSwdenk 380b1e5806STom Rini /* 390b1e5806STom Rini * Block size used for NFS read accesses. A RPC reply packet (including all 40cbd8a35cSwdenk * headers) must fit within a single Ethernet frame to avoid fragmentation. 410b1e5806STom Rini * However, if CONFIG_IP_DEFRAG is set, a bigger value could be used. In any 420b1e5806STom Rini * case, most NFS servers are optimized for a power of 2. 43bd931ca6SAlessandro Rubini */ 44bd931ca6SAlessandro Rubini #define NFS_READ_SIZE 1024 /* biggest power of two that fits Ether frame */ 45*2d114b83SJoe Hershberger #define NFS_MAX_ATTRS 26 46cbd8a35cSwdenk 47b0baca98SGuillaume GARDET /* Values for Accept State flag on RPC answers (See: rfc1831) */ 48b0baca98SGuillaume GARDET enum rpc_accept_stat { 49b0baca98SGuillaume GARDET NFS_RPC_SUCCESS = 0, /* RPC executed successfully */ 50b0baca98SGuillaume GARDET NFS_RPC_PROG_UNAVAIL = 1, /* remote hasn't exported program */ 51b0baca98SGuillaume GARDET NFS_RPC_PROG_MISMATCH = 2, /* remote can't support version # */ 52b0baca98SGuillaume GARDET NFS_RPC_PROC_UNAVAIL = 3, /* program can't support procedure */ 53b0baca98SGuillaume GARDET NFS_RPC_GARBAGE_ARGS = 4, /* procedure can't decode params */ 54b0baca98SGuillaume GARDET NFS_RPC_SYSTEM_ERR = 5 /* errors like memory allocation failure */ 55b0baca98SGuillaume GARDET }; 56b0baca98SGuillaume GARDET 57cbd8a35cSwdenk struct rpc_t { 58cbd8a35cSwdenk union { 59*2d114b83SJoe Hershberger uint8_t data[NFS_READ_SIZE + (6 + NFS_MAX_ATTRS) * 60*2d114b83SJoe Hershberger sizeof(uint32_t)]; 61cbd8a35cSwdenk struct { 62cbd8a35cSwdenk uint32_t id; 63cbd8a35cSwdenk uint32_t type; 64cbd8a35cSwdenk uint32_t rpcvers; 65cbd8a35cSwdenk uint32_t prog; 66cbd8a35cSwdenk uint32_t vers; 67cbd8a35cSwdenk uint32_t proc; 68cbd8a35cSwdenk uint32_t data[1]; 69cbd8a35cSwdenk } call; 70cbd8a35cSwdenk struct { 71cbd8a35cSwdenk uint32_t id; 72cbd8a35cSwdenk uint32_t type; 73cbd8a35cSwdenk uint32_t rstatus; 74cbd8a35cSwdenk uint32_t verifier; 75cbd8a35cSwdenk uint32_t v2; 76cbd8a35cSwdenk uint32_t astatus; 77*2d114b83SJoe Hershberger uint32_t data[NFS_READ_SIZE / sizeof(uint32_t) + 78*2d114b83SJoe Hershberger NFS_MAX_ATTRS]; 79cbd8a35cSwdenk } reply; 80cbd8a35cSwdenk } u; 81704f3acfSDenis Pynkin } __attribute__((packed)); 8268c76a3aSJoe Hershberger void nfs_start(void); /* Begin NFS */ 83cbd8a35cSwdenk 84cbd8a35cSwdenk 85cbd8a35cSwdenk /**********************************************************************/ 86cbd8a35cSwdenk 87cbd8a35cSwdenk #endif /* __NFS_H__ */ 88