xref: /csrg-svn/sys/nfs/nfsproto.h (revision 43347)
138414Smckusick /*
238414Smckusick  * Copyright (c) 1989 The Regents of the University of California.
338414Smckusick  * All rights reserved.
438414Smckusick  *
538414Smckusick  * This code is derived from software contributed to Berkeley by
638414Smckusick  * Rick Macklem at The University of Guelph.
738414Smckusick  *
838414Smckusick  * Redistribution and use in source and binary forms are permitted
938414Smckusick  * provided that the above copyright notice and this paragraph are
1038414Smckusick  * duplicated in all such forms and that any documentation,
1138414Smckusick  * advertising materials, and other materials related to such
1238414Smckusick  * distribution and use acknowledge that the software was developed
1338414Smckusick  * by the University of California, Berkeley.  The name of the
1438414Smckusick  * University may not be used to endorse or promote products derived
1538414Smckusick  * from this software without specific prior written permission.
1638414Smckusick  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
1738414Smckusick  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
1838414Smckusick  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
1938414Smckusick  *
20*43347Smckusick  *	@(#)nfsproto.h	7.7 (Berkeley) 06/21/90
2138414Smckusick  */
2238414Smckusick 
2338414Smckusick /*
2438414Smckusick  * nfs definitions as per the version 2 specs
2538414Smckusick  */
2638414Smckusick 
2738414Smckusick /*
2838414Smckusick  * Constants as defined in the Sun NFS Version 2 spec.
2939746Smckusick  * "NFS: Network File System Protocol Specification" RFC1094
3038414Smckusick  */
3138414Smckusick 
3238414Smckusick #define NFS_PORT	2049
3338414Smckusick #define	NFS_PROG	100003
3438414Smckusick #define NFS_VER2	2
35*43347Smckusick #define	NFS_MAXDGRAMDATA 8192
36*43347Smckusick #define	NFS_MAXDATA	32768
3738414Smckusick #define	NFS_MAXPATHLEN	1024
3838414Smckusick #define	NFS_MAXNAMLEN	255
3938414Smckusick #define	NFS_FHSIZE	32
4041896Smckusick #define	NFS_MAXPKTHDR	404
4141896Smckusick #define NFS_MAXPACKET	(NFS_MAXPKTHDR+NFS_MAXDATA)
4238414Smckusick #define	NFS_NPROCS	18
4342240Smckusick #define	NFS_FABLKSIZE	512	/* Size in bytes of a block wrt fa_blocks */
4438414Smckusick 
4538414Smckusick /* Stat numbers for rpc returns */
4638414Smckusick #define	NFS_OK		0
4738414Smckusick #define	NFSERR_PERM	1
4838414Smckusick #define	NFSERR_NOENT	2
4938414Smckusick #define	NFSERR_IO	5
5038414Smckusick #define	NFSERR_NXIO	6
5138414Smckusick #define	NFSERR_ACCES	13
5238414Smckusick #define	NFSERR_EXIST	17
5338414Smckusick #define	NFSERR_NODEV	19
5438414Smckusick #define	NFSERR_NOTDIR	20
5538414Smckusick #define	NFSERR_ISDIR	21
5638414Smckusick #define	NFSERR_FBIG	27
5738414Smckusick #define	NFSERR_NOSPC	28
5838414Smckusick #define	NFSERR_ROFS	30
5938414Smckusick #define	NFSERR_NAMETOOLONG	63
6038414Smckusick #define	NFSERR_NOTEMPTY	66
6138414Smckusick #define	NFSERR_DQUOT	69
6238414Smckusick #define	NFSERR_STALE	70
6338414Smckusick #define	NFSERR_WFLUSH	99
6438414Smckusick 
6538414Smckusick /* Sizes in bytes of various nfs rpc components */
6638414Smckusick #define	NFSX_FH		32
6738414Smckusick #define	NFSX_UNSIGNED	4
6838414Smckusick #define	NFSX_FATTR	68
6938414Smckusick #define	NFSX_SATTR	32
7038414Smckusick #define	NFSX_COOKIE	4
7138414Smckusick #define NFSX_STATFS	20
7238414Smckusick 
7338414Smckusick /* nfs rpc procedure numbers */
7438414Smckusick #define	NFSPROC_NULL		0
7538414Smckusick #define	NFSPROC_GETATTR		1
7638414Smckusick #define	NFSPROC_SETATTR		2
7738414Smckusick #define	NFSPROC_ROOT		3		/* Obsolete */
7838414Smckusick #define	NFSPROC_LOOKUP		4
7938414Smckusick #define	NFSPROC_READLINK	5
8038414Smckusick #define	NFSPROC_READ		6
8138414Smckusick #define	NFSPROC_WRITECACHE	7		/* Obsolete */
8238414Smckusick #define	NFSPROC_WRITE		8
8338414Smckusick #define	NFSPROC_CREATE		9
8438414Smckusick #define	NFSPROC_REMOVE		10
8538414Smckusick #define	NFSPROC_RENAME		11
8638414Smckusick #define	NFSPROC_LINK		12
8738414Smckusick #define	NFSPROC_SYMLINK		13
8838414Smckusick #define	NFSPROC_MKDIR		14
8938414Smckusick #define	NFSPROC_RMDIR		15
9038414Smckusick #define	NFSPROC_READDIR		16
9138414Smckusick #define	NFSPROC_STATFS		17
9238414Smckusick 
9338414Smckusick /* Conversion macros */
9440151Smckusick extern int		vttoif_tab[];
9542240Smckusick #define	vtonfs_mode(t,m) \
9642240Smckusick 		txdr_unsigned(((t) == VFIFO) ? MAKEIMODE(VCHR, (m)) : \
9742240Smckusick 				MAKEIMODE((t), (m)))
9838414Smckusick #define	nfstov_mode(a)	(fxdr_unsigned(u_short, (a))&07777)
9938414Smckusick #define	vtonfs_type(a)	txdr_unsigned(nfs_type[((long)(a))])
10042240Smckusick #define	nfstov_type(a)	ntov_type[fxdr_unsigned(u_long,(a))&0x7]
10138414Smckusick 
10238414Smckusick /* File types */
10338414Smckusick typedef enum { NFNON=0, NFREG=1, NFDIR=2, NFBLK=3, NFCHR=4, NFLNK=5 } nfstype;
10438884Smacklem 
10538884Smacklem /* Structs for common parts of the rpc's */
10638884Smacklem struct nfsv2_time {
10738884Smacklem 	u_long	tv_sec;
10838884Smacklem 	u_long	tv_usec;
10938884Smacklem };
11038884Smacklem 
11138884Smacklem struct nfsv2_fattr {
11238884Smacklem 	u_long	fa_type;
11338884Smacklem 	u_long	fa_mode;
11438884Smacklem 	u_long	fa_nlink;
11538884Smacklem 	u_long	fa_uid;
11638884Smacklem 	u_long	fa_gid;
11738884Smacklem 	u_long	fa_size;
11838884Smacklem 	u_long	fa_blocksize;
11938884Smacklem 	u_long	fa_rdev;
12038884Smacklem 	u_long	fa_blocks;
12138884Smacklem 	u_long	fa_fsid;
12238884Smacklem 	u_long	fa_fileid;
12338884Smacklem 	struct nfsv2_time fa_atime;
12438884Smacklem 	struct nfsv2_time fa_mtime;
12538884Smacklem 	struct nfsv2_time fa_ctime;
12638884Smacklem };
12738884Smacklem 
12838884Smacklem struct nfsv2_sattr {
12938884Smacklem 	u_long	sa_mode;
13038884Smacklem 	u_long	sa_uid;
13138884Smacklem 	u_long	sa_gid;
13238884Smacklem 	u_long	sa_size;
13338884Smacklem 	struct nfsv2_time sa_atime;
13438884Smacklem 	struct nfsv2_time sa_mtime;
13538884Smacklem };
13638884Smacklem 
13738884Smacklem struct nfsv2_statfs {
13838884Smacklem 	u_long	sf_tsize;
13938884Smacklem 	u_long	sf_bsize;
14038884Smacklem 	u_long	sf_blocks;
14138884Smacklem 	u_long	sf_bfree;
14238884Smacklem 	u_long	sf_bavail;
14338884Smacklem };
144