chiark / gitweb /
journald: adjust permissions for rotated files
[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 typedef enum SwapResult {
60         SWAP_SUCCESS,
61         SWAP_FAILURE_RESOURCES,
62         SWAP_FAILURE_TIMEOUT,
63         SWAP_FAILURE_EXIT_CODE,
64         SWAP_FAILURE_SIGNAL,
65         SWAP_FAILURE_CORE_DUMP,
66         _SWAP_RESULT_MAX,
67         _SWAP_RESULT_INVALID = -1
68 } SwapResult;
69
70 struct Swap {
71         Unit meta;
72
73         char *what;
74
75         SwapParameters parameters_etc_fstab;
76         SwapParameters parameters_proc_swaps;
77         SwapParameters parameters_fragment;
78
79         bool from_etc_fstab:1;
80         bool from_proc_swaps:1;
81         bool from_fragment:1;
82
83         /* Used while looking for swaps that vanished or got added
84          * from/to /proc/swaps */
85         bool is_active:1;
86         bool just_activated:1;
87
88         SwapResult result;
89
90         usec_t timeout_usec;
91
92         ExecCommand exec_command[_SWAP_EXEC_COMMAND_MAX];
93         ExecContext exec_context;
94
95         SwapState state, deserialized_state;
96
97         ExecCommand* control_command;
98         SwapExecCommand control_command_id;
99         pid_t control_pid;
100
101         Watch timer_watch;
102
103         /* In order to be able to distinguish dependencies on
104         different device nodes we might end up creating multiple
105         devices for the same swap. We chain them up here. */
106
107         LIST_FIELDS(struct Swap, same_proc_swaps);
108 };
109
110 extern const UnitVTable swap_vtable;
111
112 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);
113
114 int swap_add_one_mount_link(Swap *s, Mount *m);
115
116 int swap_dispatch_reload(Manager *m);
117 int swap_fd_event(Manager *m, int events);
118
119 const char* swap_state_to_string(SwapState i);
120 SwapState swap_state_from_string(const char *s);
121
122 const char* swap_exec_command_to_string(SwapExecCommand i);
123 SwapExecCommand swap_exec_command_from_string(const char *s);
124
125 const char* swap_result_to_string(SwapResult i);
126 SwapResult swap_result_from_string(const char *s);
127
128 #endif