]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
varlink: add new io.systemd.Job interface
authorMichael Vogt <michael@amutable.com>
Tue, 21 Apr 2026 07:10:39 +0000 (09:10 +0200)
committerMichael Vogt <michael@amutable.com>
Mon, 27 Apr 2026 11:49:19 +0000 (13:49 +0200)
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.

src/shared/meson.build
src/shared/varlink-io.systemd.Job.c [new file with mode: 0644]
src/shared/varlink-io.systemd.Job.h [new file with mode: 0644]
src/test/test-varlink-idl.c

index 84acaf698b9c40a30b1093f86bc89df73b098c2c..c28fe040b6b2b100d4613bc085616543642dd5e8 100644 (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',
diff --git a/src/shared/varlink-io.systemd.Job.c b/src/shared/varlink-io.systemd.Job.c
new file mode 100644 (file)
index 0000000..af15f8f
--- /dev/null
@@ -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);
diff --git a/src/shared/varlink-io.systemd.Job.h b/src/shared/varlink-io.systemd.Job.h
new file mode 100644 (file)
index 0000000..029d56a
--- /dev/null
@@ -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;
index d0f3b914471d28bc2d0c377eef8f02fc5ec06ea2..a645d4d9d360cd9fa067aac651547c0b5ec9fa2a 100644 (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,