--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "sd-json.h"
+
+#include "json-util.h"
+#include "mount.h"
+#include "user-util.h"
+#include "varlink-common.h"
+#include "varlink-mount.h"
+
+int mount_context_build_json(sd_json_variant **ret, const char *name, void *userdata) {
+ Mount *m = ASSERT_PTR(MOUNT(userdata));
+ _cleanup_free_ char *what = NULL, *where = NULL, *options = NULL;
+
+ what = mount_get_what_escaped(m);
+ if (!what)
+ return -ENOMEM;
+
+ where = mount_get_where_escaped(m);
+ if (!where)
+ return -ENOMEM;
+
+ options = mount_get_options_escaped(m);
+ if (!options)
+ return -ENOMEM;
+
+ return sd_json_buildo(
+ ASSERT_PTR(ret),
+ JSON_BUILD_PAIR_STRING_NON_EMPTY("What", what),
+ JSON_BUILD_PAIR_STRING_NON_EMPTY("Where", where),
+ JSON_BUILD_PAIR_STRING_NON_EMPTY("Type", mount_get_fstype(m)),
+ JSON_BUILD_PAIR_STRING_NON_EMPTY("Options", options),
+ SD_JSON_BUILD_PAIR_BOOLEAN("SloppyOptions", m->sloppy_options),
+ SD_JSON_BUILD_PAIR_BOOLEAN("LazyUnmount", m->lazy_unmount),
+ SD_JSON_BUILD_PAIR_BOOLEAN("ReadWriteOnly", m->read_write_only),
+ SD_JSON_BUILD_PAIR_BOOLEAN("ForceUnmount", m->force_unmount),
+ SD_JSON_BUILD_PAIR_UNSIGNED("DirectoryMode", m->directory_mode),
+ JSON_BUILD_PAIR_FINITE_USEC("TimeoutUSec", m->timeout_usec),
+ JSON_BUILD_PAIR_CALLBACK_NON_NULL("ExecMount", exec_command_build_json, &m->exec_command[MOUNT_EXEC_MOUNT]),
+ JSON_BUILD_PAIR_CALLBACK_NON_NULL("ExecUnmount", exec_command_build_json, &m->exec_command[MOUNT_EXEC_UNMOUNT]),
+ JSON_BUILD_PAIR_CALLBACK_NON_NULL("ExecRemount", exec_command_build_json, &m->exec_command[MOUNT_EXEC_REMOUNT]));
+}
+
+int mount_runtime_build_json(sd_json_variant **ret, const char *name, void *userdata) {
+ Unit *u = ASSERT_PTR(userdata);
+ Mount *m = ASSERT_PTR(MOUNT(u));
+ return sd_json_buildo(
+ ASSERT_PTR(ret),
+ SD_JSON_BUILD_PAIR_CONDITION(pidref_is_set(&m->control_pid), "ControlPID", JSON_BUILD_PIDREF(&m->control_pid)),
+ JSON_BUILD_PAIR_ENUM("Result", mount_result_to_string(m->result)),
+ JSON_BUILD_PAIR_ENUM("ReloadResult", mount_result_to_string(m->reload_result)),
+ JSON_BUILD_PAIR_ENUM("CleanResult", mount_result_to_string(m->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("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.automount.html#TimeoutIdleSec="),
SD_VARLINK_DEFINE_FIELD(TimeoutIdleUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE));
+/* MountContext
+ * https://www.freedesktop.org/software/systemd/man/latest/systemd.mount.html */
+static SD_VARLINK_DEFINE_STRUCT_TYPE(
+ MountContext,
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.mount.html#What="),
+ SD_VARLINK_DEFINE_FIELD(What, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.mount.html#Where="),
+ SD_VARLINK_DEFINE_FIELD(Where, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.mount.html#Type="),
+ SD_VARLINK_DEFINE_FIELD(Type, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.mount.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.mount.html#SloppyOptions="),
+ SD_VARLINK_DEFINE_FIELD(SloppyOptions, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.mount.html#LazyUnmount="),
+ SD_VARLINK_DEFINE_FIELD(LazyUnmount, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.mount.html#ReadWriteOnly="),
+ SD_VARLINK_DEFINE_FIELD(ReadWriteOnly, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.mount.html#ForceUnmount="),
+ SD_VARLINK_DEFINE_FIELD(ForceUnmount, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.mount.html#DirectoryMode="),
+ SD_VARLINK_DEFINE_FIELD(DirectoryMode, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("https://www.freedesktop.org/software/systemd/man/"PROJECT_VERSION_STR"/systemd.mount.html#TimeoutSec="),
+ SD_VARLINK_DEFINE_FIELD(TimeoutUSec, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("Mount command"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(ExecMount, ExecCommand, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("Unmount command"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(ExecUnmount, ExecCommand, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("Remount command"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(ExecRemount, ExecCommand, SD_VARLINK_NULLABLE));
+
/* UnitContext */
static SD_VARLINK_DEFINE_STRUCT_TYPE(
Condition,
SD_VARLINK_FIELD_COMMENT("The kill context of the unit"),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(Kill, KillContext, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("The automount context of the unit"),
- SD_VARLINK_DEFINE_FIELD_BY_TYPE(Automount, AutomountContext, SD_VARLINK_NULLABLE));
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(Automount, AutomountContext, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("The mount context of the unit"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(Mount, MountContext, SD_VARLINK_NULLABLE));
static SD_VARLINK_DEFINE_STRUCT_TYPE(
ActivationDetails,
SD_VARLINK_FIELD_COMMENT("Result of automount operation"),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(Result, AutomountResult, 0));
+SD_VARLINK_DEFINE_ENUM_TYPE(
+ MountResult,
+ 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),
+ SD_VARLINK_DEFINE_ENUM_VALUE(protocol));
+
+static SD_VARLINK_DEFINE_STRUCT_TYPE(
+ MountRuntime,
+ SD_VARLINK_FIELD_COMMENT("PID of the current mount/remount/etc process running"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(ControlPID, ProcessId, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("Result of mount operation"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(Result, MountResult, 0),
+ SD_VARLINK_FIELD_COMMENT("Result of remount operation"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(ReloadResult, MountResult, 0),
+ SD_VARLINK_FIELD_COMMENT("Result of cleaning operation"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(CleanResult, MountResult, 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));
+
static SD_VARLINK_DEFINE_STRUCT_TYPE(
UnitRuntime,
SD_VARLINK_FIELD_COMMENT("If not empty, the field contains the name of another unit that this unit follows in state"),
SD_VARLINK_FIELD_COMMENT("The cgroup runtime of the unit"),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(CGroup, CGroupRuntime, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("The automount runtime of the unit"),
- SD_VARLINK_DEFINE_FIELD_BY_TYPE(Automount, AutomountRuntime, SD_VARLINK_NULLABLE));
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(Automount, AutomountRuntime, SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("The mount runtime of the unit"),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(Mount, MountRuntime, SD_VARLINK_NULLABLE));
static SD_VARLINK_DEFINE_METHOD_FULL(
List,
&vl_type_AutomountContext,
&vl_type_AutomountResult,
&vl_type_AutomountRuntime,
+ &vl_type_ExecCommand,
+ &vl_type_MountContext,
+ &vl_type_MountResult,
+ &vl_type_MountRuntime,
/* UnitContext enums */
&vl_type_CollectMode,