]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/manager.h
core: add new OnSuccess= dependency type
[thirdparty/systemd.git] / src / core / manager.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
c2f1db8f 2#pragma once
60918275
LP
3
4#include <stdbool.h>
a66d02c3 5#include <stdio.h>
ea430986 6
718db961 7#include "sd-bus.h"
d0955f00 8#include "sd-device.h"
718db961 9#include "sd-event.h"
71d35b6b 10
4ad49000 11#include "cgroup-util.h"
3a0f06c4 12#include "cgroup.h"
400f1a33 13#include "fdset.h"
2e5c94b9 14#include "hashmap.h"
6a48d82f 15#include "ip-address-access.h"
2e5c94b9 16#include "list.h"
da8e1782 17#include "prioq.h"
2e5c94b9 18#include "ratelimit.h"
19d22d43 19#include "varlink.h"
a16e1123 20
227b8a76 21struct libmnt_monitor;
57b7a260 22typedef struct Unit Unit;
227b8a76 23
4f0f902f 24/* Enforce upper limit how many names we allow */
59d1a833 25#define MANAGER_MAX_NAMES 131072 /* 128K */
4f0f902f 26
60918275 27typedef struct Manager Manager;
acbb0225 28
89998745
LP
29/* An externally visible state. We don't actually maintain this as state variable, but derive it from various fields
30 * when requested */
f755e3b7 31typedef enum ManagerState {
d81afec1 32 MANAGER_INITIALIZING,
f755e3b7 33 MANAGER_STARTING,
a16e1123 34 MANAGER_RUNNING,
f755e3b7
LP
35 MANAGER_DEGRADED,
36 MANAGER_MAINTENANCE,
37 MANAGER_STOPPING,
38 _MANAGER_STATE_MAX,
2d93c20e 39 _MANAGER_STATE_INVALID = -EINVAL,
f755e3b7
LP
40} ManagerState;
41
af41e508 42typedef enum ManagerObjective {
f755e3b7 43 MANAGER_OK,
a16e1123
LP
44 MANAGER_EXIT,
45 MANAGER_RELOAD,
46 MANAGER_REEXECUTE,
b9080b03
FF
47 MANAGER_REBOOT,
48 MANAGER_POWEROFF,
49 MANAGER_HALT,
50 MANAGER_KEXEC,
664f88a7 51 MANAGER_SWITCH_ROOT,
af41e508 52 _MANAGER_OBJECTIVE_MAX,
2d93c20e 53 _MANAGER_OBJECTIVE_INVALID = -EINVAL,
af41e508 54} ManagerObjective;
a16e1123 55
127d5fd1
ZJS
56typedef enum StatusType {
57 STATUS_TYPE_EPHEMERAL,
58 STATUS_TYPE_NORMAL,
5bcf34eb 59 STATUS_TYPE_NOTICE,
ebc5788e 60 STATUS_TYPE_EMERGENCY,
127d5fd1
ZJS
61} StatusType;
62
afcfaa69
LP
63typedef enum OOMPolicy {
64 OOM_CONTINUE, /* The kernel kills the process it wants to kill, and that's it */
65 OOM_STOP, /* The kernel kills the process it wants to kill, and we stop the unit */
66 OOM_KILL, /* The kernel kills the process it wants to kill, and all others in the unit, and we stop the unit */
67 _OOM_POLICY_MAX,
2d93c20e 68 _OOM_POLICY_INVALID = -EINVAL,
afcfaa69
LP
69} OOMPolicy;
70
7bc740f4
YW
71/* Notes:
72 * 1. TIMESTAMP_FIRMWARE, TIMESTAMP_LOADER, TIMESTAMP_KERNEL, TIMESTAMP_INITRD,
73 * TIMESTAMP_SECURITY_START, and TIMESTAMP_SECURITY_FINISH are set only when
74 * the manager is system and not running under container environment.
75 *
76 * 2. The monotonic timestamp of TIMESTAMP_KERNEL is always zero.
77 *
78 * 3. The realtime timestamp of TIMESTAMP_KERNEL will be unset if the system does not
79 * have RTC.
80 *
81 * 4. TIMESTAMP_FIRMWARE and TIMESTAMP_LOADER will be unset if the system does not
82 * have RTC, or systemd is built without EFI support.
83 *
84 * 5. The monotonic timestamps of TIMESTAMP_FIRMWARE and TIMESTAMP_LOADER are stored as
85 * negative of the actual value.
86 *
87 * 6. TIMESTAMP_USERSPACE is the timestamp of when the manager was started.
88 *
89 * 7. TIMESTAMP_INITRD_* are set only when the system is booted with an initrd.
90 */
91
9f9f0342
LP
92typedef enum ManagerTimestamp {
93 MANAGER_TIMESTAMP_FIRMWARE,
94 MANAGER_TIMESTAMP_LOADER,
95 MANAGER_TIMESTAMP_KERNEL,
96 MANAGER_TIMESTAMP_INITRD,
97 MANAGER_TIMESTAMP_USERSPACE,
98 MANAGER_TIMESTAMP_FINISH,
99
100 MANAGER_TIMESTAMP_SECURITY_START,
101 MANAGER_TIMESTAMP_SECURITY_FINISH,
102 MANAGER_TIMESTAMP_GENERATORS_START,
103 MANAGER_TIMESTAMP_GENERATORS_FINISH,
104 MANAGER_TIMESTAMP_UNITS_LOAD_START,
105 MANAGER_TIMESTAMP_UNITS_LOAD_FINISH,
d4ee7bd8
YW
106
107 MANAGER_TIMESTAMP_INITRD_SECURITY_START,
108 MANAGER_TIMESTAMP_INITRD_SECURITY_FINISH,
109 MANAGER_TIMESTAMP_INITRD_GENERATORS_START,
110 MANAGER_TIMESTAMP_INITRD_GENERATORS_FINISH,
111 MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_START,
112 MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_FINISH,
9f9f0342 113 _MANAGER_TIMESTAMP_MAX,
2d93c20e 114 _MANAGER_TIMESTAMP_INVALID = -EINVAL,
9f9f0342
LP
115} ManagerTimestamp;
116
986935cf
FB
117typedef enum WatchdogType {
118 WATCHDOG_RUNTIME,
119 WATCHDOG_REBOOT,
120 WATCHDOG_KEXEC,
121 _WATCHDOG_TYPE_MAX,
122} WatchdogType;
123
400f1a33 124#include "execute.h"
60918275 125#include "job.h"
84e3543e 126#include "path-lookup.h"
4d7213b2 127#include "show-status.h"
400f1a33 128#include "unit-name.h"
60918275 129
638cece4
LP
130typedef enum ManagerTestRunFlags {
131 MANAGER_TEST_NORMAL = 0, /* run normally */
ed4ac965
LP
132 MANAGER_TEST_RUN_MINIMAL = 1 << 0, /* create basic data structures */
133 MANAGER_TEST_RUN_BASIC = 1 << 1, /* interact with the environment */
134 MANAGER_TEST_RUN_ENV_GENERATORS = 1 << 2, /* also run env generators */
135 MANAGER_TEST_RUN_GENERATORS = 1 << 3, /* also run unit generators */
e8112e67 136 MANAGER_TEST_FULL = MANAGER_TEST_RUN_BASIC | MANAGER_TEST_RUN_ENV_GENERATORS | MANAGER_TEST_RUN_GENERATORS,
638cece4
LP
137} ManagerTestRunFlags;
138
e0a3da1f
ZJS
139assert_cc((MANAGER_TEST_FULL & UINT8_MAX) == MANAGER_TEST_FULL);
140
60918275 141struct Manager {
87f0e418 142 /* Note that the set of units we know of is allowed to be
35b8ca3a 143 * inconsistent. However the subset of it that is loaded may
87d1515d
LP
144 * not, and the list of jobs may neither. */
145
87f0e418
LP
146 /* Active jobs and units */
147 Hashmap *units; /* name string => Unit object n:1 */
4b58153d 148 Hashmap *units_by_invocation_id;
60918275
LP
149 Hashmap *jobs; /* job id => Job object 1:1 */
150
ef734fd6
LP
151 /* To make it easy to iterate through the units of a specific
152 * type we maintain a per type linked list */
ac155bb8 153 LIST_HEAD(Unit, units_by_type[_UNIT_TYPE_MAX]);
ef734fd6 154
87f0e418 155 /* Units that need to be loaded */
ac155bb8 156 LIST_HEAD(Unit, load_queue); /* this is actually more a stack than a queue, but uh. */
60918275 157
034c6ed7 158 /* Jobs that need to be run */
da8e1782 159 struct Prioq *run_queue;
034c6ed7 160
c1e1601e
LP
161 /* Units and jobs that have not yet been announced via
162 * D-Bus. When something about a job changes it is added here
163 * if it is not in there yet. This allows easy coalescing of
164 * D-Bus change signals. */
ac155bb8 165 LIST_HEAD(Unit, dbus_unit_queue);
c1e1601e
LP
166 LIST_HEAD(Job, dbus_job_queue);
167
701cc384 168 /* Units to remove */
ac155bb8 169 LIST_HEAD(Unit, cleanup_queue);
23a177ef 170
c5a97ed1
LP
171 /* Units and jobs to check when doing GC */
172 LIST_HEAD(Unit, gc_unit_queue);
173 LIST_HEAD(Job, gc_job_queue);
701cc384 174
4ad49000 175 /* Units that should be realized */
91a6073e 176 LIST_HEAD(Unit, cgroup_realize_queue);
4ad49000 177
09e24654
LP
178 /* Units whose cgroup ran empty */
179 LIST_HEAD(Unit, cgroup_empty_queue);
180
afcfaa69
LP
181 /* Units whose memory.event fired */
182 LIST_HEAD(Unit, cgroup_oom_queue);
183
19496554
MS
184 /* Target units whose default target dependencies haven't been set yet */
185 LIST_HEAD(Unit, target_deps_queue);
186
a3c1168a
LP
187 /* Units that might be subject to StopWhenUnneeded= clean-up */
188 LIST_HEAD(Unit, stop_when_unneeded_queue);
189
718db961
LP
190 sd_event *event;
191
62a76913
LP
192 /* This maps PIDs we care about to units that are interested in. We allow multiple units to he interested in
193 * the same PID and multiple PIDs to be relevant to the same unit. Since in most cases only a single unit will
194 * be interested in the same PID we use a somewhat special encoding here: the first unit interested in a PID is
195 * stored directly in the hashmap, keyed by the PID unmodified. If there are other units interested too they'll
196 * be stored in a NULL-terminated array, and keyed by the negative PID. This is safe as pid_t is signed and
197 * negative PIDs are not used for regular processes but process groups, which we don't care about in this
198 * context, but this allows us to use the negative range for our own purposes. */
199 Hashmap *watch_pids; /* pid => unit as well as -pid => array of units */
9152c765 200
95ae05c0
WC
201 /* A set contains all units which cgroup should be refreshed after startup */
202 Set *startup_units;
203
f755e3b7
LP
204 /* A set which contains all currently failed units */
205 Set *failed_units;
206
752b5905
LP
207 sd_event_source *run_queue_event_source;
208
c952c6ec 209 char *notify_socket;
718db961
LP
210 int notify_fd;
211 sd_event_source *notify_event_source;
212
d8fdc620
LP
213 int cgroups_agent_fd;
214 sd_event_source *cgroups_agent_event_source;
215
718db961
LP
216 int signal_fd;
217 sd_event_source *signal_event_source;
c952c6ec 218
575b300b
LP
219 sd_event_source *sigchld_event_source;
220
718db961
LP
221 int time_change_fd;
222 sd_event_source *time_change_event_source;
9d58f1db 223
bbf5fd8e
LP
224 sd_event_source *timezone_change_event_source;
225
718db961 226 sd_event_source *jobs_in_progress_event_source;
acbb0225 227
00d9ef85
LP
228 int user_lookup_fds[2];
229 sd_event_source *user_lookup_event_source;
230
463d0d15 231 UnitFileScope unit_file_scope;
84e3543e 232 LookupPaths lookup_paths;
e8630e69
ZJS
233 Hashmap *unit_id_map;
234 Hashmap *unit_name_map;
fe51822e 235 Set *unit_path_cache;
c2911d48 236 uint64_t unit_cache_timestamp_hash;
036643a2 237
1ad6e8b3
LP
238 char **transient_environment; /* The environment, as determined from config files, kernel cmdline and environment generators */
239 char **client_environment; /* Environment variables created by clients through the bus API */
1137a57c 240
986935cf
FB
241 usec_t watchdog[_WATCHDOG_TYPE_MAX];
242 usec_t watchdog_overridden[_WATCHDOG_TYPE_MAX];
e96d6be7 243
61927b9f
MM
244 bool runtime_watchdog_running; /* Whether the runtime HW watchdog was started, so we know if we still need to get the real timeout from the hardware */
245
9f9f0342 246 dual_timestamp timestamps[_MANAGER_TIMESTAMP_MAX];
8d567588 247
9670d583 248 /* Data specific to the device subsystem */
d0955f00 249 sd_device_monitor *device_monitor;
8fe914ec 250 Hashmap *devices_by_sysfs;
ef734fd6
LP
251
252 /* Data specific to the mount subsystem */
d379d442 253 struct libmnt_monitor *mount_monitor;
718db961 254 sd_event_source *mount_event_source;
ea430986 255
07b0b134
ML
256 /* Data specific to the swap filesystem */
257 FILE *proc_swaps;
718db961 258 sd_event_source *swap_event_source;
9670d583 259 Hashmap *swaps_by_devnode;
07b0b134 260
ea430986 261 /* Data specific to the D-Bus subsystem */
718db961
LP
262 sd_bus *api_bus, *system_bus;
263 Set *private_buses;
264 int private_listen_fd;
265 sd_event_source *private_listen_event_source;
8f8f05a9
LP
266
267 /* Contains all the clients that are subscribed to signals via
268 the API bus. Note that private bus connections are always
269 considered subscribes, since they last for very short only,
270 and it is much simpler that way. */
271 sd_bus_track *subscribed;
272 char **deserialized_subscribed;
5e8d1c9a 273
8f88ecf6
LP
274 /* This is used during reloading: before the reload we queue
275 * the reply message here, and afterwards we send it */
209de525 276 sd_bus_message *pending_reload_message;
8e274523 277
05e343b7 278 Hashmap *watch_bus; /* D-Bus names => Unit object n:1 */
05e343b7 279
71445ae7
LP
280 bool send_reloading_done;
281
7fab9d01 282 uint32_t current_job_id;
bacbccb7 283 uint32_t default_unit_job_id;
7fab9d01 284
9d58f1db
LP
285 /* Data specific to the Automount subsystem */
286 int dev_autofs_fd;
287
8e274523 288 /* Data specific to the cgroup subsystem */
4ad49000 289 Hashmap *cgroup_unit;
efdb0237 290 CGroupMask cgroup_supported;
9444b1f2 291 char *cgroup_root;
e537352b 292
09e24654 293 /* Notifications from cgroups, when the unified hierarchy is used is done via inotify. */
efdb0237
LP
294 int cgroup_inotify_fd;
295 sd_event_source *cgroup_inotify_event_source;
afcfaa69
LP
296
297 /* Maps for finding the unit for each inotify watch descriptor for the cgroup.events and
298 * memory.events cgroupv2 attributes. */
0bb814c2 299 Hashmap *cgroup_control_inotify_wd_unit;
afcfaa69 300 Hashmap *cgroup_memory_inotify_wd_unit;
701cc384 301
09e24654
LP
302 /* A defer event for handling cgroup empty events and processing them after SIGCHLD in all cases. */
303 sd_event_source *cgroup_empty_event_source;
afcfaa69 304 sd_event_source *cgroup_oom_event_source;
09e24654 305
35b8ca3a 306 /* Make sure the user cannot accidentally unmount our cgroup
33be102a
LP
307 * file system */
308 int pin_cgroupfs_fd;
309
892a035c 310 unsigned gc_marker;
efdb0237 311
bbf5fd8e
LP
312 /* The stat() data the last time we saw /etc/localtime */
313 usec_t etc_localtime_mtime;
ec08f270 314 bool etc_localtime_accessible;
bbf5fd8e 315
ec08f270 316 ManagerObjective objective;
41447faf 317
af41e508 318 /* Flags */
ec08f270 319 bool dispatching_load_queue;
9d58f1db 320
ec08f270 321 bool taint_usr;
e0a3da1f 322
d8eb10d6 323 /* Have we already sent out the READY=1 notification? */
ec08f270 324 bool ready_sent;
0c2826c6 325
d8eb10d6 326 /* Have we already printed the taint line if necessary? */
ec08f270 327 bool taint_logged;
d8eb10d6 328
00b5974f 329 /* Have we ever changed the "kernel.pid_max" sysctl? */
ec08f270 330 bool sysctl_pid_max_changed;
00b5974f 331
ec08f270 332 ManagerTestRunFlags test_run_flags;
0d8c31ff 333
287419c1
AC
334 /* If non-zero, exit with the following value when the systemd
335 * process terminate. Useful for containers: systemd-nspawn could get
336 * the return value. */
337 uint8_t return_value;
338
d450b6f2 339 ShowStatus show_status;
44a41954 340 ShowStatus show_status_overridden;
36cf4507 341 StatusUnitFormat status_unit_format;
7d5ceb64 342 char *confirm_spawn;
31a7eb86 343 bool no_console_output;
2a12e32e 344 bool service_watchdogs;
d3689161 345
0a494f1f
LP
346 ExecOutput default_std_output, default_std_error;
347
085afe36 348 usec_t default_restart_usec, default_timeout_start_usec, default_timeout_stop_usec;
dc653bf4
JK
349 usec_t default_timeout_abort_usec;
350 bool default_timeout_abort_set;
1f19a534 351
3f41e1e5
LN
352 usec_t default_start_limit_interval;
353 unsigned default_start_limit_burst;
354
085afe36
LP
355 bool default_cpu_accounting;
356 bool default_memory_accounting;
13c31542 357 bool default_io_accounting;
085afe36 358 bool default_blockio_accounting;
03a7b521 359 bool default_tasks_accounting;
377bfd2d 360 bool default_ip_accounting;
085afe36 361
3a0f06c4 362 TasksMax default_tasks_max;
bd8f585b
LP
363 usec_t default_timer_accuracy_usec;
364
afcfaa69
LP
365 OOMPolicy default_oom_policy;
366
a6ecbf83 367 int original_log_level;
bda7d78b 368 LogTarget original_log_target;
ec08f270
ZJS
369 bool log_level_overridden;
370 bool log_target_overridden;
a6ecbf83 371
517d56b1 372 struct rlimit *rlimit[_RLIMIT_MAX];
c93ff2e9 373
a7556052
LP
374 /* non-zero if we are reloading or reexecuting, */
375 int n_reloading;
e409f875
LP
376
377 unsigned n_installed_jobs;
76bf48b7 378 unsigned n_failed_jobs;
f2b68789 379
03b717a3 380 /* Jobs in progress watching */
637f8b8e 381 unsigned n_running_jobs;
7ed9f6cd 382 unsigned n_on_console;
03b717a3 383 unsigned jobs_in_progress_iteration;
637f8b8e 384
e46b13c8
ZJS
385 /* Do we have any outstanding password prompts? */
386 int have_ask_password;
387 int ask_password_inotify_fd;
388 sd_event_source *ask_password_event_source;
389
f2b68789 390 /* Type=idle pipes */
31a7eb86 391 int idle_pipe[4];
718db961 392 sd_event_source *idle_pipe_event_source;
664f88a7
LP
393
394 char *switch_root;
395 char *switch_root_init;
a57f7e2c
LP
396
397 /* This maps all possible path prefixes to the units needing
398 * them. It's a hashmap with a path string as key and a Set as
399 * value where Unit objects are contained. */
400 Hashmap *units_requiring_mounts_for;
e3dd987c 401
283868e1
SW
402 /* Used for processing polkit authorization responses */
403 Hashmap *polkit_registry;
2e5c94b9 404
29206d46
LP
405 /* Dynamic users/groups, indexed by their name */
406 Hashmap *dynamic_users;
407
00d9ef85
LP
408 /* Keep track of all UIDs and GIDs any of our services currently use. This is useful for the RemoveIPC= logic. */
409 Hashmap *uid_refs;
410 Hashmap *gid_refs;
411
e8a565cb
YW
412 /* ExecRuntime, indexed by their owner unit id */
413 Hashmap *exec_runtime_by_id;
414
24dd31c1 415 /* When the user hits C-A-D more than 7 times per 2s, do something immediately... */
2e5c94b9 416 RateLimit ctrl_alt_del_ratelimit;
ae8c7939 417 EmergencyAction cad_burst_action;
f2341e0a
LP
418
419 const char *unit_log_field;
420 const char *unit_log_format_string;
ae2a2c53 421
4b58153d
LP
422 const char *invocation_log_field;
423 const char *invocation_log_format_string;
424
463d0d15 425 int first_boot; /* tri-state */
3536f49e 426
62a76913 427 /* Prefixes of e.g. RuntimeDirectory= */
72fd1768 428 char *prefix[_EXEC_DIRECTORY_TYPE_MAX];
bb0c0d6f 429 char *received_credentials;
62a76913
LP
430
431 /* Used in the SIGCHLD and sd_notify() message invocation logic to avoid that we dispatch the same event
432 * multiple times on the same unit. */
433 unsigned sigchldgen;
434 unsigned notifygen;
c6e892bc
YW
435
436 bool honor_device_enumeration;
19d22d43
LP
437
438 VarlinkServer *varlink_server;
e30bbc90
AZ
439 /* Only systemd-oomd should be using this to subscribe to changes in ManagedOOM settings */
440 Varlink *managed_oom_varlink_request;
60918275
LP
441};
442
dc653bf4 443static inline usec_t manager_default_timeout_abort_usec(Manager *m) {
9c79f0e0 444 assert(m);
dc653bf4
JK
445 return m->default_timeout_abort_set ? m->default_timeout_abort_usec : m->default_timeout_stop_usec;
446}
447
463d0d15
LP
448#define MANAGER_IS_SYSTEM(m) ((m)->unit_file_scope == UNIT_FILE_SYSTEM)
449#define MANAGER_IS_USER(m) ((m)->unit_file_scope != UNIT_FILE_SYSTEM)
450
2c289ea8
LP
451#define MANAGER_IS_RELOADING(m) ((m)->n_reloading > 0)
452
49d5666c
LP
453#define MANAGER_IS_FINISHED(m) (dual_timestamp_is_set((m)->timestamps + MANAGER_TIMESTAMP_FINISH))
454
af41e508
LP
455/* The objective is set to OK as soon as we enter the main loop, and set otherwise as soon as we are done with it */
456#define MANAGER_IS_RUNNING(m) ((m)->objective == MANAGER_OK)
4259d202 457
638cece4
LP
458#define MANAGER_IS_TEST_RUN(m) ((m)->test_run_flags != 0)
459
460int manager_new(UnitFileScope scope, ManagerTestRunFlags test_run_flags, Manager **m);
06d8d842 461Manager* manager_free(Manager *m);
c70cac54 462DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
60918275 463
a16e1123 464int manager_startup(Manager *m, FILE *serialization, FDSet *fds);
f50e0a01 465
60918275 466Job *manager_get_job(Manager *m, uint32_t id);
87f0e418 467Unit *manager_get_unit(Manager *m, const char *name);
60918275 468
86fbf370 469int manager_get_job_from_dbus_path(Manager *m, const char *s, Job **_j);
ea430986 470
81be2388 471bool manager_unit_cache_should_retry_load(Unit *u);
718db961
LP
472int manager_load_unit_prepare(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **_ret);
473int manager_load_unit(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **_ret);
4109ede7 474int manager_load_startable_unit_or_warn(Manager *m, const char *name, const char *path, Unit **ret);
718db961 475int manager_load_unit_from_dbus_path(Manager *m, const char *s, sd_bus_error *e, Unit **_u);
28247076 476
50cbaba4
LP
477int manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, Set *affected_jobs, sd_bus_error *e, Job **_ret);
478int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode mode, Set *affected_jobs, sd_bus_error *e, Job **_ret);
479int manager_add_job_by_name_and_warn(Manager *m, JobType type, const char *name, JobMode mode, Set *affected_jobs, Job **ret);
15d167f8 480int manager_propagate_reload(Manager *m, Unit *unit, JobMode mode, sd_bus_error *e);
60918275 481
87f0e418 482void manager_dump_units(Manager *s, FILE *f, const char *prefix);
cea8e32e 483void manager_dump_jobs(Manager *s, FILE *f, const char *prefix);
ad75b9e7 484void manager_dump(Manager *s, FILE *f, const char *prefix);
713f6f90 485int manager_get_dump_string(Manager *m, char **ret);
a66d02c3 486
7fad411c
LP
487void manager_clear_jobs(Manager *m);
488
f75f613d
FB
489void manager_unwatch_pid(Manager *m, pid_t pid);
490
c1e1601e 491unsigned manager_dispatch_load_queue(Manager *m);
f50e0a01 492
79a224c4 493int manager_default_environment(Manager *m);
1ad6e8b3
LP
494int manager_transient_environment_add(Manager *m, char **plus);
495int manager_client_environment_modify(Manager *m, char **minus, char **plus);
496int manager_get_effective_environment(Manager *m, char ***ret);
497
c93ff2e9 498int manager_set_default_rlimits(Manager *m, struct rlimit **default_rlimit);
b2bb3dbe 499
9152c765 500int manager_loop(Manager *m);
83c60c9f 501
d8d5ab98 502int manager_open_serialization(Manager *m, FILE **_f);
a16e1123 503
b3680f49 504int manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root);
a16e1123
LP
505int manager_deserialize(Manager *m, FILE *f, FDSet *fds);
506
507int manager_reload(Manager *m);
508
fdf20a31 509void manager_reset_failed(Manager *m);
5632e374 510
4927fcae 511void manager_send_unit_audit(Manager *m, Unit *u, int type, bool success);
e983b760 512void manager_send_unit_plymouth(Manager *m, Unit *u);
4927fcae 513
31afa0a4 514bool manager_unit_inactive_or_pending(Manager *m, const char *name);
8f6df3fa 515
b0c918b9
LP
516void manager_check_finished(Manager *m);
517
6123dfaa 518void disable_printk_ratelimit(void);
8559b3b7 519void manager_recheck_dbus(Manager *m);
4cfa2c99 520void manager_recheck_journal(Manager *m);
f1dd0c3f 521
44a41954 522bool manager_get_show_status_on(Manager *m);
7365a296 523void manager_set_show_status(Manager *m, ShowStatus mode, const char *reason);
43bba15a 524void manager_override_show_status(Manager *m, ShowStatus mode, const char *reason);
44a41954 525
e2680723
LP
526void manager_set_first_boot(Manager *m, bool b);
527
127d5fd1 528void manager_status_printf(Manager *m, StatusType type, const char *status, const char *format, ...) _printf_(4,5);
68b29a9f 529
a57f7e2c 530Set *manager_get_units_requiring_mounts_for(Manager *m, const char *path);
e66cf1a3 531
f755e3b7
LP
532ManagerState manager_state(Manager *m);
533
5269eb6b 534int manager_update_failed_units(Manager *m, Unit *u, bool failed);
03455c28 535
00d9ef85
LP
536void manager_unref_uid(Manager *m, uid_t uid, bool destroy_now);
537int manager_ref_uid(Manager *m, uid_t uid, bool clean_ipc);
538
539void manager_unref_gid(Manager *m, gid_t gid, bool destroy_now);
2571aafb 540int manager_ref_gid(Manager *m, gid_t gid, bool clean_ipc);
00d9ef85 541
af6b0ecc
LP
542char *manager_taint_string(Manager *m);
543
adefcf28
LP
544void manager_ref_console(Manager *m);
545void manager_unref_console(Manager *m);
546
a6ecbf83
FB
547void manager_override_log_level(Manager *m, int level);
548void manager_restore_original_log_level(Manager *m);
549
bda7d78b
FB
550void manager_override_log_target(Manager *m, LogTarget target);
551void manager_restore_original_log_target(Manager *m);
552
f755e3b7
LP
553const char *manager_state_to_string(ManagerState m) _const_;
554ManagerState manager_state_from_string(const char *s) _pure_;
7d5ceb64
FB
555
556const char *manager_get_confirm_spawn(Manager *m);
b0eb2944
FB
557bool manager_is_confirm_spawn_disabled(Manager *m);
558void manager_disable_confirm_spawn(void);
9f9f0342
LP
559
560const char *manager_timestamp_to_string(ManagerTimestamp m) _const_;
561ManagerTimestamp manager_timestamp_from_string(const char *s) _pure_;
d4ee7bd8 562ManagerTimestamp manager_timestamp_initrd_mangle(ManagerTimestamp s);
afcfaa69 563
986935cf
FB
564usec_t manager_get_watchdog(Manager *m, WatchdogType t);
565void manager_set_watchdog(Manager *m, WatchdogType t, usec_t timeout);
43bba15a 566int manager_override_watchdog(Manager *m, WatchdogType t, usec_t timeout);
61927b9f 567void manager_retry_runtime_watchdog(Manager *m);
986935cf 568
afcfaa69
LP
569const char* oom_policy_to_string(OOMPolicy i) _const_;
570OOMPolicy oom_policy_from_string(const char *s) _pure_;