1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright 2013 Damian Bogel. All rights reserved. 14 */ 15 16 #ifndef _FSH_H 17 #define _FSH_H 18 19 #include <sys/id_space.h> 20 #include <sys/types.h> 21 #include <sys/vfs.h> 22 #include <sys/vnode.h> 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 typedef id_t fsh_handle_t; 29 typedef id_t fsh_callback_handle_t; 30 31 typedef struct fsh { 32 void *arg; 33 void (*remove_cb)(void *, fsh_handle_t); 34 35 /* vnode */ 36 void (*pre_read)(void *, void **, vnode_t **, uio_t **, int *, 37 cred_t **, caller_context_t **); 38 int (*post_read)(int, void *, void *, vnode_t *, uio_t *, int, cred_t *, 39 caller_context_t *); 40 void (*pre_write)(void *, void **, vnode_t **, uio_t **, int *, 41 cred_t **, caller_context_t **); 42 int (*post_write)(int, void *, void *, vnode_t *, uio_t *, int, 43 cred_t *, caller_context_t *); 44 45 /* vfs */ 46 void (*pre_mount)(void *, void **, vfs_t **, vnode_t **, 47 struct mounta **, cred_t **); 48 int (*post_mount)(int, void *, void *, vfs_t *, vnode_t *, 49 struct mounta *, cred_t *); 50 void (*pre_unmount)(void *, void **, vfs_t **, int *, cred_t **); 51 int (*post_unmount)(int, void *, void *, vfs_t *, int, cred_t *); 52 } fsh_t; 53 54 typedef struct fsh_callback { 55 void *fshc_arg; 56 void (*fshc_free)(vfs_t *, void *); 57 void (*fshc_mount)(vfs_t *, void *); 58 } fsh_callback_t; 59 60 /* API */ 61 extern fsh_handle_t fsh_hook_install(vfs_t *, fsh_t *); 62 extern int fsh_hook_remove(fsh_handle_t); 63 64 extern fsh_callback_handle_t fsh_callback_install(fsh_callback_t *); 65 extern int fsh_callback_remove(fsh_callback_handle_t); 66 67 extern void fsh_fs_enable(vfs_t *); 68 extern void fsh_fs_disable(vfs_t *); 69 70 #ifdef __cplusplus 71 } 72 #endif 73 74 #endif /* _FSH_H */