tree-wide: convert remaining varlink string fields to enum types (#41615)

Follow-up to #40972. Convert remaining plain string fields to proper
varlink enum types across all interfaces, per the policy that
user-controlled/API fields should be declared as proper enums in the
IDL.

Interfaces converted:
- io.systemd.Manager — LogTarget, DefaultStandardOutput/Error,
DefaultMemory/CPU/IOPressureWatch, DefaultOOMPolicy,
CtrlAltDelBurstAction (8 fields)
- io.systemd.Unit — CPUSchedulingPolicy, IOSchedulingClass, NUMAPolicy,
MountFlags (4 fields)
- io.systemd.Machine — class, whom (2 fields, input dispatch converted
to JSON_DISPATCH_ENUM_DEFINE for automatic dashify fallback)
- io.systemd.oom / io.systemd.ManagedOOM — mode in ControlGroup (1
field)

Shared types moved to varlink-idl-common: ExecOutputType,
CGroupPressureWatch, EmergencyAction, ManagedOOMMode — these are reused
across multiple interfaces.

Each interface change includes a corresponding enum sync test to catch
future drift between C string tables and varlink IDL definitions.
This commit is contained in:
Lennart Poettering
2026-04-14 14:04:13 +02:00
committed by GitHub
19 changed files with 237 additions and 90 deletions
+6 -3
View File
@@ -27,6 +27,9 @@
#include "varlink-common.h"
#include "varlink-execute.h"
#define JSON_BUILD_PAIR_MOUNT_PROPAGATION_FLAG(name, s) \
SD_JSON_BUILD_PAIR_CONDITION(!isempty(s), name, JSON_BUILD_STRING_UNDERSCORIFY(s))
static int working_directory_build_json(sd_json_variant **ret, const char *name, void *userdata) {
ExecContext *c = ASSERT_PTR(userdata);
@@ -262,7 +265,7 @@ static int cpu_sched_class_build_json(sd_json_variant **ret, const char *name, v
if (r < 0)
return log_debug_errno(r, "Failed to convert sched policy to string: %m");
return sd_json_variant_new_string(ret, s);
return sd_json_variant_new_string(ret, json_underscorify(s));
}
static int cpu_affinity_build_json(sd_json_variant **ret, const char *name, void *userdata) {
@@ -343,7 +346,7 @@ static int ioprio_class_build_json(sd_json_variant **ret, const char *name, void
if (r < 0)
return log_debug_errno(r, "Failed to convert IO priority class to string: %m");
return sd_json_variant_new_string(ret, s);
return sd_json_variant_new_string(ret, json_underscorify(s));
}
static int exec_dir_build_json(sd_json_variant **ret, const char *name, void *userdata) {
@@ -927,7 +930,7 @@ int unit_exec_context_build_json(sd_json_variant **ret, const char *name, void *
SD_JSON_BUILD_PAIR_BOOLEAN("RestrictSUIDSGID", c->restrict_suid_sgid),
SD_JSON_BUILD_PAIR_BOOLEAN("RemoveIPC", c->remove_ipc),
JSON_BUILD_PAIR_TRISTATE_NON_NULL("PrivateMounts", c->private_mounts),
JSON_BUILD_PAIR_STRING_NON_EMPTY("MountFlags", mount_propagation_flag_to_string(c->mount_propagation_flag)),
JSON_BUILD_PAIR_MOUNT_PROPAGATION_FLAG("MountFlags", mount_propagation_flag_to_string(c->mount_propagation_flag)),
/* System Call Filtering */
JSON_BUILD_PAIR_CALLBACK_NON_NULL("SystemCallFilter", syscall_filter_build_json, c),
+8 -8
View File
@@ -88,10 +88,10 @@ static int manager_context_build_json(sd_json_variant **ret, const char *name, v
ASSERT_PTR(ret),
SD_JSON_BUILD_PAIR_BOOLEAN("ShowStatus", manager_get_show_status_on(m)),
JSON_BUILD_PAIR_CALLBACK_NON_NULL("LogLevel", log_level_build_json, m),
SD_JSON_BUILD_PAIR_STRING("LogTarget", log_target_to_string(log_get_target())),
JSON_BUILD_PAIR_ENUM("LogTarget", log_target_to_string(log_get_target())),
JSON_BUILD_PAIR_CALLBACK_NON_NULL("Environment", manager_environment_build_json, m),
SD_JSON_BUILD_PAIR_STRING("DefaultStandardOutput", exec_output_to_string(m->defaults.std_output)),
SD_JSON_BUILD_PAIR_STRING("DefaultStandardError", exec_output_to_string(m->defaults.std_error)),
JSON_BUILD_PAIR_ENUM("DefaultStandardOutput", exec_output_to_string(m->defaults.std_output)),
JSON_BUILD_PAIR_ENUM("DefaultStandardError", exec_output_to_string(m->defaults.std_error)),
SD_JSON_BUILD_PAIR_BOOLEAN("ServiceWatchdogs", m->service_watchdogs),
JSON_BUILD_PAIR_FINITE_USEC("DefaultTimerAccuracyUSec", m->defaults.timer_accuracy_usec),
JSON_BUILD_PAIR_FINITE_USEC("DefaultTimeoutStartUSec", m->defaults.timeout_start_usec),
@@ -107,11 +107,11 @@ static int manager_context_build_json(sd_json_variant **ret, const char *name, v
SD_JSON_BUILD_PAIR_CALLBACK("DefaultLimits", rlimit_table_build_json, m->defaults.rlimit),
SD_JSON_BUILD_PAIR_UNSIGNED("DefaultTasksMax", cgroup_tasks_max_resolve(&m->defaults.tasks_max)),
JSON_BUILD_PAIR_FINITE_USEC("DefaultMemoryPressureThresholdUSec", m->defaults.pressure[PRESSURE_MEMORY].threshold_usec),
SD_JSON_BUILD_PAIR_STRING("DefaultMemoryPressureWatch", cgroup_pressure_watch_to_string(m->defaults.pressure[PRESSURE_MEMORY].watch)),
JSON_BUILD_PAIR_ENUM("DefaultMemoryPressureWatch", cgroup_pressure_watch_to_string(m->defaults.pressure[PRESSURE_MEMORY].watch)),
JSON_BUILD_PAIR_FINITE_USEC("DefaultCPUPressureThresholdUSec", m->defaults.pressure[PRESSURE_CPU].threshold_usec),
SD_JSON_BUILD_PAIR_STRING("DefaultCPUPressureWatch", cgroup_pressure_watch_to_string(m->defaults.pressure[PRESSURE_CPU].watch)),
JSON_BUILD_PAIR_ENUM("DefaultCPUPressureWatch", cgroup_pressure_watch_to_string(m->defaults.pressure[PRESSURE_CPU].watch)),
JSON_BUILD_PAIR_FINITE_USEC("DefaultIOPressureThresholdUSec", m->defaults.pressure[PRESSURE_IO].threshold_usec),
SD_JSON_BUILD_PAIR_STRING("DefaultIOPressureWatch", cgroup_pressure_watch_to_string(m->defaults.pressure[PRESSURE_IO].watch)),
JSON_BUILD_PAIR_ENUM("DefaultIOPressureWatch", cgroup_pressure_watch_to_string(m->defaults.pressure[PRESSURE_IO].watch)),
JSON_BUILD_PAIR_FINITE_USEC("RuntimeWatchdogUSec", manager_get_watchdog(m, WATCHDOG_RUNTIME)),
JSON_BUILD_PAIR_FINITE_USEC("RebootWatchdogUSec", manager_get_watchdog(m, WATCHDOG_REBOOT)),
JSON_BUILD_PAIR_FINITE_USEC("KExecWatchdogUSec", manager_get_watchdog(m, WATCHDOG_KEXEC)),
@@ -119,10 +119,10 @@ static int manager_context_build_json(sd_json_variant **ret, const char *name, v
JSON_BUILD_PAIR_STRING_NON_EMPTY("RuntimeWatchdogPreGovernor", m->watchdog_pretimeout_governor),
JSON_BUILD_PAIR_STRING_NON_EMPTY("WatchdogDevice", watchdog_get_device()),
JSON_BUILD_PAIR_FINITE_USEC("TimerSlackNSec", (uint64_t) prctl(PR_GET_TIMERSLACK)),
SD_JSON_BUILD_PAIR_STRING("DefaultOOMPolicy", oom_policy_to_string(m->defaults.oom_policy)),
JSON_BUILD_PAIR_ENUM("DefaultOOMPolicy", oom_policy_to_string(m->defaults.oom_policy)),
SD_JSON_BUILD_PAIR_INTEGER("DefaultOOMScoreAdjust", m->defaults.oom_score_adjust),
SD_JSON_BUILD_PAIR_BOOLEAN("DefaultRestrictSUIDSGID", m->defaults.restrict_suid_sgid),
SD_JSON_BUILD_PAIR_STRING("CtrlAltDelBurstAction", emergency_action_to_string(m->cad_burst_action)),
JSON_BUILD_PAIR_ENUM("CtrlAltDelBurstAction", emergency_action_to_string(m->cad_burst_action)),
SD_JSON_BUILD_PAIR_BOOLEAN("DefaultMemoryZSwapWriteback", m->defaults.memory_zswap_writeback),
JSON_BUILD_PAIR_STRING_NON_EMPTY("ConfirmSpawn", manager_get_confirm_spawn(m)),
JSON_BUILD_PAIR_STRING_NON_EMPTY("ControlGroup", m->cgroup_root));
+2 -1
View File
@@ -4,6 +4,7 @@
#include "constants.h"
#include "errno-util.h"
#include "json-util.h"
#include "manager.h"
#include "metrics.h"
#include "path-util.h"
@@ -62,7 +63,7 @@ static int build_managed_oom_json_array_element(Unit *u, const char *property, s
return -EINVAL;
return sd_json_buildo(ret_v,
SD_JSON_BUILD_PAIR_STRING("mode", mode),
JSON_BUILD_PAIR_ENUM("mode", mode),
SD_JSON_BUILD_PAIR_STRING("path", crt->cgroup_path),
SD_JSON_BUILD_PAIR_STRING("property", property),
SD_JSON_BUILD_PAIR_CONDITION(use_limit, "limit", SD_JSON_BUILD_UNSIGNED(c->moom_mem_pressure_limit)),
+6 -10
View File
@@ -360,10 +360,12 @@ int vl_method_terminate_internal(sd_varlink *link, sd_json_variant *parameters,
return sd_varlink_reply(link, NULL);
}
static JSON_DISPATCH_ENUM_DEFINE(dispatch_kill_whom, KillWhom, kill_whom_from_string);
typedef struct MachineKillParameters {
const char *name;
PidRef pidref;
const char *swhom;
KillWhom whom;
int32_t signo;
} MachineKillParameters;
@@ -376,7 +378,7 @@ static void machine_kill_paramaters_done(MachineKillParameters *p) {
int vl_method_kill(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
static const sd_json_dispatch_field dispatch_table[] = {
VARLINK_DISPATCH_MACHINE_LOOKUP_FIELDS(MachineKillParameters),
{ "whom", SD_JSON_VARIANT_STRING, sd_json_dispatch_const_string, offsetof(MachineKillParameters, swhom), 0 },
{ "whom", SD_JSON_VARIANT_STRING, dispatch_kill_whom, offsetof(MachineKillParameters, whom), 0 },
{ "signal", _SD_JSON_VARIANT_TYPE_INVALID , sd_json_dispatch_signal, offsetof(MachineKillParameters, signo), SD_JSON_MANDATORY },
VARLINK_DISPATCH_POLKIT_FIELD,
{}
@@ -385,8 +387,8 @@ int vl_method_kill(sd_varlink *link, sd_json_variant *parameters, sd_varlink_met
Manager *manager = ASSERT_PTR(userdata);
_cleanup_(machine_kill_paramaters_done) MachineKillParameters p = {
.pidref = PIDREF_NULL,
.whom = _KILL_WHOM_INVALID,
};
KillWhom whom;
int r;
assert(link);
@@ -403,13 +405,7 @@ int vl_method_kill(sd_varlink *link, sd_json_variant *parameters, sd_varlink_met
if (r < 0)
return r;
if (isempty(p.swhom))
whom = KILL_ALL;
else {
whom = kill_whom_from_string(p.swhom);
if (whom < 0)
return sd_varlink_error_invalid_parameter_name(link, "whom");
}
KillWhom whom = p.whom >= 0 ? p.whom : KILL_ALL;
if (manager->runtime_scope != RUNTIME_SCOPE_USER) {
r = varlink_verify_polkit_async_full(
+1 -1
View File
@@ -478,7 +478,7 @@ static int list_machine_one_and_maybe_read_metadata(sd_varlink *link, Machine *m
&v,
SD_JSON_BUILD_PAIR_STRING("name", m->name),
SD_JSON_BUILD_PAIR_CONDITION(!sd_id128_is_null(m->id), "id", SD_JSON_BUILD_ID128(m->id)),
SD_JSON_BUILD_PAIR_STRING("class", machine_class_to_string(m->class)),
JSON_BUILD_PAIR_ENUM("class", machine_class_to_string(m->class)),
JSON_BUILD_PAIR_STRING_NON_EMPTY("service", m->service),
JSON_BUILD_PAIR_STRING_NON_EMPTY("rootDirectory", m->root_directory),
JSON_BUILD_PAIR_STRING_NON_EMPTY("unit", m->unit),
+46
View File
@@ -53,3 +53,49 @@ SD_VARLINK_DEFINE_STRUCT_TYPE(
SD_VARLINK_DEFINE_FIELD_BY_TYPE(NICE, ResourceLimit, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(RTPRIO, ResourceLimit, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(RTTIME, ResourceLimit, SD_VARLINK_NULLABLE));
SD_VARLINK_DEFINE_ENUM_TYPE(
ExecOutputType,
SD_VARLINK_DEFINE_ENUM_VALUE(inherit),
SD_VARLINK_DEFINE_ENUM_VALUE(null),
SD_VARLINK_DEFINE_ENUM_VALUE(tty),
SD_VARLINK_DEFINE_ENUM_VALUE(kmsg),
SD_VARLINK_DEFINE_ENUM_VALUE(kmsg_console),
SD_VARLINK_DEFINE_ENUM_VALUE(journal),
SD_VARLINK_DEFINE_ENUM_VALUE(journal_console),
SD_VARLINK_DEFINE_ENUM_VALUE(socket),
SD_VARLINK_DEFINE_ENUM_VALUE(fd),
SD_VARLINK_DEFINE_ENUM_VALUE(file),
SD_VARLINK_DEFINE_ENUM_VALUE(append),
SD_VARLINK_DEFINE_ENUM_VALUE(truncate));
SD_VARLINK_DEFINE_ENUM_TYPE(
CGroupPressureWatch,
SD_VARLINK_DEFINE_ENUM_VALUE(no),
SD_VARLINK_DEFINE_ENUM_VALUE(yes),
SD_VARLINK_DEFINE_ENUM_VALUE(auto),
SD_VARLINK_DEFINE_ENUM_VALUE(skip));
SD_VARLINK_DEFINE_ENUM_TYPE(
ManagedOOMMode,
SD_VARLINK_DEFINE_ENUM_VALUE(auto),
SD_VARLINK_DEFINE_ENUM_VALUE(kill));
SD_VARLINK_DEFINE_ENUM_TYPE(
EmergencyAction,
SD_VARLINK_DEFINE_ENUM_VALUE(none),
SD_VARLINK_DEFINE_ENUM_VALUE(exit),
SD_VARLINK_DEFINE_ENUM_VALUE(exit_force),
SD_VARLINK_DEFINE_ENUM_VALUE(reboot),
SD_VARLINK_DEFINE_ENUM_VALUE(reboot_force),
SD_VARLINK_DEFINE_ENUM_VALUE(reboot_immediate),
SD_VARLINK_DEFINE_ENUM_VALUE(poweroff),
SD_VARLINK_DEFINE_ENUM_VALUE(poweroff_force),
SD_VARLINK_DEFINE_ENUM_VALUE(poweroff_immediate),
SD_VARLINK_DEFINE_ENUM_VALUE(soft_reboot),
SD_VARLINK_DEFINE_ENUM_VALUE(soft_reboot_force),
SD_VARLINK_DEFINE_ENUM_VALUE(kexec),
SD_VARLINK_DEFINE_ENUM_VALUE(kexec_force),
SD_VARLINK_DEFINE_ENUM_VALUE(halt),
SD_VARLINK_DEFINE_ENUM_VALUE(halt_force),
SD_VARLINK_DEFINE_ENUM_VALUE(halt_immediate));
+4
View File
@@ -8,3 +8,7 @@ extern const sd_varlink_symbol vl_type_ProcessId;
extern const sd_varlink_symbol vl_type_RateLimit;
extern const sd_varlink_symbol vl_type_ResourceLimit;
extern const sd_varlink_symbol vl_type_ResourceLimitTable;
extern const sd_varlink_symbol vl_type_ExecOutputType;
extern const sd_varlink_symbol vl_type_CGroupPressureWatch;
extern const sd_varlink_symbol vl_type_ManagedOOMMode;
extern const sd_varlink_symbol vl_type_EmergencyAction;
+19 -3
View File
@@ -11,6 +11,18 @@
SD_VARLINK_DEFINE_INPUT_BY_TYPE(pid, ProcessId, SD_VARLINK_NULLABLE), \
VARLINK_DEFINE_POLKIT_INPUT
SD_VARLINK_DEFINE_ENUM_TYPE(
MachineClass,
SD_VARLINK_DEFINE_ENUM_VALUE(container),
SD_VARLINK_DEFINE_ENUM_VALUE(vm),
SD_VARLINK_DEFINE_ENUM_VALUE(host));
SD_VARLINK_DEFINE_ENUM_TYPE(
KillWhom,
SD_VARLINK_DEFINE_ENUM_VALUE(leader),
SD_VARLINK_DEFINE_ENUM_VALUE(supervisor),
SD_VARLINK_DEFINE_ENUM_VALUE(all));
static SD_VARLINK_DEFINE_ENUM_TYPE(
AcquireMetadata,
SD_VARLINK_FIELD_COMMENT("Do not include metadata in the output"),
@@ -31,7 +43,7 @@ static SD_VARLINK_DEFINE_METHOD(
SD_VARLINK_DEFINE_INPUT(name, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_INPUT(id, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_INPUT(service, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_INPUT(class, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_INPUT_BY_TYPE(class, MachineClass, 0),
SD_VARLINK_FIELD_COMMENT("The leader PID as simple positive integer."),
SD_VARLINK_DEFINE_INPUT(leader, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("The leader PID as ProcessId structure. If both the leader and leaderProcessId parameters are specified they must reference the same process. Typically one would only specify one or the other however. It's generally recommended to specify leaderProcessId as it references a process in a robust way without risk of identifier recycling."),
@@ -61,7 +73,7 @@ static SD_VARLINK_DEFINE_METHOD(
Kill,
VARLINK_DEFINE_MACHINE_LOOKUP_AND_POLKIT_INPUT_FIELDS,
SD_VARLINK_FIELD_COMMENT("Identifier that specifies what precisely to send the signal to (either 'leader', 'supervisor', or 'all')."),
SD_VARLINK_DEFINE_INPUT(whom, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_INPUT_BY_TYPE(whom, KillWhom, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Numeric UNIX signal integer."),
SD_VARLINK_DEFINE_INPUT(signal, SD_VARLINK_INT, 0));
@@ -78,7 +90,7 @@ static SD_VARLINK_DEFINE_METHOD_FULL(
SD_VARLINK_FIELD_COMMENT("Name of the software that registered this machine"),
SD_VARLINK_DEFINE_OUTPUT(service, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("The class of this machine"),
SD_VARLINK_DEFINE_OUTPUT(class, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_OUTPUT_BY_TYPE(class, MachineClass, 0),
SD_VARLINK_FIELD_COMMENT("Leader process PID of this machine"),
SD_VARLINK_DEFINE_OUTPUT_BY_TYPE(leader, ProcessId, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Supervisor process PID of this machine"),
@@ -216,6 +228,10 @@ SD_VARLINK_DEFINE_INTERFACE(
&vl_type_ProcessId,
SD_VARLINK_SYMBOL_COMMENT("A timestamp object consisting of both CLOCK_REALTIME and CLOCK_MONOTONIC timestamps"),
&vl_type_Timestamp,
SD_VARLINK_SYMBOL_COMMENT("The class of a machine"),
&vl_type_MachineClass,
SD_VARLINK_SYMBOL_COMMENT("What to send a signal to in a machine"),
&vl_type_KillWhom,
SD_VARLINK_SYMBOL_COMMENT("A enum field allowing to gracefully get metadata"),
&vl_type_AcquireMetadata,
SD_VARLINK_SYMBOL_COMMENT("An address object"),
+3
View File
@@ -4,3 +4,6 @@
#include "sd-varlink-idl.h"
extern const sd_varlink_interface vl_interface_io_systemd_Machine;
extern const sd_varlink_symbol vl_type_MachineClass;
extern const sd_varlink_symbol vl_type_KillWhom;
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "varlink-idl-common.h"
#include "varlink-io.systemd.ManagedOOM.h"
/* Pull in vl_type_ControlGroup, since both interfaces need it */
@@ -19,6 +20,7 @@ static SD_VARLINK_DEFINE_ERROR(SubscriptionTaken);
SD_VARLINK_DEFINE_INTERFACE(
io_systemd_ManagedOOM,
"io.systemd.ManagedOOM",
&vl_type_ManagedOOMMode,
&vl_method_SubscribeManagedOOMCGroups,
&vl_type_ControlGroup,
&vl_error_SubscriptionTaken);
+32 -9
View File
@@ -3,6 +3,24 @@
#include "varlink-idl-common.h"
#include "varlink-io.systemd.Manager.h"
SD_VARLINK_DEFINE_ENUM_TYPE(
LogTarget,
SD_VARLINK_DEFINE_ENUM_VALUE(console),
SD_VARLINK_DEFINE_ENUM_VALUE(kmsg),
SD_VARLINK_DEFINE_ENUM_VALUE(journal),
SD_VARLINK_DEFINE_ENUM_VALUE(syslog),
SD_VARLINK_DEFINE_ENUM_VALUE(console_prefixed),
SD_VARLINK_DEFINE_ENUM_VALUE(journal_or_kmsg),
SD_VARLINK_DEFINE_ENUM_VALUE(syslog_or_kmsg),
SD_VARLINK_DEFINE_ENUM_VALUE(auto),
SD_VARLINK_DEFINE_ENUM_VALUE(null));
SD_VARLINK_DEFINE_ENUM_TYPE(
OOMPolicy,
SD_VARLINK_DEFINE_ENUM_VALUE(continue),
SD_VARLINK_DEFINE_ENUM_VALUE(stop),
SD_VARLINK_DEFINE_ENUM_VALUE(kill));
static SD_VARLINK_DEFINE_STRUCT_TYPE(
LogLevelStruct,
SD_VARLINK_FIELD_COMMENT("'console' target log level"),
@@ -25,13 +43,13 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE(
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#LogColor="),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(LogLevel, LogLevelStruct, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#LogColor="),
SD_VARLINK_DEFINE_FIELD(LogTarget, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(LogTarget, LogTarget, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#ManagerEnvironment="),
SD_VARLINK_DEFINE_FIELD(Environment, SD_VARLINK_STRING, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultStandardOutput="),
SD_VARLINK_DEFINE_FIELD(DefaultStandardOutput, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(DefaultStandardOutput, ExecOutputType, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultStandardError="),
SD_VARLINK_DEFINE_FIELD(DefaultStandardError, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(DefaultStandardError, ExecOutputType, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#ServiceWatchdogs="),
SD_VARLINK_DEFINE_FIELD(ServiceWatchdogs, SD_VARLINK_BOOL, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultTimerAccuracySec="),
@@ -63,15 +81,15 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE(
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultMemoryPressureThresholdUSec="),
SD_VARLINK_DEFINE_FIELD(DefaultMemoryPressureThresholdUSec, SD_VARLINK_INT, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultMemoryPressureWatch="),
SD_VARLINK_DEFINE_FIELD(DefaultMemoryPressureWatch, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(DefaultMemoryPressureWatch, CGroupPressureWatch, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultCPUPressureThresholdUSec="),
SD_VARLINK_DEFINE_FIELD(DefaultCPUPressureThresholdUSec, SD_VARLINK_INT, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultCPUPressureWatch="),
SD_VARLINK_DEFINE_FIELD(DefaultCPUPressureWatch, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(DefaultCPUPressureWatch, CGroupPressureWatch, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultIOPressureThresholdUSec="),
SD_VARLINK_DEFINE_FIELD(DefaultIOPressureThresholdUSec, SD_VARLINK_INT, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultIOPressureWatch="),
SD_VARLINK_DEFINE_FIELD(DefaultIOPressureWatch, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(DefaultIOPressureWatch, CGroupPressureWatch, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#RuntimeWatchdogSec="),
SD_VARLINK_DEFINE_FIELD(RuntimeWatchdogUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#RebootWatchdogSec="),
@@ -87,13 +105,13 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE(
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#TimerSlackNSec="),
SD_VARLINK_DEFINE_FIELD(TimerSlackNSec, SD_VARLINK_INT, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultOOMPolicy="),
SD_VARLINK_DEFINE_FIELD(DefaultOOMPolicy, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(DefaultOOMPolicy, OOMPolicy, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultOOMScoreAdjust="),
SD_VARLINK_DEFINE_FIELD(DefaultOOMScoreAdjust, SD_VARLINK_INT, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#DefaultRestrictSUIDSGID="),
SD_VARLINK_DEFINE_FIELD(DefaultRestrictSUIDSGID, SD_VARLINK_BOOL, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#CtrlAltDelBurstAction="),
SD_VARLINK_DEFINE_FIELD(CtrlAltDelBurstAction, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(CtrlAltDelBurstAction, EmergencyAction, 0),
SD_VARLINK_FIELD_COMMENT("The console on which systemd asks for confirmation when spawning processes"),
SD_VARLINK_DEFINE_FIELD(ConfirmSpawn, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Root of the control group hierarchy that the manager is running in"),
@@ -241,4 +259,9 @@ SD_VARLINK_DEFINE_INTERFACE(
&vl_type_ResourceLimit,
&vl_type_ResourceLimitTable,
&vl_type_RateLimit,
&vl_type_LogLevelStruct);
&vl_type_LogLevelStruct,
&vl_type_LogTarget,
&vl_type_OOMPolicy,
&vl_type_ExecOutputType,
&vl_type_CGroupPressureWatch,
&vl_type_EmergencyAction);
+3
View File
@@ -4,3 +4,6 @@
#include "sd-varlink-idl.h"
extern const sd_varlink_interface vl_interface_io_systemd_Manager;
extern const sd_varlink_symbol vl_type_LogTarget;
extern const sd_varlink_symbol vl_type_OOMPolicy;
+38 -50
View File
@@ -14,21 +14,6 @@ SD_VARLINK_DEFINE_ENUM_TYPE(
SD_VARLINK_DEFINE_ENUM_VALUE(data),
SD_VARLINK_DEFINE_ENUM_VALUE(file));
SD_VARLINK_DEFINE_ENUM_TYPE(
ExecOutputType,
SD_VARLINK_DEFINE_ENUM_VALUE(inherit),
SD_VARLINK_DEFINE_ENUM_VALUE(null),
SD_VARLINK_DEFINE_ENUM_VALUE(tty),
SD_VARLINK_DEFINE_ENUM_VALUE(kmsg),
SD_VARLINK_DEFINE_ENUM_VALUE(kmsg_console),
SD_VARLINK_DEFINE_ENUM_VALUE(journal),
SD_VARLINK_DEFINE_ENUM_VALUE(journal_console),
SD_VARLINK_DEFINE_ENUM_VALUE(socket),
SD_VARLINK_DEFINE_ENUM_VALUE(fd),
SD_VARLINK_DEFINE_ENUM_VALUE(file),
SD_VARLINK_DEFINE_ENUM_VALUE(append),
SD_VARLINK_DEFINE_ENUM_VALUE(truncate));
SD_VARLINK_DEFINE_ENUM_TYPE(
ExecUtmpMode,
SD_VARLINK_DEFINE_ENUM_VALUE(init),
@@ -118,48 +103,17 @@ SD_VARLINK_DEFINE_ENUM_TYPE(
SD_VARLINK_DEFINE_ENUM_VALUE(closed),
SD_VARLINK_DEFINE_ENUM_VALUE(strict));
SD_VARLINK_DEFINE_ENUM_TYPE(
ManagedOOMMode,
SD_VARLINK_DEFINE_ENUM_VALUE(auto),
SD_VARLINK_DEFINE_ENUM_VALUE(kill));
SD_VARLINK_DEFINE_ENUM_TYPE(
ManagedOOMPreference,
SD_VARLINK_DEFINE_ENUM_VALUE(none),
SD_VARLINK_DEFINE_ENUM_VALUE(avoid),
SD_VARLINK_DEFINE_ENUM_VALUE(omit));
SD_VARLINK_DEFINE_ENUM_TYPE(
CGroupPressureWatch,
SD_VARLINK_DEFINE_ENUM_VALUE(no),
SD_VARLINK_DEFINE_ENUM_VALUE(yes),
SD_VARLINK_DEFINE_ENUM_VALUE(auto),
SD_VARLINK_DEFINE_ENUM_VALUE(skip));
SD_VARLINK_DEFINE_ENUM_TYPE(
CollectMode,
SD_VARLINK_DEFINE_ENUM_VALUE(inactive),
SD_VARLINK_DEFINE_ENUM_VALUE(inactive_or_failed));
SD_VARLINK_DEFINE_ENUM_TYPE(
EmergencyAction,
SD_VARLINK_DEFINE_ENUM_VALUE(none),
SD_VARLINK_DEFINE_ENUM_VALUE(exit),
SD_VARLINK_DEFINE_ENUM_VALUE(exit_force),
SD_VARLINK_DEFINE_ENUM_VALUE(reboot),
SD_VARLINK_DEFINE_ENUM_VALUE(reboot_force),
SD_VARLINK_DEFINE_ENUM_VALUE(reboot_immediate),
SD_VARLINK_DEFINE_ENUM_VALUE(poweroff),
SD_VARLINK_DEFINE_ENUM_VALUE(poweroff_force),
SD_VARLINK_DEFINE_ENUM_VALUE(poweroff_immediate),
SD_VARLINK_DEFINE_ENUM_VALUE(soft_reboot),
SD_VARLINK_DEFINE_ENUM_VALUE(soft_reboot_force),
SD_VARLINK_DEFINE_ENUM_VALUE(kexec),
SD_VARLINK_DEFINE_ENUM_VALUE(kexec_force),
SD_VARLINK_DEFINE_ENUM_VALUE(halt),
SD_VARLINK_DEFINE_ENUM_VALUE(halt_force),
SD_VARLINK_DEFINE_ENUM_VALUE(halt_immediate));
SD_VARLINK_DEFINE_ENUM_TYPE(
JobMode,
SD_VARLINK_DEFINE_ENUM_VALUE(fail),
@@ -195,6 +149,36 @@ SD_VARLINK_DEFINE_ENUM_TYPE(
SD_VARLINK_DEFINE_ENUM_VALUE(no),
SD_VARLINK_DEFINE_ENUM_VALUE(yes));
SD_VARLINK_DEFINE_ENUM_TYPE(
CPUSchedulingPolicy,
SD_VARLINK_DEFINE_ENUM_VALUE(other),
SD_VARLINK_DEFINE_ENUM_VALUE(batch),
SD_VARLINK_DEFINE_ENUM_VALUE(idle),
SD_VARLINK_DEFINE_ENUM_VALUE(fifo),
SD_VARLINK_DEFINE_ENUM_VALUE(ext),
SD_VARLINK_DEFINE_ENUM_VALUE(rr));
SD_VARLINK_DEFINE_ENUM_TYPE(
IOSchedulingClass,
SD_VARLINK_DEFINE_ENUM_VALUE(none),
SD_VARLINK_DEFINE_ENUM_VALUE(realtime),
SD_VARLINK_DEFINE_ENUM_VALUE(best_effort),
SD_VARLINK_DEFINE_ENUM_VALUE(idle));
SD_VARLINK_DEFINE_ENUM_TYPE(
NUMAPolicy,
SD_VARLINK_DEFINE_ENUM_VALUE(default),
SD_VARLINK_DEFINE_ENUM_VALUE(preferred),
SD_VARLINK_DEFINE_ENUM_VALUE(bind),
SD_VARLINK_DEFINE_ENUM_VALUE(interleave),
SD_VARLINK_DEFINE_ENUM_VALUE(local));
SD_VARLINK_DEFINE_ENUM_TYPE(
MountPropagationFlag,
SD_VARLINK_DEFINE_ENUM_VALUE(shared),
SD_VARLINK_DEFINE_ENUM_VALUE(slave),
SD_VARLINK_DEFINE_ENUM_VALUE(private));
/* CGroupContext */
static SD_VARLINK_DEFINE_STRUCT_TYPE(
CGroupTasksMax,
@@ -713,7 +697,7 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE(
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man"PROJECT_VERSION_STR"systemd.exec.html#Nice="),
SD_VARLINK_DEFINE_FIELD(Nice, SD_VARLINK_INT, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man"PROJECT_VERSION_STR"systemd.exec.html#CPUSchedulingPolicy="),
SD_VARLINK_DEFINE_FIELD(CPUSchedulingPolicy, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(CPUSchedulingPolicy, CPUSchedulingPolicy, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man"PROJECT_VERSION_STR"systemd.exec.html#CPUSchedulingPriority="),
SD_VARLINK_DEFINE_FIELD(CPUSchedulingPriority, SD_VARLINK_INT, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man"PROJECT_VERSION_STR"systemd.exec.html#CPUSchedulingResetOnFork="),
@@ -721,11 +705,11 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE(
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man"PROJECT_VERSION_STR"systemd.exec.html#CPUAffinity="),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(CPUAffinity, CPUAffinity, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man"PROJECT_VERSION_STR"systemd.exec.html#NUMAPolicy="),
SD_VARLINK_DEFINE_FIELD(NUMAPolicy, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(NUMAPolicy, NUMAPolicy, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man"PROJECT_VERSION_STR"systemd.exec.html#NUMAMask="),
SD_VARLINK_DEFINE_FIELD(NUMAMask, SD_VARLINK_INT, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man"PROJECT_VERSION_STR"systemd.exec.html#IOSchedulingClass="),
SD_VARLINK_DEFINE_FIELD(IOSchedulingClass, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(IOSchedulingClass, IOSchedulingClass, 0),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man"PROJECT_VERSION_STR"systemd.exec.html#IOSchedulingPriority="),
SD_VARLINK_DEFINE_FIELD(IOSchedulingPriority, SD_VARLINK_INT, 0),
@@ -827,7 +811,7 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE(
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man"PROJECT_VERSION_STR"systemd.exec.html#PrivateMounts="),
SD_VARLINK_DEFINE_FIELD(PrivateMounts, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man"PROJECT_VERSION_STR"systemd.exec.html#MountFlags="),
SD_VARLINK_DEFINE_FIELD(MountFlags, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(MountFlags, MountPropagationFlag, SD_VARLINK_NULLABLE),
/* System Call Filtering
* https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html#System%20Call%20Filtering */
@@ -1304,6 +1288,10 @@ SD_VARLINK_DEFINE_INTERFACE(
&vl_type_ProtectControlGroups,
&vl_type_PrivatePIDs,
&vl_type_PrivateBPF,
&vl_type_CPUSchedulingPolicy,
&vl_type_IOSchedulingClass,
&vl_type_NUMAPolicy,
&vl_type_MountPropagationFlag,
&vl_type_WorkingDirectory,
&vl_type_PartitionMountOptions,
&vl_type_BindPath,
+4 -4
View File
@@ -6,7 +6,6 @@
extern const sd_varlink_interface vl_interface_io_systemd_Unit;
extern const sd_varlink_symbol vl_type_ExecInputType;
extern const sd_varlink_symbol vl_type_ExecOutputType;
extern const sd_varlink_symbol vl_type_ExecUtmpMode;
extern const sd_varlink_symbol vl_type_ExecPreserveMode;
extern const sd_varlink_symbol vl_type_ExecKeyringMode;
@@ -22,10 +21,11 @@ extern const sd_varlink_symbol vl_type_ProtectControlGroups;
extern const sd_varlink_symbol vl_type_PrivatePIDs;
extern const sd_varlink_symbol vl_type_PrivateBPF;
extern const sd_varlink_symbol vl_type_CGroupDevicePolicy;
extern const sd_varlink_symbol vl_type_ManagedOOMMode;
extern const sd_varlink_symbol vl_type_ManagedOOMPreference;
extern const sd_varlink_symbol vl_type_CGroupPressureWatch;
extern const sd_varlink_symbol vl_type_CGroupController;
extern const sd_varlink_symbol vl_type_CPUSchedulingPolicy;
extern const sd_varlink_symbol vl_type_IOSchedulingClass;
extern const sd_varlink_symbol vl_type_NUMAPolicy;
extern const sd_varlink_symbol vl_type_MountPropagationFlag;
extern const sd_varlink_symbol vl_type_CollectMode;
extern const sd_varlink_symbol vl_type_EmergencyAction;
extern const sd_varlink_symbol vl_type_JobMode;
+3 -1
View File
@@ -1,5 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "varlink-idl-common.h"
#include "varlink-io.systemd.oom.h"
/* This is oomd's Varlink service, where oomd is server and systemd --user is the client.
@@ -9,7 +10,7 @@
SD_VARLINK_DEFINE_STRUCT_TYPE(
ControlGroup,
SD_VARLINK_DEFINE_FIELD(mode, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(mode, ManagedOOMMode, 0),
SD_VARLINK_DEFINE_FIELD(path, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD(property, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD(limit, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
@@ -22,5 +23,6 @@ static SD_VARLINK_DEFINE_METHOD(
SD_VARLINK_DEFINE_INTERFACE(
io_systemd_oom,
"io.systemd.oom",
&vl_type_ManagedOOMMode,
&vl_method_ReportManagedOOMCGroups,
&vl_type_ControlGroup);
+7
View File
@@ -500,6 +500,13 @@ executables += [
core_test_template + {
'sources' : files('test-varlink-idl-unit.c'),
},
core_test_template + {
'sources' : files('test-varlink-idl-manager.c'),
},
test_template + {
'sources' : files('test-varlink-idl-machine.c'),
'objects' : ['systemd-machined'],
},
test_template + {
'sources' : files('test-watchdog.c'),
'type' : 'unsafe',
+13
View File
@@ -0,0 +1,13 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "machine.h"
#include "tests.h"
#include "test-varlink-idl-util.h"
#include "varlink-io.systemd.Machine.h"
TEST(machine_enums_idl) {
TEST_IDL_ENUM(MachineClass, machine_class, vl_type_MachineClass);
TEST_IDL_ENUM(KillWhom, kill_whom, vl_type_KillWhom);
}
DEFINE_TEST_MAIN(LOG_DEBUG);
+25
View File
@@ -0,0 +1,25 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "cgroup.h"
#include "emergency-action.h"
#include "execute.h"
#include "log.h"
#include "tests.h"
#include "test-varlink-idl-util.h"
#include "unit.h"
#include "varlink-idl-common.h"
#include "varlink-io.systemd.Manager.h"
TEST(manager_enums_idl) {
/* ManagerContext enums */
TEST_IDL_ENUM(LogTarget, log_target, vl_type_LogTarget);
TEST_IDL_ENUM(OOMPolicy, oom_policy, vl_type_OOMPolicy);
/* ExecOutput values like "kmsg+console" contain '+' which becomes '_' via underscorify,
* but dashify won't restore it, so from_string round-trip fails. Test to_string direction only. */
TEST_IDL_ENUM_TO_STRING(ExecOutput, exec_output, vl_type_ExecOutputType);
TEST_IDL_ENUM(CGroupPressureWatch, cgroup_pressure_watch, vl_type_CGroupPressureWatch);
TEST_IDL_ENUM(EmergencyAction, emergency_action, vl_type_EmergencyAction);
}
DEFINE_TEST_MAIN(LOG_DEBUG);
+15
View File
@@ -1,9 +1,13 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "cgroup.h"
#include "ioprio-util.h"
#include "numa-util.h"
#include "process-util.h"
#include "tests.h"
#include "test-varlink-idl-util.h"
#include "unit.h"
#include "varlink-idl-common.h"
#include "varlink-io.systemd.Unit.h"
TEST(unit_enums_idl) {
@@ -25,6 +29,17 @@ TEST(unit_enums_idl) {
TEST_IDL_ENUM(PrivatePIDs, private_pids, vl_type_PrivatePIDs);
TEST_IDL_ENUM(PrivateBPF, private_bpf, vl_type_PrivateBPF);
/* sched_policy table has gaps (SCHED_IDLE=5, SCHED_EXT=7), so only test from_string direction */
TEST_IDL_ENUM_FROM_STRING(int, sched_policy, vl_type_CPUSchedulingPolicy);
/* ioprio_class uses _alloc variant for to_string, so only test from_string direction */
TEST_IDL_ENUM_FROM_STRING(int, ioprio_class, vl_type_IOSchedulingClass);
TEST_IDL_ENUM(int, mpol, vl_type_NUMAPolicy);
/* mount_propagation_flag has non-standard from_string API, test manually */
test_enum_to_string_name("shared", &vl_type_MountPropagationFlag);
test_enum_to_string_name("slave", &vl_type_MountPropagationFlag);
test_enum_to_string_name("private", &vl_type_MountPropagationFlag);
/* CGroupContext enums */
TEST_IDL_ENUM(CGroupDevicePolicy, cgroup_device_policy, vl_type_CGroupDevicePolicy);
TEST_IDL_ENUM(ManagedOOMMode, managed_oom_mode, vl_type_ManagedOOMMode);