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 */