--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "sd-json.h"
+
+#include "json-util.h"
+#include "swap.h"
+#include "user-util.h"
+#include "varlink-common.h"
+#include "varlink-swap.h"
+
+int swap_context_build_json(sd_json_variant **ret, const char *name, void *userdata) {
+ Swap *s = ASSERT_PTR(SWAP(userdata));
+
+ return sd_json_buildo(
+ ASSERT_PTR(ret),
+ SD_JSON_BUILD_PAIR_STRING("What", s->what),
+ JSON_BUILD_PAIR_INTEGER_NON_NEGATIVE("Priority", swap_get_priority(s)),
+ JSON_BUILD_PAIR_STRING_NON_EMPTY("Options", swap_get_options(s)),
+ JSON_BUILD_PAIR_FINITE_USEC("TimeoutUSec", s->timeout_usec),
+ JSON_BUILD_PAIR_CALLBACK_NON_NULL("ExecActivate", exec_command_build_json, &s->exec_command[SWAP_EXEC_ACTIVATE]),
+ JSON_BUILD_PAIR_CALLBACK_NON_NULL("ExecDeactivate", exec_command_build_json, &s->exec_command[SWAP_EXEC_DEACTIVATE]));
+}
+
+int swap_runtime_build_json(sd_json_variant **ret, const char *name, void *userdata) {
+ Unit *u = ASSERT_PTR(userdata);
+ Swap *s = ASSERT_PTR(SWAP(u));
+
+ return sd_json_buildo(
+ ASSERT_PTR(ret),
+ SD_JSON_BUILD_PAIR_CONDITION(pidref_is_set(&s->control_pid), "ControlPID", JSON_BUILD_PIDREF(&s->control_pid)),
+ JSON_BUILD_PAIR_ENUM("Result", swap_result_to_string(s->result)),
+ JSON_BUILD_PAIR_ENUM("CleanResult", swap_result_to_string(s->clean_result)),
+ SD_JSON_BUILD_PAIR_CONDITION(uid_is_valid(u->ref_uid), "UID", SD_JSON_BUILD_UNSIGNED(u->ref_uid)),
+ SD_JSON_BUILD_PAIR_CONDITION(gid_is_valid(u->ref_gid), "GID", SD_JSON_BUILD_UNSIGNED(u->ref_gid)));
+}
SD_VARLINK_FIELD_COMMENT("Result of scope operation"),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(Result, ScopeResult, 0));
+/* SwapContext
+ * https://www.freedesktop.org/software/systemd/man/latest/systemd.swap.html */
+static SD_VARLINK_DEFINE_STRUCT_TYPE(
+ SwapContext,
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.swap.html#What="),
+ SD_VARLINK_DEFINE_FIELD(What, SD_VARLINK_STRING, 0),
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.swap.html#Priority="),
+ SD_VARLINK_DEFINE_FIELD(Priority, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.swap.html#Options="),
+ SD_VARLINK_DEFINE_FIELD(Options, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.swap.html#TimeoutSec="),
+ SD_VARLINK_DEFINE_FIELD(TimeoutUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("Activate command"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(ExecActivate, ExecCommand, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("Deactivate command"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(ExecDeactivate, ExecCommand, SD_VARLINK_NULLABLE));
+
+SD_VARLINK_DEFINE_ENUM_TYPE(
+ SwapResult,
+ SD_VARLINK_DEFINE_ENUM_VALUE(success),
+ SD_VARLINK_DEFINE_ENUM_VALUE(resources),
+ SD_VARLINK_DEFINE_ENUM_VALUE(timeout),
+ SD_VARLINK_DEFINE_ENUM_VALUE(exit_code),
+ SD_VARLINK_DEFINE_ENUM_VALUE(signal),
+ SD_VARLINK_DEFINE_ENUM_VALUE(core_dump),
+ SD_VARLINK_DEFINE_ENUM_VALUE(start_limit_hit));
+
+static SD_VARLINK_DEFINE_STRUCT_TYPE(
+ SwapRuntime,
+ SD_VARLINK_FIELD_COMMENT("PID of the current swap control process"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(ControlPID, ProcessId, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("Result of swap operation"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(Result, SwapResult, 0),
+ SD_VARLINK_FIELD_COMMENT("Result of cleaning operation"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(CleanResult, SwapResult, 0),
+ SD_VARLINK_FIELD_COMMENT("Reference UID"),
+ SD_VARLINK_DEFINE_FIELD(UID, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("Reference GID"),
+ SD_VARLINK_DEFINE_FIELD(GID, SD_VARLINK_INT, SD_VARLINK_NULLABLE));
+
/* Service-specific types */
/* Keep in sync with service_type_table[] in src/core/service.c */
SD_VARLINK_FIELD_COMMENT("The path context of the unit"),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(Path, PathContext, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("The scope context of the unit"),
- SD_VARLINK_DEFINE_FIELD_BY_TYPE(Scope, ScopeContext, SD_VARLINK_NULLABLE));
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(Scope, ScopeContext, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("The swap context of the unit"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(Swap, SwapContext, SD_VARLINK_NULLABLE));
static SD_VARLINK_DEFINE_STRUCT_TYPE(
ActivationDetails,
SD_VARLINK_FIELD_COMMENT("The path runtime of the unit"),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(Path, PathRuntime, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("The scope runtime of the unit"),
- SD_VARLINK_DEFINE_FIELD_BY_TYPE(Scope, ScopeRuntime, SD_VARLINK_NULLABLE));
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(Scope, ScopeRuntime, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("The swap runtime of the unit"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(Swap, SwapRuntime, SD_VARLINK_NULLABLE));
static SD_VARLINK_DEFINE_METHOD_FULL(
List,
&vl_type_ScopeContext,
&vl_type_ScopeResult,
&vl_type_ScopeRuntime,
+ &vl_type_SwapContext,
+ &vl_type_SwapResult,
+ &vl_type_SwapRuntime,
/* UnitContext enums */
&vl_type_CollectMode,