manager.h revision 9670d583d381d4c2c7f4d80de63bee7ad54fef44
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#pragma once
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering/***
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering This file is part of systemd.
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Copyright 2010 Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering systemd is free software; you can redistribute it and/or modify it
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering under the terms of the GNU Lesser General Public License as published by
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering (at your option) any later version.
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering systemd is distributed in the hope that it will be useful, but
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Lesser General Public License for more details.
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering You should have received a copy of the GNU Lesser General Public License
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering***/
4871690d9e32608bbd9b18505b5326c2079c9690Allin Cottrell
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include <stdbool.h>
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include <inttypes.h>
178cc7700c23ac088cd7190d7854282075028d91Lennart Poettering#include <stdio.h>
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
d682b3a7e7c7c2941a4d3e193f1e330dbc9fae89Lennart Poettering#include "sd-bus.h"
d025f1e4dca8fc1436aff76f9e6185fe3e728daaZbigniew Jędrzejewski-Szmek#include "sd-event.h"
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include "fdset.h"
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include "cgroup-util.h"
3b7124a8db56ed57525b9ecfd19cfdc8c9facba0Lennart Poettering
40b71e89bae4e51768db4dc50ec64c1e9c96eec4Sebastian Thorarensen/* Enforce upper limit how many names we allow */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#define MANAGER_MAX_NAMES 131072 /* 128K */
178cc7700c23ac088cd7190d7854282075028d91Lennart Poettering
178cc7700c23ac088cd7190d7854282075028d91Lennart Poetteringtypedef struct Manager Manager;
178cc7700c23ac088cd7190d7854282075028d91Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poetteringtypedef enum ManagerExitCode {
b92bea5d2a9481de69bb627a7b442a9f58fca43dZbigniew Jędrzejewski-Szmek MANAGER_RUNNING,
b92bea5d2a9481de69bb627a7b442a9f58fca43dZbigniew Jędrzejewski-Szmek MANAGER_EXIT,
b92bea5d2a9481de69bb627a7b442a9f58fca43dZbigniew Jędrzejewski-Szmek MANAGER_RELOAD,
b92bea5d2a9481de69bb627a7b442a9f58fca43dZbigniew Jędrzejewski-Szmek MANAGER_REEXECUTE,
b92bea5d2a9481de69bb627a7b442a9f58fca43dZbigniew Jędrzejewski-Szmek MANAGER_REBOOT,
b92bea5d2a9481de69bb627a7b442a9f58fca43dZbigniew Jędrzejewski-Szmek MANAGER_POWEROFF,
b92bea5d2a9481de69bb627a7b442a9f58fca43dZbigniew Jędrzejewski-Szmek MANAGER_HALT,
b92bea5d2a9481de69bb627a7b442a9f58fca43dZbigniew Jędrzejewski-Szmek MANAGER_KEXEC,
b92bea5d2a9481de69bb627a7b442a9f58fca43dZbigniew Jędrzejewski-Szmek MANAGER_SWITCH_ROOT,
b92bea5d2a9481de69bb627a7b442a9f58fca43dZbigniew Jędrzejewski-Szmek _MANAGER_EXIT_CODE_MAX,
f8294e4175918117ca6c131720bcf287eadcd029Josh Triplett _MANAGER_EXIT_CODE_INVALID = -1
b92bea5d2a9481de69bb627a7b442a9f58fca43dZbigniew Jędrzejewski-Szmek} ManagerExitCode;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include "unit.h"
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include "job.h"
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include "hashmap.h"
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include "list.h"
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include "set.h"
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include "path-lookup.h"
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include "execute.h"
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#include "unit-name.h"
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poetteringstruct Manager {
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Note that the set of units we know of is allowed to be
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * inconsistent. However the subset of it that is loaded may
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * not, and the list of jobs may neither. */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Active jobs and units */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Hashmap *units; /* name string => Unit object n:1 */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Hashmap *jobs; /* job id => Job object 1:1 */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* To make it easy to iterate through the units of a specific
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * type we maintain a per type linked list */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering LIST_HEAD(Unit, units_by_type[_UNIT_TYPE_MAX]);
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Units that need to be loaded */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering LIST_HEAD(Unit, load_queue); /* this is actually more a stack than a queue, but uh. */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Jobs that need to be run */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering LIST_HEAD(Job, run_queue); /* more a stack than a queue, too */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Units and jobs that have not yet been announced via
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * D-Bus. When something about a job changes it is added here
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * if it is not in there yet. This allows easy coalescing of
178cc7700c23ac088cd7190d7854282075028d91Lennart Poettering * D-Bus change signals. */
178cc7700c23ac088cd7190d7854282075028d91Lennart Poettering LIST_HEAD(Unit, dbus_unit_queue);
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering LIST_HEAD(Job, dbus_job_queue);
178cc7700c23ac088cd7190d7854282075028d91Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Units to remove */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering LIST_HEAD(Unit, cleanup_queue);
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Units to check when doing GC */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering LIST_HEAD(Unit, gc_queue);
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Units that should be realized */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering LIST_HEAD(Unit, cgroup_queue);
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event *event;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Hashmap *watch_pids; /* pid => Unit object n:1 */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *run_queue_event_source;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
178cc7700c23ac088cd7190d7854282075028d91Lennart Poettering char *notify_socket;
178cc7700c23ac088cd7190d7854282075028d91Lennart Poettering int notify_fd;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *notify_event_source;
178cc7700c23ac088cd7190d7854282075028d91Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering int signal_fd;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *signal_event_source;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering int time_change_fd;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *time_change_event_source;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *jobs_in_progress_event_source;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering unsigned n_snapshots;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering LookupPaths lookup_paths;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Set *unit_path_cache;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering char **environment;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering usec_t runtime_watchdog;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering usec_t shutdown_watchdog;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp firmware_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp loader_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp kernel_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp initrd_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp userspace_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp finish_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp security_start_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp security_finish_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp generators_start_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp generators_finish_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp units_load_start_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering dual_timestamp units_load_finish_timestamp;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering char *generator_unit_path;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering char *generator_unit_path_early;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering char *generator_unit_path_late;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering struct udev* udev;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Data specific to the device subsystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering struct udev_monitor* udev_monitor;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *udev_event_source;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Hashmap *devices_by_sysfs;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Data specific to the mount subsystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering FILE *proc_self_mountinfo;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *mount_event_source;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Data specific to the swap filesystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering FILE *proc_swaps;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *swap_event_source;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Hashmap *swaps_by_devnode;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Data specific to the D-Bus subsystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_bus *api_bus, *system_bus;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Set *private_buses;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering int private_listen_fd;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *private_listen_event_source;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Set *subscribed;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_bus_message *queued_message; /* This is used during reloading:
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * before the reload we queue the
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * reply message here, and
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * afterwards we send it */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_bus *queued_message_bus; /* The connection to send the queued message on */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Hashmap *watch_bus; /* D-Bus names => Unit object n:1 */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering bool send_reloading_done;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering uint32_t current_job_id;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering uint32_t default_unit_job_id;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Data specific to the Automount subsystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering int dev_autofs_fd;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Data specific to the cgroup subsystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Hashmap *cgroup_unit;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering CGroupControllerMask cgroup_supported;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering char *cgroup_root;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering int gc_marker;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering unsigned n_in_gc_queue;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Make sure the user cannot accidentally unmount our cgroup
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * file system */
e88baee88fad8bc59d33b55a7a2d640ef9e16cd6Zbigniew Jędrzejewski-Szmek int pin_cgroupfs_fd;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Flags */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering SystemdRunningAs running_as;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering ManagerExitCode exit_code:5;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering bool dispatching_load_queue:1;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering bool dispatching_dbus_queue:1;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering bool taint_usr:1;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering bool show_status;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering bool confirm_spawn;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering bool no_console_output;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering ExecOutput default_std_output, default_std_error;
e88baee88fad8bc59d33b55a7a2d640ef9e16cd6Zbigniew Jędrzejewski-Szmek
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering usec_t default_restart_usec, default_timeout_start_usec,
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering default_timeout_stop_usec;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering usec_t default_start_limit_interval;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering unsigned default_start_limit_burst;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering struct rlimit *rlimit[RLIMIT_NLIMITS];
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* non-zero if we are reloading or reexecuting, */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering int n_reloading;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering unsigned n_installed_jobs;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering unsigned n_failed_jobs;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Jobs in progress watching */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering unsigned n_running_jobs;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering unsigned n_on_console;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering unsigned jobs_in_progress_iteration;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Type=idle pipes */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering int idle_pipe[4];
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *idle_pipe_event_source;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering char *switch_root;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering char *switch_root_init;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* This maps all possible path prefixes to the units needing
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * them. It's a hashmap with a path string as key and a Set as
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * value where Unit objects are contained. */
e88baee88fad8bc59d33b55a7a2d640ef9e16cd6Zbigniew Jędrzejewski-Szmek Hashmap *units_requiring_mounts_for;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering};
e88baee88fad8bc59d33b55a7a2d640ef9e16cd6Zbigniew Jędrzejewski-Szmek
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poetteringint manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **m);
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poetteringvoid manager_free(Manager *m);
e3bfb7be07d9b1f4ebb12eb22c4c8bcd2a988d51Zbigniew Jędrzejewski-Szmek
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_enumerate(Manager *m);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_startup(Manager *m, FILE *serialization, FDSet *fds);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart PoetteringJob *manager_get_job(Manager *m, uint32_t id);
5809560d858f45351856d6fe786a8117306dd0f2Lennart PoetteringUnit *manager_get_unit(Manager *m, const char *name);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_get_unit_by_path(Manager *m, const char *path, const char *suffix, Unit **_found);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_get_job_from_dbus_path(Manager *m, const char *s, Job **_j);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_load_unit_prepare(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **_ret);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_load_unit(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **_ret);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_load_unit_from_dbus_path(Manager *m, const char *s, sd_bus_error *e, Unit **_u);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_add_job(Manager *m, JobType type, Unit *unit, JobMode mode, bool force, sd_bus_error *e, Job **_ret);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode mode, bool force, sd_bus_error *e, Job **_ret);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_dump_units(Manager *s, FILE *f, const char *prefix);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_dump_jobs(Manager *s, FILE *f, const char *prefix);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_clear_jobs(Manager *m);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringunsigned manager_dispatch_load_queue(Manager *m);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_environment_add(Manager *m, char **minus, char **plus);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_set_default_rlimits(Manager *m, struct rlimit **default_rlimit);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_loop(Manager *m);
ac50788b0f5aeee09e7d45db28ae8ab7f39cd52eZbigniew Jędrzejewski-Szmek
ac50788b0f5aeee09e7d45db28ae8ab7f39cd52eZbigniew Jędrzejewski-Szmekvoid manager_dispatch_bus_name_owner_changed(Manager *m, const char *name, const char* old_owner, const char *new_owner);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_open_serialization(Manager *m, FILE **_f);
ac50788b0f5aeee09e7d45db28ae8ab7f39cd52eZbigniew Jędrzejewski-Szmek
ac50788b0f5aeee09e7d45db28ae8ab7f39cd52eZbigniew Jędrzejewski-Szmekint manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root);
ac50788b0f5aeee09e7d45db28ae8ab7f39cd52eZbigniew Jędrzejewski-Szmekint manager_deserialize(Manager *m, FILE *f, FDSet *fds);
ac50788b0f5aeee09e7d45db28ae8ab7f39cd52eZbigniew Jędrzejewski-Szmek
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_reload(Manager *m);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringbool manager_is_reloading_or_reexecuting(Manager *m) _pure_;
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_reset_failed(Manager *m);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_send_unit_audit(Manager *m, Unit *u, int type, bool success);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_send_unit_plymouth(Manager *m, Unit *u);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringbool manager_unit_inactive_or_pending(Manager *m, const char *name);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_check_finished(Manager *m);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_run_generators(Manager *m);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_undo_generators(Manager *m);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_recheck_journal(Manager *m);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_set_show_status(Manager *m, bool b);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_status_printf(Manager *m, bool ephemeral, const char *status, const char *format, ...) _printf_(4,5);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering
5809560d858f45351856d6fe786a8117306dd0f2Lennart PoetteringSet *manager_get_units_requiring_mounts_for(Manager *m, const char *path);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poettering