xref: /illumos-gate/usr/src/uts/common/nfs/nfs_log.h (revision 528737823843346cf95a4a701612f82089135554)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 
23 /*
24  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
25  * Use is subject to license terms.
26  */
27 
28 /*
29  * Copyright 2018 Nexenta Systems, Inc.
30  */
31 
32 #ifndef	_NFS_LOG_H
33 #define	_NFS_LOG_H
34 
35 #ifdef	__cplusplus
36 extern "C" {
37 #endif
38 
39 #include <nfs/nfs.h>
40 #include <nfs/export.h>
41 #include <rpc/rpc.h>
42 
43 #define	LOG_MODE		0600	/* open log with these permissions */
44 #define	LOG_INPROG_STRING	"_log_in_process"
45 
46 /*
47  * Definition of dummy program for logging special non-nfs reqs
48  */
49 #define	NFSLOG_PROGRAM		((rpcprog_t)42)
50 #define	NFSLOG_VERSION		((rpcvers_t)1)
51 
52 #define	NFSLOG_VERSMIN		((rpcvers_t)1)
53 #define	NFSLOG_VERSMAX		((rpcvers_t)1)
54 
55 #define	NFSLOG_NULL		((rpcproc_t)0)
56 #define	NFSLOG_SHARE		((rpcproc_t)1)
57 #define	NFSLOG_UNSHARE		((rpcproc_t)2)
58 #define	NFSLOG_LOOKUP		((rpcproc_t)3)
59 #define	NFSLOG_GETFH		((rpcproc_t)4)
60 
61 /*
62  * Version of the on disk log file
63  */
64 #define	NFSLOG_BUF_VERSION	((rpcvers_t)2)
65 
66 #define	NFSLOG_BUF_VERSMIN	((rpcvers_t)1)
67 #define	NFSLOG_BUF_VERSMAX	((rpcvers_t)2)
68 /*
69  * Contents of the on disk log file header
70  *
71  * Note: This is the structure for older version 1 buffers, and does not
72  * adequately support large buffer files, as the offset is 32 bit. Newer
73  * buffer files are written using version 2 buffer header (below) which
74  * has a 64 bit offset. However, because existing buffers continue to use
75  * the old header format, the daemon xdr code can read and write either format.
76  * This definition below is not explicitely used anywhere in the code,
77  * but is implicitely used by the daemon xdr code. For that reason, it
78  * is kept here for information purpose only.
79  */
80 struct nfslog_buffer_header_1 {
81 	uint32_t bh_length;		/* Length of this header */
82 	uint32_t bh_version;		/* Version of buffer contents */
83 	uint32_t bh_flags;		/* Optional flags field */
84 	uint32_t bh_offset;		/* offset within file to begin */
85 	timestruc32_t bh_timestamp;	/* When the buffer was created */
86 };
87 typedef struct nfslog_buffer_header_1 nfslog_buffer_header_1;
88 
89 /*
90  * For the current version 2, which supports largefiles
91  */
92 struct nfslog_buffer_header_2 {
93 	uint32_t bh_length;		/* Length of this header */
94 	rpcvers_t bh_version;		/* Version of buffer contents */
95 	u_offset_t bh_offset;		/* offset within file to begin */
96 	uint32_t bh_flags;		/* Optional flags field */
97 	timestruc32_t bh_timestamp;	/* When the buffer was created */
98 };
99 typedef struct nfslog_buffer_header_2 nfslog_buffer_header_2;
100 
101 typedef struct nfslog_buffer_header_2 nfslog_buffer_header;
102 
103 /* bh_flags values */
104 #define	NFSLOG_BH_OFFSET_OVERFLOW	1	/* version 1 bh_offset */
105 
106 /*
107  * For each record written to the log file, this struct is used
108  * as the logical header; it will be XDR encoded to be written to the file.
109  *
110  * Note: if the buffer file becomes large enough, the rh_rec_id may
111  * wrap around. This situation is appropriately handled by the daemon however.
112  */
113 struct nfslog_record_header {
114 	uint32_t rh_reclen;		/* Length of entire record */
115 	uint32_t rh_rec_id;		/* unique id for this log */
116 	rpcprog_t rh_prognum;		/* Program number */
117 	rpcproc_t rh_procnum;		/* Procedure number */
118 	rpcvers_t rh_version;		/* Version number */
119 	uint32_t rh_auth_flavor;	/* Auth flavor of RPC request */
120 	timestruc32_t rh_timestamp;	/* time stamp of the request */
121 	uid_t rh_uid;			/* uid of requestor as per RPC */
122 	gid_t rh_gid;			/* gid of requestor as per RPC */
123 };
124 typedef struct nfslog_record_header nfslog_record_header;
125 
126 /*
127  * For each record written to the log file, this is the logical
128  * structure of the record; it will be XDR encoded and written to
129  * the file.
130  */
131 struct nfslog_request_record {
132 	nfslog_record_header re_header;	/* Header as defined above */
133 	char *re_principal_name;	/* Principal name of caller */
134 	char *re_netid;			/* Netid used for request */
135 	char *re_tag;			/* Log buffer tag for file system */
136 	struct netbuf re_ipaddr;	/* Requestors ip address */
137 	caddr_t re_rpc_arg;		/* RPC arguments and response */
138 	caddr_t re_rpc_res;
139 };
140 typedef struct nfslog_request_record nfslog_request_record;
141 
142 /*
143  * From this point forward, the definitions represent the arguments
144  * and results of each possible RPC that can be logged.  These
145  * may have been trimmed in content from the real RPC arguments
146  * and results to save space.
147  */
148 typedef fhandle_t fhandle;
149 
150 struct nfslog_sharefsargs {
151 	int sh_flags;
152 	uint32_t sh_anon;
153 	char *sh_path;
154 	fhandle sh_fh_buf;
155 };
156 typedef struct nfslog_sharefsargs nfslog_sharefsargs;
157 
158 typedef nfsstat nfslog_sharefsres;
159 
160 struct nfslog_getfhargs {
161 	fhandle gfh_fh_buf;
162 	char *gfh_path;
163 };
164 typedef struct nfslog_getfhargs nfslog_getfhargs;
165 
166 struct nfslog_diropargs {
167 	fhandle da_fhandle;
168 	char *da_name;
169 };
170 typedef struct nfslog_diropargs nfslog_diropargs;
171 
172 struct nfslog_drok {
173 	fhandle drok_fhandle;
174 };
175 typedef struct nfslog_drok nfslog_drok;
176 
177 struct nfslog_diropres {
178 	nfsstat dr_status;
179 	union {
180 		nfslog_drok dr_ok;
181 	} nfslog_diropres_u;
182 };
183 typedef struct nfslog_diropres nfslog_diropres;
184 
185 typedef struct nfsreadargs nfslog_nfsreadargs;
186 
187 struct nfslog_rrok {
188 	uint32_t filesize;
189 	uint32_t rrok_count;
190 };
191 typedef struct nfslog_rrok nfslog_rrok;
192 
193 struct nfslog_rdresult {
194 	nfsstat r_status;
195 	union {
196 		nfslog_rrok r_ok;
197 	} nfslog_rdresult_u;
198 };
199 typedef struct nfslog_rdresult nfslog_rdresult;
200 
201 struct nfslog_writeargs {
202 	fhandle waargs_fhandle;
203 	uint32_t waargs_begoff;
204 	uint32_t waargs_offset;
205 	uint32_t waargs_totcount;
206 	uint32_t waargs_count;
207 };
208 typedef struct nfslog_writeargs nfslog_writeargs;
209 
210 struct nfslog_writeresult {
211 	nfsstat wr_status;
212 	union {
213 		uint32_t wr_size;
214 	} nfslog_writeresult_u;
215 };
216 typedef struct nfslog_writeresult nfslog_writeresult;
217 
218 struct nfslog_sattr {
219 	uint32_t sa_mode;
220 	uint32_t sa_uid;
221 	uint32_t sa_gid;
222 	uint32_t sa_size;
223 	nfs2_timeval sa_atime;
224 	nfs2_timeval sa_mtime;
225 };
226 typedef struct nfslog_sattr nfslog_sattr;
227 
228 struct nfslog_createargs {
229 	nfslog_sattr ca_sa;
230 	nfslog_diropargs ca_da;
231 };
232 typedef struct nfslog_createargs nfslog_createargs;
233 
234 struct nfslog_setattrargs {
235 	fhandle saa_fh;
236 	nfslog_sattr saa_sa;
237 };
238 typedef struct nfslog_setattrargs nfslog_setattrargs;
239 
240 struct nfslog_rdlnres {
241 	nfsstat rl_status;
242 	union {
243 		char *rl_ok;
244 	} nfslog_rdlnres_u;
245 };
246 typedef struct nfslog_rdlnres nfslog_rdlnres;
247 
248 struct nfslog_rnmargs {
249 	nfslog_diropargs rna_from;
250 	nfslog_diropargs rna_to;
251 };
252 typedef struct nfslog_rnmargs nfslog_rnmargs;
253 
254 struct nfslog_linkargs {
255 	fhandle la_from;
256 	nfslog_diropargs la_to;
257 };
258 typedef struct nfslog_linkargs nfslog_linkargs;
259 
260 struct nfslog_symlinkargs {
261 	nfslog_diropargs sla_from;
262 	char *sla_tnm;
263 	nfslog_sattr sla_sa;
264 };
265 typedef struct nfslog_symlinkargs nfslog_symlinkargs;
266 
267 struct nfslog_rddirargs {
268 	fhandle rda_fh;
269 	uint32_t rda_offset;
270 	uint32_t rda_count;
271 };
272 typedef struct nfslog_rddirargs nfslog_rddirargs;
273 
274 struct nfslog_rdok {
275 	uint32_t rdok_offset;
276 	uint32_t rdok_size;
277 	bool_t rdok_eof;
278 };
279 typedef struct nfslog_rdok nfslog_rdok;
280 
281 struct nfslog_rddirres {
282 	nfsstat rd_status;
283 	union {
284 		nfslog_rdok rd_ok;
285 	} nfslog_rddirres_u;
286 };
287 typedef struct nfslog_rddirres nfslog_rddirres;
288 
289 struct nfslog_diropargs3 {
290 	nfs_fh3 dir;
291 	char *name;
292 };
293 typedef struct nfslog_diropargs3 nfslog_diropargs3;
294 
295 struct nfslog_LOOKUP3res {
296 	nfsstat3 status;
297 	union {
298 		nfs_fh3 object;
299 	} nfslog_LOOKUP3res_u;
300 };
301 typedef struct nfslog_LOOKUP3res nfslog_LOOKUP3res;
302 
303 struct nfslog_createhow3 {
304 	createmode3 mode;
305 	union {
306 		set_size3 size;
307 	} nfslog_createhow3_u;
308 };
309 typedef struct nfslog_createhow3 nfslog_createhow3;
310 
311 struct nfslog_CREATE3args {
312 	nfslog_diropargs3 where;
313 	nfslog_createhow3 how;
314 };
315 typedef struct nfslog_CREATE3args nfslog_CREATE3args;
316 
317 struct nfslog_CREATE3resok {
318 	post_op_fh3 obj;
319 };
320 typedef struct nfslog_CREATE3resok nfslog_CREATE3resok;
321 
322 struct nfslog_CREATE3res {
323 	nfsstat3 status;
324 	union {
325 		nfslog_CREATE3resok ok;
326 	} nfslog_CREATE3res_u;
327 };
328 typedef struct nfslog_CREATE3res nfslog_CREATE3res;
329 
330 struct nfslog_SETATTR3args {
331 	nfs_fh3 object;
332 	set_size3 size;
333 };
334 typedef struct nfslog_SETATTR3args nfslog_SETATTR3args;
335 
336 struct nfslog_READLINK3res {
337 	nfsstat3 status;
338 	union {
339 		char *data;
340 	} nfslog_READLINK3res_u;
341 };
342 typedef struct nfslog_READLINK3res nfslog_READLINK3res;
343 
344 struct nfslog_READ3args {
345 	nfs_fh3 file;
346 	offset3 offset;
347 	count3 count;
348 };
349 typedef struct nfslog_READ3args nfslog_READ3args;
350 
351 struct nfslog_READ3resok {
352 	size3 filesize;
353 	count3 count;
354 	bool_t eof;
355 	uint32_t size;
356 };
357 typedef struct nfslog_READ3resok nfslog_READ3resok;
358 
359 struct nfslog_READ3res {
360 	nfsstat3 status;
361 	union {
362 		nfslog_READ3resok ok;
363 	} nfslog_READ3res_u;
364 };
365 typedef struct nfslog_READ3res nfslog_READ3res;
366 
367 struct nfslog_WRITE3args {
368 	nfs_fh3 file;
369 	offset3 offset;
370 	count3 count;
371 	stable_how stable;
372 };
373 typedef struct nfslog_WRITE3args nfslog_WRITE3args;
374 
375 struct nfslog_WRITE3resok {
376 	size3 filesize;
377 	count3 count;
378 	stable_how committed;
379 };
380 typedef struct nfslog_WRITE3resok nfslog_WRITE3resok;
381 
382 struct nfslog_WRITE3res {
383 	nfsstat3 status;
384 	union {
385 		nfslog_WRITE3resok ok;
386 	} nfslog_WRITE3res_u;
387 };
388 typedef struct nfslog_WRITE3res nfslog_WRITE3res;
389 
390 struct nfslog_MKDIR3args {
391 	nfslog_diropargs3 where;
392 };
393 typedef struct nfslog_MKDIR3args nfslog_MKDIR3args;
394 
395 struct nfslog_MKDIR3res {
396 	nfsstat3 status;
397 	union {
398 		post_op_fh3 obj;
399 	} nfslog_MKDIR3res_u;
400 };
401 typedef struct nfslog_MKDIR3res nfslog_MKDIR3res;
402 
403 struct nfslog_SYMLINK3args {
404 	nfslog_diropargs3 where;
405 	char *symlink_data;
406 };
407 typedef struct nfslog_SYMLINK3args nfslog_SYMLINK3args;
408 
409 struct nfslog_SYMLINK3res {
410 	nfsstat3 status;
411 	union {
412 		post_op_fh3 obj;
413 	} nfslog_SYMLINK3res_u;
414 };
415 typedef struct nfslog_SYMLINK3res nfslog_SYMLINK3res;
416 
417 struct nfslog_MKNOD3args {
418 	nfslog_diropargs3 where;
419 	ftype3 type;
420 };
421 typedef struct nfslog_MKNOD3args nfslog_MKNOD3args;
422 
423 struct nfslog_MKNOD3res {
424 	nfsstat3 status;
425 	union {
426 		post_op_fh3 obj;
427 	} nfslog_MKNOD3res_u;
428 };
429 typedef struct nfslog_MKNOD3res nfslog_MKNOD3res;
430 
431 struct nfslog_REMOVE3args {
432 	nfslog_diropargs3 object;
433 };
434 typedef struct nfslog_REMOVE3args nfslog_REMOVE3args;
435 
436 struct nfslog_RMDIR3args {
437 	nfslog_diropargs3 object;
438 };
439 typedef struct nfslog_RMDIR3args nfslog_RMDIR3args;
440 
441 struct nfslog_RENAME3args {
442 	nfslog_diropargs3 from;
443 	nfslog_diropargs3 to;
444 };
445 typedef struct nfslog_RENAME3args nfslog_RENAME3args;
446 
447 struct nfslog_LINK3args {
448 	nfs_fh3 file;
449 	nfslog_diropargs3 link;
450 };
451 typedef struct nfslog_LINK3args nfslog_LINK3args;
452 
453 struct nfslog_READDIRPLUS3args {
454 	nfs_fh3 dir;
455 	count3 dircount;
456 	count3 maxcount;
457 };
458 typedef struct nfslog_READDIRPLUS3args nfslog_READDIRPLUS3args;
459 
460 struct nfslog_entryplus3 {
461 	post_op_fh3 name_handle;
462 	char *name;
463 	struct nfslog_entryplus3 *nextentry;
464 };
465 typedef struct nfslog_entryplus3 nfslog_entryplus3;
466 
467 struct nfslog_dirlistplus3 {
468 	nfslog_entryplus3 *entries;
469 	bool_t eof;
470 };
471 typedef struct nfslog_dirlistplus3 nfslog_dirlistplus3;
472 
473 struct nfslog_READDIRPLUS3resok {
474 	nfslog_dirlistplus3 reply;
475 };
476 typedef struct nfslog_READDIRPLUS3resok nfslog_READDIRPLUS3resok;
477 
478 struct nfslog_READDIRPLUS3res {
479 	nfsstat3 status;
480 	union {
481 		nfslog_READDIRPLUS3resok ok;
482 	} nfslog_READDIRPLUS3res_u;
483 };
484 typedef struct nfslog_READDIRPLUS3res nfslog_READDIRPLUS3res;
485 
486 struct nfslog_COMMIT3args {
487 	nfs_fh3 file;
488 	offset3 offset;
489 	count3 count;
490 };
491 typedef struct nfslog_COMMIT3args nfslog_COMMIT3args;
492 
493 /* the xdr functions */
494 #ifndef _KERNEL
495 
496 extern bool_t xdr_nfsstat(XDR *, nfsstat *);
497 extern bool_t xdr_uint64(XDR *, uint64 *);
498 extern bool_t xdr_uint32(XDR *, uint32 *);
499 extern bool_t xdr_fhandle(XDR *, fhandle_t *);
500 extern bool_t xdr_nfs_fh3(XDR *, nfs_fh3 *);
501 extern bool_t xdr_nfsstat3(XDR *, nfsstat3 *);
502 extern bool_t xdr_nfslog_buffer_header(XDR *, nfslog_buffer_header *);
503 extern bool_t xdr_nfslog_request_record(XDR *, nfslog_request_record *);
504 extern bool_t xdr_nfslog_sharefsargs(XDR *, nfslog_sharefsargs *);
505 extern bool_t xdr_nfslog_sharefsres(XDR *, nfslog_sharefsres *);
506 extern bool_t xdr_nfslog_getfhargs(XDR *, nfslog_getfhargs *);
507 extern bool_t xdr_nfslog_diropargs(XDR *, nfslog_diropargs *);
508 extern bool_t xdr_nfslog_diropres(XDR *, nfslog_diropres *);
509 extern bool_t xdr_nfslog_nfsreadargs(XDR *, nfslog_nfsreadargs *);
510 extern bool_t xdr_nfslog_rdresult(XDR *, nfslog_rdresult *);
511 extern bool_t xdr_nfslog_writeargs(XDR *, nfslog_writeargs *);
512 extern bool_t xdr_nfslog_writeresult(XDR *, nfslog_writeresult *);
513 extern bool_t xdr_nfslog_createargs(XDR *, nfslog_createargs *);
514 extern bool_t xdr_nfslog_setattrargs(XDR *, nfslog_setattrargs *);
515 extern bool_t xdr_nfslog_rdlnres(XDR *, nfslog_rdlnres *);
516 extern bool_t xdr_nfslog_rnmargs(XDR *, nfslog_rnmargs *);
517 extern bool_t xdr_nfslog_linkargs(XDR *, nfslog_linkargs *);
518 extern bool_t xdr_nfslog_symlinkargs(XDR *, nfslog_symlinkargs *);
519 extern bool_t xdr_nfslog_rddirargs(XDR *, nfslog_rddirargs *);
520 extern bool_t xdr_nfslog_rddirres(XDR *, nfslog_rddirres *);
521 extern bool_t xdr_nfslog_diropargs3(XDR *, nfslog_diropargs3 *);
522 extern bool_t xdr_nfslog_LOOKUP3res(XDR *, nfslog_LOOKUP3res *);
523 extern bool_t xdr_nfslog_CREATE3args(XDR *, nfslog_CREATE3args *);
524 extern bool_t xdr_nfslog_CREATE3res(XDR *, nfslog_CREATE3res *);
525 extern bool_t xdr_nfslog_SETATTR3args(XDR *, nfslog_SETATTR3args *);
526 extern bool_t xdr_nfslog_READLINK3res(XDR *, nfslog_READLINK3res *);
527 extern bool_t xdr_nfslog_READ3args(XDR *, nfslog_READ3args *);
528 extern bool_t xdr_nfslog_READ3res(XDR *, nfslog_READ3res *);
529 extern bool_t xdr_nfslog_WRITE3args(XDR *, nfslog_WRITE3args *);
530 extern bool_t xdr_nfslog_WRITE3res(XDR *, nfslog_WRITE3res *);
531 extern bool_t xdr_nfslog_MKDIR3args(XDR *, nfslog_MKDIR3args *);
532 extern bool_t xdr_nfslog_MKDIR3res(XDR *, nfslog_MKDIR3res *);
533 extern bool_t xdr_nfslog_SYMLINK3args(XDR *, nfslog_SYMLINK3args *);
534 extern bool_t xdr_nfslog_SYMLINK3res(XDR *, nfslog_SYMLINK3res *);
535 extern bool_t xdr_nfslog_MKNOD3args(XDR *, nfslog_MKNOD3args *);
536 extern bool_t xdr_nfslog_MKNOD3res(XDR *, nfslog_MKNOD3res *);
537 extern bool_t xdr_nfslog_REMOVE3args(XDR *, nfslog_REMOVE3args *);
538 extern bool_t xdr_nfslog_RMDIR3args(XDR *, nfslog_RMDIR3args *);
539 extern bool_t xdr_nfslog_RENAME3args(XDR *, nfslog_RENAME3args *);
540 extern bool_t xdr_nfslog_LINK3args(XDR *, nfslog_LINK3args *);
541 extern bool_t xdr_nfslog_READDIRPLUS3args(XDR *, nfslog_READDIRPLUS3args *);
542 extern bool_t xdr_nfslog_READDIRPLUS3res(XDR *, nfslog_READDIRPLUS3res *);
543 extern bool_t xdr_nfslog_COMMIT3args(XDR *, nfslog_COMMIT3args *);
544 
545 #else /* !_KERNEL */
546 
547 extern bool_t xdr_nfsstat(XDR *, nfsstat *);
548 extern bool_t xdr_nfslog_nfsreadargs(XDR *, nfslog_nfsreadargs *);
549 extern bool_t xdr_nfslog_sharefsres(XDR *, nfslog_sharefsres *);
550 extern bool_t xdr_nfslog_sharefsargs(XDR *, struct exportinfo *);
551 extern bool_t xdr_nfslog_getfhargs(XDR *, nfslog_getfhargs *);
552 extern bool_t xdr_nfslog_diropargs(XDR *, struct nfsdiropargs *);
553 extern bool_t xdr_nfslog_drok(XDR *, struct nfsdrok *);
554 extern bool_t xdr_nfslog_diropres(XDR *, struct nfsdiropres *);
555 extern bool_t xdr_nfslog_getattrres(XDR *, struct nfsattrstat *);
556 extern bool_t xdr_nfslog_rrok(XDR *, struct nfsrrok *);
557 extern bool_t xdr_nfslog_rdresult(XDR *, struct nfsrdresult *);
558 extern bool_t xdr_nfslog_writeargs(XDR *, struct nfswriteargs *);
559 extern bool_t xdr_nfslog_writeresult(XDR *, struct nfsattrstat *);
560 extern bool_t xdr_nfslog_createargs(XDR *, struct nfscreatargs *);
561 extern bool_t xdr_nfslog_sattr(XDR *, struct nfssattr *);
562 extern bool_t xdr_nfslog_setattrargs(XDR *, struct nfssaargs *);
563 extern bool_t xdr_nfslog_rdlnres(XDR *, struct nfsrdlnres *);
564 extern bool_t xdr_nfslog_rnmargs(XDR *, struct nfsrnmargs *);
565 extern bool_t xdr_nfslog_symlinkargs(XDR *, struct nfsslargs *);
566 extern bool_t xdr_nfslog_statfs(XDR *, struct nfsstatfs *);
567 extern bool_t xdr_nfslog_linkargs(XDR *, struct nfslinkargs *);
568 extern bool_t xdr_nfslog_rddirargs(XDR *, struct nfsrddirargs *);
569 extern bool_t xdr_nfslog_rdok(XDR *, struct nfsrdok *);
570 extern bool_t xdr_nfslog_rddirres(XDR *, struct nfsrddirres *);
571 extern bool_t xdr_nfslog_diropargs3(XDR *, diropargs3 *);
572 extern bool_t xdr_nfslog_LOOKUP3res(XDR *, LOOKUP3res *);
573 extern bool_t xdr_nfslog_createhow3(XDR *, createhow3 *);
574 extern bool_t xdr_nfslog_CREATE3args(XDR *, CREATE3args *);
575 extern bool_t xdr_nfslog_CREATE3resok(XDR *, CREATE3resok *);
576 extern bool_t xdr_nfslog_CREATE3res(XDR *, CREATE3res *);
577 extern bool_t xdr_nfslog_GETATTR3res(XDR *, GETATTR3res *);
578 extern bool_t xdr_nfslog_ACCESS3args(XDR *, ACCESS3args *);
579 extern bool_t xdr_nfslog_ACCESS3res(XDR *, ACCESS3res *);
580 extern bool_t xdr_nfslog_SETATTR3args(XDR *, SETATTR3args *);
581 extern bool_t xdr_nfslog_SETATTR3res(XDR *, SETATTR3res *);
582 extern bool_t xdr_nfslog_READLINK3res(XDR *, READLINK3res *);
583 extern bool_t xdr_nfslog_READ3args(XDR *, READ3args *);
584 extern bool_t xdr_nfslog_READ3resok(XDR *, READ3resok *);
585 extern bool_t xdr_nfslog_READ3res(XDR *, READ3res *);
586 extern bool_t xdr_nfslog_READ3resok(XDR *, READ3resok *);
587 extern bool_t xdr_nfslog_READ3res(XDR *, READ3res *);
588 extern bool_t xdr_nfslog_WRITE3args(XDR *, WRITE3args *);
589 extern bool_t xdr_nfslog_WRITE3resok(XDR *, WRITE3resok *);
590 extern bool_t xdr_nfslog_WRITE3res(XDR *, WRITE3res *);
591 extern bool_t xdr_nfslog_MKDIR3args(XDR *, MKDIR3args *);
592 extern bool_t xdr_nfslog_MKDIR3res(XDR *, MKDIR3res *);
593 extern bool_t xdr_nfslog_SYMLINK3args(XDR *, SYMLINK3args *);
594 extern bool_t xdr_nfslog_SYMLINK3res(XDR *, SYMLINK3res *);
595 extern bool_t xdr_nfslog_MKNOD3args(XDR *, MKNOD3args *);
596 extern bool_t xdr_nfslog_MKNOD3res(XDR *, MKNOD3res *);
597 extern bool_t xdr_nfslog_REMOVE3args(XDR *, REMOVE3args *);
598 extern bool_t xdr_nfslog_REMOVE3res(XDR *, REMOVE3res *);
599 extern bool_t xdr_nfslog_RMDIR3args(XDR *, RMDIR3args *);
600 extern bool_t xdr_nfslog_RMDIR3res(XDR *, RMDIR3res *);
601 extern bool_t xdr_nfslog_RENAME3args(XDR *, RENAME3args *);
602 extern bool_t xdr_nfslog_RENAME3res(XDR *, RENAME3res *);
603 extern bool_t xdr_nfslog_LINK3args(XDR *, LINK3args *);
604 extern bool_t xdr_nfslog_LINK3res(XDR *, LINK3res *);
605 extern bool_t xdr_nfslog_READDIR3args(XDR *, READDIR3args *);
606 extern bool_t xdr_nfslog_READDIR3res(XDR *, READDIR3res *);
607 extern bool_t xdr_nfslog_FSSTAT3args(XDR *, FSSTAT3args *);
608 extern bool_t xdr_nfslog_FSSTAT3res(XDR *, FSSTAT3res *);
609 extern bool_t xdr_nfslog_FSINFO3args(XDR *, FSINFO3args *);
610 extern bool_t xdr_nfslog_FSINFO3res(XDR *, FSINFO3res *);
611 extern bool_t xdr_nfslog_PATHCONF3args(XDR *, PATHCONF3args *);
612 extern bool_t xdr_nfslog_PATHCONF3res(XDR *, PATHCONF3res *);
613 extern bool_t xdr_nfslog_COMMIT3args(XDR *, COMMIT3args *);
614 extern bool_t xdr_nfslog_COMMIT3res(XDR *, COMMIT3res *);
615 extern bool_t xdr_nfslog_READDIRPLUS3args(XDR *, READDIRPLUS3args *);
616 extern bool_t xdr_nfslog_READDIRPLUS3res(XDR *, READDIRPLUS3res *);
617 extern bool_t xdr_nfslog_request_record(XDR *,	struct exportinfo *,
618 			struct svc_req *, cred_t *, struct netbuf *,
619 			unsigned int, unsigned int);
620 
621 
622 #endif /* !_KERNEL */
623 
624 #ifdef _KERNEL
625 
626 /*
627  * Used to direct nfslog_write_record() on its behavior of
628  * writing log entries
629  */
630 #define	NFSLOG_ALL_BUFFERS	1
631 #define	NFSLOG_ONE_BUFFER	2
632 
633 /* Sizes of the various memory allocations for encoding records */
634 #define	NFSLOG_SMALL_RECORD_SIZE 512
635 #define	NFSLOG_SMALL_REC_NAME	"nfslog_small_rec"
636 #define	NFSLOG_MEDIUM_RECORD_SIZE 8192
637 #define	NFSLOG_MEDIUM_REC_NAME	"nfslog_medium_rec"
638 #define	NFSLOG_LARGE_RECORD_SIZE 32768
639 #define	NFSLOG_LARGE_REC_NAME	"nfslog_large_rec"
640 
641 /*
642  * Functions used for interaction with nfs logging
643  */
644 extern bool_t	xdr_nfslog_buffer_header(XDR *, nfslog_buffer_header *);
645 
646 extern void	nfslog_share_record(struct exportinfo *exi, cred_t *cr);
647 extern void	nfslog_unshare_record(struct exportinfo *exi, cred_t *cr);
648 extern void	nfslog_getfh(struct exportinfo *, fhandle *, char *,
649 		enum uio_seg, cred_t *);
650 
651 extern void	nfslog_init();
652 extern int	nfslog_setup(struct exportinfo *);
653 extern void	nfslog_disable(struct exportinfo *);
654 /*PRINTFLIKE2*/
655 extern void	nfslog_dprint(const int, const char *fmt, ...)
656 	__KPRINTFLIKE(2);
657 extern void	*nfslog_record_alloc(struct exportinfo *, int,
658 		void **, int);
659 extern void	nfslog_record_free(void *, void *, size_t);
660 extern struct	exportinfo *nfslog_get_exi(nfs_export_t *, struct exportinfo *,
661 		struct svc_req *, caddr_t, unsigned int *);
662 extern void	nfslog_write_record(struct exportinfo *, struct svc_req *,
663 		caddr_t, caddr_t, cred_t *, struct netbuf *, unsigned int,
664 		unsigned int);
665 
666 extern struct log_buffer *nfslog_buffer_list;
667 
668 /*
669  * Logging debug macro; expands to nothing for non-debug kernels.
670  */
671 #ifndef DEBUG
672 #define	LOGGING_DPRINT(x)
673 #else
674 #define	LOGGING_DPRINT(x)	nfslog_dprint x
675 #endif
676 
677 #endif
678 
679 #ifdef	__cplusplus
680 }
681 #endif
682 
683 #endif	/* _NFS_LOG_H */
684