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