[systemd-devel] [PATCH v2 3/4] unit: add UnitMask enum and get unit scope(mask) api from property

WaLyong Cho walyong.cho at samsung.com
Wed Oct 29 23:18:22 PDT 2014


---
 Makefile.am                          |   7 ++
 src/shared/.gitignore                |   1 +
 src/shared/unit-name.c               |  22 ++++
 src/shared/unit-name.h               |  26 +++++
 src/shared/unit-property-scope.gperf | 202 +++++++++++++++++++++++++++++++++++
 5 files changed, 258 insertions(+)
 create mode 100644 src/shared/unit-property-scope.gperf

diff --git a/Makefile.am b/Makefile.am
index c80d25d..737d6d7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -816,6 +816,7 @@ libsystemd_shared_la_SOURCES = \
 	src/shared/cgroup-show.h \
 	src/shared/unit-name.c \
 	src/shared/unit-name.h \
+	src/shared/unit-property-scope.c \
 	src/shared/utmp-wtmp.h \
 	src/shared/watchdog.c \
 	src/shared/watchdog.h \
@@ -905,6 +906,12 @@ libsystemd_shared_la_CFLAGS = \
 	$(SECCOMP_CFLAGS) \
 	-pthread
 
+EXTRA_DIST += \
+	src/shared/unit-property-scope.gperf
+
+CLEANFILES += \
+	src/shared/unit-property-scope.c
+
 # ------------------------------------------------------------------------------
 noinst_LTLIBRARIES += \
 	libsystemd-units.la
diff --git a/src/shared/.gitignore b/src/shared/.gitignore
index 61709e8..e7faa23 100644
--- a/src/shared/.gitignore
+++ b/src/shared/.gitignore
@@ -10,3 +10,4 @@
 /arphrd-from-name.h
 /arphrd-list.txt
 /arphrd-to-name.h
+/unit-property-scope.c
diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c
index 2ef8545..e4669dd 100644
--- a/src/shared/unit-name.c
+++ b/src/shared/unit-name.c
@@ -621,3 +621,25 @@ static const char* const unit_dependency_table[_UNIT_DEPENDENCY_MAX] = {
 };
 
 DEFINE_STRING_TABLE_LOOKUP(unit_dependency, UnitDependency);
+
+static UnitMask unit_get_mask_from_property(const char *property) {
+        const unit_property_scope_mapping *m;
+
+        assert(property);
+
+        m = unit_property_scope_mapping_lookup(property, strlen(property));
+        if (m)
+                return m->scope;
+
+        return _UNIT_MASK_MAX;
+
+}
+
+bool unit_can_have_property(UnitType t, const char *property) {
+        UnitMask m;
+
+        assert(property);
+
+        m = unit_get_mask_from_property(property);
+        return !!((1ULL << t) & m);
+}
diff --git a/src/shared/unit-name.h b/src/shared/unit-name.h
index daeb56a..e1d4e27 100644
--- a/src/shared/unit-name.h
+++ b/src/shared/unit-name.h
@@ -28,6 +28,7 @@
 #define UNIT_NAME_MAX 256
 
 typedef enum UnitType UnitType;
+typedef enum UnitMask UnitMask;
 typedef enum UnitLoadState UnitLoadState;
 typedef enum UnitDependency UnitDependency;
 
@@ -49,6 +50,23 @@ enum UnitType {
         _UNIT_TYPE_INVALID = -1
 };
 
+enum UnitMask {
+        UNIT_MASK_SERVICE       = 1ULL << UNIT_SERVICE,
+        UNIT_MASK_SOCKET        = 1ULL << UNIT_SOCKET,
+        UNIT_MASK_BUSNAME       = 1ULL << UNIT_BUSNAME,
+        UNIT_MASK_TARGET        = 1ULL << UNIT_TARGET,
+        UNIT_MASK_SNAPSHOT      = 1ULL << UNIT_SNAPSHOT,
+        UNIT_MASK_DEVICE        = 1ULL << UNIT_DEVICE,
+        UNIT_MASK_MOUNT         = 1ULL << UNIT_MOUNT,
+        UNIT_MASK_AUTOMOUNT     = 1ULL << UNIT_AUTOMOUNT,
+        UNIT_MASK_SWAP          = 1ULL << UNIT_SWAP,
+        UNIT_MASK_TIMER         = 1ULL << UNIT_TIMER,
+        UNIT_MASK_PATH          = 1ULL << UNIT_PATH,
+        UNIT_MASK_SLICE         = 1ULL << UNIT_SLICE,
+        UNIT_MASK_SCOPE         = 1ULL << UNIT_SCOPE,
+        _UNIT_MASK_MAX          = 1ULL <<_UNIT_TYPE_MAX,
+};
+
 enum UnitLoadState {
         UNIT_STUB = 0,
         UNIT_LOADED,
@@ -163,3 +181,11 @@ int build_subslice(const char *slice, const char*name, char **subslice);
 
 const char *unit_dependency_to_string(UnitDependency i) _const_;
 UnitDependency unit_dependency_from_string(const char *s) _pure_;
+
+struct unit_property_scope_mapping {
+        const char* property;
+        UnitMask scope;
+};
+typedef struct unit_property_scope_mapping unit_property_scope_mapping;
+const unit_property_scope_mapping* unit_property_scope_mapping_lookup (register const char *str, register unsigned int len);
+bool unit_can_have_property(UnitType t, const char *property);
diff --git a/src/shared/unit-property-scope.gperf b/src/shared/unit-property-scope.gperf
new file mode 100644
index 0000000..bbcfcba
--- /dev/null
+++ b/src/shared/unit-property-scope.gperf
@@ -0,0 +1,202 @@
+%{
+#include "unit-name.h"
+#include "bus-util.h"
+%}
+unit_property_scope_mapping;
+%null_strings
+%language=ANSI-C
+%define slot-name property
+%define hash-function-name bus_property_scope_mapping_hash
+%define lookup-function-name unit_property_scope_mapping_lookup
+%readonly-tables
+%omit-struct-type
+%struct-type
+%includes
+%%
+Description,                    UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+Documentation,                  UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+Requires,                       UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+RequiresOverridable,            UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+Requisite,                      UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+RequisiteOverridable,           UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+Wants,                          UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+BindsTo,                        UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+PartOf,                         UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+Conflicts,                      UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+Before,                         UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+After,                          UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+OnFailure,                      UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+PropagatesReloadTo,             UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ReloadPropagatedFrom,           UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+JoinsNamespaceOf,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+RequiresMountsFor,              UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+OnFailureJobMode,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+IgnoreOnIsolate,                UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+IgnoreOnSnapshot,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+StopWhenUnneeded,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+RefuseManualStart,              UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+RefuseManualStop,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+AllowIsolate,                   UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+DefaultDependencies,            UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+JobTimeoutSec,                  UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+JobTimeoutAction,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+JobTimeoutRebootArgument,       UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionArchitecture,          UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionVirtualization,        UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionHost,                  UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionKernelCommandLine,     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionSecurity,              UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionCapability,            UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionACPower,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionNeedsUpdate,           UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionFirstBoot,             UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionPathExists,            UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionPathExistsGlob,        UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionPathIsDirectory,       UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionPathIsSymbolicLink,    UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionPathIsMountPoint,      UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionPathIsReadWrite,       UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionDirectoryNotEmpty,     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionFileNotEmpty,          UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionFileIsExecutable,      UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+ConditionNull,                  UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+SourcePath,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+Alias,                          UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+WantedBy,                       UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+RequiredBy,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+Also,                           UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+DefaultInstance,                UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_DEVICE|UNIT_MASK_MOUNT|UNIT_MASK_AUTOMOUNT|UNIT_MASK_SWAP|UNIT_MASK_TARGET|UNIT_MASK_PATH|UNIT_MASK_TIMER|UNIT_MASK_SNAPSHOT|UNIT_MASK_SLICE|UNIT_MASK_SCOPE
+#
+Type,                           UNIT_MASK_SERVICE
+RemainAfterExit,                UNIT_MASK_SERVICE
+GuessMainPID,                   UNIT_MASK_SERVICE
+PIDFile,                        UNIT_MASK_SERVICE
+BusName,                        UNIT_MASK_SERVICE
+BusPolicy,                      UNIT_MASK_SERVICE
+ExecStart,                      UNIT_MASK_SERVICE
+ExecStartPre,                   UNIT_MASK_SERVICE
+ExecStartPost,                  UNIT_MASK_SERVICE
+ExecReload,                     UNIT_MASK_SERVICE
+ExecStop,                       UNIT_MASK_SERVICE
+ExecStopPost,                   UNIT_MASK_SERVICE
+RestartSec,                     UNIT_MASK_SERVICE
+TimeoutStartSec,                UNIT_MASK_SERVICE
+TimeoutStopSec,                 UNIT_MASK_SERVICE
+TimeoutSec,                     UNIT_MASK_SERVICE
+WatchdogSec,                    UNIT_MASK_SERVICE
+Restart,                        UNIT_MASK_SERVICE
+SuccessExitStatus,              UNIT_MASK_SERVICE
+RestartPreventExitStatus,       UNIT_MASK_SERVICE
+RestartForceExitStatus,         UNIT_MASK_SERVICE
+PermissionsStartOnly,           UNIT_MASK_SERVICE
+RootDirectoryStartOnly,         UNIT_MASK_SERVICE
+NonBlocking,                    UNIT_MASK_SERVICE
+NotifyAccess,                   UNIT_MASK_SERVICE
+Sockets,                        UNIT_MASK_SERVICE
+StartLimitInterval,             UNIT_MASK_SERVICE
+StartLimitBurst,                UNIT_MASK_SERVICE
+StartLimitAction,               UNIT_MASK_SERVICE
+FailureAction,                  UNIT_MASK_SERVICE
+RebootArgument,                 UNIT_MASK_SERVICE
+SysVStartPriority,              UNIT_MASK_SERVICE
+#
+OnActiveSec,                    UNIT_MASK_TIMER
+OnBootSec,                      UNIT_MASK_TIMER
+OnStartupSec,                   UNIT_MASK_TIMER
+OnUnitActiveSec,                UNIT_MASK_TIMER
+OnUnitInactiveSec,              UNIT_MASK_TIMER
+OnCalendar,                     UNIT_MASK_TIMER
+AccuracySec,                    UNIT_MASK_TIMER
+Unit,                           UNIT_MASK_TIMER
+Persistent,                     UNIT_MASK_TIMER
+WakeSystem,                     UNIT_MASK_TIMER
+#
+CPUAccounting,                  UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+CPUShares,                      UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+StartupCPUShares,               UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+CPUQuota,                       UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+MemoryAccounting,               UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+MemoryLimit,                    UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+BlockIOAccounting,              UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+BlockIOWeight,                  UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+StartupBlockIOWeight,           UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+BlockIODeviceWeight,            UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+BlockIOReadBandwidth,           UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+BlockIOWriteBandwidth,          UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+DeviceAllow,                    UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+DevicePolicy,                   UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+Slice,                          UNIT_MASK_SLICE|UNIT_MASK_SCOPE|UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+#
+WorkingDirectory,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+RootDirectory,                  UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+Group,                          UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+SupplementaryGroups,            UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+Nice,                           UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+OOMScoreAdjust,                 UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+IOSchedulingClass,              UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+IOSchedulingPriority,           UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+CPUSchedulingPolicy,            UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+CPUSchedulingPriority,          UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+CPUSchedulingResetOnFork,       UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+CPUAffinity,                    UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+UMask,                          UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+Environment,                    UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+EnvironmentFile,                UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+StandardInput,                  UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+StandardOutput,                 UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+StandardError,                  UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+TTYPath,                        UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+TTYReset,                       UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+TTYVHangup,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+TTYVTDisallocate,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+SyslogIdentifier,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+SyslogFacility,                 UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+SyslogLevel,                    UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+SyslogLevelPrefix,              UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+TimerSlackNSec,                 UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitCPU,                       UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitFSIZE,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitDATA,                      UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitSTACK,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitCORE,                      UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitRSS,                       UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitNOFILE,                    UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitAS,                        UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitNPROC,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitMEMLOCK,                   UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitLOCKS,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitSIGPENDING,                UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitMSGQUEUE,                  UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitNICE,                      UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitRTPRIO,                    UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+LimitRTTIME,                    UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+PAMName,                        UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+CapabilityBoundingSet,          UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+SecureBits,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+Capabilities,                   UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+ReadWriteDirectories,           UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+ReadOnlyDirectories,            UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+InaccessibleDirectories,        UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+PrivateTmp,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+PrivateDevices,                 UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+PrivateNetwork,                 UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+ProtectSystem,                  UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+ProtectHome,                    UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+MountFlags,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+UtmpIdentifier,                 UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+SELinuxContext,                 UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+AppArmorProfile,                UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+IgnoreSIGPIPE,                  UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+NoNewPrivileges,                UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+SystemCallFilter,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+SystemCallErrorNumber,          UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+SystemCallArchitectures,        UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+RestrictAddressFamilies,        UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+Personality,                    UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+RuntimeDirectory,               UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+RuntimeDirectoryMode,           UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP
+#
+KillMode,                       UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP|UNIT_MASK_SCOPE
+KillSignal,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP|UNIT_MASK_SCOPE
+SendSIGHUP,                     UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP|UNIT_MASK_SCOPE
+SendSIGKILL,                    UNIT_MASK_SERVICE|UNIT_MASK_SOCKET|UNIT_MASK_MOUNT|UNIT_MASK_SWAP|UNIT_MASK_SCOPE
-- 
1.9.3



More information about the systemd-devel mailing list