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 (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  24  * Use is subject to license terms.
  25  */
  26 
  27 #ifndef _SHAREFS_SHAREFS_H
  28 #define _SHAREFS_SHAREFS_H
  29 
  30 #pragma ident   "%Z%%M% %I%     %E% SMI"
  31 
  32 /*
  33  * This header provides service for the sharefs module.
  34  */
  35 
  36 #include <sys/modctl.h>
  37 #include <sys/vfs.h>
  38 #include <sys/vnode.h>
  39 #include <sys/gfs.h>
  40 #include <sharefs/share.h>
  41 #include <sharefs/sharetab.h>
  42 
  43 #ifdef __cplusplus
  44 extern "C" {
  45 #endif
  46 
  47 #define SHAREFS_ROOT    "/etc/dfs"
  48 #define SHAREFS_BASE    "sharetab"
  49 
  50 /*
  51  * Lengths of strings.
  52  */
  53 typedef struct sharefs_lens {
  54         int     shl_path;
  55         int     shl_res;
  56         int     shl_fstype;
  57         int     shl_opts;
  58         int     shl_descr;
  59 } sharefs_lens_t;
  60 
  61 /*
  62  * VFS data object
  63  */
  64 typedef struct sharefs_vfs {
  65         vnode_t *sharefs_vfs_root;
  66 } sharefs_vfs_t;
  67 
  68 #define SHAREFS_NAME_MAX        MAXNAMELEN
  69 
  70 /*
  71  * The lock ordering whenever sharefs_lock and sharetab_lock both
  72  * need to be held is: sharefs_lock and then sharetab_lock.
  73  */
  74 extern krwlock_t        sharefs_lock;   /* lock for the vnode ops */
  75 extern sharetab_t       *sharefs_sharetab;      /* The sharetab. */
  76 
  77 extern uint_t           sharetab_count; /* How many shares? */
  78 extern krwlock_t        sharetab_lock;  /* lock for the cached sharetab */
  79 extern size_t           sharetab_size;  /* How big is the sharetab file? */
  80 
  81 extern timestruc_t      sharetab_mtime; /* Last mod to sharetab */
  82 extern timestruc_t      sharetab_snap_time;     /* Last snap */
  83 extern uint_t           sharetab_generation;    /* Which copy is it? */
  84 
  85 #define SHAREFS_INO_FILE        0x80
  86 
  87 extern vnode_t *sharefs_create_root_file(vfs_t *);
  88 
  89 /*
  90  * Sharetab file
  91  *
  92  * Note that even though the sharetab code does not explictly
  93  * use 'sharefs_file', it is required by GFS that the first
  94  * field of the private data be a gfs_file_t.
  95  */
  96 typedef struct shnode_t {
  97         gfs_file_t      sharefs_file;           /* gfs file */
  98         char            *sharefs_snap;          /* snapshot of the share */
  99         size_t          sharefs_size;           /* size of the snapshot */
 100         uint_t          sharefs_count;          /* number of shares */
 101         uint_t          sharefs_refs;           /* reference count */
 102         uint_t          sharefs_real_vp;        /* Are we a real or snap */
 103         uint_t          sharefs_generation;     /* Which copy are we? */
 104         timestruc_t     sharefs_snap_time;      /* When were we modded? */
 105 } shnode_t;
 106 
 107 /*
 108  * Some conversion macros:
 109  */
 110 #define VTOSH(vp)       ((shnode_t *)((vp)->v_data))
 111 
 112 extern const fs_operation_def_t sharefs_tops_data[];
 113 extern vnodeops_t               *sharefs_ops_data;
 114 
 115 extern void sharefs_data_init(void);
 116 
 117 extern void sharefs_sharetab_init(void);
 118 
 119 #ifdef __cplusplus
 120 }
 121 #endif
 122 
 123 #endif /* !_SHAREFS_SHAREFS_H */