manager.h revision 9670d583d381d4c2c7f4d80de63bee7ad54fef44
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering This file is part of systemd.
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Copyright 2010 Lennart 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 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 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/>.
40b71e89bae4e51768db4dc50ec64c1e9c96eec4Sebastian Thorarensen/* Enforce upper limit how many names we allow */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering#define MANAGER_MAX_NAMES 131072 /* 128K */
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 /* 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 /* 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 /* 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 /* Jobs that need to be run */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering LIST_HEAD(Job, run_queue); /* more a stack than a queue, too */
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. */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Units to remove */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Units to check when doing GC */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Units that should be realized */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering Hashmap *watch_pids; /* pid => Unit object n:1 */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *time_change_event_source;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *jobs_in_progress_event_source;
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 /* Data specific to the device subsystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Data specific to the mount subsystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Data specific to the swap filesystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Data specific to the D-Bus subsystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering sd_event_source *private_listen_event_source;
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 Hashmap *watch_bus; /* D-Bus names => Unit object n:1 */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Data specific to the Automount subsystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Data specific to the cgroup subsystem */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Make sure the user cannot accidentally unmount our cgroup
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering * file system */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering ExecOutput default_std_output, default_std_error;
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering usec_t default_restart_usec, default_timeout_start_usec,
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* non-zero if we are reloading or reexecuting, */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Jobs in progress watching */
35e2e347d38cc2f8bd7c38a0d8a5129f5fbb0ab9Lennart Poettering /* Type=idle pipes */
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 Poetteringint manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **m);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_startup(Manager *m, FILE *serialization, FDSet *fds);
5809560d858f45351856d6fe786a8117306dd0f2Lennart PoetteringJob *manager_get_job(Manager *m, uint32_t id);
5809560d858f45351856d6fe786a8117306dd0f2Lennart PoetteringUnit *manager_get_unit(Manager *m, const char *name);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_get_unit_by_path(Manager *m, const char *path, const char *suffix, Unit **_found);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_get_job_from_dbus_path(Manager *m, const char *s, Job **_j);
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 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 Poetteringvoid manager_dump_units(Manager *s, FILE *f, const char *prefix);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringvoid manager_dump_jobs(Manager *s, FILE *f, const char *prefix);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringunsigned manager_dispatch_load_queue(Manager *m);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_environment_add(Manager *m, char **minus, char **plus);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_set_default_rlimits(Manager *m, struct rlimit **default_rlimit);
ac50788b0f5aeee09e7d45db28ae8ab7f39cd52eZbigniew Jędrzejewski-Szmekvoid manager_dispatch_bus_name_owner_changed(Manager *m, const char *name, const char* old_owner, const char *new_owner);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringint manager_open_serialization(Manager *m, FILE **_f);
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);
5809560d858f45351856d6fe786a8117306dd0f2Lennart Poetteringbool manager_is_reloading_or_reexecuting(Manager *m) _pure_;
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 Poetteringbool manager_unit_inactive_or_pending(Manager *m, const char *name);
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);