varlink: add new io.systemd.Job interface

This commit creates a new varlink-io.systemd.Job.c file and puts
the job related varlink types into this file. Those will be
used by the upcoming io.systemd.Unit.StartTransient.

Note that the property names follow the D-Bus naming to make a
future "systemctl show" transition from D-Bus -> varlink easier.

Thanks to @ikruglov for suggesting this preparation commit and
to Lennart for suggesting the D-Bus compatibility considerations.
This commit is contained in:
Michael Vogt
2026-04-27 13:49:19 +02:00
parent d92b511e4a
commit 9c39db197b
4 changed files with 78 additions and 0 deletions
+1
View File
@@ -223,6 +223,7 @@ shared_sources = files(
'varlink-io.systemd.Hostname.c',
'varlink-io.systemd.Import.c',
'varlink-io.systemd.InstanceMetadata.c',
'varlink-io.systemd.Job.c',
'varlink-io.systemd.Journal.c',
'varlink-io.systemd.JournalAccess.c',
'varlink-io.systemd.Login.c',
+65
View File
@@ -0,0 +1,65 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "varlink-io.systemd.Job.h"
/* Keep in sync with job_type_table[] in src/core/job.c */
SD_VARLINK_DEFINE_ENUM_TYPE(
JobType,
SD_VARLINK_DEFINE_ENUM_VALUE(start),
SD_VARLINK_DEFINE_ENUM_VALUE(verify_active),
SD_VARLINK_DEFINE_ENUM_VALUE(stop),
SD_VARLINK_DEFINE_ENUM_VALUE(reload),
SD_VARLINK_DEFINE_ENUM_VALUE(reload_or_start),
SD_VARLINK_DEFINE_ENUM_VALUE(restart),
SD_VARLINK_DEFINE_ENUM_VALUE(try_restart),
SD_VARLINK_DEFINE_ENUM_VALUE(try_reload),
SD_VARLINK_DEFINE_ENUM_VALUE(nop));
/* Keep in sync with job_state_table[] in src/core/job.c */
SD_VARLINK_DEFINE_ENUM_TYPE(
JobState,
SD_VARLINK_DEFINE_ENUM_VALUE(waiting),
SD_VARLINK_DEFINE_ENUM_VALUE(running),
SD_VARLINK_DEFINE_ENUM_VALUE(finished));
/* Keep in sync with job_result_table[] in src/core/job.c */
SD_VARLINK_DEFINE_ENUM_TYPE(
JobResult,
SD_VARLINK_DEFINE_ENUM_VALUE(done),
SD_VARLINK_DEFINE_ENUM_VALUE(canceled),
SD_VARLINK_DEFINE_ENUM_VALUE(timeout),
SD_VARLINK_DEFINE_ENUM_VALUE(failed),
SD_VARLINK_DEFINE_ENUM_VALUE(dependency),
SD_VARLINK_DEFINE_ENUM_VALUE(skipped),
SD_VARLINK_DEFINE_ENUM_VALUE(invalid),
SD_VARLINK_DEFINE_ENUM_VALUE(assert),
SD_VARLINK_DEFINE_ENUM_VALUE(unsupported),
SD_VARLINK_DEFINE_ENUM_VALUE(collected),
SD_VARLINK_DEFINE_ENUM_VALUE(once),
SD_VARLINK_DEFINE_ENUM_VALUE(frozen),
SD_VARLINK_DEFINE_ENUM_VALUE(concurrency));
/* Field names match the D-Bus Job properties (Id, JobType, State) */
SD_VARLINK_DEFINE_STRUCT_TYPE(
Job,
SD_VARLINK_FIELD_COMMENT("The numeric job ID"),
SD_VARLINK_DEFINE_FIELD(Id, SD_VARLINK_INT, 0),
SD_VARLINK_FIELD_COMMENT("The job type"),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(JobType, JobType, 0),
SD_VARLINK_FIELD_COMMENT("Current job state, set in intermediate streaming notifications"),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(State, JobState, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Final job result, set in the final streaming reply"),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(Result, JobResult, SD_VARLINK_NULLABLE));
SD_VARLINK_DEFINE_INTERFACE(
io_systemd_Job,
"io.systemd.Job",
SD_VARLINK_INTERFACE_COMMENT("Job-related types for the systemd service manager."),
SD_VARLINK_SYMBOL_COMMENT("Job type"),
&vl_type_JobType,
SD_VARLINK_SYMBOL_COMMENT("Job state"),
&vl_type_JobState,
SD_VARLINK_SYMBOL_COMMENT("Job result"),
&vl_type_JobResult,
SD_VARLINK_SYMBOL_COMMENT("A job object"),
&vl_type_Job);
+10
View File
@@ -0,0 +1,10 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
#include "sd-varlink-idl.h"
extern const sd_varlink_symbol vl_type_JobType;
extern const sd_varlink_symbol vl_type_JobState;
extern const sd_varlink_symbol vl_type_JobResult;
extern const sd_varlink_symbol vl_type_Job;
extern const sd_varlink_interface vl_interface_io_systemd_Job;
+2
View File
@@ -25,6 +25,7 @@
#include "varlink-io.systemd.Hostname.h"
#include "varlink-io.systemd.Import.h"
#include "varlink-io.systemd.InstanceMetadata.h"
#include "varlink-io.systemd.Job.h"
#include "varlink-io.systemd.Journal.h"
#include "varlink-io.systemd.JournalAccess.h"
#include "varlink-io.systemd.Login.h"
@@ -192,6 +193,7 @@ TEST(parse_format) {
&vl_interface_io_systemd_Hostname,
&vl_interface_io_systemd_Import,
&vl_interface_io_systemd_InstanceMetadata,
&vl_interface_io_systemd_Job,
&vl_interface_io_systemd_Journal,
&vl_interface_io_systemd_JournalAccess,
&vl_interface_io_systemd_Login,