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