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