chiark / gitweb /
path: simplify recheck logic
[elogind.git] / src / swap.h
1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3 #ifndef fooswaphfoo
4 #define fooswaphfoo
5
6 /***
7   This file is part of systemd.
8
9   Copyright 2010 Lennart Poettering
10   Copyright 2010 Maarten Lankhorst
11
12   systemd is free software; you can redistribute it and/or modify it
13   under the terms of the GNU General Public License as published by
14   the Free Software Foundation; either version 2 of the License, or
15   (at your option) any later version.
16
17   systemd is distributed in the hope that it will be useful, but
18   WITHOUT ANY WARRANTY; without even the implied warranty of
19   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20   General Public License for more details.
21
22   You should have received a copy of the GNU General Public License
23   along with systemd; If not, see <http://www.gnu.org/licenses/>.
24 ***/
25
26 typedef struct Swap Swap;
27
28 #include "unit.h"
29
30 typedef enum SwapState {
31         SWAP_DEAD,
32         SWAP_ACTIVATING,
33         SWAP_ACTIVE,
34         SWAP_DEACTIVATING,
35         SWAP_ACTIVATING_SIGTERM,
36         SWAP_ACTIVATING_SIGKILL,
37         SWAP_DEACTIVATING_SIGTERM,
38         SWAP_DEACTIVATING_SIGKILL,
39         SWAP_FAILED,
40         _SWAP_STATE_MAX,
41         _SWAP_STATE_INVALID = -1
42 } SwapState;
43
44 typedef enum SwapExecCommand {
45         SWAP_EXEC_ACTIVATE,
46         SWAP_EXEC_DEACTIVATE,
47         _SWAP_EXEC_COMMAND_MAX,
48         _SWAP_EXEC_COMMAND_INVALID = -1
49 } SwapExecCommand;
50
51 typedef struct SwapParameters {
52         char *what;
53         int priority;
54         bool noauto:1;
55         bool nofail:1;
56         bool handle:1;
57 } SwapParameters;
58
59 struct Swap {
60         Meta meta;
61
62         char *what;
63
64         SwapParameters parameters_etc_fstab;
65         SwapParameters parameters_proc_swaps;
66         SwapParameters parameters_fragment;
67
68         bool from_etc_fstab:1;
69         bool from_proc_swaps:1;
70         bool from_fragment:1;
71
72         bool failure:1;
73
74         /* Used while looking for swaps that vanished or got added
75          * from/to /proc/swaps */
76         bool is_active:1;
77         bool just_activated:1;
78
79         usec_t timeout_usec;
80
81         ExecCommand exec_command[_SWAP_EXEC_COMMAND_MAX];
82         ExecContext exec_context;
83
84         SwapState state, deserialized_state;
85
86         ExecCommand* control_command;
87         SwapExecCommand control_command_id;
88         pid_t control_pid;
89
90         Watch timer_watch;
91
92         /* In order to be able to distinguish dependencies on
93         different device nodes we might end up creating multiple
94         devices for the same swap. We chain them up here. */
95
96         LIST_FIELDS(struct Swap, same_proc_swaps);
97 };
98
99 extern const UnitVTable swap_vtable;
100
101 int swap_add_one(Manager *m, const char *what, const char *what_proc_swaps, int prio, bool no_auto, bool no_fail, bool handle, bool set_flags);
102
103 int swap_add_one_mount_link(Swap *s, Mount *m);
104
105 int swap_dispatch_reload(Manager *m);
106 int swap_fd_event(Manager *m, int events);
107
108 const char* swap_state_to_string(SwapState i);
109 SwapState swap_state_from_string(const char *s);
110
111 const char* swap_exec_command_to_string(SwapExecCommand i);
112 SwapExecCommand swap_exec_command_from_string(const char *s);
113
114 #endif