From a5d8520f86d8691ece4b82e5174fb49daf692bc0 Mon Sep 17 00:00:00 2001 From: Ivan Kruglov Date: Wed, 9 Jul 2025 05:50:32 -0700 Subject: [PATCH 1/8] core: move Version/Arch/Features/Taints/UnitPath from context to runtime --- src/core/varlink-manager.c | 20 ++++++++++---------- src/shared/varlink-io.systemd.Manager.c | 20 ++++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/core/varlink-manager.c b/src/core/varlink-manager.c index 217769c153..a54ee6ce3f 100644 --- a/src/core/varlink-manager.c +++ b/src/core/varlink-manager.c @@ -41,19 +41,9 @@ static int manager_environment_build_json(sd_json_variant **ret, const char *nam static int manager_context_build_json(sd_json_variant **ret, const char *name, void *userdata) { Manager *m = ASSERT_PTR(userdata); - _cleanup_strv_free_ char **taints = NULL; - - taints = taint_strv(); - if (!taints) - return -ENOMEM; return sd_json_buildo( ASSERT_PTR(ret), - SD_JSON_BUILD_PAIR_STRING("Version", GIT_VERSION), - SD_JSON_BUILD_PAIR_STRING("Architecture", architecture_to_string(uname_architecture())), - SD_JSON_BUILD_PAIR_STRING("Features", systemd_features), - JSON_BUILD_PAIR_STRV_NON_EMPTY("Taints", taints), - SD_JSON_BUILD_PAIR_STRV("UnitPath", m->lookup_paths.search_path), JSON_BUILD_PAIR_STRV_NON_EMPTY("Environment", m->transient_environment), 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)), @@ -110,9 +100,19 @@ static int log_level_build_runtime_json(sd_json_variant **ret, const char *name, static int manager_runtime_build_json(sd_json_variant **ret, const char *name, void *userdata) { Manager *m = ASSERT_PTR(userdata); dual_timestamp watchdog_last_ping; + _cleanup_strv_free_ char **taints = NULL; + + taints = taint_strv(); + if (!taints) + return -ENOMEM; return sd_json_buildo( ASSERT_PTR(ret), + SD_JSON_BUILD_PAIR_STRING("Version", GIT_VERSION), + SD_JSON_BUILD_PAIR_STRING("Architecture", architecture_to_string(uname_architecture())), + SD_JSON_BUILD_PAIR_STRING("Features", systemd_features), + JSON_BUILD_PAIR_STRV_NON_EMPTY("Taints", taints), + SD_JSON_BUILD_PAIR_STRV("UnitPath", m->lookup_paths.search_path), SD_JSON_BUILD_PAIR_STRING("Virtualization", virtualization_to_string(detect_virtualization())), SD_JSON_BUILD_PAIR_STRING("ConfidentialVirtualization", confidential_virtualization_to_string(detect_confidential_virtualization())), JSON_BUILD_PAIR_STRING_NON_EMPTY("ConfirmSpawn", manager_get_confirm_spawn(m)), diff --git a/src/shared/varlink-io.systemd.Manager.c b/src/shared/varlink-io.systemd.Manager.c index 299e0a9c30..d1ed8e22b4 100644 --- a/src/shared/varlink-io.systemd.Manager.c +++ b/src/shared/varlink-io.systemd.Manager.c @@ -20,16 +20,6 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( static SD_VARLINK_DEFINE_STRUCT_TYPE( ManagerContext, - SD_VARLINK_FIELD_COMMENT("The version string of the running systemd instance"), - SD_VARLINK_DEFINE_FIELD(Version, SD_VARLINK_STRING, 0), - SD_VARLINK_FIELD_COMMENT("A short ID string describing the architecture the systemd instance is running on"), - SD_VARLINK_DEFINE_FIELD(Architecture, SD_VARLINK_STRING, 0), - SD_VARLINK_FIELD_COMMENT("The features that have been enabled and disabled for this build"), - SD_VARLINK_DEFINE_FIELD(Features, SD_VARLINK_STRING, 0), - SD_VARLINK_FIELD_COMMENT("An array of strings describing the taints applied to the running system"), - SD_VARLINK_DEFINE_FIELD(Taints, SD_VARLINK_STRING, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE), - SD_VARLINK_FIELD_COMMENT("The unit search path"), - SD_VARLINK_DEFINE_FIELD(UnitPath, SD_VARLINK_STRING, SD_VARLINK_ARRAY), SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/latest/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="), @@ -81,6 +71,16 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( static SD_VARLINK_DEFINE_STRUCT_TYPE( ManagerRuntime, + SD_VARLINK_FIELD_COMMENT("The version string of the running systemd instance"), + SD_VARLINK_DEFINE_FIELD(Version, SD_VARLINK_STRING, 0), + SD_VARLINK_FIELD_COMMENT("A short ID string describing the architecture the systemd instance is running on"), + SD_VARLINK_DEFINE_FIELD(Architecture, SD_VARLINK_STRING, 0), + SD_VARLINK_FIELD_COMMENT("The features that have been enabled and disabled for this build"), + SD_VARLINK_DEFINE_FIELD(Features, SD_VARLINK_STRING, 0), + SD_VARLINK_FIELD_COMMENT("An array of strings describing the taints applied to the running system"), + SD_VARLINK_DEFINE_FIELD(Taints, SD_VARLINK_STRING, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE), + SD_VARLINK_FIELD_COMMENT("The unit search path"), + SD_VARLINK_DEFINE_FIELD(UnitPath, SD_VARLINK_STRING, SD_VARLINK_ARRAY), SD_VARLINK_FIELD_COMMENT("A short ID string describing the virtualization technology the system runs in"), SD_VARLINK_DEFINE_FIELD(Virtualization, SD_VARLINK_STRING, 0), SD_VARLINK_FIELD_COMMENT("A short ID string describing the confidential virtualization technology the system runs in"), From afa99924299eb231ff832035d32841a1d384f720 Mon Sep 17 00:00:00 2001 From: Ivan Kruglov Date: Wed, 9 Jul 2025 05:54:07 -0700 Subject: [PATCH 2/8] core: fix double Environment present in both context and runtime --- src/core/varlink-manager.c | 3 +-- src/shared/varlink-io.systemd.Manager.c | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/core/varlink-manager.c b/src/core/varlink-manager.c index a54ee6ce3f..c1e1046835 100644 --- a/src/core/varlink-manager.c +++ b/src/core/varlink-manager.c @@ -44,7 +44,7 @@ static int manager_context_build_json(sd_json_variant **ret, const char *name, v return sd_json_buildo( ASSERT_PTR(ret), - JSON_BUILD_PAIR_STRV_NON_EMPTY("Environment", m->transient_environment), + 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)), SD_JSON_BUILD_PAIR_BOOLEAN("ServiceWatchdogs", m->service_watchdogs), @@ -144,7 +144,6 @@ static int manager_runtime_build_json(sd_json_variant **ret, const char *name, v SD_JSON_BUILD_PAIR_UNSIGNED("NInstalledJobs", m->n_installed_jobs), SD_JSON_BUILD_PAIR_UNSIGNED("NFailedJobs", m->n_failed_jobs), SD_JSON_BUILD_PAIR_REAL("Progress", manager_get_progress(m)), - JSON_BUILD_PAIR_CALLBACK_NON_NULL("Environment", manager_environment_build_json, m), JSON_BUILD_PAIR_STRING_NON_EMPTY("WatchdogDevice", watchdog_get_device()), JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL("WatchdogLastPingTimestamp", watchdog_get_last_ping_as_dual_timestamp(&watchdog_last_ping)), JSON_BUILD_PAIR_STRING_NON_EMPTY("ControlGroup", m->cgroup_root), diff --git a/src/shared/varlink-io.systemd.Manager.c b/src/shared/varlink-io.systemd.Manager.c index d1ed8e22b4..a3cb2edc83 100644 --- a/src/shared/varlink-io.systemd.Manager.c +++ b/src/shared/varlink-io.systemd.Manager.c @@ -20,7 +20,7 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( static SD_VARLINK_DEFINE_STRUCT_TYPE( ManagerContext, - SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/latest/systemd-system.conf.html#ManagerEnvironment="), + 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), @@ -143,8 +143,6 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( SD_VARLINK_DEFINE_FIELD(NFailedJobs, SD_VARLINK_INT, 0), SD_VARLINK_FIELD_COMMENT("Boot progress as a floating point value between 0.0 and 1.0"), SD_VARLINK_DEFINE_FIELD(Progress, SD_VARLINK_FLOAT, 0), - SD_VARLINK_FIELD_COMMENT("The manager environment variables"), - SD_VARLINK_DEFINE_FIELD(Environment, SD_VARLINK_STRING, SD_VARLINK_ARRAY), SD_VARLINK_FIELD_COMMENT("The hardware watchdog device currently in use"), SD_VARLINK_DEFINE_FIELD(WatchdogDevice, SD_VARLINK_STRING, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("Timestamp when the hardware watchdog was last pinged"), From 545fde151ad107c59b9426acfdc71e716a6fa0af Mon Sep 17 00:00:00 2001 From: Ivan Kruglov Date: Wed, 9 Jul 2025 05:57:55 -0700 Subject: [PATCH 3/8] core: move RuntimeWatchdog* + RebootWatchdog + KExecWatchdog from runtime to spec --- src/core/varlink-manager.c | 10 +++++----- src/shared/varlink-io.systemd.Manager.c | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/core/varlink-manager.c b/src/core/varlink-manager.c index c1e1046835..3badb6b9d3 100644 --- a/src/core/varlink-manager.c +++ b/src/core/varlink-manager.c @@ -63,6 +63,11 @@ static int manager_context_build_json(sd_json_variant **ret, const char *name, v SD_JSON_BUILD_PAIR_UNSIGNED("DefaultTasksMax", cgroup_tasks_max_resolve(&m->defaults.tasks_max)), JSON_BUILD_PAIR_FINITE_USEC("DefaultMemoryPressureThresholdUSec", m->defaults.memory_pressure_threshold_usec), SD_JSON_BUILD_PAIR_STRING("DefaultMemoryPressureWatch", cgroup_pressure_watch_to_string(m->defaults.memory_pressure_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)), + JSON_BUILD_PAIR_FINITE_USEC("RuntimeWatchdogPreUSec", manager_get_watchdog(m, WATCHDOG_PRETIMEOUT)), + JSON_BUILD_PAIR_STRING_NON_EMPTY("RuntimeWatchdogPreGovernor", m->watchdog_pretimeout_governor), 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)), SD_JSON_BUILD_PAIR_INTEGER("DefaultOOMScoreAdjust", m->defaults.oom_score_adjust), @@ -149,11 +154,6 @@ static int manager_runtime_build_json(sd_json_variant **ret, const char *name, v JSON_BUILD_PAIR_STRING_NON_EMPTY("ControlGroup", m->cgroup_root), SD_JSON_BUILD_PAIR_STRING("SystemState", manager_state_to_string(manager_state(m))), SD_JSON_BUILD_PAIR_UNSIGNED("ExitCode", m->return_value), - JSON_BUILD_PAIR_FINITE_USEC("RuntimeWatchdogUSec", manager_get_watchdog(m, WATCHDOG_RUNTIME)), - JSON_BUILD_PAIR_FINITE_USEC("RuntimeWatchdogPreUSec", manager_get_watchdog(m, WATCHDOG_PRETIMEOUT)), - JSON_BUILD_PAIR_STRING_NON_EMPTY("RuntimeWatchdogPreGovernor", m->watchdog_pretimeout_governor), - JSON_BUILD_PAIR_FINITE_USEC("RebootWatchdogUSec", manager_get_watchdog(m, WATCHDOG_REBOOT)), - JSON_BUILD_PAIR_FINITE_USEC("KExecWatchdogUSec", manager_get_watchdog(m, WATCHDOG_KEXEC)), SD_JSON_BUILD_PAIR_UNSIGNED("SoftRebootsCount", m->soft_reboots_count)); } diff --git a/src/shared/varlink-io.systemd.Manager.c b/src/shared/varlink-io.systemd.Manager.c index a3cb2edc83..7d4594b8af 100644 --- a/src/shared/varlink-io.systemd.Manager.c +++ b/src/shared/varlink-io.systemd.Manager.c @@ -58,6 +58,16 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( 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_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="), + SD_VARLINK_DEFINE_FIELD(RebootWatchdogUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE), + SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#KExecWatchdogSec="), + SD_VARLINK_DEFINE_FIELD(KExecWatchdogUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE), + SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#RuntimeWatchdogPreSec="), + SD_VARLINK_DEFINE_FIELD(RuntimeWatchdogPreUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE), + SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#RuntimeWatchdogPreGovernor="), + SD_VARLINK_DEFINE_FIELD(RuntimeWatchdogPreGovernor, SD_VARLINK_STRING, SD_VARLINK_NULLABLE), 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="), @@ -153,16 +163,6 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( SD_VARLINK_DEFINE_FIELD(SystemState, SD_VARLINK_STRING, 0), SD_VARLINK_FIELD_COMMENT("Exit code of the manager"), SD_VARLINK_DEFINE_FIELD(ExitCode, SD_VARLINK_INT, 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#RuntimeWatchdogPreSec="), - SD_VARLINK_DEFINE_FIELD(RuntimeWatchdogPreUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE), - SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#RuntimeWatchdogPreGovernor="), - SD_VARLINK_DEFINE_FIELD(RuntimeWatchdogPreGovernor, SD_VARLINK_STRING, SD_VARLINK_NULLABLE), - SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#RebootWatchdogSec="), - SD_VARLINK_DEFINE_FIELD(RebootWatchdogUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE), - SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#KExecWatchdogSec="), - SD_VARLINK_DEFINE_FIELD(KExecWatchdogUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("Encodes how many soft-reboots were successfully completed"), SD_VARLINK_DEFINE_FIELD(SoftRebootsCount, SD_VARLINK_INT, 0)); From 712f7630368605e43c37e8476f70f5c8aeec7d58 Mon Sep 17 00:00:00 2001 From: Ivan Kruglov Date: Wed, 9 Jul 2025 05:59:01 -0700 Subject: [PATCH 4/8] core: move WatchdogDevice from runtime to context --- src/core/varlink-manager.c | 2 +- src/shared/varlink-io.systemd.Manager.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/varlink-manager.c b/src/core/varlink-manager.c index 3badb6b9d3..65b4723f14 100644 --- a/src/core/varlink-manager.c +++ b/src/core/varlink-manager.c @@ -68,6 +68,7 @@ static int manager_context_build_json(sd_json_variant **ret, const char *name, v JSON_BUILD_PAIR_FINITE_USEC("KExecWatchdogUSec", manager_get_watchdog(m, WATCHDOG_KEXEC)), JSON_BUILD_PAIR_FINITE_USEC("RuntimeWatchdogPreUSec", manager_get_watchdog(m, WATCHDOG_PRETIMEOUT)), 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)), SD_JSON_BUILD_PAIR_INTEGER("DefaultOOMScoreAdjust", m->defaults.oom_score_adjust), @@ -149,7 +150,6 @@ static int manager_runtime_build_json(sd_json_variant **ret, const char *name, v SD_JSON_BUILD_PAIR_UNSIGNED("NInstalledJobs", m->n_installed_jobs), SD_JSON_BUILD_PAIR_UNSIGNED("NFailedJobs", m->n_failed_jobs), SD_JSON_BUILD_PAIR_REAL("Progress", manager_get_progress(m)), - JSON_BUILD_PAIR_STRING_NON_EMPTY("WatchdogDevice", watchdog_get_device()), JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL("WatchdogLastPingTimestamp", watchdog_get_last_ping_as_dual_timestamp(&watchdog_last_ping)), JSON_BUILD_PAIR_STRING_NON_EMPTY("ControlGroup", m->cgroup_root), SD_JSON_BUILD_PAIR_STRING("SystemState", manager_state_to_string(manager_state(m))), diff --git a/src/shared/varlink-io.systemd.Manager.c b/src/shared/varlink-io.systemd.Manager.c index 7d4594b8af..7a31f42559 100644 --- a/src/shared/varlink-io.systemd.Manager.c +++ b/src/shared/varlink-io.systemd.Manager.c @@ -68,6 +68,8 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( SD_VARLINK_DEFINE_FIELD(RuntimeWatchdogPreUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#RuntimeWatchdogPreGovernor="), SD_VARLINK_DEFINE_FIELD(RuntimeWatchdogPreGovernor, SD_VARLINK_STRING, SD_VARLINK_NULLABLE), + SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#WatchdogDevice="), + SD_VARLINK_DEFINE_FIELD(WatchdogDevice, SD_VARLINK_STRING, SD_VARLINK_NULLABLE), 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="), @@ -153,8 +155,6 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( SD_VARLINK_DEFINE_FIELD(NFailedJobs, SD_VARLINK_INT, 0), SD_VARLINK_FIELD_COMMENT("Boot progress as a floating point value between 0.0 and 1.0"), SD_VARLINK_DEFINE_FIELD(Progress, SD_VARLINK_FLOAT, 0), - SD_VARLINK_FIELD_COMMENT("The hardware watchdog device currently in use"), - SD_VARLINK_DEFINE_FIELD(WatchdogDevice, SD_VARLINK_STRING, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("Timestamp when the hardware watchdog was last pinged"), SD_VARLINK_DEFINE_FIELD_BY_TYPE(WatchdogLastPingTimestamp, Timestamp, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("Root of the control group hierarchy that the manager is running in"), From 303d1b6b57105a564b921e5a813d6bbbf739554b Mon Sep 17 00:00:00 2001 From: Ivan Kruglov Date: Wed, 9 Jul 2025 06:00:04 -0700 Subject: [PATCH 5/8] core: move ShowStatus/Log* from runtime to context --- src/core/varlink-manager.c | 60 ++++++++++++------------- src/shared/varlink-io.systemd.Manager.c | 12 ++--- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/core/varlink-manager.c b/src/core/varlink-manager.c index 65b4723f14..a6a89488a4 100644 --- a/src/core/varlink-manager.c +++ b/src/core/varlink-manager.c @@ -39,11 +39,41 @@ static int manager_environment_build_json(sd_json_variant **ret, const char *nam return sd_json_variant_new_array_strv(ret, l); } +static int log_level_build_json(sd_json_variant **ret, const char *name, void *userdata) { + _cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL; + int log_max_level = log_get_max_level(); + int r; + + assert(ret); + + for (LogTarget log_target = 0; log_target < _LOG_TARGET_SINGLE_MAX; log_target++) { + _cleanup_free_ char *log_level_string = NULL; + + int target_max_level = log_get_target_max_level(log_target); + const char *log_target_string = log_target_to_string(log_target); + + int log_level = MIN(log_max_level, target_max_level); + r = log_level_to_string_alloc(log_level, &log_level_string); + if (r < 0) + return r; + + r = sd_json_variant_set_field_string(&v, log_target_string, log_level_string); + if (r < 0) + return r; + } + + *ret = TAKE_PTR(v); + return 0; +} + static int manager_context_build_json(sd_json_variant **ret, const char *name, void *userdata) { Manager *m = ASSERT_PTR(userdata); return sd_json_buildo( 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_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)), @@ -76,33 +106,6 @@ static int manager_context_build_json(sd_json_variant **ret, const char *name, v SD_JSON_BUILD_PAIR_STRING("CtrlAltDelBurstAction", emergency_action_to_string(m->cad_burst_action))); } -static int log_level_build_runtime_json(sd_json_variant **ret, const char *name, void *userdata) { - _cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL; - int log_max_level = log_get_max_level(); - int r; - - assert(ret); - - for (LogTarget log_target = 0; log_target < _LOG_TARGET_SINGLE_MAX; log_target++) { - _cleanup_free_ char *log_level_string = NULL; - - int target_max_level = log_get_target_max_level(log_target); - const char *log_target_string = log_target_to_string(log_target); - - int log_level = MIN(log_max_level, target_max_level); - r = log_level_to_string_alloc(log_level, &log_level_string); - if (r < 0) - return r; - - r = sd_json_variant_set_field_string(&v, log_target_string, log_level_string); - if (r < 0) - return r; - } - - *ret = TAKE_PTR(v); - return 0; -} - static int manager_runtime_build_json(sd_json_variant **ret, const char *name, void *userdata) { Manager *m = ASSERT_PTR(userdata); dual_timestamp watchdog_last_ping; @@ -141,9 +144,6 @@ static int manager_runtime_build_json(sd_json_variant **ret, const char *name, v JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL("InitRDGeneratorsFinishTimestamp", &m->timestamps[MANAGER_TIMESTAMP_INITRD_GENERATORS_FINISH]), JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL("InitRDUnitsLoadStartTimestamp", &m->timestamps[MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_START]), JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL("InitRDUnitsLoadFinishTimestamp", &m->timestamps[MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_FINISH]), - SD_JSON_BUILD_PAIR_BOOLEAN("ShowStatus", manager_get_show_status_on(m)), - JSON_BUILD_PAIR_CALLBACK_NON_NULL("LogLevel", log_level_build_runtime_json, m), - SD_JSON_BUILD_PAIR_STRING("LogTarget", log_target_to_string(log_get_target())), SD_JSON_BUILD_PAIR_UNSIGNED("NNames", hashmap_size(m->units)), SD_JSON_BUILD_PAIR_UNSIGNED("NFailedUnits", set_size(m->failed_units)), SD_JSON_BUILD_PAIR_UNSIGNED("NJobs", hashmap_size(m->jobs)), diff --git a/src/shared/varlink-io.systemd.Manager.c b/src/shared/varlink-io.systemd.Manager.c index 7a31f42559..551d2d592e 100644 --- a/src/shared/varlink-io.systemd.Manager.c +++ b/src/shared/varlink-io.systemd.Manager.c @@ -20,6 +20,12 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( static SD_VARLINK_DEFINE_STRUCT_TYPE( ManagerContext, + SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd-system.conf.html#LogColor="), + SD_VARLINK_DEFINE_FIELD(ShowStatus, SD_VARLINK_BOOL, 0), + 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_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="), @@ -137,12 +143,6 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( SD_VARLINK_DEFINE_FIELD_BY_TYPE(InitRDUnitsLoadStartTimestamp, Timestamp, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("Timestamp when the manager first finished loading units in the initrd"), SD_VARLINK_DEFINE_FIELD_BY_TYPE(InitRDUnitsLoadFinishTimestamp, Timestamp, SD_VARLINK_NULLABLE), - SD_VARLINK_FIELD_COMMENT("The current show status of the manager"), - SD_VARLINK_DEFINE_FIELD(ShowStatus, SD_VARLINK_BOOL, 0), - SD_VARLINK_FIELD_COMMENT("The current log level of the manager"), - SD_VARLINK_DEFINE_FIELD_BY_TYPE(LogLevel, LogLevelStruct, 0), - SD_VARLINK_FIELD_COMMENT("The current log target of the manager"), - SD_VARLINK_DEFINE_FIELD(LogTarget, SD_VARLINK_STRING, 0), SD_VARLINK_FIELD_COMMENT("The amount of unique unit names currently loaded"), SD_VARLINK_DEFINE_FIELD(NNames, SD_VARLINK_INT, 0), SD_VARLINK_FIELD_COMMENT("The amount of failed units"), From 89701e02accc5559ff791b03fa6489ffd81c41f0 Mon Sep 17 00:00:00 2001 From: Ivan Kruglov Date: Thu, 10 Jul 2025 07:33:20 -0700 Subject: [PATCH 6/8] core: move ConfirmSpawn from runtime to context --- src/core/varlink-manager.c | 4 ++-- src/shared/varlink-io.systemd.Manager.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/varlink-manager.c b/src/core/varlink-manager.c index a6a89488a4..04cdbfe379 100644 --- a/src/core/varlink-manager.c +++ b/src/core/varlink-manager.c @@ -103,7 +103,8 @@ static int manager_context_build_json(sd_json_variant **ret, const char *name, v SD_JSON_BUILD_PAIR_STRING("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))); + SD_JSON_BUILD_PAIR_STRING("CtrlAltDelBurstAction", emergency_action_to_string(m->cad_burst_action)), + JSON_BUILD_PAIR_STRING_NON_EMPTY("ConfirmSpawn", manager_get_confirm_spawn(m))); } static int manager_runtime_build_json(sd_json_variant **ret, const char *name, void *userdata) { @@ -124,7 +125,6 @@ static int manager_runtime_build_json(sd_json_variant **ret, const char *name, v SD_JSON_BUILD_PAIR_STRV("UnitPath", m->lookup_paths.search_path), SD_JSON_BUILD_PAIR_STRING("Virtualization", virtualization_to_string(detect_virtualization())), SD_JSON_BUILD_PAIR_STRING("ConfidentialVirtualization", confidential_virtualization_to_string(detect_confidential_virtualization())), - JSON_BUILD_PAIR_STRING_NON_EMPTY("ConfirmSpawn", manager_get_confirm_spawn(m)), JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL("FirmwareTimestamp", &m->timestamps[MANAGER_TIMESTAMP_FIRMWARE]), JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL("LoaderTimestamp", &m->timestamps[MANAGER_TIMESTAMP_LOADER]), JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL("KernelTimestamp", &m->timestamps[MANAGER_TIMESTAMP_KERNEL]), diff --git a/src/shared/varlink-io.systemd.Manager.c b/src/shared/varlink-io.systemd.Manager.c index 551d2d592e..32b661aab8 100644 --- a/src/shared/varlink-io.systemd.Manager.c +++ b/src/shared/varlink-io.systemd.Manager.c @@ -85,7 +85,9 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( 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(CtrlAltDelBurstAction, SD_VARLINK_STRING, 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)); static SD_VARLINK_DEFINE_STRUCT_TYPE( ManagerRuntime, @@ -103,8 +105,6 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( SD_VARLINK_DEFINE_FIELD(Virtualization, SD_VARLINK_STRING, 0), SD_VARLINK_FIELD_COMMENT("A short ID string describing the confidential virtualization technology the system runs in"), SD_VARLINK_DEFINE_FIELD(ConfidentialVirtualization, SD_VARLINK_STRING, 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("Timestamp when the firmware first began execution"), SD_VARLINK_DEFINE_FIELD_BY_TYPE(FirmwareTimestamp, Timestamp, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("Timestamp when the boot loader first began execution"), From 79eec46dfd9fe916b2d05a4e7be4c88828aad704 Mon Sep 17 00:00:00 2001 From: Ivan Kruglov Date: Thu, 10 Jul 2025 07:36:13 -0700 Subject: [PATCH 7/8] core: move ControlGroup move runtime to context --- src/core/varlink-manager.c | 4 ++-- src/shared/varlink-io.systemd.Manager.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/varlink-manager.c b/src/core/varlink-manager.c index 04cdbfe379..d430fc9637 100644 --- a/src/core/varlink-manager.c +++ b/src/core/varlink-manager.c @@ -104,7 +104,8 @@ static int manager_context_build_json(sd_json_variant **ret, const char *name, v 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_STRING_NON_EMPTY("ConfirmSpawn", manager_get_confirm_spawn(m))); + JSON_BUILD_PAIR_STRING_NON_EMPTY("ConfirmSpawn", manager_get_confirm_spawn(m)), + JSON_BUILD_PAIR_STRING_NON_EMPTY("ControlGroup", m->cgroup_root)); } static int manager_runtime_build_json(sd_json_variant **ret, const char *name, void *userdata) { @@ -151,7 +152,6 @@ static int manager_runtime_build_json(sd_json_variant **ret, const char *name, v SD_JSON_BUILD_PAIR_UNSIGNED("NFailedJobs", m->n_failed_jobs), SD_JSON_BUILD_PAIR_REAL("Progress", manager_get_progress(m)), JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL("WatchdogLastPingTimestamp", watchdog_get_last_ping_as_dual_timestamp(&watchdog_last_ping)), - JSON_BUILD_PAIR_STRING_NON_EMPTY("ControlGroup", m->cgroup_root), SD_JSON_BUILD_PAIR_STRING("SystemState", manager_state_to_string(manager_state(m))), SD_JSON_BUILD_PAIR_UNSIGNED("ExitCode", m->return_value), SD_JSON_BUILD_PAIR_UNSIGNED("SoftRebootsCount", m->soft_reboots_count)); diff --git a/src/shared/varlink-io.systemd.Manager.c b/src/shared/varlink-io.systemd.Manager.c index 32b661aab8..cdcaa53b71 100644 --- a/src/shared/varlink-io.systemd.Manager.c +++ b/src/shared/varlink-io.systemd.Manager.c @@ -87,7 +87,9 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( 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_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_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"), + SD_VARLINK_DEFINE_FIELD(ControlGroup, SD_VARLINK_STRING, SD_VARLINK_NULLABLE)); static SD_VARLINK_DEFINE_STRUCT_TYPE( ManagerRuntime, @@ -157,8 +159,6 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE( SD_VARLINK_DEFINE_FIELD(Progress, SD_VARLINK_FLOAT, 0), SD_VARLINK_FIELD_COMMENT("Timestamp when the hardware watchdog was last pinged"), SD_VARLINK_DEFINE_FIELD_BY_TYPE(WatchdogLastPingTimestamp, Timestamp, SD_VARLINK_NULLABLE), - SD_VARLINK_FIELD_COMMENT("Root of the control group hierarchy that the manager is running in"), - SD_VARLINK_DEFINE_FIELD(ControlGroup, SD_VARLINK_STRING, SD_VARLINK_NULLABLE), SD_VARLINK_FIELD_COMMENT("Current state of the system"), SD_VARLINK_DEFINE_FIELD(SystemState, SD_VARLINK_STRING, 0), SD_VARLINK_FIELD_COMMENT("Exit code of the manager"), From 5dc3096efbe82197a94198d4dbcdae51601d7ad0 Mon Sep 17 00:00:00 2001 From: Ivan Kruglov Date: Wed, 9 Jul 2025 06:15:04 -0700 Subject: [PATCH 8/8] core: leave a comment about context/runtime split --- src/core/varlink-manager.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/varlink-manager.c b/src/core/varlink-manager.c index d430fc9637..3414ccb9ed 100644 --- a/src/core/varlink-manager.c +++ b/src/core/varlink-manager.c @@ -69,6 +69,10 @@ static int log_level_build_json(sd_json_variant **ret, const char *name, void *u static int manager_context_build_json(sd_json_variant **ret, const char *name, void *userdata) { Manager *m = ASSERT_PTR(userdata); + /* The main principle behind context/runtime split is the following: + * If it make sense to place a property into a config/unit file it belongs to Context. + * Otherwise it's a 'Runtime'. */ + return sd_json_buildo( ASSERT_PTR(ret), SD_JSON_BUILD_PAIR_BOOLEAN("ShowStatus", manager_get_show_status_on(m)),