core: implement SwapContext/Runtime for io.systemd.Unit.List + tests
Add varlink context and runtime builders for .swap units: SwapContext: What, Priority, Options, TimeoutUSec, ExecActivate, ExecDeactivate SwapRuntime: ControlPID, Result, CleanResult, UID, GID (SwapResult enum) SwapResult is exposed as a proper varlink enum type. Runtime follows the same pattern as MountRuntime (ControlPID, Result, CleanResult, ref UID/GID). The integration test is conditional since swap units may not be present on all systems. Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -75,6 +75,7 @@ libcore_sources = files(
|
||||
'varlink-mount.c',
|
||||
'varlink-path.c',
|
||||
'varlink-scope.c',
|
||||
'varlink-swap.c',
|
||||
'varlink-unit.c',
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/* 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)));
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
#pragma once
|
||||
|
||||
#include "core-forward.h"
|
||||
|
||||
int swap_context_build_json(sd_json_variant **ret, const char *name, void *userdata);
|
||||
int swap_runtime_build_json(sd_json_variant **ret, const char *name, void *userdata);
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "varlink-mount.h"
|
||||
#include "varlink-path.h"
|
||||
#include "varlink-scope.h"
|
||||
#include "varlink-swap.h"
|
||||
#include "varlink-unit.h"
|
||||
#include "varlink-util.h"
|
||||
|
||||
@@ -167,6 +168,7 @@ static int unit_context_build_json(sd_json_variant **ret, const char *name, void
|
||||
[UNIT_PATH] = path_context_build_json,
|
||||
[UNIT_SCOPE] = scope_context_build_json,
|
||||
[UNIT_SERVICE] = service_context_build_json,
|
||||
[UNIT_SWAP] = swap_context_build_json,
|
||||
};
|
||||
|
||||
return sd_json_buildo(
|
||||
@@ -334,6 +336,7 @@ static int unit_runtime_build_json(sd_json_variant **ret, const char *name, void
|
||||
[UNIT_MOUNT] = mount_runtime_build_json,
|
||||
[UNIT_PATH] = path_runtime_build_json,
|
||||
[UNIT_SCOPE] = scope_runtime_build_json,
|
||||
[UNIT_SWAP] = swap_runtime_build_json,
|
||||
};
|
||||
|
||||
return sd_json_buildo(
|
||||
|
||||
Reference in New Issue
Block a user