]> sourceware.org Git - lvm2.git/blame - daemons/common/daemon-server.h
First go at the lvmetad client-side interface.
[lvm2.git] / daemons / common / daemon-server.h
CommitLineData
56517bad
PR
1/*
2 * Copyright (C) 2011 Red Hat, Inc. All rights reserved.
3 *
4 * This file is part of LVM2.
5 *
6 * This copyrighted material is made available to anyone wishing to use,
7 * modify, copy, or redistribute it subject to the terms and conditions
8 * of the GNU Lesser General Public License v.2.1.
9 *
10 * You should have received a copy of the GNU Lesser General Public License
11 * along with this program; if not, write to the Free Software Foundation,
12 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
13 */
14
15#ifndef _LVM_DAEMON_COMMON_CLIENT_H
16#define _LVM_DAEMON_COMMON_CLIENT_H
17
18typedef struct {
19 int socket_fd; /* the fd we use to talk to the client */
20 pthread_t thread_id;
21 char *read_buf;
22 void *private; /* this holds per-client state */
23} client_handle;
24
25typedef struct {
26 void *private; /* the global daemon state */
27} daemon_state;
28
29typedef struct {
30 struct config_tree *cft;
31} request;
32
33typedef struct {
34 struct config_tree *cft;
35} response;
36
37/*
38 * The callback. Called once per request issued, in the respective client's
39 * thread. It is presented by a parsed request (in the form of a config tree).
40 * The output is a new config tree that is serialised and sent back to the
41 * client. The client blocks until the request processing is done and reply is
42 * sent.
43 */
44typedef response (*handle_request)(daemon_state s, client_handle h, request r);
45
46/*
47 * Start serving the requests. This does all the daemonisation, socket setup
48 * work and so on.
49 */
50void daemon_start(daemon_state s, handle_request r);
51
52/*
53 * Take over from an already running daemon. This function handles connecting
54 * to the running daemon and telling it we are going to take over. The takeover
55 * request may be customised by passing in a non-NULL request.
56 *
57 * The takeover sequence: the old daemon stops accepting new clients, then it
58 * waits until all current client connections are closed. When that happens, it
59 * serializes its current state and sends that as a reply, which is then
60 * returned by this function (therefore, this function won't return until the
61 * previous instance has shut down).
62 *
63 * The daemon, after calling daemon_takeover is expected to set up its
64 * daemon_state using the reply from this function and call daemon_start as
65 * usual.
66 */
67daemon_reply daemon_takeover(daemon_info i, daemon_request r);
68
69/* Call this to request a clean shutdown of the daemon. Async safe. */
70void daemon_stop();
71
72#endif
This page took 0.028595 seconds and 5 git commands to generate.