source: rtems-libbsd/freebsd/contrib/tcpdump/nfs.h @ 084d4db

4.11
Last change on this file since 084d4db was 8440506, checked in by Chris Johns <chrisj@…>, on 06/15/15 at 07:42:23

Add tcpdump and libpcap.

  • Update the file builder generator to handle generator specific cflags and includes. The tcpdump and libpcap have localised headers and need specific headers paths to see them. There are also module specific flags and these need to be passed to the lex and yacc generators.
  • Add the tcpdump support.
  • Property mode set to 100644
File size: 13.5 KB
Line 
1/* @(#) $Header: /tcpdump/master/tcpdump/nfs.h,v 1.9 2007-11-18 03:24:38 guy Exp $ (LBL) */
2/*      NetBSD: nfs.h,v 1.1 1996/05/23 22:49:53 fvdl Exp        */
3
4/*
5 * Copyright (c) 1989, 1993
6 *      The Regents of the University of California.  All rights reserved.
7 *
8 * This code is derived from software contributed to Berkeley by
9 * Rick Macklem at The University of Guelph.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 *    notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 *    notice, this list of conditions and the following disclaimer in the
18 *    documentation and/or other materials provided with the distribution.
19 * 3. All advertising materials mentioning features or use of this software
20 *    must display the following acknowledgement:
21 *      This product includes software developed by the University of
22 *      California, Berkeley and its contributors.
23 * 4. Neither the name of the University nor the names of its contributors
24 *    may be used to endorse or promote products derived from this software
25 *    without specific prior written permission.
26 *
27 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
28 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
31 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37 * SUCH DAMAGE.
38 *
39 * $FreeBSD$
40 *      @(#)nfsproto.h  8.2 (Berkeley) 3/30/95
41 */
42
43/*
44 * nfs definitions as per the Version 2 and 3 specs
45 */
46
47/*
48 * Constants as defined in the Sun NFS Version 2 and 3 specs.
49 * "NFS: Network File System Protocol Specification" RFC1094
50 * and in the "NFS: Network File System Version 3 Protocol
51 * Specification"
52 */
53
54#define NFS_PORT        2049
55#define NFS_PROG        100003
56#define NFS_VER2        2
57#define NFS_VER3        3
58#define NFS_V2MAXDATA   8192
59#define NFS_MAXDGRAMDATA 16384
60#define NFS_MAXDATA     32768
61#define NFS_MAXPATHLEN  1024
62#define NFS_MAXNAMLEN   255
63#define NFS_MAXPKTHDR   404
64#define NFS_MAXPACKET   (NFS_MAXPKTHDR + NFS_MAXDATA)
65#define NFS_MINPACKET   20
66#define NFS_FABLKSIZE   512     /* Size in bytes of a block wrt fa_blocks */
67
68/* Stat numbers for rpc returns (version 2 and 3) */
69#define NFS_OK                  0
70#define NFSERR_PERM             1
71#define NFSERR_NOENT            2
72#define NFSERR_IO               5
73#define NFSERR_NXIO             6
74#define NFSERR_ACCES            13
75#define NFSERR_EXIST            17
76#define NFSERR_XDEV             18      /* Version 3 only */
77#define NFSERR_NODEV            19
78#define NFSERR_NOTDIR           20
79#define NFSERR_ISDIR            21
80#define NFSERR_INVAL            22      /* Version 3 only */
81#define NFSERR_FBIG             27
82#define NFSERR_NOSPC            28
83#define NFSERR_ROFS             30
84#define NFSERR_MLINK            31      /* Version 3 only */
85#define NFSERR_NAMETOL          63
86#define NFSERR_NOTEMPTY         66
87#define NFSERR_DQUOT            69
88#define NFSERR_STALE            70
89#define NFSERR_REMOTE           71      /* Version 3 only */
90#define NFSERR_WFLUSH           99      /* Version 2 only */
91#define NFSERR_BADHANDLE        10001   /* The rest Version 3 only */
92#define NFSERR_NOT_SYNC         10002
93#define NFSERR_BAD_COOKIE       10003
94#define NFSERR_NOTSUPP          10004
95#define NFSERR_TOOSMALL         10005
96#define NFSERR_SERVERFAULT      10006
97#define NFSERR_BADTYPE          10007
98#define NFSERR_JUKEBOX          10008
99#define NFSERR_TRYLATER         NFSERR_JUKEBOX
100#define NFSERR_STALEWRITEVERF   30001   /* Fake return for nfs_commit() */
101
102#define NFSERR_RETVOID          0x20000000 /* Return void, not error */
103#define NFSERR_AUTHERR          0x40000000 /* Mark an authentication error */
104#define NFSERR_RETERR           0x80000000 /* Mark an error return for V3 */
105
106/* Sizes in bytes of various nfs rpc components */
107#define NFSX_UNSIGNED   4
108
109/* specific to NFS Version 2 */
110#define NFSX_V2FH       32
111#define NFSX_V2FATTR    68
112#define NFSX_V2SATTR    32
113#define NFSX_V2COOKIE   4
114#define NFSX_V2STATFS   20
115
116/* specific to NFS Version 3 */
117#if 0
118#define NFSX_V3FH               (sizeof (fhandle_t)) /* size this server uses */
119#endif
120#define NFSX_V3FHMAX            64      /* max. allowed by protocol */
121#define NFSX_V3FATTR            84
122#define NFSX_V3SATTR            60      /* max. all fields filled in */
123#define NFSX_V3SRVSATTR         (sizeof (struct nfsv3_sattr))
124#define NFSX_V3POSTOPATTR       (NFSX_V3FATTR + NFSX_UNSIGNED)
125#define NFSX_V3WCCDATA          (NFSX_V3POSTOPATTR + 8 * NFSX_UNSIGNED)
126#define NFSX_V3COOKIEVERF       8
127#define NFSX_V3WRITEVERF        8
128#define NFSX_V3CREATEVERF       8
129#define NFSX_V3STATFS           52
130#define NFSX_V3FSINFO           48
131#define NFSX_V3PATHCONF         24
132
133/* variants for both versions */
134#define NFSX_FH(v3)             ((v3) ? (NFSX_V3FHMAX + NFSX_UNSIGNED) : \
135                                        NFSX_V2FH)
136#define NFSX_SRVFH(v3)          ((v3) ? NFSX_V3FH : NFSX_V2FH)
137#define NFSX_FATTR(v3)          ((v3) ? NFSX_V3FATTR : NFSX_V2FATTR)
138#define NFSX_PREOPATTR(v3)      ((v3) ? (7 * NFSX_UNSIGNED) : 0)
139#define NFSX_POSTOPATTR(v3)     ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : 0)
140#define NFSX_POSTOPORFATTR(v3)  ((v3) ? (NFSX_V3FATTR + NFSX_UNSIGNED) : \
141                                        NFSX_V2FATTR)
142#define NFSX_WCCDATA(v3)        ((v3) ? NFSX_V3WCCDATA : 0)
143#define NFSX_WCCORFATTR(v3)     ((v3) ? NFSX_V3WCCDATA : NFSX_V2FATTR)
144#define NFSX_SATTR(v3)          ((v3) ? NFSX_V3SATTR : NFSX_V2SATTR)
145#define NFSX_COOKIEVERF(v3)     ((v3) ? NFSX_V3COOKIEVERF : 0)
146#define NFSX_WRITEVERF(v3)      ((v3) ? NFSX_V3WRITEVERF : 0)
147#define NFSX_READDIR(v3)        ((v3) ? (5 * NFSX_UNSIGNED) : \
148                                        (2 * NFSX_UNSIGNED))
149#define NFSX_STATFS(v3)         ((v3) ? NFSX_V3STATFS : NFSX_V2STATFS)
150
151/* nfs rpc procedure numbers (before version mapping) */
152#define NFSPROC_NULL            0
153#define NFSPROC_GETATTR         1
154#define NFSPROC_SETATTR         2
155#define NFSPROC_LOOKUP          3
156#define NFSPROC_ACCESS          4
157#define NFSPROC_READLINK        5
158#define NFSPROC_READ            6
159#define NFSPROC_WRITE           7
160#define NFSPROC_CREATE          8
161#define NFSPROC_MKDIR           9
162#define NFSPROC_SYMLINK         10
163#define NFSPROC_MKNOD           11
164#define NFSPROC_REMOVE          12
165#define NFSPROC_RMDIR           13
166#define NFSPROC_RENAME          14
167#define NFSPROC_LINK            15
168#define NFSPROC_READDIR         16
169#define NFSPROC_READDIRPLUS     17
170#define NFSPROC_FSSTAT          18
171#define NFSPROC_FSINFO          19
172#define NFSPROC_PATHCONF        20
173#define NFSPROC_COMMIT          21
174
175/* And leasing (nqnfs) procedure numbers (must be last) */
176#define NQNFSPROC_GETLEASE      22
177#define NQNFSPROC_VACATED       23
178#define NQNFSPROC_EVICTED       24
179
180#define NFSPROC_NOOP            25
181#define NFS_NPROCS              26
182
183/* Actual Version 2 procedure numbers */
184#define NFSV2PROC_NULL          0
185#define NFSV2PROC_GETATTR       1
186#define NFSV2PROC_SETATTR       2
187#define NFSV2PROC_NOOP          3
188#define NFSV2PROC_ROOT          NFSV2PROC_NOOP  /* Obsolete */
189#define NFSV2PROC_LOOKUP        4
190#define NFSV2PROC_READLINK      5
191#define NFSV2PROC_READ          6
192#define NFSV2PROC_WRITECACHE    NFSV2PROC_NOOP  /* Obsolete */
193#define NFSV2PROC_WRITE         8
194#define NFSV2PROC_CREATE        9
195#define NFSV2PROC_REMOVE        10
196#define NFSV2PROC_RENAME        11
197#define NFSV2PROC_LINK          12
198#define NFSV2PROC_SYMLINK       13
199#define NFSV2PROC_MKDIR         14
200#define NFSV2PROC_RMDIR         15
201#define NFSV2PROC_READDIR       16
202#define NFSV2PROC_STATFS        17
203
204/*
205 * Constants used by the Version 3 protocol for various RPCs
206 */
207#define NFSV3SATTRTIME_DONTCHANGE       0
208#define NFSV3SATTRTIME_TOSERVER         1
209#define NFSV3SATTRTIME_TOCLIENT         2
210
211#define NFSV3ATTRTIME_NMODES            3
212
213#define NFSV3ACCESS_READ                0x01
214#define NFSV3ACCESS_LOOKUP              0x02
215#define NFSV3ACCESS_MODIFY              0x04
216#define NFSV3ACCESS_EXTEND              0x08
217#define NFSV3ACCESS_DELETE              0x10
218#define NFSV3ACCESS_EXECUTE             0x20
219#define NFSV3ACCESS_FULL                0x3f
220
221#define NFSV3WRITE_UNSTABLE             0
222#define NFSV3WRITE_DATASYNC             1
223#define NFSV3WRITE_FILESYNC             2
224
225#define NFSV3WRITE_NMODES               3
226
227#define NFSV3CREATE_UNCHECKED           0
228#define NFSV3CREATE_GUARDED             1
229#define NFSV3CREATE_EXCLUSIVE           2
230
231#define NFSV3CREATE_NMODES              3
232
233#define NFSV3FSINFO_LINK                0x01
234#define NFSV3FSINFO_SYMLINK             0x02
235#define NFSV3FSINFO_HOMOGENEOUS         0x08
236#define NFSV3FSINFO_CANSETTIME          0x10
237
238/* Conversion macros */
239#define vtonfsv2_mode(t,m) \
240                txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \
241                                MAKEIMODE((t), (m)))
242#define vtonfsv3_mode(m)        txdr_unsigned((m) & 07777)
243#define nfstov_mode(a)          (fxdr_unsigned(u_int16_t, (a))&07777)
244#define vtonfsv2_type(a)        txdr_unsigned(nfsv2_type[((int32_t)(a))])
245#define vtonfsv3_type(a)        txdr_unsigned(nfsv3_type[((int32_t)(a))])
246#define nfsv2tov_type(a)        nv2tov_type[fxdr_unsigned(u_int32_t,(a))&0x7]
247#define nfsv3tov_type(a)        nv3tov_type[fxdr_unsigned(u_int32_t,(a))&0x7]
248
249/* File types */
250typedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5,
251        NFSOCK=6, NFFIFO=7 } nfs_type;
252
253/* Structs for common parts of the rpc's */
254/*
255 * File Handle (32 bytes for version 2), variable up to 64 for version 3.
256 * File Handles of up to NFS_SMALLFH in size are stored directly in the
257 * nfs node, whereas larger ones are malloc'd. (This never happens when
258 * NFS_SMALLFH is set to 64.)
259 * NFS_SMALLFH should be in the range of 32 to 64 and be divisible by 4.
260 */
261#ifndef NFS_SMALLFH
262#define NFS_SMALLFH     64
263#endif
264union nfsfh {
265/*      fhandle_t fh_generic; */
266        u_char    fh_bytes[NFS_SMALLFH];
267};
268typedef union nfsfh nfsfh_t;
269
270struct nfsv2_time {
271        u_int32_t nfsv2_sec;
272        u_int32_t nfsv2_usec;
273};
274typedef struct nfsv2_time       nfstime2;
275
276struct nfsv3_time {
277        u_int32_t nfsv3_sec;
278        u_int32_t nfsv3_nsec;
279};
280typedef struct nfsv3_time       nfstime3;
281
282/*
283 * Quads are defined as arrays of 2 longs to ensure dense packing for the
284 * protocol and to facilitate xdr conversion.
285 */
286struct nfs_uquad {
287        u_int32_t nfsuquad[2];
288};
289typedef struct nfs_uquad        nfsuint64;
290
291/*
292 * NFS Version 3 special file number.
293 */
294struct nfsv3_spec {
295        u_int32_t specdata1;
296        u_int32_t specdata2;
297};
298typedef struct nfsv3_spec       nfsv3spec;
299
300/*
301 * File attributes and setable attributes. These structures cover both
302 * NFS version 2 and the version 3 protocol. Note that the union is only
303 * used so that one pointer can refer to both variants. These structures
304 * go out on the wire and must be densely packed, so no quad data types
305 * are used. (all fields are longs or u_longs or structures of same)
306 * NB: You can't do sizeof(struct nfs_fattr), you must use the
307 *     NFSX_FATTR(v3) macro.
308 */
309struct nfs_fattr {
310        u_int32_t fa_type;
311        u_int32_t fa_mode;
312        u_int32_t fa_nlink;
313        u_int32_t fa_uid;
314        u_int32_t fa_gid;
315        union {
316                struct {
317                        u_int32_t nfsv2fa_size;
318                        u_int32_t nfsv2fa_blocksize;
319                        u_int32_t nfsv2fa_rdev;
320                        u_int32_t nfsv2fa_blocks;
321                        u_int32_t nfsv2fa_fsid;
322                        u_int32_t nfsv2fa_fileid;
323                        nfstime2  nfsv2fa_atime;
324                        nfstime2  nfsv2fa_mtime;
325                        nfstime2  nfsv2fa_ctime;
326                } fa_nfsv2;
327                struct {
328                        nfsuint64 nfsv3fa_size;
329                        nfsuint64 nfsv3fa_used;
330                        nfsv3spec nfsv3fa_rdev;
331                        nfsuint64 nfsv3fa_fsid;
332                        nfsuint64 nfsv3fa_fileid;
333                        nfstime3  nfsv3fa_atime;
334                        nfstime3  nfsv3fa_mtime;
335                        nfstime3  nfsv3fa_ctime;
336                } fa_nfsv3;
337        } fa_un;
338};
339
340/* and some ugly defines for accessing union components */
341#define fa2_size                fa_un.fa_nfsv2.nfsv2fa_size
342#define fa2_blocksize           fa_un.fa_nfsv2.nfsv2fa_blocksize
343#define fa2_rdev                fa_un.fa_nfsv2.nfsv2fa_rdev
344#define fa2_blocks              fa_un.fa_nfsv2.nfsv2fa_blocks
345#define fa2_fsid                fa_un.fa_nfsv2.nfsv2fa_fsid
346#define fa2_fileid              fa_un.fa_nfsv2.nfsv2fa_fileid
347#define fa2_atime               fa_un.fa_nfsv2.nfsv2fa_atime
348#define fa2_mtime               fa_un.fa_nfsv2.nfsv2fa_mtime
349#define fa2_ctime               fa_un.fa_nfsv2.nfsv2fa_ctime
350#define fa3_size                fa_un.fa_nfsv3.nfsv3fa_size
351#define fa3_used                fa_un.fa_nfsv3.nfsv3fa_used
352#define fa3_rdev                fa_un.fa_nfsv3.nfsv3fa_rdev
353#define fa3_fsid                fa_un.fa_nfsv3.nfsv3fa_fsid
354#define fa3_fileid              fa_un.fa_nfsv3.nfsv3fa_fileid
355#define fa3_atime               fa_un.fa_nfsv3.nfsv3fa_atime
356#define fa3_mtime               fa_un.fa_nfsv3.nfsv3fa_mtime
357#define fa3_ctime               fa_un.fa_nfsv3.nfsv3fa_ctime
358
359struct nfsv2_sattr {
360        u_int32_t sa_mode;
361        u_int32_t sa_uid;
362        u_int32_t sa_gid;
363        u_int32_t sa_size;
364        nfstime2  sa_atime;
365        nfstime2  sa_mtime;
366};
367
368/*
369 * NFS Version 3 sattr structure for the new node creation case.
370 */
371struct nfsv3_sattr {
372        u_int32_t   sa_modeset;
373        u_int32_t   sa_mode;
374        u_int32_t   sa_uidset;
375        u_int32_t   sa_uid;
376        u_int32_t   sa_gidset;
377        u_int32_t   sa_gid;
378        u_int32_t   sa_sizeset;
379        u_int32_t   sa_size;
380        u_int32_t   sa_atimetype;
381        nfstime3  sa_atime;
382        u_int32_t   sa_mtimetype;
383        nfstime3  sa_mtime;
384};
385
386struct nfs_statfs {
387        union {
388                struct {
389                        u_int32_t nfsv2sf_tsize;
390                        u_int32_t nfsv2sf_bsize;
391                        u_int32_t nfsv2sf_blocks;
392                        u_int32_t nfsv2sf_bfree;
393                        u_int32_t nfsv2sf_bavail;
394                } sf_nfsv2;
395                struct {
396                        nfsuint64 nfsv3sf_tbytes;
397                        nfsuint64 nfsv3sf_fbytes;
398                        nfsuint64 nfsv3sf_abytes;
399                        nfsuint64 nfsv3sf_tfiles;
400                        nfsuint64 nfsv3sf_ffiles;
401                        nfsuint64 nfsv3sf_afiles;
402                        u_int32_t nfsv3sf_invarsec;
403                } sf_nfsv3;
404        } sf_un;
405};
406
407#define sf_tsize        sf_un.sf_nfsv2.nfsv2sf_tsize
408#define sf_bsize        sf_un.sf_nfsv2.nfsv2sf_bsize
409#define sf_blocks       sf_un.sf_nfsv2.nfsv2sf_blocks
410#define sf_bfree        sf_un.sf_nfsv2.nfsv2sf_bfree
411#define sf_bavail       sf_un.sf_nfsv2.nfsv2sf_bavail
412#define sf_tbytes       sf_un.sf_nfsv3.nfsv3sf_tbytes
413#define sf_fbytes       sf_un.sf_nfsv3.nfsv3sf_fbytes
414#define sf_abytes       sf_un.sf_nfsv3.nfsv3sf_abytes
415#define sf_tfiles       sf_un.sf_nfsv3.nfsv3sf_tfiles
416#define sf_ffiles       sf_un.sf_nfsv3.nfsv3sf_ffiles
417#define sf_afiles       sf_un.sf_nfsv3.nfsv3sf_afiles
418#define sf_invarsec     sf_un.sf_nfsv3.nfsv3sf_invarsec
419
420struct nfsv3_fsinfo {
421        u_int32_t fs_rtmax;
422        u_int32_t fs_rtpref;
423        u_int32_t fs_rtmult;
424        u_int32_t fs_wtmax;
425        u_int32_t fs_wtpref;
426        u_int32_t fs_wtmult;
427        u_int32_t fs_dtpref;
428        nfsuint64 fs_maxfilesize;
429        nfstime3  fs_timedelta;
430        u_int32_t fs_properties;
431};
432
433struct nfsv3_pathconf {
434        u_int32_t pc_linkmax;
435        u_int32_t pc_namemax;
436        u_int32_t pc_notrunc;
437        u_int32_t pc_chownrestricted;
438        u_int32_t pc_caseinsensitive;
439        u_int32_t pc_casepreserving;
440};
Note: See TracBrowser for help on using the repository browser.