From: Michael Vogt Date: Tue, 21 Apr 2026 07:10:39 +0000 (+0200) Subject: varlink: add new io.systemd.Job interface X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9c39db197b6b5bc0e3ed1706eb32fbf34ee4d246;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/shared/meson.build b/src/shared/meson.build index 84acaf698b9..c28fe040b6b 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -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 index 00000000000..af15f8f45bb --- /dev/null +++ b/src/shared/varlink-io.systemd.Job.c @@ -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 index 00000000000..029d56aa212 --- /dev/null +++ b/src/shared/varlink-io.systemd.Job.h @@ -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; diff --git a/src/test/test-varlink-idl.c b/src/test/test-varlink-idl.c index d0f3b914471..a645d4d9d36 100644 --- a/src/test/test-varlink-idl.c +++ b/src/test/test-varlink-idl.c @@ -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,