4 This file is part of systemd.
6 Copyright 2010 Lennart Poettering
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
26 #define UNIT_NAME_MAX 256
28 typedef enum UnitType {
41 _UNIT_TYPE_INVALID = -1
44 #if 0 /// UNNEEDED by elogind
45 typedef enum UnitLoadState {
53 _UNIT_LOAD_STATE_INVALID = -1
56 typedef enum UnitActiveState {
63 _UNIT_ACTIVE_STATE_MAX,
64 _UNIT_ACTIVE_STATE_INVALID = -1
67 typedef enum AutomountState {
73 _AUTOMOUNT_STATE_INVALID = -1
76 /* We simply watch devices, we cannot plug/unplug them. That
77 * simplifies the state engine greatly */
78 typedef enum DeviceState {
80 DEVICE_TENTATIVE, /* mounted or swapped, but not (yet) announced by udev */
81 DEVICE_PLUGGED, /* announced by udev */
83 _DEVICE_STATE_INVALID = -1
86 typedef enum MountState {
88 MOUNT_MOUNTING, /* /usr/bin/mount is running, but the mount is not done yet. */
89 MOUNT_MOUNTING_DONE, /* /usr/bin/mount is running, and the mount is done. */
93 MOUNT_REMOUNTING_SIGTERM,
94 MOUNT_REMOUNTING_SIGKILL,
95 MOUNT_UNMOUNTING_SIGTERM,
96 MOUNT_UNMOUNTING_SIGKILL,
99 _MOUNT_STATE_INVALID = -1
102 typedef enum PathState {
108 _PATH_STATE_INVALID = -1
111 typedef enum ScopeState {
119 _SCOPE_STATE_INVALID = -1
122 typedef enum ServiceState {
128 SERVICE_EXITED, /* Nothing is running anymore, but RemainAfterExit is true hence this is OK */
130 SERVICE_STOP, /* No STOP_PRE state, instead just register multiple STOP executables */
131 SERVICE_STOP_SIGABRT, /* Watchdog timeout */
132 SERVICE_STOP_SIGTERM,
133 SERVICE_STOP_SIGKILL,
135 SERVICE_FINAL_SIGTERM, /* In case the STOP_POST executable hangs, we shoot that down, too */
136 SERVICE_FINAL_SIGKILL,
138 SERVICE_AUTO_RESTART,
140 _SERVICE_STATE_INVALID = -1
143 typedef enum SliceState {
147 _SLICE_STATE_INVALID = -1
150 typedef enum SocketState {
158 SOCKET_STOP_PRE_SIGTERM,
159 SOCKET_STOP_PRE_SIGKILL,
161 SOCKET_FINAL_SIGTERM,
162 SOCKET_FINAL_SIGKILL,
165 _SOCKET_STATE_INVALID = -1
168 typedef enum SwapState {
170 SWAP_ACTIVATING, /* /sbin/swapon is running, but the swap not yet enabled. */
171 SWAP_ACTIVATING_DONE, /* /sbin/swapon is running, and the swap is done. */
174 SWAP_ACTIVATING_SIGTERM,
175 SWAP_ACTIVATING_SIGKILL,
176 SWAP_DEACTIVATING_SIGTERM,
177 SWAP_DEACTIVATING_SIGKILL,
180 _SWAP_STATE_INVALID = -1
183 typedef enum TargetState {
187 _TARGET_STATE_INVALID = -1
190 typedef enum TimerState {
197 _TIMER_STATE_INVALID = -1
200 typedef enum UnitDependency {
201 /* Positive dependencies */
208 /* Inverse of the above */
209 UNIT_REQUIRED_BY, /* inverse of 'requires' is 'required_by' */
210 UNIT_REQUISITE_OF, /* inverse of 'requisite' is 'requisite_of' */
211 UNIT_WANTED_BY, /* inverse of 'wants' */
212 UNIT_BOUND_BY, /* inverse of 'binds_to' */
213 UNIT_CONSISTS_OF, /* inverse of 'part_of' */
215 /* Negative dependencies */
216 UNIT_CONFLICTS, /* inverse of 'conflicts' is 'conflicted_by' */
220 UNIT_BEFORE, /* inverse of 'before' is 'after' and vice versa */
226 /* Triggers (i.e. a socket triggers a service) */
230 /* Propagate reloads */
231 UNIT_PROPAGATES_RELOAD_TO,
232 UNIT_RELOAD_PROPAGATED_FROM,
234 /* Joins namespace of */
235 UNIT_JOINS_NAMESPACE_OF,
237 /* Reference information for GC logic */
238 UNIT_REFERENCES, /* Inverse of 'references' is 'referenced_by' */
241 _UNIT_DEPENDENCY_MAX,
242 _UNIT_DEPENDENCY_INVALID = -1
246 typedef enum NotifyAccess {
252 _NOTIFY_ACCESS_INVALID = -1
255 typedef enum UnitNameFlags {
256 UNIT_NAME_PLAIN = 1, /* Allow foo.service */
257 UNIT_NAME_INSTANCE = 2, /* Allow foo@bar.service */
258 UNIT_NAME_TEMPLATE = 4, /* Allow foo@.service */
259 UNIT_NAME_ANY = UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE,
262 bool unit_name_is_valid(const char *n, UnitNameFlags flags) _pure_;
263 bool unit_prefix_is_valid(const char *p) _pure_;
264 bool unit_instance_is_valid(const char *i) _pure_;
265 bool unit_suffix_is_valid(const char *s) _pure_;
267 #if 0 /// UNNEEDED by elogind
268 static inline int unit_prefix_and_instance_is_valid(const char *p) {
269 /* For prefix+instance and instance the same rules apply */
270 return unit_instance_is_valid(p);
273 int unit_name_to_prefix(const char *n, char **prefix);
274 int unit_name_to_instance(const char *n, char **instance);
275 int unit_name_to_prefix_and_instance(const char *n, char **ret);
277 UnitType unit_name_to_type(const char *n) _pure_;
279 int unit_name_change_suffix(const char *n, const char *suffix, char **ret);
282 int unit_name_build(const char *prefix, const char *instance, const char *suffix, char **ret);
284 #if 0 /// UNNEEDED by elogind
285 char *unit_name_escape(const char *f);
286 int unit_name_unescape(const char *f, char **ret);
287 int unit_name_path_escape(const char *f, char **ret);
288 int unit_name_path_unescape(const char *f, char **ret);
290 int unit_name_replace_instance(const char *f, const char *i, char **ret);
292 int unit_name_template(const char *f, char **ret);
294 int unit_name_from_path(const char *path, const char *suffix, char **ret);
295 int unit_name_from_path_instance(const char *prefix, const char *path, const char *suffix, char **ret);
296 int unit_name_to_path(const char *name, char **ret);
298 char *unit_dbus_path_from_name(const char *name);
299 int unit_name_from_dbus_path(const char *path, char **name);
301 const char* unit_dbus_interface_from_type(UnitType t);
302 const char *unit_dbus_interface_from_name(const char *name);
304 typedef enum UnitNameMangle {
309 int unit_name_mangle_with_suffix(const char *name, UnitNameMangle allow_globs, const char *suffix, char **ret);
311 static inline int unit_name_mangle(const char *name, UnitNameMangle allow_globs, char **ret) {
312 return unit_name_mangle_with_suffix(name, allow_globs, ".service", ret);
315 int slice_build_parent_slice(const char *slice, char **ret);
317 int slice_build_subslice(const char *slice, const char*name, char **subslice);
318 bool slice_name_is_valid(const char *name);
320 const char *unit_type_to_string(UnitType i) _const_;
321 UnitType unit_type_from_string(const char *s) _pure_;
323 #if 0 /// UNNEEDED by elogind
324 const char *unit_load_state_to_string(UnitLoadState i) _const_;
325 UnitLoadState unit_load_state_from_string(const char *s) _pure_;
327 const char *unit_active_state_to_string(UnitActiveState i) _const_;
328 UnitActiveState unit_active_state_from_string(const char *s) _pure_;
330 const char* automount_state_to_string(AutomountState i) _const_;
331 AutomountState automount_state_from_string(const char *s) _pure_;
333 const char* device_state_to_string(DeviceState i) _const_;
334 DeviceState device_state_from_string(const char *s) _pure_;
336 const char* mount_state_to_string(MountState i) _const_;
337 MountState mount_state_from_string(const char *s) _pure_;
339 const char* path_state_to_string(PathState i) _const_;
340 PathState path_state_from_string(const char *s) _pure_;
342 const char* scope_state_to_string(ScopeState i) _const_;
343 ScopeState scope_state_from_string(const char *s) _pure_;
345 const char* service_state_to_string(ServiceState i) _const_;
346 ServiceState service_state_from_string(const char *s) _pure_;
348 const char* slice_state_to_string(SliceState i) _const_;
349 SliceState slice_state_from_string(const char *s) _pure_;
351 const char* socket_state_to_string(SocketState i) _const_;
352 SocketState socket_state_from_string(const char *s) _pure_;
354 const char* swap_state_to_string(SwapState i) _const_;
355 SwapState swap_state_from_string(const char *s) _pure_;
357 const char* target_state_to_string(TargetState i) _const_;
358 TargetState target_state_from_string(const char *s) _pure_;
360 const char *timer_state_to_string(TimerState i) _const_;
361 TimerState timer_state_from_string(const char *s) _pure_;
363 const char *unit_dependency_to_string(UnitDependency i) _const_;
364 UnitDependency unit_dependency_from_string(const char *s) _pure_;
367 const char* notify_access_to_string(NotifyAccess i) _const_;
368 NotifyAccess notify_access_from_string(const char *s) _pure_;