194047d49SGordon Ross /* 294047d49SGordon Ross * CDDL HEADER START 394047d49SGordon Ross * 494047d49SGordon Ross * The contents of this file are subject to the terms of the 594047d49SGordon Ross * Common Development and Distribution License (the "License"). 694047d49SGordon Ross * You may not use this file except in compliance with the License. 794047d49SGordon Ross * 894047d49SGordon Ross * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 994047d49SGordon Ross * or http://www.opensolaris.org/os/licensing. 1094047d49SGordon Ross * See the License for the specific language governing permissions 1194047d49SGordon Ross * and limitations under the License. 1294047d49SGordon Ross * 1394047d49SGordon Ross * When distributing Covered Code, include this CDDL HEADER in each 1494047d49SGordon Ross * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1594047d49SGordon Ross * If applicable, add the following below this CDDL HEADER, with the 1694047d49SGordon Ross * fields enclosed by brackets "[]" replaced with your own identifying 1794047d49SGordon Ross * information: Portions Copyright [yyyy] [name of copyright owner] 1894047d49SGordon Ross * 1994047d49SGordon Ross * CDDL HEADER END 2094047d49SGordon Ross */ 2194047d49SGordon Ross 2294047d49SGordon Ross /* 2394047d49SGordon Ross * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 24e8754e84SGordon Ross * Copyright 2020 Tintri by DDN, Inc. All rights reserved. 2572b35b05SGordon Ross * Copyright 2022 RackTop Systems, Inc. 2694047d49SGordon Ross */ 2794047d49SGordon Ross 2894047d49SGordon Ross /* 2994047d49SGordon Ross * Function prototypes needed by the "testoplock" program 3094047d49SGordon Ross * (a small subset of what the SMB server uses) 3194047d49SGordon Ross */ 3294047d49SGordon Ross 3394047d49SGordon Ross #ifndef _SMB_KPROTO_H_ 3494047d49SGordon Ross #define _SMB_KPROTO_H_ 3594047d49SGordon Ross 3694047d49SGordon Ross #ifdef __cplusplus 3794047d49SGordon Ross extern "C" { 3894047d49SGordon Ross #endif 3994047d49SGordon Ross 4094047d49SGordon Ross #include <sys/types.h> 4194047d49SGordon Ross #include <sys/param.h> 4294047d49SGordon Ross #include <sys/varargs.h> 4394047d49SGordon Ross #include <sys/cmn_err.h> 4494047d49SGordon Ross #include <smbsrv/smb.h> 4594047d49SGordon Ross #include <smbsrv/smb_ktypes.h> 4694047d49SGordon Ross 4794047d49SGordon Ross boolean_t smb_ofile_is_open(smb_ofile_t *); 4894047d49SGordon Ross boolean_t smb_node_is_file(smb_node_t *); 4994047d49SGordon Ross 5094047d49SGordon Ross /* 5194047d49SGordon Ross * SMB locked list function prototypes 5294047d49SGordon Ross */ 5394047d49SGordon Ross void smb_llist_init(void); 5494047d49SGordon Ross void smb_llist_fini(void); 5594047d49SGordon Ross void smb_llist_constructor(smb_llist_t *, size_t, size_t); 5694047d49SGordon Ross void smb_llist_destructor(smb_llist_t *); 5794047d49SGordon Ross void smb_llist_enter(smb_llist_t *ll, krw_t); 5894047d49SGordon Ross void smb_llist_exit(smb_llist_t *); 5994047d49SGordon Ross void smb_llist_post(smb_llist_t *, void *, smb_dtorproc_t); 6094047d49SGordon Ross void smb_llist_flush(smb_llist_t *); 6194047d49SGordon Ross void smb_llist_insert_head(smb_llist_t *ll, void *obj); 6294047d49SGordon Ross void smb_llist_insert_tail(smb_llist_t *ll, void *obj); 6394047d49SGordon Ross void smb_llist_remove(smb_llist_t *ll, void *obj); 6494047d49SGordon Ross int smb_llist_upgrade(smb_llist_t *ll); 6594047d49SGordon Ross uint32_t smb_llist_get_count(smb_llist_t *ll); 6694047d49SGordon Ross #define smb_llist_head(ll) list_head(&(ll)->ll_list) 6794047d49SGordon Ross #define smb_llist_next(ll, obj) list_next(&(ll)->ll_list, obj) 6894047d49SGordon Ross int smb_account_connected(smb_user_t *user); 6994047d49SGordon Ross 7094047d49SGordon Ross /* 7194047d49SGordon Ross * Common oplock functions 7294047d49SGordon Ross */ 7394047d49SGordon Ross uint32_t smb_oplock_request(smb_request_t *, smb_ofile_t *, uint32_t *); 7472b35b05SGordon Ross uint32_t smb_oplock_request_LH(smb_request_t *, smb_ofile_t *, uint32_t *); 7594047d49SGordon Ross uint32_t smb_oplock_ack_break(smb_request_t *, smb_ofile_t *, uint32_t *); 7694047d49SGordon Ross uint32_t smb_oplock_break_PARENT(smb_node_t *, smb_ofile_t *); 7794047d49SGordon Ross uint32_t smb_oplock_break_OPEN(smb_node_t *, smb_ofile_t *, 7894047d49SGordon Ross uint32_t DesiredAccess, uint32_t CreateDisposition); 7994047d49SGordon Ross uint32_t smb_oplock_break_BATCH(smb_node_t *, smb_ofile_t *, 8094047d49SGordon Ross uint32_t DesiredAccess, uint32_t CreateDisposition); 8194047d49SGordon Ross uint32_t smb_oplock_break_HANDLE(smb_node_t *, smb_ofile_t *); 8294047d49SGordon Ross void smb_oplock_break_CLOSE(smb_node_t *, smb_ofile_t *); 8394047d49SGordon Ross uint32_t smb_oplock_break_READ(smb_node_t *, smb_ofile_t *); 8494047d49SGordon Ross uint32_t smb_oplock_break_WRITE(smb_node_t *, smb_ofile_t *); 8594047d49SGordon Ross uint32_t smb_oplock_break_SETINFO(smb_node_t *, 8694047d49SGordon Ross smb_ofile_t *ofile, uint32_t InfoClass); 8794047d49SGordon Ross uint32_t smb_oplock_break_DELETE(smb_node_t *, smb_ofile_t *); 8872b35b05SGordon Ross void smb_oplock_close(smb_ofile_t *); 8972b35b05SGordon Ross 9072b35b05SGordon Ross void smb_oplock_ind_break(smb_ofile_t *, uint32_t, boolean_t, uint32_t); 9172b35b05SGordon Ross void smb_oplock_ind_break_in_ack(smb_request_t *, smb_ofile_t *, 9272b35b05SGordon Ross uint32_t, boolean_t); 9372b35b05SGordon Ross void smb_oplock_send_break(smb_request_t *); 9472b35b05SGordon Ross 95*7f6a299eSGordon Ross uint32_t smb_oplock_wait_ack(smb_request_t *, uint32_t); 9672b35b05SGordon Ross uint32_t smb_oplock_wait_break(smb_request_t *, smb_node_t *, int); 9772b35b05SGordon Ross uint32_t smb_oplock_wait_break_fem(smb_node_t *, int); 9894047d49SGordon Ross 9994047d49SGordon Ross void smb_oplock_move(smb_node_t *, smb_ofile_t *, smb_ofile_t *); 10094047d49SGordon Ross 10194047d49SGordon Ross /* 10294047d49SGordon Ross * Protocol-specific oplock functions 10372b35b05SGordon Ross * (not needed here) 10494047d49SGordon Ross */ 10594047d49SGordon Ross 10694047d49SGordon Ross int smb_lock_range_access(smb_request_t *, smb_node_t *, 10794047d49SGordon Ross uint64_t, uint64_t, boolean_t); 10894047d49SGordon Ross 109e8754e84SGordon Ross int smb_fem_oplock_install(smb_node_t *); 110e8754e84SGordon Ross void smb_fem_oplock_uninstall(smb_node_t *); 11194047d49SGordon Ross 11294047d49SGordon Ross #ifdef __cplusplus 11394047d49SGordon Ross } 11494047d49SGordon Ross #endif 11594047d49SGordon Ross 11694047d49SGordon Ross #endif /* _SMB_KPROTO_H_ */ 117