Commit | Line | Data |
---|---|---|
a2907882 KM |
1 | /* |
2 | * Copyright (c) 1989 The Regents of the University of California. | |
3 | * All rights reserved. | |
4 | * | |
5 | * This code is derived from software contributed to Berkeley by | |
6 | * Rick Macklem at The University of Guelph. | |
7 | * | |
dbf0c423 | 8 | * %sccs.include.redist.c% |
a2907882 | 9 | * |
b330a7ec | 10 | * @(#)nfsproto.h 7.11 (Berkeley) %G% |
a2907882 KM |
11 | */ |
12 | ||
13 | /* | |
14 | * nfs definitions as per the version 2 specs | |
15 | */ | |
16 | ||
17 | /* | |
18 | * Constants as defined in the Sun NFS Version 2 spec. | |
66435314 | 19 | * "NFS: Network File System Protocol Specification" RFC1094 |
a2907882 KM |
20 | */ |
21 | ||
22 | #define NFS_PORT 2049 | |
23 | #define NFS_PROG 100003 | |
24 | #define NFS_VER2 2 | |
170bfd05 KM |
25 | #define NFS_MAXDGRAMDATA 8192 |
26 | #define NFS_MAXDATA 32768 | |
a2907882 KM |
27 | #define NFS_MAXPATHLEN 1024 |
28 | #define NFS_MAXNAMLEN 255 | |
29 | #define NFS_FHSIZE 32 | |
f0f1cbaa KM |
30 | #define NFS_MAXPKTHDR 404 |
31 | #define NFS_MAXPACKET (NFS_MAXPKTHDR+NFS_MAXDATA) | |
2c5b44a2 | 32 | #define NFS_MINPACKET 20 |
d4e5799e | 33 | #define NFS_FABLKSIZE 512 /* Size in bytes of a block wrt fa_blocks */ |
a2907882 KM |
34 | |
35 | /* Stat numbers for rpc returns */ | |
36 | #define NFS_OK 0 | |
37 | #define NFSERR_PERM 1 | |
38 | #define NFSERR_NOENT 2 | |
39 | #define NFSERR_IO 5 | |
40 | #define NFSERR_NXIO 6 | |
41 | #define NFSERR_ACCES 13 | |
42 | #define NFSERR_EXIST 17 | |
43 | #define NFSERR_NODEV 19 | |
44 | #define NFSERR_NOTDIR 20 | |
45 | #define NFSERR_ISDIR 21 | |
46 | #define NFSERR_FBIG 27 | |
47 | #define NFSERR_NOSPC 28 | |
48 | #define NFSERR_ROFS 30 | |
2c5b44a2 | 49 | #define NFSERR_NAMETOL 63 |
a2907882 KM |
50 | #define NFSERR_NOTEMPTY 66 |
51 | #define NFSERR_DQUOT 69 | |
52 | #define NFSERR_STALE 70 | |
53 | #define NFSERR_WFLUSH 99 | |
54 | ||
55 | /* Sizes in bytes of various nfs rpc components */ | |
56 | #define NFSX_FH 32 | |
57 | #define NFSX_UNSIGNED 4 | |
41f343df KM |
58 | #define NFSX_NFSFATTR 68 |
59 | #define NFSX_NQFATTR 92 | |
60 | #define NFSX_NFSSATTR 32 | |
61 | #define NFSX_NQSATTR 44 | |
a2907882 | 62 | #define NFSX_COOKIE 4 |
41f343df KM |
63 | #define NFSX_NFSSTATFS 20 |
64 | #define NFSX_NQSTATFS 28 | |
65 | #define NFSX_FATTR(isnq) ((isnq) ? NFSX_NQFATTR : NFSX_NFSFATTR) | |
66 | #define NFSX_SATTR(isnq) ((isnq) ? NFSX_NQSATTR : NFSX_NFSSATTR) | |
67 | #define NFSX_STATFS(isnq) ((isnq) ? NFSX_NQSTATFS : NFSX_NFSSTATFS) | |
a2907882 KM |
68 | |
69 | /* nfs rpc procedure numbers */ | |
70 | #define NFSPROC_NULL 0 | |
71 | #define NFSPROC_GETATTR 1 | |
72 | #define NFSPROC_SETATTR 2 | |
2c5b44a2 KM |
73 | #define NFSPROC_NOOP 3 |
74 | #define NFSPROC_ROOT NFSPROC_NOOP /* Obsolete */ | |
a2907882 KM |
75 | #define NFSPROC_LOOKUP 4 |
76 | #define NFSPROC_READLINK 5 | |
77 | #define NFSPROC_READ 6 | |
2c5b44a2 | 78 | #define NFSPROC_WRITECACHE NFSPROC_NOOP /* Obsolete */ |
a2907882 KM |
79 | #define NFSPROC_WRITE 8 |
80 | #define NFSPROC_CREATE 9 | |
81 | #define NFSPROC_REMOVE 10 | |
82 | #define NFSPROC_RENAME 11 | |
83 | #define NFSPROC_LINK 12 | |
84 | #define NFSPROC_SYMLINK 13 | |
85 | #define NFSPROC_MKDIR 14 | |
86 | #define NFSPROC_RMDIR 15 | |
87 | #define NFSPROC_READDIR 16 | |
88 | #define NFSPROC_STATFS 17 | |
89 | ||
2c5b44a2 KM |
90 | /* NQ nfs numbers */ |
91 | #define NQNFSPROC_READDIRLOOK 18 | |
92 | #define NQNFSPROC_GETLEASE 19 | |
93 | #define NQNFSPROC_VACATED 20 | |
94 | #define NQNFSPROC_EVICTED 21 | |
b330a7ec | 95 | #define NQNFSPROC_ACCESS 22 |
2c5b44a2 | 96 | |
b330a7ec | 97 | #define NFS_NPROCS 23 |
a2907882 | 98 | /* Conversion macros */ |
c083d08d | 99 | extern int vttoif_tab[]; |
d4e5799e KM |
100 | #define vtonfs_mode(t,m) \ |
101 | txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \ | |
102 | MAKEIMODE((t), (m))) | |
a2907882 KM |
103 | #define nfstov_mode(a) (fxdr_unsigned(u_short, (a))&07777) |
104 | #define vtonfs_type(a) txdr_unsigned(nfs_type[((long)(a))]) | |
d4e5799e | 105 | #define nfstov_type(a) ntov_type[fxdr_unsigned(u_long,(a))&0x7] |
a2907882 KM |
106 | |
107 | /* File types */ | |
108 | typedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5 } nfstype; | |
9238aa59 RM |
109 | |
110 | /* Structs for common parts of the rpc's */ | |
111 | struct nfsv2_time { | |
41f343df KM |
112 | u_long nfs_sec; |
113 | u_long nfs_usec; | |
9238aa59 RM |
114 | }; |
115 | ||
41f343df KM |
116 | struct nqnfs_time { |
117 | u_long nq_sec; | |
118 | u_long nq_nsec; | |
119 | }; | |
120 | ||
121 | /* | |
122 | * File attributes and setable attributes. These structures cover both | |
123 | * NFS version 2 and the NQNFS protocol. Note that the union is only | |
124 | * used to that one pointer can refer to both variants. These structures | |
125 | * go out on the wire and must be densely packed, so no quad data types | |
126 | * are used. (all fields are longs or u_longs or structures of same) | |
127 | * NB: You can't do sizeof(struct nfsv2_fattr), you must use the | |
128 | * NFSX_FATTR(isnq) macro. | |
129 | */ | |
9238aa59 RM |
130 | struct nfsv2_fattr { |
131 | u_long fa_type; | |
132 | u_long fa_mode; | |
133 | u_long fa_nlink; | |
134 | u_long fa_uid; | |
135 | u_long fa_gid; | |
41f343df KM |
136 | union { |
137 | struct { | |
138 | u_long nfsfa_size; | |
139 | u_long nfsfa_blocksize; | |
140 | u_long nfsfa_rdev; | |
141 | u_long nfsfa_blocks; | |
142 | u_long nfsfa_fsid; | |
143 | u_long nfsfa_fileid; | |
144 | struct nfsv2_time nfsfa_atime; | |
145 | struct nfsv2_time nfsfa_mtime; | |
146 | struct nfsv2_time nfsfa_ctime; | |
147 | } fa_nfsv2; | |
148 | struct { | |
149 | struct { | |
150 | u_long nqfa_qsize[2]; | |
151 | } nqfa_size; | |
152 | u_long nqfa_blocksize; | |
153 | u_long nqfa_rdev; | |
154 | struct { | |
155 | u_long nqfa_qbytes[2]; | |
156 | } nqfa_bytes; | |
157 | u_long nqfa_fsid; | |
158 | u_long nqfa_fileid; | |
159 | struct nqnfs_time nqfa_atime; | |
160 | struct nqnfs_time nqfa_mtime; | |
161 | struct nqnfs_time nqfa_ctime; | |
162 | u_long nqfa_flags; | |
163 | u_long nqfa_gen; | |
164 | struct { | |
165 | u_long nqfa_qfilerev[2]; | |
166 | } nqfa_filerev; | |
167 | } fa_nqnfs; | |
168 | } fa_un; | |
9238aa59 RM |
169 | }; |
170 | ||
41f343df KM |
171 | /* and some ugly defines for accessing union components */ |
172 | #define fa_nfssize fa_un.fa_nfsv2.nfsfa_size | |
173 | #define fa_nfsblocksize fa_un.fa_nfsv2.nfsfa_blocksize | |
174 | #define fa_nfsrdev fa_un.fa_nfsv2.nfsfa_rdev | |
175 | #define fa_nfsblocks fa_un.fa_nfsv2.nfsfa_blocks | |
176 | #define fa_nfsfsid fa_un.fa_nfsv2.nfsfa_fsid | |
177 | #define fa_nfsfileid fa_un.fa_nfsv2.nfsfa_fileid | |
178 | #define fa_nfsatime fa_un.fa_nfsv2.nfsfa_atime | |
179 | #define fa_nfsmtime fa_un.fa_nfsv2.nfsfa_mtime | |
180 | #define fa_nfsctime fa_un.fa_nfsv2.nfsfa_ctime | |
181 | #define fa_nqsize fa_un.fa_nqnfs.nqfa_size | |
182 | #define fa_nqblocksize fa_un.fa_nqnfs.nqfa_blocksize | |
183 | #define fa_nqrdev fa_un.fa_nqnfs.nqfa_rdev | |
184 | #define fa_nqbytes fa_un.fa_nqnfs.nqfa_bytes | |
185 | #define fa_nqfsid fa_un.fa_nqnfs.nqfa_fsid | |
186 | #define fa_nqfileid fa_un.fa_nqnfs.nqfa_fileid | |
187 | #define fa_nqatime fa_un.fa_nqnfs.nqfa_atime | |
188 | #define fa_nqmtime fa_un.fa_nqnfs.nqfa_mtime | |
189 | #define fa_nqctime fa_un.fa_nqnfs.nqfa_ctime | |
190 | #define fa_nqflags fa_un.fa_nqnfs.nqfa_flags | |
191 | #define fa_nqgen fa_un.fa_nqnfs.nqfa_gen | |
192 | #define fa_nqfilerev fa_un.fa_nqnfs.nqfa_filerev | |
193 | ||
9238aa59 RM |
194 | struct nfsv2_sattr { |
195 | u_long sa_mode; | |
196 | u_long sa_uid; | |
197 | u_long sa_gid; | |
41f343df KM |
198 | union { |
199 | struct { | |
200 | u_long nfssa_size; | |
201 | struct nfsv2_time nfssa_atime; | |
202 | struct nfsv2_time nfssa_mtime; | |
203 | } sa_nfsv2; | |
204 | struct { | |
205 | struct { | |
206 | u_long nqsa_qsize[2]; | |
207 | } nqsa_size; | |
208 | struct nqnfs_time nqsa_atime; | |
209 | struct nqnfs_time nqsa_mtime; | |
210 | u_long nqsa_flags; | |
211 | u_long nqsa_rdev; | |
212 | } sa_nqnfs; | |
213 | } sa_un; | |
9238aa59 RM |
214 | }; |
215 | ||
41f343df KM |
216 | /* and some ugly defines for accessing the unions */ |
217 | #define sa_nfssize sa_un.sa_nfsv2.nfssa_size | |
218 | #define sa_nfsatime sa_un.sa_nfsv2.nfssa_atime | |
219 | #define sa_nfsmtime sa_un.sa_nfsv2.nfssa_mtime | |
220 | #define sa_nqsize sa_un.sa_nqnfs.nqsa_size | |
221 | #define sa_nqatime sa_un.sa_nqnfs.nqsa_atime | |
222 | #define sa_nqmtime sa_un.sa_nqnfs.nqsa_mtime | |
223 | #define sa_nqflags sa_un.sa_nqnfs.nqsa_flags | |
224 | #define sa_nqrdev sa_un.sa_nqnfs.nqsa_rdev | |
225 | ||
9238aa59 RM |
226 | struct nfsv2_statfs { |
227 | u_long sf_tsize; | |
228 | u_long sf_bsize; | |
229 | u_long sf_blocks; | |
230 | u_long sf_bfree; | |
231 | u_long sf_bavail; | |
41f343df KM |
232 | u_long sf_files; /* Nqnfs only */ |
233 | u_long sf_ffree; /* ditto */ | |
9238aa59 | 234 | }; |