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  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  23  * Use is subject to license terms.
  24  *
  25  */
  26 
  27 
  28 #ifndef _FSPLUG_H
  29 #define _FSPLUG_H
  30 
  31 #include <dirent.h>
  32 #include "config.h"
  33 #include <sys/stat.h>
  34 
  35 /*
  36  * Type of file system client plug-in desired.
  37  */
  38 typedef enum fb_plugin_type {
  39         LOCAL_FS_PLUG = 0,
  40         NFS3_PLUG,
  41         NFS4_PLUG,
  42         CIFS_PLUG
  43 } fb_plugin_type_t;
  44 
  45 /* universal file descriptor for both local and nfs file systems */
  46 typedef union fb_fdesc {
  47         int             fd_num;         /* OS file descriptor number */
  48         void            *fd_ptr;        /* Pointer to nfs information block */
  49 } fb_fdesc_t;
  50 
  51 typedef struct aiolist aiol_t;
  52 
  53 /* Functions vector for file system plug-ins */
  54 typedef struct fsplug_func_s {
  55         char fs_name[16];
  56         int (*fsp_freemem)(fb_fdesc_t *, off64_t);
  57         int (*fsp_open)(fb_fdesc_t *, char *, int, int);
  58         int (*fsp_pread)(fb_fdesc_t *, caddr_t, fbint_t, off64_t);
  59         int (*fsp_read)(fb_fdesc_t *, caddr_t, fbint_t);
  60         int (*fsp_pwrite)(fb_fdesc_t *, caddr_t, fbint_t, off64_t);
  61         int (*fsp_write)(fb_fdesc_t *, caddr_t, fbint_t);
  62         int (*fsp_lseek)(fb_fdesc_t *, off64_t, int);
  63         int (*fsp_ftrunc)(fb_fdesc_t *, off64_t);
  64         int (*fsp_rename)(const char *, const char *);
  65         int (*fsp_close)(fb_fdesc_t *);
  66         int (*fsp_link)(const char *, const char *);
  67         int (*fsp_symlink)(const char *, const char *);
  68         int (*fsp_unlink)(char *);
  69         ssize_t (*fsp_readlink)(const char *, char *, size_t);
  70         int (*fsp_mkdir)(char *, int);
  71         int (*fsp_rmdir)(char *);
  72         DIR *(*fsp_opendir)(char *);
  73         struct dirent *(*fsp_readdir)(DIR *);
  74         int (*fsp_closedir)(DIR *);
  75         int (*fsp_fsync)(fb_fdesc_t *);
  76         int (*fsp_stat)(char *, struct stat64 *);
  77         int (*fsp_fstat)(fb_fdesc_t *, struct stat64 *);
  78         int (*fsp_access)(const char *, int);
  79         void (*fsp_recur_rm)(char *);
  80 } fsplug_func_t;
  81 
  82 extern fsplug_func_t *fs_functions_vec;
  83 
  84 /* Macros for calling functions */
  85 #define FB_FREEMEM(fd, sz) \
  86         (*fs_functions_vec->fsp_freemem)(fd, sz)
  87 
  88 #define FB_OPEN(fd, path, flags, perms) \
  89         (*fs_functions_vec->fsp_open)(fd, path, flags, perms)
  90 
  91 #define FB_PREAD(fdesc, iobuf, iosize, offset) \
  92         (*fs_functions_vec->fsp_pread)(fdesc, iobuf, iosize, offset)
  93 
  94 #define FB_READ(fdesc, iobuf, iosize) \
  95         (*fs_functions_vec->fsp_read)(fdesc, iobuf, iosize)
  96 
  97 #define FB_PWRITE(fdesc, iobuf, iosize, offset) \
  98         (*fs_functions_vec->fsp_pwrite)(fdesc, iobuf, iosize, offset)
  99 
 100 #define FB_WRITE(fdesc, iobuf, iosize) \
 101         (*fs_functions_vec->fsp_write)(fdesc, iobuf, iosize)
 102 
 103 #define FB_LSEEK(fdesc, amnt, whence) \
 104         (*fs_functions_vec->fsp_lseek)(fdesc, amnt, whence)
 105 
 106 #define FB_CLOSE(fdesc) \
 107         (*fs_functions_vec->fsp_close)(fdesc)
 108 
 109 #define FB_UNLINK(path) \
 110         (*fs_functions_vec->fsp_unlink)(path)
 111 
 112 #define FB_MKDIR(path, perm) \
 113         (*fs_functions_vec->fsp_mkdir)(path, perm)
 114 
 115 #define FB_RMDIR(path) \
 116         (*fs_functions_vec->fsp_rmdir)(path)
 117 
 118 #define FB_OPENDIR(path) \
 119         (*fs_functions_vec->fsp_opendir)(path)
 120 
 121 #define FB_READDIR(dir) \
 122         (*fs_functions_vec->fsp_readdir)(dir)
 123 
 124 #define FB_CLOSEDIR(dir) \
 125         (*fs_functions_vec->fsp_closedir)(dir)
 126 
 127 #define FB_FSYNC(fdesc) \
 128         (*fs_functions_vec->fsp_fsync)(fdesc)
 129 
 130 #define FB_RECUR_RM(path) \
 131         (*fs_functions_vec->fsp_recur_rm)(path)
 132 
 133 #define FB_STAT(path, statp) \
 134         (*fs_functions_vec->fsp_stat)(path, statp)
 135 
 136 #define FB_FSTAT(fdesc, statp) \
 137         (*fs_functions_vec->fsp_fstat)(fdesc, statp)
 138 
 139 #define FB_FTRUNC(fdesc, size) \
 140         (*fs_functions_vec->fsp_ftrunc)(fdesc, size)
 141 
 142 #define FB_LINK(existing, new) \
 143         (*fs_functions_vec->fsp_link)(existing, new)
 144 
 145 #define FB_SYMLINK(name1, name2) \
 146         (*fs_functions_vec->fsp_symlink)(name1, name2)
 147 
 148 #endif /* _FSPLUG_H */