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 "%Z%%M% %I% %E% 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