ntvfs/sysdep: add sys_lease abstraction to later support kernel oplocks
[samba.git] / source4 / ntvfs / sysdep / sys_lease.h
1 /*
2    Unix SMB/CIFS implementation.
3
4    Copyright (C) Stefan Metzmacher 2008
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "param/share.h"
21
22 struct sys_lease_context;
23 struct opendb_entry;
24 struct messaging_context;
25
26 typedef NTSTATUS (*sys_lease_send_break_fn)(struct messaging_context *,
27                                             struct opendb_entry *,
28                                             uint8_t level);
29
30 struct sys_lease_ops {
31         const char *name;
32         NTSTATUS (*init)(struct sys_lease_context *ctx);
33         NTSTATUS (*setup)(struct sys_lease_context *ctx,
34                           struct opendb_entry *e);
35         NTSTATUS (*update)(struct sys_lease_context *ctx,
36                            struct opendb_entry *e);
37         NTSTATUS (*remove)(struct sys_lease_context *ctx,
38                            struct opendb_entry *e);
39 };
40
41 struct sys_lease_context {
42         struct event_context *event_ctx;
43         struct messaging_context *msg_ctx;
44         sys_lease_send_break_fn break_send;
45         void *private_data; /* for use of backend */
46         const struct sys_lease_ops *ops;
47 };
48
49 NTSTATUS sys_lease_register(const struct sys_lease_ops *ops);
50 NTSTATUS sys_lease_init(void);
51
52 struct sys_lease_context *sys_lease_context_create(struct share_config *scfg,
53                                                    TALLOC_CTX *mem_ctx,
54                                                    struct event_context *ev,
55                                                    struct messaging_context *msg_ctx,
56                                                    sys_lease_send_break_fn break_send);
57
58 NTSTATUS sys_lease_setup(struct sys_lease_context *ctx,
59                          struct opendb_entry *e);
60
61 NTSTATUS sys_lease_update(struct sys_lease_context *ctx,
62                           struct opendb_entry *e);
63
64 NTSTATUS sys_lease_remove(struct sys_lease_context *ctx,
65                           struct opendb_entry *e);