2010-08-17 05:33:07 +04:00
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2010-04-18 05:08:16 +04:00
2012-07-18 21:07:51 +04:00
# pragma once
2010-04-18 05:08:16 +04:00
/***
This file is part of systemd .
Copyright 2010 Lennart Poettering
systemd is free software ; you can redistribute it and / or modify it
2012-04-12 02:20:58 +04:00
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation ; either version 2.1 of the License , or
2010-04-18 05:08:16 +04:00
( at your option ) any later version .
systemd is distributed in the hope that it will be useful , but
WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
2012-04-12 02:20:58 +04:00
Lesser General Public License for more details .
2010-04-18 05:08:16 +04:00
2012-04-12 02:20:58 +04:00
You should have received a copy of the GNU Lesser General Public License
2010-04-18 05:08:16 +04:00
along with systemd ; If not , see < http : //www.gnu.org/licenses/>.
* * */
# include <dbus/dbus.h>
# include "manager.h"
2012-01-16 03:23:59 +04:00
# include "dbus-common.h"
2010-04-18 05:08:16 +04:00
# define BUS_UNIT_INTERFACE \
2010-05-23 05:45:33 +04:00
" <interface name= \" org.freedesktop.systemd1.Unit \" > \n " \
" <method name= \" Start \" > \n " \
" <arg name= \" mode \" type= \" s \" direction= \" in \" /> \n " \
" <arg name= \" job \" type= \" o \" direction= \" out \" /> \n " \
" </method> \n " \
" <method name= \" Stop \" > \n " \
" <arg name= \" mode \" type= \" s \" direction= \" in \" /> \n " \
" <arg name= \" job \" type= \" o \" direction= \" out \" /> \n " \
" </method> \n " \
2010-07-13 22:20:36 +04:00
" <method name= \" Reload \" > \n " \
" <arg name= \" mode \" type= \" s \" direction= \" in \" /> \n " \
" <arg name= \" job \" type= \" o \" direction= \" out \" /> \n " \
" </method> \n " \
2010-05-23 05:45:33 +04:00
" <method name= \" Restart \" > \n " \
" <arg name= \" mode \" type= \" s \" direction= \" in \" /> \n " \
" <arg name= \" job \" type= \" o \" direction= \" out \" /> \n " \
" </method> \n " \
2010-07-06 07:06:40 +04:00
" <method name= \" TryRestart \" > \n " \
" <arg name= \" mode \" type= \" s \" direction= \" in \" /> \n " \
" <arg name= \" job \" type= \" o \" direction= \" out \" /> \n " \
" </method> \n " \
2010-07-13 22:20:36 +04:00
" <method name= \" ReloadOrRestart \" > \n " \
" <arg name= \" mode \" type= \" s \" direction= \" in \" /> \n " \
" <arg name= \" job \" type= \" o \" direction= \" out \" /> \n " \
" </method> \n " \
" <method name= \" ReloadOrTryRestart \" > \n " \
2010-05-23 05:45:33 +04:00
" <arg name= \" mode \" type= \" s \" direction= \" in \" /> \n " \
" <arg name= \" job \" type= \" o \" direction= \" out \" /> \n " \
" </method> \n " \
2010-10-22 18:11:50 +04:00
" <method name= \" Kill \" > \n " \
" <arg name= \" who \" type= \" s \" direction= \" in \" /> \n " \
" <arg name= \" signal \" type= \" i \" direction= \" in \" /> \n " \
" </method> \n " \
" <method name= \" ResetFailed \" /> \n " \
2013-06-27 23:14:56 +04:00
" <method name= \" SetProperties \" > \n " \
2013-06-28 02:41:24 +04:00
" <arg name= \" runtime \" type= \" b \" direction= \" in \" /> \n " \
2013-06-27 23:14:56 +04:00
" <arg name= \" properties \" type= \" a(sv) \" direction= \" in \" /> \n " \
" </method> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" Id \" type= \" s \" access= \" read \" /> \n " \
" <property name= \" Names \" type= \" as \" access= \" read \" /> \n " \
2010-07-20 22:33:19 +04:00
" <property name= \" Following \" type= \" s \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" Requires \" type= \" as \" access= \" read \" /> \n " \
" <property name= \" RequiresOverridable \" type= \" as \" access= \" read \" /> \n " \
" <property name= \" Requisite \" type= \" as \" access= \" read \" /> \n " \
" <property name= \" RequisiteOverridable \" type= \" as \" access= \" read \" /> \n " \
" <property name= \" Wants \" type= \" as \" access= \" read \" /> \n " \
2013-01-17 05:24:49 +04:00
" <property name= \" BindsTo \" type= \" as \" access= \" read \" /> \n " \
" <property name= \" PartOf \" type= \" as \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" RequiredBy \" type= \" as \" access= \" read \" /> \n " \
" <property name= \" RequiredByOverridable \" type= \" as \" access= \" read \" /> \n " \
" <property name= \" WantedBy \" type= \" as \" access= \" read \" /> \n " \
2010-10-29 01:18:47 +04:00
" <property name= \" BoundBy \" type= \" as \" access= \" read \" /> \n " \
2013-01-17 05:24:49 +04:00
" <property name= \" ConsistsOf \" type= \" as \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" Conflicts \" type= \" as \" access= \" read \" /> \n " \
2010-08-10 00:32:30 +04:00
" <property name= \" ConflictedBy \" type= \" as \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" Before \" type= \" as \" access= \" read \" /> \n " \
" <property name= \" After \" type= \" as \" access= \" read \" /> \n " \
2010-07-17 02:58:47 +04:00
" <property name= \" OnFailure \" type= \" as \" access= \" read \" /> \n " \
2012-01-11 05:47:14 +04:00
" <property name= \" Triggers \" type= \" as \" access= \" read \" /> \n " \
" <property name= \" TriggeredBy \" type= \" as \" access= \" read \" /> \n " \
2012-07-14 01:34:40 +04:00
" <property name= \" PropagatesReloadTo \" type= \" as \" access= \" read \" /> \n " \
" <property name= \" ReloadPropagatedFrom \" type= \" as \" access= \" read \" /> \n " \
2012-04-29 16:26:07 +04:00
" <property name= \" RequiresMountsFor \" type= \" as \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" Description \" type= \" s \" access= \" read \" /> \n " \
2012-05-23 01:08:24 +04:00
" <property name= \" SourcePath \" type= \" s \" access= \" read \" /> \n " \
2013-04-02 18:24:45 +04:00
" <property name= \" DropInPaths \" type= \" as \" access= \" read \" /> \n " \
2012-05-21 17:12:18 +04:00
" <property name= \" Documentation \" type= \" as \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" LoadState \" type= \" s \" access= \" read \" /> \n " \
" <property name= \" ActiveState \" type= \" s \" access= \" read \" /> \n " \
" <property name= \" SubState \" type= \" s \" access= \" read \" /> \n " \
" <property name= \" FragmentPath \" type= \" s \" access= \" read \" /> \n " \
2011-07-31 20:28:02 +04:00
" <property name= \" UnitFileState \" type= \" s \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" InactiveExitTimestamp \" type= \" t \" access= \" read \" /> \n " \
2011-04-07 23:35:37 +04:00
" <property name= \" InactiveExitTimestampMonotonic \" type= \" t \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" ActiveEnterTimestamp \" type= \" t \" access= \" read \" /> \n " \
2011-04-07 23:35:37 +04:00
" <property name= \" ActiveEnterTimestampMonotonic \" type= \" t \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" ActiveExitTimestamp \" type= \" t \" access= \" read \" /> \n " \
2011-04-07 23:35:37 +04:00
" <property name= \" ActiveExitTimestampMonotonic \" type= \" t \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" InactiveEnterTimestamp \" type= \" t \" access= \" read \" /> \n " \
2011-04-07 23:35:37 +04:00
" <property name= \" InactiveEnterTimestampMonotonic \" type= \" t \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" CanStart \" type= \" b \" access= \" read \" /> \n " \
2010-08-10 22:57:21 +04:00
" <property name= \" CanStop \" type= \" b \" access= \" read \" /> \n " \
2011-04-14 05:55:03 +04:00
" <property name= \" CanReload \" type= \" b \" access= \" read \" /> \n " \
2010-08-31 00:45:46 +04:00
" <property name= \" CanIsolate \" type= \" b \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" <property name= \" Job \" type= \" (uo) \" access= \" read \" /> \n " \
2010-09-28 01:27:21 +04:00
" <property name= \" StopWhenUnneeded \" type= \" b \" access= \" read \" /> \n " \
2010-08-10 22:57:21 +04:00
" <property name= \" RefuseManualStart \" type= \" b \" access= \" read \" /> \n " \
" <property name= \" RefuseManualStop \" type= \" b \" access= \" read \" /> \n " \
2011-04-14 05:55:03 +04:00
" <property name= \" AllowIsolate \" type= \" b \" access= \" read \" /> \n " \
2010-07-04 06:24:07 +04:00
" <property name= \" DefaultDependencies \" type= \" b \" access= \" read \" /> \n " \
2011-04-14 05:55:03 +04:00
" <property name= \" OnFailureIsolate \" type= \" b \" access= \" read \" /> \n " \
" <property name= \" IgnoreOnIsolate \" type= \" b \" access= \" read \" /> \n " \
2011-05-05 12:58:55 +04:00
" <property name= \" IgnoreOnSnapshot \" type= \" b \" access= \" read \" /> \n " \
2010-07-17 02:57:51 +04:00
" <property name= \" NeedDaemonReload \" type= \" b \" access= \" read \" /> \n " \
2010-07-17 06:09:28 +04:00
" <property name= \" JobTimeoutUSec \" type= \" t \" access= \" read \" /> \n " \
2011-03-10 01:58:17 +03:00
" <property name= \" ConditionTimestamp \" type= \" t \" access= \" read \" /> \n " \
2011-04-07 23:35:37 +04:00
" <property name= \" ConditionTimestampMonotonic \" type= \" t \" access= \" read \" /> \n " \
2011-03-10 01:58:17 +03:00
" <property name= \" ConditionResult \" type= \" b \" access= \" read \" /> \n " \
systemd,systemctl: export condition status and show failing condition
$ systemctl --user status hoohoo
hoohoo.service
Loaded: loaded (/home/zbyszek/.config/systemd/user/hoohoo.service; static)
Active: inactive (dead)
start condition failed at Tue 2013-06-25 18:08:42 EDT; 1s ago
ConditionPathExists=/tmp/hoo was not met
Full information is exported over D-Bus:
[(condition, trigger, negate, param, state),...]
where state is one of "failed" (<0), "untested" (0), "OK" (>0).
I've decided to use 0 for "untested", because it might be useful to
differentiate different types of failure later on, without breaking
compatibility.
systemctl shows the failing condition, if there was a non-trigger
failing condition, or says "none of the trigger conditions were met",
because there're often many trigger conditions, and they must all
fail for the condition to fail, so printing them all would consume
a lot of space, and bring unnecessary attention to something that is
quite low-level.
2013-06-26 00:09:07 +04:00
" <property name= \" Conditions \" type= \" a(sbbsi) \" access= \" read \" /> \n " \
2011-07-31 20:13:03 +04:00
" <property name= \" LoadError \" type= \" (ss) \" access= \" read \" /> \n " \
2013-06-28 06:12:58 +04:00
" <property name= \" Transient \" type= \" b \" access= \" read \" /> \n " \
2010-05-23 05:45:33 +04:00
" </interface> \n "
2010-04-18 05:08:16 +04:00
2013-07-01 04:45:02 +04:00
# define BUS_UNIT_CGROUP_INTERFACE \
" <property name= \" Slice \" type= \" s \" access= \" read \" /> \n " \
" <property name= \" ControlGroup \" type= \" s \" access= \" read \" /> \n "
2011-03-09 22:01:53 +03:00
# define BUS_UNIT_INTERFACES_LIST \
BUS_GENERIC_INTERFACES_LIST \
" org.freedesktop.systemd1.Unit \0 "
2012-01-16 03:23:59 +04:00
extern const BusProperty bus_unit_properties [ ] ;
2013-07-01 04:45:02 +04:00
extern const BusProperty bus_unit_cgroup_properties [ ] ;
2010-04-18 05:08:16 +04:00
void bus_unit_send_change_signal ( Unit * u ) ;
void bus_unit_send_removed_signal ( Unit * u ) ;
2013-06-27 23:14:56 +04:00
DBusHandlerResult bus_unit_queue_job ( DBusConnection * connection , DBusMessage * message , Unit * u , JobType type , JobMode mode , bool reload_if_possible ) ;
2013-06-28 06:12:58 +04:00
int bus_unit_set_properties ( Unit * u , DBusMessageIter * i , UnitSetPropertiesMode mode , bool commit , DBusError * error ) ;
2013-01-12 07:24:12 +04:00
2010-04-18 05:08:16 +04:00
extern const DBusObjectPathVTable bus_unit_vtable ;
2010-05-23 05:45:33 +04:00
extern const char bus_unit_interface [ ] ;