X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Funit.h;h=4d83309591776f772d6d51064480cf618965be7d;hb=dd338f01f545fd29777d7c1a53c7c658a409cda6;hp=3c998173907fc6d55f045333d1e49da07c55432d;hpb=f975e971accc4d50c73ae53167db3df7a7099cf2;p=elogind.git diff --git a/src/unit.h b/src/unit.h index 3c9981739..4d8330959 100644 --- a/src/unit.h +++ b/src/unit.h @@ -32,6 +32,7 @@ typedef enum UnitType UnitType; typedef enum UnitLoadState UnitLoadState; typedef enum UnitActiveState UnitActiveState; typedef enum UnitDependency UnitDependency; +typedef struct UnitRef UnitRef; #include "set.h" #include "util.h" @@ -119,6 +120,10 @@ enum UnitDependency { /* On Failure */ UNIT_ON_FAILURE, + /* Triggers (i.e. a socket triggers a service) */ + UNIT_TRIGGERS, + UNIT_TRIGGERED_BY, + /* Reference information for GC logic */ UNIT_REFERENCES, /* Inverse of 'references' is 'referenced_by' */ UNIT_REFERENCED_BY, @@ -130,6 +135,7 @@ enum UnitDependency { #include "manager.h" #include "job.h" #include "cgroup.h" +#include "cgroup-attr.h" struct Meta { Manager *manager; @@ -155,6 +161,9 @@ struct Meta { usec_t job_timeout; + /* References to this */ + LIST_HEAD(UnitRef, refs); + /* Conditions to check */ LIST_HEAD(Condition, conditions); @@ -167,6 +176,7 @@ struct Meta { /* Counterparts in the cgroup filesystem */ CGroupBonding *cgroup_bondings; + CGroupAttribute *cgroup_attributes; /* Per type list */ LIST_FIELDS(Meta, units_by_type); @@ -235,6 +245,15 @@ struct Meta { bool in_audit:1; }; +struct UnitRef { + /* Keeps tracks of references to a unit. This is useful so + * that we can merge two units if necessary and correct all + * references to them */ + + Unit* unit; + LIST_FIELDS(UnitRef, refs); +}; + #include "service.h" #include "timer.h" #include "socket.h" @@ -432,6 +451,7 @@ int unit_add_cgroup(Unit *u, CGroupBonding *b); int unit_add_cgroup_from_text(Unit *u, const char *name); int unit_add_default_cgroups(Unit *u); CGroupBonding* unit_get_default_cgroup(Unit *u); +int unit_add_cgroup_attribute(Unit *u, const char *controller, const char *name, const char *value, CGroupAttributeMapCallback map_callback); int unit_choose_id(Unit *u, const char *name); int unit_set_description(Unit *u, const char *description); @@ -509,7 +529,7 @@ int unit_add_node_link(Unit *u, const char *what, bool wants); int unit_coldplug(Unit *u); -void unit_status_printf(Unit *u, const char *format, ...); +void unit_status_printf(Unit *u, const char *status, const char *format, ...); bool unit_need_daemon_reload(Unit *u); @@ -533,6 +553,11 @@ bool unit_condition_test(Unit *u); UnitFileState unit_get_unit_file_state(Unit *u); +Unit* unit_ref_set(UnitRef *ref, Unit *u); +void unit_ref_unset(UnitRef *ref); + +#define UNIT_DEREF(ref) ((ref).unit) + const char *unit_load_state_to_string(UnitLoadState i); UnitLoadState unit_load_state_from_string(const char *s);