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 {
42 _UNIT_TYPE_INVALID = -1
45 #if 0 /// UNNEEDED by elogind
46 typedef enum UnitLoadState {
54 _UNIT_LOAD_STATE_INVALID = -1
57 typedef enum UnitActiveState {
64 _UNIT_ACTIVE_STATE_MAX,
65 _UNIT_ACTIVE_STATE_INVALID = -1
68 typedef enum AutomountState {
74 _AUTOMOUNT_STATE_INVALID = -1
77 typedef enum BusNameState {
87 _BUSNAME_STATE_INVALID = -1
90 /* We simply watch devices, we cannot plug/unplug them. That
91 * simplifies the state engine greatly */
92 typedef enum DeviceState {
94 DEVICE_TENTATIVE, /* mounted or swapped, but not (yet) announced by udev */
95 DEVICE_PLUGGED, /* announced by udev */
97 _DEVICE_STATE_INVALID = -1
100 typedef enum MountState {
102 MOUNT_MOUNTING, /* /usr/bin/mount is running, but the mount is not done yet. */
103 MOUNT_MOUNTING_DONE, /* /usr/bin/mount is running, and the mount is done. */
107 MOUNT_MOUNTING_SIGTERM,
108 MOUNT_MOUNTING_SIGKILL,
109 MOUNT_REMOUNTING_SIGTERM,
110 MOUNT_REMOUNTING_SIGKILL,
111 MOUNT_UNMOUNTING_SIGTERM,
112 MOUNT_UNMOUNTING_SIGKILL,
115 _MOUNT_STATE_INVALID = -1
118 typedef enum PathState {
124 _PATH_STATE_INVALID = -1
127 typedef enum ScopeState {
135 _SCOPE_STATE_INVALID = -1
138 typedef enum ServiceState {
144 SERVICE_EXITED, /* Nothing is running anymore, but RemainAfterExit is true hence this is OK */
146 SERVICE_STOP, /* No STOP_PRE state, instead just register multiple STOP executables */
147 SERVICE_STOP_SIGABRT, /* Watchdog timeout */
148 SERVICE_STOP_SIGTERM,
149 SERVICE_STOP_SIGKILL,
151 SERVICE_FINAL_SIGTERM, /* In case the STOP_POST executable hangs, we shoot that down, too */
152 SERVICE_FINAL_SIGKILL,
154 SERVICE_AUTO_RESTART,
156 _SERVICE_STATE_INVALID = -1
159 typedef enum SliceState {
163 _SLICE_STATE_INVALID = -1
166 typedef enum SocketState {
174 SOCKET_STOP_PRE_SIGTERM,
175 SOCKET_STOP_PRE_SIGKILL,
177 SOCKET_FINAL_SIGTERM,
178 SOCKET_FINAL_SIGKILL,
181 _SOCKET_STATE_INVALID = -1
184 typedef enum SwapState {
186 SWAP_ACTIVATING, /* /sbin/swapon is running, but the swap not yet enabled. */
187 SWAP_ACTIVATING_DONE, /* /sbin/swapon is running, and the swap is done. */
190 SWAP_ACTIVATING_SIGTERM,
191 SWAP_ACTIVATING_SIGKILL,
192 SWAP_DEACTIVATING_SIGTERM,
193 SWAP_DEACTIVATING_SIGKILL,
196 _SWAP_STATE_INVALID = -1
199 typedef enum TargetState {
203 _TARGET_STATE_INVALID = -1
206 typedef enum TimerState {
213 _TIMER_STATE_INVALID = -1
216 typedef enum UnitDependency {
217 /* Positive dependencies */
224 /* Inverse of the above */
225 UNIT_REQUIRED_BY, /* inverse of 'requires' is 'required_by' */
226 UNIT_REQUISITE_OF, /* inverse of 'requisite' is 'requisite_of' */
227 UNIT_WANTED_BY, /* inverse of 'wants' */
228 UNIT_BOUND_BY, /* inverse of 'binds_to' */
229 UNIT_CONSISTS_OF, /* inverse of 'part_of' */
231 /* Negative dependencies */
232 UNIT_CONFLICTS, /* inverse of 'conflicts' is 'conflicted_by' */
236 UNIT_BEFORE, /* inverse of 'before' is 'after' and vice versa */
242 /* Triggers (i.e. a socket triggers a service) */
246 /* Propagate reloads */
247 UNIT_PROPAGATES_RELOAD_TO,
248 UNIT_RELOAD_PROPAGATED_FROM,
250 /* Joins namespace of */
251 UNIT_JOINS_NAMESPACE_OF,
253 /* Reference information for GC logic */
254 UNIT_REFERENCES, /* Inverse of 'references' is 'referenced_by' */
257 _UNIT_DEPENDENCY_MAX,
258 _UNIT_DEPENDENCY_INVALID = -1
262 typedef enum UnitNameFlags {
263 UNIT_NAME_PLAIN = 1, /* Allow foo.service */
264 UNIT_NAME_INSTANCE = 2, /* Allow foo@bar.service */
265 UNIT_NAME_TEMPLATE = 4, /* Allow foo@.service */
266 UNIT_NAME_ANY = UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE,
269 bool unit_name_is_valid(const char *n, UnitNameFlags flags) _pure_;
270 bool unit_prefix_is_valid(const char *p) _pure_;
271 bool unit_instance_is_valid(const char *i) _pure_;
272 bool unit_suffix_is_valid(const char *s) _pure_;
274 #if 0 /// UNNEEDED by elogind
275 static inline int unit_prefix_and_instance_is_valid(const char *p) {
276 /* For prefix+instance and instance the same rules apply */
277 return unit_instance_is_valid(p);
280 int unit_name_to_prefix(const char *n, char **prefix);
281 int unit_name_to_instance(const char *n, char **instance);
282 int unit_name_to_prefix_and_instance(const char *n, char **ret);
284 UnitType unit_name_to_type(const char *n) _pure_;
286 int unit_name_change_suffix(const char *n, const char *suffix, char **ret);
289 int unit_name_build(const char *prefix, const char *instance, const char *suffix, char **ret);
291 #if 0 /// UNNEEDED by elogind
292 char *unit_name_escape(const char *f);
293 int unit_name_unescape(const char *f, char **ret);
294 int unit_name_path_escape(const char *f, char **ret);
295 int unit_name_path_unescape(const char *f, char **ret);
297 int unit_name_replace_instance(const char *f, const char *i, char **ret);
299 int unit_name_template(const char *f, char **ret);
301 int unit_name_from_path(const char *path, const char *suffix, char **ret);
302 int unit_name_from_path_instance(const char *prefix, const char *path, const char *suffix, char **ret);
303 int unit_name_to_path(const char *name, char **ret);
305 char *unit_dbus_path_from_name(const char *name);
306 int unit_name_from_dbus_path(const char *path, char **name);
308 const char* unit_dbus_interface_from_type(UnitType t);
309 const char *unit_dbus_interface_from_name(const char *name);
311 typedef enum UnitNameMangle {
316 int unit_name_mangle_with_suffix(const char *name, UnitNameMangle allow_globs, const char *suffix, char **ret);
318 static inline int unit_name_mangle(const char *name, UnitNameMangle allow_globs, char **ret) {
319 return unit_name_mangle_with_suffix(name, allow_globs, ".service", ret);
322 int slice_build_parent_slice(const char *slice, char **ret);
324 int slice_build_subslice(const char *slice, const char*name, char **subslice);
325 bool slice_name_is_valid(const char *name);
327 const char *unit_type_to_string(UnitType i) _const_;
328 UnitType unit_type_from_string(const char *s) _pure_;
330 #if 0 /// UNNEEDED by elogind
331 const char *unit_load_state_to_string(UnitLoadState i) _const_;
332 UnitLoadState unit_load_state_from_string(const char *s) _pure_;
334 const char *unit_active_state_to_string(UnitActiveState i) _const_;
335 UnitActiveState unit_active_state_from_string(const char *s) _pure_;
337 const char* automount_state_to_string(AutomountState i) _const_;
338 AutomountState automount_state_from_string(const char *s) _pure_;
340 const char* busname_state_to_string(BusNameState i) _const_;
341 BusNameState busname_state_from_string(const char *s) _pure_;
343 const char* device_state_to_string(DeviceState i) _const_;
344 DeviceState device_state_from_string(const char *s) _pure_;
346 const char* mount_state_to_string(MountState i) _const_;
347 MountState mount_state_from_string(const char *s) _pure_;
349 const char* path_state_to_string(PathState i) _const_;
350 PathState path_state_from_string(const char *s) _pure_;
352 const char* scope_state_to_string(ScopeState i) _const_;
353 ScopeState scope_state_from_string(const char *s) _pure_;
355 const char* service_state_to_string(ServiceState i) _const_;
356 ServiceState service_state_from_string(const char *s) _pure_;
358 const char* slice_state_to_string(SliceState i) _const_;
359 SliceState slice_state_from_string(const char *s) _pure_;
361 const char* socket_state_to_string(SocketState i) _const_;
362 SocketState socket_state_from_string(const char *s) _pure_;
364 const char* swap_state_to_string(SwapState i) _const_;
365 SwapState swap_state_from_string(const char *s) _pure_;
367 const char* target_state_to_string(TargetState i) _const_;
368 TargetState target_state_from_string(const char *s) _pure_;
370 const char *timer_state_to_string(TimerState i) _const_;
371 TimerState timer_state_from_string(const char *s) _pure_;
373 const char *unit_dependency_to_string(UnitDependency i) _const_;
374 UnitDependency unit_dependency_from_string(const char *s) _pure_;