#include "sd-id128.h"
#include "bpf-program.h"
+#include "cgroup.h"
#include "condition.h"
#include "emergency-action.h"
#include "install.h"
#include "list.h"
-#include "show-status.h"
+#include "pidref.h"
#include "set.h"
+#include "show-status.h"
#include "unit-file.h"
-#include "cgroup.h"
typedef struct UnitRef UnitRef;
int (*stop)(Unit *u);
int (*reload)(Unit *u);
- int (*kill)(Unit *u, KillWho w, int signo, int code, int value, sd_bus_error *error);
-
/* Clear out the various runtime/state/cache/logs/configuration data */
int (*clean)(Unit *u, ExecCleanMask m);
/* Returns the next timeout of a unit */
int (*get_timeout)(Unit *u, usec_t *timeout);
- /* Returns the main PID if there is any defined, or 0. */
- pid_t (*main_pid)(Unit *u);
+ /* Returns the start timeout of a unit */
+ usec_t (*get_timeout_start_usec)(Unit *u);
/* Returns the main PID if there is any defined, or 0. */
- pid_t (*control_pid)(Unit *u);
+ PidRef* (*main_pid)(Unit *u);
+
+ /* Returns the control PID if there is any defined, or 0. */
+ PidRef* (*control_pid)(Unit *u);
/* Returns true if the unit currently needs access to the console */
bool (*needs_console)(Unit *u);
* limiting checks to occur before we do anything else. */
int (*can_start)(Unit *u);
+ /* Returns > 0 if the whole subsystem is ratelimited, and new start operations should not be started
+ * for this unit type right now. */
+ int (*subsystem_ratelimited)(Manager *m);
+
/* The strings to print in status messages */
UnitStatusMessageFormats status_message_formats;
/* True if systemd-oomd can monitor and act on this unit's recursive children's cgroups */
bool can_set_managed_oom;
+
+ /* If true, we'll notify plymouth about this unit */
+ bool notify_plymouth;
+
+ /* The audit events to generate on start + stop (or 0 if none shall be generated) */
+ int audit_start_message_type;
+ int audit_stop_message_type;
} UnitVTable;
extern const UnitVTable * const unit_vtable[_UNIT_TYPE_MAX];
Unit* unit_has_dependency(const Unit *u, UnitDependencyAtom atom, Unit *other);
int unit_get_dependency_array(const Unit *u, UnitDependencyAtom atom, Unit ***ret_array);
+int unit_get_transitive_dependency_set(Unit *u, UnitDependencyAtom atom, Set **ret);
static inline Hashmap* unit_get_dependencies(Unit *u, UnitDependency d) {
return hashmap_get(u->dependencies, UNIT_DEPENDENCY_TO_PTR(d));
int unit_reload(Unit *u);
int unit_kill(Unit *u, KillWho w, int signo, int code, int value, sd_bus_error *error);
-int unit_kill_common(Unit *u, KillWho who, int signo, int code, int value, pid_t main_pid, pid_t control_pid, sd_bus_error *error);
void unit_notify_cgroup_oom(Unit *u, bool managed_oom);
int unit_write_setting(Unit *u, UnitWriteFlags flags, const char *name, const char *data);
int unit_write_settingf(Unit *u, UnitWriteFlags mode, const char *name, const char *format, ...) _printf_(4,5);
-int unit_kill_context(Unit *u, KillContext *c, KillOperation k, pid_t main_pid, pid_t control_pid, bool main_pid_alien);
+int unit_kill_context(Unit *u, KillContext *c, KillOperation k, PidRef *main_pid, PidRef *control_pid, bool main_pid_alien);
int unit_make_transient(Unit *u);
bool unit_is_upheld_by_active(Unit *u, Unit **ret_culprit);
bool unit_is_bound_by_inactive(Unit *u, Unit **ret_culprit);
-pid_t unit_control_pid(Unit *u);
-pid_t unit_main_pid(Unit *u);
+PidRef* unit_control_pid(Unit *u);
+PidRef* unit_main_pid(Unit *u);
void unit_warn_if_dir_nonempty(Unit *u, const char* where);
int unit_fail_if_noncanonical(Unit *u, const char* where);
int unit_set_exec_params(Unit *s, ExecParameters *p);
-int unit_fork_helper_process(Unit *u, const char *name, pid_t *ret);
-int unit_fork_and_watch_rm_rf(Unit *u, char **paths, pid_t *ret_pid);
+int unit_fork_helper_process(Unit *u, const char *name, PidRef *ret);
+int unit_fork_and_watch_rm_rf(Unit *u, char **paths, PidRef *ret);
void unit_remove_dependencies(Unit *u, UnitDependencyMask mask);