September update from Rick Macklem to add accept protocol to NQMFS
[unix-history] / usr / src / sys / nfs / nfsproto.h
CommitLineData
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 99extern 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 */
108typedef 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 */
111struct nfsv2_time {
41f343df
KM
112 u_long nfs_sec;
113 u_long nfs_usec;
9238aa59
RM
114};
115
41f343df
KM
116struct 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
130struct 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
194struct 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
226struct 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};