2
* Copyright (C) 2011-2012 Red Hat, Inc.
4
* This file is part of LVM2.
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.
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
15
#ifndef _LVM_DAEMON_COMMON_SERVER_H
16
#define _LVM_DAEMON_COMMON_SERVER_H
18
#include "daemon-client.h"
21
int socket_fd; /* the fd we use to talk to the client */
24
void *private; /* this holds per-client state */
28
struct dm_config_tree *cft;
34
struct dm_config_tree *cft;
41
* Craft a simple reply, without the need to construct a config_tree. See
42
* daemon_send_simple in daemon-client.h for the description of the parameters.
44
response daemon_reply_simple(const char *id, ...);
46
static inline int daemon_request_int(request r, const char *path, int def) {
49
return dm_config_find_int(r.cft->root, path, def);
52
static inline const char *daemon_request_str(request r, const char *path, const char *def) {
55
return dm_config_find_str(r.cft->root, path, def);
59
* The callback. Called once per request issued, in the respective client's
60
* thread. It is presented by a parsed request (in the form of a config tree).
61
* The output is a new config tree that is serialised and sent back to the
62
* client. The client blocks until the request processing is done and reply is
65
typedef response (*handle_request)(struct daemon_state s, client_handle h, request r);
67
typedef struct daemon_state {
69
* The maximal stack size for individual daemon threads. This is
70
* essential for daemons that need to be locked into memory, since
71
* pthread's default is 10M per thread.
73
int thread_stack_size;
75
/* Flags & attributes affecting the behaviour of the daemon. */
77
unsigned foreground:1;
80
const char *socket_path;
85
handle_request handler;
86
int (*daemon_init)(struct daemon_state *st);
87
int (*daemon_fini)(struct daemon_state *st);
89
/* Global runtime info maintained by the framework. */
92
void *private; /* the global daemon state */
96
* Start serving the requests. This does all the daemonisation, socket setup
97
* work and so on. This function takes over the process, and upon failure, it
98
* will terminate execution. It may be called at most once.
100
void daemon_start(daemon_state s);
103
* Take over from an already running daemon. This function handles connecting
104
* to the running daemon and telling it we are going to take over. The takeover
105
* request may be customised by passing in a non-NULL request.
107
* The takeover sequence: the old daemon stops accepting new clients, then it
108
* waits until all current client connections are closed. When that happens, it
109
* serializes its current state and sends that as a reply, which is then
110
* returned by this function (therefore, this function won't return until the
111
* previous instance has shut down).
113
* The daemon, after calling daemon_takeover is expected to set up its
114
* daemon_state using the reply from this function and call daemon_start as
117
daemon_reply daemon_takeover(daemon_info i, daemon_request r);
119
/* Call this to request a clean shutdown of the daemon. Async safe. */
120
void daemon_stop(void);