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