xref: /titanic_52/usr/src/grub/grub-0.97/netboot/nfs.h (revision 1b8adde7ba7d5e04395c141c5400dc2cffd7d809)
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