diff --git a/src/core/all-units.h b/src/core/all-units.h index fad814bf20..cb2563d2c8 100644 --- a/src/core/all-units.h +++ b/src/core/all-units.h @@ -5,6 +5,7 @@ #include "automount.h" #include "device.h" +#include "mount.h" #include "path.h" #include "scope.h" #include "service.h" diff --git a/src/core/automount.c b/src/core/automount.c index b4611981f2..ef5db87a7e 100644 --- a/src/core/automount.c +++ b/src/core/automount.c @@ -22,6 +22,7 @@ #include "io-util.h" #include "label-util.h" #include "mkdir-label.h" +#include "manager.h" #include "mount-util.h" #include "mount.h" #include "mountpoint-util.h" diff --git a/src/core/automount.h b/src/core/automount.h index e413f237ca..6f2ca7657b 100644 --- a/src/core/automount.h +++ b/src/core/automount.h @@ -1,8 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Automount Automount; - #include "unit.h" typedef enum AutomountResult { @@ -15,7 +13,7 @@ typedef enum AutomountResult { _AUTOMOUNT_RESULT_INVALID = -EINVAL, } AutomountResult; -struct Automount { +typedef struct Automount { Unit meta; AutomountState state, deserialized_state; @@ -35,7 +33,7 @@ struct Automount { sd_event_source *expire_event_source; AutomountResult result; -}; +} Automount; extern const UnitVTable automount_vtable; diff --git a/src/core/bpf-firewall.c b/src/core/bpf-firewall.c index 69000c1389..85fce6f32a 100644 --- a/src/core/bpf-firewall.c +++ b/src/core/bpf-firewall.c @@ -20,6 +20,7 @@ #include "bpf-program.h" #include "fd-util.h" #include "in-addr-prefix-util.h" +#include "manager.h" #include "memory-util.h" #include "missing_syscall.h" #include "unit.h" diff --git a/src/core/bpf-restrict-ifaces.c b/src/core/bpf-restrict-ifaces.c index af49abd677..a9066ee2a9 100644 --- a/src/core/bpf-restrict-ifaces.c +++ b/src/core/bpf-restrict-ifaces.c @@ -3,6 +3,7 @@ #include "fd-util.h" #include "bpf-restrict-ifaces.h" #include "netlink-util.h" +#include "unit.h" #if BPF_FRAMEWORK /* libbpf, clang and llc compile time dependencies are satisfied */ diff --git a/src/core/bpf-restrict-ifaces.h b/src/core/bpf-restrict-ifaces.h index 28f74279f5..80af1f3e5b 100644 --- a/src/core/bpf-restrict-ifaces.h +++ b/src/core/bpf-restrict-ifaces.h @@ -2,7 +2,6 @@ #pragma once #include "fdset.h" -#include "unit.h" typedef struct Unit Unit; diff --git a/src/core/bpf-socket-bind.c b/src/core/bpf-socket-bind.c index 8853f3eecc..437b084392 100644 --- a/src/core/bpf-socket-bind.c +++ b/src/core/bpf-socket-bind.c @@ -6,6 +6,7 @@ #include "fd-util.h" #include "bpf-socket-bind.h" +#include "unit.h" #if BPF_FRAMEWORK /* libbpf, clang, llvm and bpftool compile time dependencies are satisfied */ diff --git a/src/core/bpf-socket-bind.h b/src/core/bpf-socket-bind.h index 28b25f6872..13a0fc1521 100644 --- a/src/core/bpf-socket-bind.h +++ b/src/core/bpf-socket-bind.h @@ -2,7 +2,8 @@ #pragma once #include "fdset.h" -#include "unit.h" + +typedef struct Unit Unit; int bpf_socket_bind_supported(void); diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 7e4f7efa5e..27d81b0b85 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -27,6 +27,7 @@ #include "io-util.h" #include "ip-protocol-list.h" #include "limits-util.h" +#include "manager.h" #include "nulstr-util.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/core/core-varlink.c b/src/core/core-varlink.c index c5735d0eaa..0dee43c01b 100644 --- a/src/core/core-varlink.c +++ b/src/core/core-varlink.c @@ -3,9 +3,12 @@ #include "sd-varlink.h" #include "core-varlink.h" +#include "dynamic-user.h" #include "json-util.h" +#include "manager.h" #include "mkdir-label.h" #include "strv.h" +#include "unit.h" #include "user-util.h" #include "varlink-internal.h" #include "varlink-io.systemd.UserDatabase.h" diff --git a/src/core/core-varlink.h b/src/core/core-varlink.h index 4b77620028..e4996f01ad 100644 --- a/src/core/core-varlink.h +++ b/src/core/core-varlink.h @@ -1,7 +1,8 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include "manager.h" +typedef struct Manager Manager; +typedef struct Unit Unit; int manager_setup_varlink_server(Manager *m); diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c index 882c916c10..09692a93ec 100644 --- a/src/core/dbus-cgroup.c +++ b/src/core/dbus-cgroup.c @@ -22,6 +22,7 @@ #include "in-addr-prefix-util.h" #include "ip-protocol-list.h" #include "limits-util.h" +#include "manager.h" #include "memstream-util.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/core/dbus-execute.h b/src/core/dbus-execute.h index 4b7cb86d3e..4ad7dd27a9 100644 --- a/src/core/dbus-execute.h +++ b/src/core/dbus-execute.h @@ -5,6 +5,7 @@ #include "sd-bus-vtable.h" #include "execute.h" +#include "unit.h" #define BUS_EXEC_STATUS_VTABLE(prefix, offset, flags) \ BUS_PROPERTY_DUAL_TIMESTAMP(prefix "StartTimestamp", (offset) + offsetof(ExecStatus, start_timestamp), flags), \ diff --git a/src/core/dbus-job.h b/src/core/dbus-job.h index 6f005811cb..50957303de 100644 --- a/src/core/dbus-job.h +++ b/src/core/dbus-job.h @@ -3,9 +3,10 @@ #include "sd-bus.h" -#include "unit.h" #include "bus-object.h" +typedef struct Job Job; + extern const sd_bus_vtable bus_job_vtable[]; extern const BusObjectImplementation job_object; diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c index 6320e267a1..903f45d102 100644 --- a/src/core/dbus-manager.c +++ b/src/core/dbus-manager.c @@ -25,6 +25,7 @@ #include "dbus-unit.h" #include "dbus-util.h" #include "dbus.h" +#include "dynamic-user.h" #include "env-util.h" #include "fd-util.h" #include "fileio.h" diff --git a/src/core/dbus-manager.h b/src/core/dbus-manager.h index 9b050801a7..fcabca57c9 100644 --- a/src/core/dbus-manager.h +++ b/src/core/dbus-manager.h @@ -3,7 +3,9 @@ #include "sd-bus-vtable.h" -#include "manager.h" +#include "time-util.h" + +typedef struct Manager Manager; extern const sd_bus_vtable bus_manager_vtable[]; extern const sd_bus_vtable bus_manager_log_control_vtable[]; diff --git a/src/core/dbus-scope.h b/src/core/dbus-scope.h index 8f1bc02e31..fb7467a0f5 100644 --- a/src/core/dbus-scope.h +++ b/src/core/dbus-scope.h @@ -4,9 +4,10 @@ #include "sd-bus.h" #include "sd-bus-vtable.h" -#include "scope.h" #include "unit.h" +typedef struct Scope Scope; + extern const sd_bus_vtable bus_scope_vtable[]; int bus_scope_set_property(Unit *u, const char *name, sd_bus_message *i, UnitWriteFlags flags, sd_bus_error *error); diff --git a/src/core/dbus-util.c b/src/core/dbus-util.c index b44afc4258..e1a4cf0bdc 100644 --- a/src/core/dbus-util.c +++ b/src/core/dbus-util.c @@ -4,6 +4,7 @@ #include "bus-util.h" #include "dbus-util.h" #include "escape.h" +#include "manager.h" #include "parse-util.h" #include "path-util.h" #include "reboot-util.h" diff --git a/src/core/dbus.h b/src/core/dbus.h index bfd4c8ea4e..a362a652af 100644 --- a/src/core/dbus.h +++ b/src/core/dbus.h @@ -3,7 +3,9 @@ #include "sd-bus.h" -#include "manager.h" +#include "fdset.h" + +typedef struct Manager Manager; void bus_send_pending_reload_message(Manager *m); diff --git a/src/core/device.c b/src/core/device.c index b6cdee73d4..08235caa42 100644 --- a/src/core/device.c +++ b/src/core/device.c @@ -13,6 +13,7 @@ #include "device-util.h" #include "device.h" #include "log.h" +#include "manager.h" #include "parse-util.h" #include "path-util.h" #include "ratelimit.h" diff --git a/src/core/device.h b/src/core/device.h index 631f45d45e..6f42cfa93a 100644 --- a/src/core/device.h +++ b/src/core/device.h @@ -3,8 +3,6 @@ #include "unit.h" -typedef struct Device Device; - /* A mask specifying where we have seen the device currently. This is a bitmask because the device might show up * asynchronously from each other at various places. For example, in very common case a device might already be mounted * before udev finished probing it (think: a script setting up a loopback block device, formatting it and mounting it @@ -17,7 +15,7 @@ typedef enum DeviceFound { _DEVICE_FOUND_MASK = DEVICE_FOUND_UDEV|DEVICE_FOUND_MOUNT|DEVICE_FOUND_SWAP, } DeviceFound; -struct Device { +typedef struct Device { Unit meta; char *sysfs, *deserialized_sysfs; @@ -36,7 +34,7 @@ struct Device { /* The SYSTEMD_WANTS udev property for this device the last time we saw it */ char **wants_property; -}; +} Device; extern const UnitVTable device_vtable; diff --git a/src/core/dynamic-user.c b/src/core/dynamic-user.c index acfa1f52af..d21c709de7 100644 --- a/src/core/dynamic-user.c +++ b/src/core/dynamic-user.c @@ -12,6 +12,7 @@ #include "fs-util.h" #include "iovec-util.h" #include "lock-util.h" +#include "manager.h" #include "parse-util.h" #include "random-util.h" #include "serialize.h" diff --git a/src/core/dynamic-user.h b/src/core/dynamic-user.h index 303a7d081c..594595038d 100644 --- a/src/core/dynamic-user.h +++ b/src/core/dynamic-user.h @@ -1,7 +1,15 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include +#include +#include + +#include "fdset.h" +#include "memory-util.h" + typedef struct DynamicUser DynamicUser; +typedef struct Manager Manager; typedef struct DynamicCreds { /* A combination of a dynamic user and group */ @@ -9,8 +17,6 @@ typedef struct DynamicCreds { DynamicUser *group; } DynamicCreds; -#include "manager.h" - /* Note that this object always allocates a pair of user and group under the same name, even if one of them isn't * used. This means, if you want to allocate a group and user pair, and they might have two different names, then you * need to allocated two of these objects. DynamicCreds below makes that easy. */ diff --git a/src/core/emergency-action.c b/src/core/emergency-action.c index 2d756b306c..6752926bd9 100644 --- a/src/core/emergency-action.c +++ b/src/core/emergency-action.c @@ -6,6 +6,7 @@ #include "bus-error.h" #include "bus-util.h" #include "emergency-action.h" +#include "manager.h" #include "raw-reboot.h" #include "reboot-util.h" #include "special.h" diff --git a/src/core/emergency-action.h b/src/core/emergency-action.h index 5f7b0b4bc9..d0f1898a60 100644 --- a/src/core/emergency-action.h +++ b/src/core/emergency-action.h @@ -3,8 +3,11 @@ #include +#include "macro.h" #include "runtime-scope.h" +typedef struct Manager Manager; + typedef enum EmergencyAction { EMERGENCY_ACTION_NONE, EMERGENCY_ACTION_EXIT, @@ -34,9 +37,6 @@ typedef enum EmergencyActionFlags { _EMERGENCY_ACTION_FLAGS_MAX = (1 << 3) - 1, } EmergencyActionFlags; -#include "macro.h" -#include "manager.h" - void emergency_action( Manager *m, EmergencyAction action, diff --git a/src/core/exec-invoke.c b/src/core/exec-invoke.c index f22aad76d2..fcbd62744b 100644 --- a/src/core/exec-invoke.c +++ b/src/core/exec-invoke.c @@ -24,11 +24,13 @@ #include "bpf-restrict-fs.h" #include "btrfs-util.h" #include "capability-util.h" +#include "cgroup.h" #include "cgroup-setup.h" #include "chase.h" #include "chattr-util.h" #include "chown-recursive.h" #include "copy.h" +#include "dynamic-user.h" #include "env-util.h" #include "escape.h" #include "exec-credential.h" @@ -43,10 +45,12 @@ #include "ioprio-util.h" #include "iovec-util.h" #include "journal-send.h" +#include "manager.h" #include "memfd-util.h" #include "missing_sched.h" #include "missing_syscall.h" #include "mkdir-label.h" +#include "mount-util.h" #include "osc-context.h" #include "proc-cmdline.h" #include "process-util.h" diff --git a/src/core/execute-serialize.c b/src/core/execute-serialize.c index 380d6fa6bb..0aea6fe804 100644 --- a/src/core/execute-serialize.c +++ b/src/core/execute-serialize.c @@ -2,7 +2,9 @@ #include "af-list.h" #include "capability-util.h" +#include "cgroup.h" #include "cgroup-setup.h" +#include "dynamic-user.h" #include "escape.h" #include "exec-credential.h" #include "execute-serialize.h" diff --git a/src/core/execute.c b/src/core/execute.c index 76ad7345ca..4aef0ad819 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -25,6 +25,7 @@ #include "cgroup-setup.h" #include "constants.h" #include "cpu-set-util.h" +#include "dynamic-user.h" #include "env-file.h" #include "env-util.h" #include "errno-list.h" diff --git a/src/core/execute.h b/src/core/execute.h index 63d5b448de..9b449012b2 100644 --- a/src/core/execute.h +++ b/src/core/execute.h @@ -1,19 +1,11 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct ExecStatus ExecStatus; -typedef struct ExecCommand ExecCommand; -typedef struct ExecContext ExecContext; -typedef struct ExecSharedRuntime ExecSharedRuntime; -typedef struct DynamicCreds DynamicCreds; -typedef struct ExecRuntime ExecRuntime; -typedef struct ExecParameters ExecParameters; -typedef struct Manager Manager; - #include #include #include #include +#include #include "bus-unit-util.h" #include "cgroup-util.h" @@ -22,6 +14,7 @@ typedef struct Manager Manager; #include "exec-util.h" #include "fdset.h" #include "list.h" +#include "log-context.h" #include "namespace.h" #include "nsflags.h" #include "numa-util.h" @@ -34,6 +27,17 @@ typedef struct Manager Manager; #include "set.h" #include "time-util.h" +typedef struct CGroupContext CGroupContext; +typedef struct ExecStatus ExecStatus; +typedef struct ExecCommand ExecCommand; +typedef struct ExecContext ExecContext; +typedef struct ExecSharedRuntime ExecSharedRuntime; +typedef struct DynamicCreds DynamicCreds; +typedef struct ExecRuntime ExecRuntime; +typedef struct ExecParameters ExecParameters; +typedef struct Manager Manager; +typedef struct Unit Unit; + #define EXEC_STDIN_DATA_MAX (64U*1024U*1024U) typedef enum ExecUtmpMode { @@ -494,9 +498,6 @@ struct ExecParameters { .pidref_transport_fd = -EBADF, \ } -#include "unit.h" -#include "dynamic-user.h" - int exec_spawn( Unit *unit, ExecCommand *command, diff --git a/src/core/executor.c b/src/core/executor.c index bc3566a9fc..daee9ea955 100644 --- a/src/core/executor.c +++ b/src/core/executor.c @@ -9,6 +9,8 @@ #include "argv-util.h" #include "build.h" #include "capability-util.h" +#include "cgroup.h" +#include "dynamic-user.h" #include "exec-invoke.h" #include "execute-serialize.h" #include "execute.h" diff --git a/src/core/fuzz-execute-serialize.c b/src/core/fuzz-execute-serialize.c index 05abee5a4e..67437549ea 100644 --- a/src/core/fuzz-execute-serialize.c +++ b/src/core/fuzz-execute-serialize.c @@ -20,6 +20,7 @@ #include #include "alloc-util.h" +#include "dynamic-user.h" #include "execute-serialize.h" #include "fd-util.h" #include "fuzz.h" diff --git a/src/core/fuzz-unit-file.c b/src/core/fuzz-unit-file.c index 57480cf766..d8987c9648 100644 --- a/src/core/fuzz-unit-file.c +++ b/src/core/fuzz-unit-file.c @@ -5,6 +5,7 @@ #include "fuzz.h" #include "install.h" #include "load-fragment.h" +#include "manager.h" #include "manager-dump.h" #include "memstream-util.h" #include "string-util.h" diff --git a/src/core/job.c b/src/core/job.c index 4209a7c8d4..d051b3db6d 100644 --- a/src/core/job.c +++ b/src/core/job.c @@ -16,6 +16,7 @@ #include "job.h" #include "log.h" #include "macro.h" +#include "manager.h" #include "parse-util.h" #include "serialize.h" #include "set.h" diff --git a/src/core/job.h b/src/core/job.h index 388890e368..3c1e861bbc 100644 --- a/src/core/job.h +++ b/src/core/job.h @@ -7,6 +7,8 @@ #include "sd-event.h" #include "list.h" +#include "memory-util.h" +#include "time-util.h" #include "unit-dependency-atom.h" typedef struct ActivationDetails ActivationDetails; diff --git a/src/core/kill.h b/src/core/kill.h index 3add663d71..97a295e1e5 100644 --- a/src/core/kill.h +++ b/src/core/kill.h @@ -1,8 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct KillContext KillContext; - #include #include @@ -18,7 +16,7 @@ typedef enum KillMode { _KILL_MODE_INVALID = -EINVAL, } KillMode; -struct KillContext { +typedef struct KillContext { KillMode kill_mode; int kill_signal; int restart_kill_signal; @@ -26,7 +24,7 @@ struct KillContext { int watchdog_signal; bool send_sigkill; bool send_sighup; -}; +} KillContext; typedef enum KillWhom { /* Kill whom is a property of an operation */ diff --git a/src/core/load-dropin.c b/src/core/load-dropin.c index 5c1ccc966f..0256f70635 100644 --- a/src/core/load-dropin.c +++ b/src/core/load-dropin.c @@ -1,16 +1,29 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include "conf-parser.h" +#include "dropin.h" #include "fs-util.h" #include "load-dropin.h" #include "load-fragment.h" #include "log.h" +#include "manager.h" #include "stat-util.h" #include "string-util.h" #include "strv.h" #include "unit-name.h" #include "unit.h" +int unit_find_dropin_paths(Unit *u, bool use_unit_path_cache, char ***paths) { + assert(u); + + return unit_file_find_dropin_paths(NULL, + u->manager->lookup_paths.search_path, + use_unit_path_cache ? u->manager->unit_path_cache : NULL, + ".d", ".conf", + u->id, u->aliases, + paths); +} + static int process_deps(Unit *u, UnitDependency dependency, const char *dir_suffix) { _cleanup_strv_free_ char **paths = NULL; int r; diff --git a/src/core/load-dropin.h b/src/core/load-dropin.h index 141bc7dd0f..864ea4f083 100644 --- a/src/core/load-dropin.h +++ b/src/core/load-dropin.h @@ -1,20 +1,12 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -#include "dropin.h" -#include "unit.h" +#include + +typedef struct Unit Unit; /* Read service data supplementary drop-in directories */ -static inline int unit_find_dropin_paths(Unit *u, bool use_unit_path_cache, char ***paths) { - assert(u); - - return unit_file_find_dropin_paths(NULL, - u->manager->lookup_paths.search_path, - use_unit_path_cache ? u->manager->unit_path_cache : NULL, - ".d", ".conf", - u->id, u->aliases, - paths); -} +int unit_find_dropin_paths(Unit *u, bool use_unit_path_cache, char ***paths); int unit_load_dropin(Unit *u); diff --git a/src/core/load-fragment.h b/src/core/load-fragment.h index 0e68d1bb84..6aa8f479f5 100644 --- a/src/core/load-fragment.h +++ b/src/core/load-fragment.h @@ -2,7 +2,8 @@ #pragma once #include "conf-parser.h" -#include "unit.h" + +typedef struct Unit Unit; /* These functions are declared in the header to make them accessible to unit tests. */ bool contains_instance_specifier_superset(const char *s); diff --git a/src/core/manager-dump.c b/src/core/manager-dump.c index 7e678fa03e..9cb184b4d2 100644 --- a/src/core/manager-dump.c +++ b/src/core/manager-dump.c @@ -4,6 +4,7 @@ #include "fd-util.h" #include "fileio.h" #include "hashmap.h" +#include "manager.h" #include "manager-dump.h" #include "memstream-util.h" #include "unit-serialize.h" diff --git a/src/core/manager-dump.h b/src/core/manager-dump.h index 5b96f26f54..a02c29ad68 100644 --- a/src/core/manager-dump.h +++ b/src/core/manager-dump.h @@ -3,7 +3,7 @@ #include -#include "manager.h" +typedef struct Manager Manager; void manager_dump_jobs(Manager *s, FILE *f, char **patterns, const char *prefix); int manager_get_dump_jobs_string(Manager *m, char **patterns, const char *prefix, char **ret); diff --git a/src/core/manager-serialize.c b/src/core/manager-serialize.c index c5cb82e8d5..ae4472b38b 100644 --- a/src/core/manager-serialize.c +++ b/src/core/manager-serialize.c @@ -5,6 +5,7 @@ #include "clean-ipc.h" #include "core-varlink.h" #include "dbus.h" +#include "dynamic-user.h" #include "fd-util.h" #include "fileio.h" #include "format-util.h" diff --git a/src/core/manager-serialize.h b/src/core/manager-serialize.h index c52261e378..7d4e8effb2 100644 --- a/src/core/manager-serialize.h +++ b/src/core/manager-serialize.h @@ -2,10 +2,12 @@ #pragma once #include +#include -#include "manager.h" #include "fdset.h" +typedef struct Manager Manager; + #define DESTROY_IPC_FLAG (UINT32_C(1) << 31) int manager_open_serialization(Manager *m, FILE **ret_f); diff --git a/src/core/manager.c b/src/core/manager.c index cf000d8f21..15c8f2b90d 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -42,6 +42,7 @@ #include "dbus-unit.h" #include "dbus.h" #include "dirent-util.h" +#include "dynamic-user.h" #include "env-util.h" #include "escape.h" #include "event-util.h" @@ -5182,11 +5183,3 @@ static const char* const manager_timestamp_table[_MANAGER_TIMESTAMP_MAX] = { }; DEFINE_STRING_TABLE_LOOKUP(manager_timestamp, ManagerTimestamp); - -static const char* const oom_policy_table[_OOM_POLICY_MAX] = { - [OOM_CONTINUE] = "continue", - [OOM_STOP] = "stop", - [OOM_KILL] = "kill", -}; - -DEFINE_STRING_TABLE_LOOKUP(oom_policy, OOMPolicy); diff --git a/src/core/manager.h b/src/core/manager.h index a07c665e5b..cbad223d1b 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -9,14 +9,22 @@ #include "sd-event.h" #include "sd-varlink.h" -#include "common-signal.h" #include "cgroup-util.h" #include "cgroup.h" +#include "common-signal.h" +#include "emergency-action.h" +#include "execute.h" #include "fdset.h" #include "hashmap.h" +#include "job.h" #include "list.h" +#include "path-lookup.h" #include "prioq.h" #include "ratelimit.h" +#include "show-status.h" +#include "transaction.h" +#include "unit-name.h" +#include "unit.h" struct libmnt_monitor; typedef struct Unit Unit; @@ -62,21 +70,6 @@ typedef enum ManagerObjective { _MANAGER_OBJECTIVE_INVALID = -EINVAL, } ManagerObjective; -typedef enum StatusType { - STATUS_TYPE_EPHEMERAL, - STATUS_TYPE_NORMAL, - STATUS_TYPE_NOTICE, - STATUS_TYPE_EMERGENCY, -} StatusType; - -typedef enum OOMPolicy { - OOM_CONTINUE, /* The kernel or systemd-oomd kills the process it wants to kill, and that's it */ - OOM_STOP, /* The kernel or systemd-oomd kills the process it wants to kill, and we stop the unit */ - OOM_KILL, /* The kernel or systemd-oomd kills the process it wants to kill, and all others in the unit, and we stop the unit */ - _OOM_POLICY_MAX, - _OOM_POLICY_INVALID = -EINVAL, -} OOMPolicy; - /* Notes: * 1. TIMESTAMP_FIRMWARE, TIMESTAMP_LOADER, TIMESTAMP_KERNEL, TIMESTAMP_INITRD, * TIMESTAMP_SECURITY_START, and TIMESTAMP_SECURITY_FINISH are set only when @@ -135,14 +128,6 @@ typedef enum WatchdogType { _WATCHDOG_TYPE_MAX, } WatchdogType; -#include "execute.h" -#include "job.h" -#include "path-lookup.h" -#include "show-status.h" -#include "transaction.h" -#include "unit-name.h" -#include "unit.h" - typedef enum ManagerTestRunFlags { MANAGER_TEST_NORMAL = 0, /* run normally */ MANAGER_TEST_RUN_MINIMAL = 1 << 0, /* create basic data structures */ @@ -670,9 +655,6 @@ LogTarget manager_get_executor_log_target(Manager *m); int manager_allocate_idle_pipe(Manager *m); -const char* oom_policy_to_string(OOMPolicy i) _const_; -OOMPolicy oom_policy_from_string(const char *s) _pure_; - void unit_defaults_init(UnitDefaults *defaults, RuntimeScope scope); void unit_defaults_done(UnitDefaults *defaults); diff --git a/src/core/mount.h b/src/core/mount.h index 7fd643f6fa..c754ae7933 100644 --- a/src/core/mount.h +++ b/src/core/mount.h @@ -1,9 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Mount Mount; - -#include "dynamic-user.h" #include "kill.h" #include "pidref.h" #include "unit.h" @@ -42,7 +39,7 @@ typedef enum MountProcFlags { MOUNT_PROC_JUST_CHANGED = 1 << 2, } MountProcFlags; -struct Mount { +typedef struct Mount { Unit meta; char *where; @@ -88,7 +85,7 @@ struct Mount { sd_event_source *timer_event_source; unsigned n_retry_umount; -}; +} Mount; extern const UnitVTable mount_vtable; diff --git a/src/core/path.c b/src/core/path.c index 4556dbfc71..364d94f528 100644 --- a/src/core/path.c +++ b/src/core/path.c @@ -16,6 +16,7 @@ #include "glob-util.h" #include "inotify-util.h" #include "macro.h" +#include "manager.h" #include "mkdir-label.h" #include "path.h" #include "path-util.h" diff --git a/src/core/path.h b/src/core/path.h index cb5b662911..8a3b8b3592 100644 --- a/src/core/path.h +++ b/src/core/path.h @@ -1,10 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Path Path; -typedef struct PathSpec PathSpec; -typedef struct ActivationDetailsPath ActivationDetailsPath; - #include "unit.h" typedef enum PathType { @@ -52,7 +48,7 @@ typedef enum PathResult { _PATH_RESULT_INVALID = -EINVAL, } PathResult; -struct Path { +typedef struct Path { Unit meta; LIST_HEAD(PathSpec, specs); @@ -67,12 +63,12 @@ struct Path { RateLimit trigger_limit; sd_event_source *trigger_notify_event_source; -}; +} Path; -struct ActivationDetailsPath { +typedef struct ActivationDetailsPath { ActivationDetails meta; char *trigger_path_filename; -}; +} ActivationDetailsPath; void path_free_specs(Path *p); diff --git a/src/core/scope.c b/src/core/scope.c index 208716ea07..caeadd7e23 100644 --- a/src/core/scope.c +++ b/src/core/scope.c @@ -10,6 +10,7 @@ #include "exit-status.h" #include "load-dropin.h" #include "log.h" +#include "manager.h" #include "process-util.h" #include "random-util.h" #include "scope.h" diff --git a/src/core/scope.h b/src/core/scope.h index 1090431c13..27f2c83b23 100644 --- a/src/core/scope.h +++ b/src/core/scope.h @@ -1,8 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Scope Scope; - #include "cgroup.h" #include "kill.h" #include "unit.h" @@ -16,7 +14,7 @@ typedef enum ScopeResult { _SCOPE_RESULT_INVALID = -EINVAL, } ScopeResult; -struct Scope { +typedef struct Scope { Unit meta; CGroupContext cgroup_context; @@ -41,7 +39,7 @@ struct Scope { char *group; OOMPolicy oom_policy; -}; +} Scope; extern const UnitVTable scope_vtable; diff --git a/src/core/service.h b/src/core/service.h index 68be9075c1..a542c0fb11 100644 --- a/src/core/service.h +++ b/src/core/service.h @@ -1,12 +1,9 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Service Service; -typedef struct ServiceFDStore ServiceFDStore; -typedef struct ServiceExtraFD ServiceExtraFD; - #include "exit-status.h" #include "kill.h" +#include "manager.h" #include "open-file.h" #include "path.h" #include "pidref.h" @@ -14,6 +11,8 @@ typedef struct ServiceExtraFD ServiceExtraFD; #include "socket.h" #include "unit.h" +typedef struct Service Service; + typedef enum ServiceRestart { SERVICE_RESTART_NO, SERVICE_RESTART_ON_SUCCESS, @@ -101,7 +100,7 @@ typedef enum ServiceRestartMode { _SERVICE_RESTART_MODE_INVALID = -EINVAL, } ServiceRestartMode; -struct ServiceFDStore { +typedef struct ServiceFDStore { Service *service; int fd; @@ -109,13 +108,13 @@ struct ServiceFDStore { sd_event_source *event_source; bool do_poll; - LIST_FIELDS(ServiceFDStore, fd_store); -}; + LIST_FIELDS(struct ServiceFDStore, fd_store); +} ServiceFDStore; -struct ServiceExtraFD { +typedef struct ServiceExtraFD { int fd; char *fdname; -}; +} ServiceExtraFD; struct Service { Unit meta; diff --git a/src/core/slice.c b/src/core/slice.c index ba6f2fb9c5..4a9ff98ee9 100644 --- a/src/core/slice.c +++ b/src/core/slice.c @@ -7,6 +7,7 @@ #include "dbus-unit.h" #include "fd-util.h" #include "log.h" +#include "manager.h" #include "serialize.h" #include "slice.h" #include "special.h" diff --git a/src/core/slice.h b/src/core/slice.h index 37e1f700f8..46faecc030 100644 --- a/src/core/slice.h +++ b/src/core/slice.h @@ -3,9 +3,7 @@ #include "unit.h" -typedef struct Slice Slice; - -struct Slice { +typedef struct Slice { Unit meta; SliceState state, deserialized_state; @@ -16,7 +14,7 @@ struct Slice { CGroupContext cgroup_context; CGroupRuntime *cgroup_runtime; -}; +} Slice; extern const UnitVTable slice_vtable; diff --git a/src/core/socket.c b/src/core/socket.c index 861aaba3d4..bb1db8e90e 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -28,6 +28,7 @@ #include "ip-protocol-list.h" #include "label-util.h" #include "log.h" +#include "manager.h" #include "mkdir-label.h" #include "parse-util.h" #include "path-util.h" diff --git a/src/core/socket.h b/src/core/socket.h index 51fc96280b..240a9ac965 100644 --- a/src/core/socket.h +++ b/src/core/socket.h @@ -1,14 +1,13 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Socket Socket; -typedef struct SocketPeer SocketPeer; - -#include "mount.h" #include "pidref.h" #include "socket-util.h" #include "unit.h" +typedef struct Socket Socket; +typedef struct SocketPeer SocketPeer; + typedef enum SocketExecCommand { SOCKET_EXEC_START_PRE, SOCKET_EXEC_START_CHOWN, diff --git a/src/core/swap.c b/src/core/swap.c index cc5a21ee78..a8549699ff 100644 --- a/src/core/swap.c +++ b/src/core/swap.c @@ -17,6 +17,7 @@ #include "fd-util.h" #include "format-util.h" #include "fstab-util.h" +#include "manager.h" #include "parse-util.h" #include "path-util.h" #include "process-util.h" diff --git a/src/core/swap.h b/src/core/swap.h index d9bbd377f0..fce7ea5e56 100644 --- a/src/core/swap.h +++ b/src/core/swap.h @@ -10,8 +10,6 @@ #include "pidref.h" #include "unit.h" -typedef struct Swap Swap; - typedef enum SwapExecCommand { SWAP_EXEC_ACTIVATE, SWAP_EXEC_DEACTIVATE, @@ -38,7 +36,7 @@ typedef struct SwapParameters { bool priority_set; } SwapParameters; -struct Swap { +typedef struct Swap { Unit meta; char *what; @@ -85,7 +83,7 @@ struct Swap { devices for the same swap. We chain them up here. */ LIST_FIELDS(struct Swap, same_devnode); -}; +} Swap; extern const UnitVTable swap_vtable; diff --git a/src/core/target.h b/src/core/target.h index bb909d664f..9e7c77c027 100644 --- a/src/core/target.h +++ b/src/core/target.h @@ -3,13 +3,11 @@ #include "unit.h" -typedef struct Target Target; - -struct Target { +typedef struct Target { Unit meta; TargetState state, deserialized_state; -}; +} Target; extern const UnitVTable target_vtable; diff --git a/src/core/timer.c b/src/core/timer.c index b37a67f310..d69e229922 100644 --- a/src/core/timer.c +++ b/src/core/timer.c @@ -12,6 +12,7 @@ #include "dbus-timer.h" #include "dbus-unit.h" #include "fs-util.h" +#include "manager.h" #include "parse-util.h" #include "random-util.h" #include "serialize.h" diff --git a/src/core/timer.h b/src/core/timer.h index 14a9931dff..90f19a7cf4 100644 --- a/src/core/timer.h +++ b/src/core/timer.h @@ -1,9 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Timer Timer; -typedef struct ActivationDetailsTimer ActivationDetailsTimer; - #include "calendarspec.h" #include "unit.h" @@ -37,7 +34,7 @@ typedef enum TimerResult { _TIMER_RESULT_INVALID = -EINVAL, } TimerResult; -struct Timer { +typedef struct Timer { Unit meta; usec_t accuracy_usec; @@ -64,12 +61,12 @@ struct Timer { bool defer_reactivation; char *stamp_path; -}; +} Timer; -struct ActivationDetailsTimer { +typedef struct ActivationDetailsTimer { ActivationDetails meta; dual_timestamp last_trigger; -}; +} ActivationDetailsTimer; #define TIMER_MONOTONIC_CLOCK(t) ((t)->wake_system ? CLOCK_BOOTTIME_ALARM : CLOCK_MONOTONIC) diff --git a/src/core/transaction.c b/src/core/transaction.c index 07fd612d91..6d0d7e73be 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -8,6 +8,7 @@ #include "bus-common-errors.h" #include "bus-error.h" #include "dbus-unit.h" +#include "manager.h" #include "slice.h" #include "strv.h" #include "terminal-util.h" diff --git a/src/core/transaction.h b/src/core/transaction.h index b6728a35d7..1f58fcebcc 100644 --- a/src/core/transaction.h +++ b/src/core/transaction.h @@ -1,20 +1,15 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once -typedef struct Transaction Transaction; -typedef enum TransactionAddFlags TransactionAddFlags; - #include "hashmap.h" #include "job.h" -#include "manager.h" -#include "unit.h" -struct Transaction { +typedef struct Transaction { /* Jobs to be added */ Hashmap *jobs; /* Unit object => Job object list 1:1 */ Job *anchor_job; /* The job the user asked for */ bool irreversible; -}; +} Transaction; Transaction* transaction_new(bool irreversible); Transaction* transaction_free(Transaction *tr); diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c index f25e2e3986..0bdacfc3c0 100644 --- a/src/core/unit-printf.c +++ b/src/core/unit-printf.c @@ -4,6 +4,7 @@ #include "cgroup-util.h" #include "format-util.h" #include "macro.h" +#include "manager.h" #include "sd-path.h" #include "specifier.h" #include "string-util.h" diff --git a/src/core/unit-serialize.c b/src/core/unit-serialize.c index 13aea615dd..a38b38590a 100644 --- a/src/core/unit-serialize.c +++ b/src/core/unit-serialize.c @@ -10,6 +10,7 @@ #include "parse-util.h" #include "serialize.h" #include "string-table.h" +#include "unit.h" #include "unit-serialize.h" #include "user-util.h" diff --git a/src/core/unit-serialize.h b/src/core/unit-serialize.h index ab8a8e3be9..a7ac03cf82 100644 --- a/src/core/unit-serialize.h +++ b/src/core/unit-serialize.h @@ -1,11 +1,13 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include #include -#include "unit.h" #include "fdset.h" +typedef struct Unit Unit; + /* These functions serialize state for our own usage, i.e.: across a reload/reexec, rather than for being * passed to a child process. */ diff --git a/src/core/unit.c b/src/core/unit.c index c25777671d..db14297622 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -24,6 +24,7 @@ #include "dbus-unit.h" #include "dbus.h" #include "dropin.h" +#include "dynamic-user.h" #include "env-util.h" #include "escape.h" #include "exec-credential.h" @@ -6810,6 +6811,14 @@ static const char* const unit_mount_dependency_type_table[_UNIT_MOUNT_DEPENDENCY DEFINE_STRING_TABLE_LOOKUP(unit_mount_dependency_type, UnitMountDependencyType); +static const char* const oom_policy_table[_OOM_POLICY_MAX] = { + [OOM_CONTINUE] = "continue", + [OOM_STOP] = "stop", + [OOM_KILL] = "kill", +}; + +DEFINE_STRING_TABLE_LOOKUP(oom_policy, OOMPolicy); + UnitDependency unit_mount_dependency_type_to_dependency_type(UnitMountDependencyType t) { switch (t) { diff --git a/src/core/unit.h b/src/core/unit.h index 6a46cbda0a..5bf52f5f6d 100644 --- a/src/core/unit.h +++ b/src/core/unit.h @@ -9,7 +9,21 @@ #include "sd-id128.h" -/* Circular dependency with manager.h, needs to be defined before local includes */ +#include "cgroup.h" +#include "condition.h" +#include "emergency-action.h" +#include "execute.h" +#include "install.h" +#include "job.h" +#include "list.h" +#include "log-context.h" +#include "mount-util.h" +#include "pidref.h" +#include "ratelimit.h" +#include "unit-file.h" + +typedef struct UnitRef UnitRef; + typedef enum UnitMountDependencyType { UNIT_MOUNT_WANTS, UNIT_MOUNT_REQUIRES, @@ -17,18 +31,6 @@ typedef enum UnitMountDependencyType { _UNIT_MOUNT_DEPENDENCY_TYPE_INVALID = -EINVAL, } UnitMountDependencyType; -#include "cgroup.h" -#include "condition.h" -#include "emergency-action.h" -#include "install.h" -#include "list.h" -#include "log-context.h" -#include "mount-util.h" -#include "pidref.h" -#include "unit-file.h" - -typedef struct UnitRef UnitRef; - typedef enum KillOperation { KILL_TERMINATE, KILL_TERMINATE_AND_LOG, @@ -46,6 +48,21 @@ typedef enum CollectMode { _COLLECT_MODE_INVALID = -EINVAL, } CollectMode; +typedef enum OOMPolicy { + OOM_CONTINUE, /* The kernel or systemd-oomd kills the process it wants to kill, and that's it */ + OOM_STOP, /* The kernel or systemd-oomd kills the process it wants to kill, and we stop the unit */ + OOM_KILL, /* The kernel or systemd-oomd kills the process it wants to kill, and all others in the unit, and we stop the unit */ + _OOM_POLICY_MAX, + _OOM_POLICY_INVALID = -EINVAL, +} OOMPolicy; + +typedef enum StatusType { + STATUS_TYPE_EPHEMERAL, + STATUS_TYPE_NORMAL, + STATUS_TYPE_NOTICE, + STATUS_TYPE_EMERGENCY, +} StatusType; + static inline bool UNIT_IS_ACTIVE_OR_RELOADING(UnitActiveState t) { return IN_SET(t, UNIT_ACTIVE, UNIT_RELOADING, UNIT_REFRESHING); } @@ -200,8 +217,6 @@ static inline void* UNIT_DEPENDENCY_TO_PTR(UnitDependency d) { return INT_TO_PTR(d); } -#include "job.h" - struct UnitRef { /* Keeps tracks of references to a unit. This is useful so * that we can merge two units if necessary and correct all @@ -1061,6 +1076,9 @@ UnitMountDependencyType unit_mount_dependency_type_from_string(const char *s) _c const char* unit_mount_dependency_type_to_string(UnitMountDependencyType t) _const_; UnitDependency unit_mount_dependency_type_to_dependency_type(UnitMountDependencyType t) _pure_; +const char* oom_policy_to_string(OOMPolicy i) _const_; +OOMPolicy oom_policy_from_string(const char *s) _pure_; + /* Macros which append UNIT= or USER_UNIT= to the message */ #define log_unit_full_errno_zerook(unit, level, error, ...) \