xref: /original-bsd/sys/sys/efs.h (revision 6fcea464)
1 /*	efs.h	4.3	82/08/01	*/
2 
3 /*
4  *	Extended File System
5  *
6  * Protocol:
7  *
8  *	send:	EFS_ACCESS	<name> <mode> <ruid> <rgid>
9  *	reply:	EFS_OK
10  *	reply:	EFS_ERROR	<errno>
11  *
12  *	send:	EFS_CHMOD	<name> <mode> <uid> <gid>
13  *	reply:	EFS_OK
14  *	reply:	EFS_ERROR	<errno>
15  *
16  *	send:	EFS_CHOWN	<name> <owner> <group> <uid> <gid>
17  *	reply:	EFS_OK
18  *	reply:	EFS_ERROR	<errno>
19  *
20  *	send:	EFS_CLOSE
21  *	reply:	EFS_OK
22  *	reply:	EFS_ERROR	<errno>
23  *
24  *	send:	EFS_CREAT	<name> <mode> <umask> <uid> <gid>
25  *	reply:	EFS_OK
26  *	reply:	EFS_ERROR	<errno>
27  *
28  *	send:	EFS_FSTAT
29  *	reply:	EFS_OK		<data>...
30  *	reply:	EFS_ERROR	<errno>
31  *
32  *	send:	EFS_IOCTL
33  *	reply:	EFS_OK		<data>...
34  *	reply:	EFS_ERROR	<errno>
35  *
36  *	send:	EFS_LINK	<name1> <name2> <uid> <gid>
37  *	reply:	EFS_OK
38  *	reply:	EFS_ERROR	<errno>
39  *
40  *	send:	EFS_LSTAT	<name> <uid> <gid>
41  *	reply:	EFS_OK		<data>...
42  *	reply:	EFS_ERROR	<errno>
43  *
44  *	send:	EFS_OPEN	<name> <mode> <uid> <gid>
45  *	reply:	EFS_OK		<size>
46  *	reply:	EFS_ERROR	<errno>
47  *
48  *	send:	EFS_READ	<offset> <count>
49  *	reply:	EFS_OK		<data>...
50  *	reply:	EFS_ERROR	<errno>
51  *
52  *	send:	EFS_READLINK	<name> <uid> <gid>
53  *	reply:	EFS_OK		<data>...
54  *	reply:	EFS_ERROR	<errno>
55  *
56  *	send:	EFS_STAT	<name> <uid> <gid>
57  *	reply:	EFS_OK		<data>...
58  *	reply:	EFS_ERROR	<errno>
59  *
60  *	send:	EFS_SYMLINK	<name1> <name2> <uid> <gid>
61  *	reply:	EFS_OK
62  *	reply:	EFS_ERROR	<errno>
63  *
64  *	send:	EFS_UNLINK	<name> <uid> <gid>
65  *	reply:	EFS_OK
66  *	reply:	EFS_ERROR	<errno>
67  *
68  *	send:	EFS_UTIME	<name> <uid> <gid>
69  *	reply:	EFS_OK
70  *	reply:	EFS_ERROR	<errno>
71  *
72  *	send:	EFS_WRITE	<offset> <count> <data>...
73  *	reply:	EFS_OK
74  *	reply:	EFS_ERROR	<errno>
75  *
76  */
77 #define EFS_NHT 	10
78 #define EFS_HTMAX	32
79 #define EFS_NPB		32
80 
81 struct efs_controlblock {
82 	u_char	efs_cmd;		/* command */
83 	char	efs_error;		/* return error code */
84 	union {
85 		struct {
86 			short	efs_a_uid;	/* user id */
87 			short	efs_a_gid;	/* group id */
88 			int	efs_a_grps[NGRPS/(sizeof(int)*8)];
89 						/* group bit array */
90 			union {
91 				struct {
92 					short	efs_aa_owner;	/* user id */
93 					short	efs_aa_group;	/* group id */
94 				} efs_aa;
95 				struct {
96 					short	efs_ab_cmask;	/* cmask */
97 					short	efs_ab_mode;	/* mode */
98 				} efs_ab;
99 				time_t 	efs_ac_time[2];		/* utime */
100 			} efs_a_un;
101 		} efs_a;
102 		struct {
103 			u_long	efs_b_count;	/* bytes remaining for IO */
104 			off_t	efs_b_offset;	/* offset in file for IO */
105 		} efs_b;
106 		off_t	efs_c_size;		/* size of file or transfer */
107 	} efs_un;
108 };
109 
110 #define efs_uid		efs_un.efs_a.efs_a_uid
111 #define efs_gid		efs_un.efs_a.efs_a_gid
112 #define efs_grps	efs_un.efs_a.efs_a_grps
113 #define efs_owner	efs_un.efs_a.efs_a_un.efs_aa.efs_aa_owner
114 #define efs_group	efs_un.efs_a.efs_a_un.efs_aa.efs_aa_group
115 #define efs_cmask	efs_un.efs_a.efs_a_un.efs_ab.efs_ab_cmask
116 #define efs_mode	efs_un.efs_a.efs_a_un.efs_ab.efs_ab_mode
117 #define efs_time	efs_un.efs_a.efs_a_un.efs_ac_time
118 #define efs_count	efs_un.efs_b.efs_b_count
119 #define efs_offset	efs_un.efs_b.efs_b_offset
120 #define efs_size	efs_un.efs_c_size
121 
122 #define	EFS_ACCESS	0
123 #define	EFS_CHMOD	1
124 #define	EFS_CHOWN	2
125 #define	EFS_CLOSE	3
126 #define	EFS_CREAT	4
127 #define	EFS_FSTAT	5
128 #define	EFS_LINK	6
129 #define	EFS_OPEN	7
130 #define	EFS_READ	8
131 #define	EFS_STAT	9
132 #define	EFS_UNLINK	10
133 #define	EFS_UTIME	11
134 #define	EFS_WRITE	12
135 #define	EFS_IOCTL	13
136 #define	EFS_LSTAT	14
137 #define EFS_READLINK	15
138 #define EFS_SYMLINK	16
139 #define	EFS_OK		100
140 #define	EFS_ERROR	101
141 
142 /* The hosttable relates a host name to a network address */
143 
144 struct hosttable {
145 	char ht_name[EFS_HTMAX];
146 	struct sockaddr_in ht_addr;
147 } efs_hosttable[EFS_NHT];
148 
149 #define	EFSIOSHTAB	_IOW(e, 0, struct efs_hosttable) /* set hosttable */
150 #define	EFSIOGHTAB	_IOR(e, 1, struct efs_hosttable) /* get hosttable */
151 
152 #ifdef KERNEL
153 int efs_major;		/* major device of efs char special routines */
154 #define	efsinode(ip) \
155 	(((ip)->i_mode&IFMT) == IFCHR && \
156 	major((ip)->i_rdev) == efs_major && minor((ip)->i_rdev) == 0)
157 
158 /*
159  * The patchboard connects file pointers on the local
160  * machine and sockets on the remote machine
161  */
162 struct patchboard {
163 	struct file *pb_fp;		/* file pointer associated with pb */
164 	struct socket *pb_so;		/* socket associated with pb */
165 	off_t pb_filesize;		/* size of remote file */
166 	struct patchboard *pb_link;	/* link to next free pb */
167 } efs_patchboard[EFS_NPB], *efs_freepb;
168 #endif
169