#include "varlink-io.systemd.Udev.h"
+static SD_VARLINK_DEFINE_METHOD(
+ SetTrace,
+ SD_VARLINK_FIELD_COMMENT("Enable/disable."),
+ SD_VARLINK_DEFINE_INPUT(enable, SD_VARLINK_BOOL, 0));
+
static SD_VARLINK_DEFINE_METHOD(
SetChildrenMax,
SD_VARLINK_FIELD_COMMENT("The maximum number of child processes. When 0 is specified, the maximum is determined based on the system resources."),
io_systemd_Udev,
"io.systemd.Udev",
SD_VARLINK_INTERFACE_COMMENT("An interface for controlling systemd-udevd."),
+ SD_VARLINK_SYMBOL_COMMENT("Enable/disable trace logging."),
+ &vl_method_SetTrace,
SD_VARLINK_SYMBOL_COMMENT("Sets the maximum number of child processes."),
&vl_method_SetChildrenMax,
SD_VARLINK_SYMBOL_COMMENT("Sets the global udev properties."),
manager_kill_workers(manager, /* force = */ false);
}
+void manager_set_trace(Manager *manager, bool enable) {
+ assert(manager);
+
+ bool old = manager->config.trace;
+
+ manager->config_by_control.trace = enable;
+ manager_merge_config_log_level(manager);
+
+ if (manager->config.trace == old)
+ return;
+
+ log_set_max_level(manager->config.log_level);
+ manager_kill_workers(manager, /* force = */ false);
+}
+
static void manager_adjust_config(UdevConfig *config) {
assert(config);
void manager_set_children_max(Manager *manager, unsigned n);
void manager_set_log_level(Manager *manager, int log_level);
+void manager_set_trace(Manager *manager, bool enable);
void manager_set_environment(Manager *manager, char * const *v);
int manager_load(Manager *manager, int argc, char *argv[]);
return sd_varlink_reply(link, NULL);
}
+static int vl_method_set_trace(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
+ bool enable;
+ int r;
+
+ static const sd_json_dispatch_field dispatch_table[] = {
+ { "enable", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, 0, SD_JSON_MANDATORY },
+ {}
+ };
+
+ assert(link);
+
+ r = sd_varlink_dispatch(link, parameters, dispatch_table, &enable);
+ if (r != 0)
+ return r;
+
+ log_debug("Received io.systemd.service.SetTrace(%s)", yes_no(enable));
+ manager_set_trace(userdata, enable);
+ return sd_varlink_reply(link, NULL);
+}
+
static int vl_method_set_children_max(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
unsigned n;
int r;
"io.systemd.service.Reload", vl_method_reload,
"io.systemd.service.SetLogLevel", vl_method_set_log_level,
"io.systemd.service.GetEnvironment", varlink_method_get_environment,
+ "io.systemd.Udev.SetTrace", vl_method_set_trace,
"io.systemd.Udev.SetChildrenMax", vl_method_set_children_max,
"io.systemd.Udev.SetEnvironment", vl_method_set_environment,
"io.systemd.Udev.StartExecQueue", vl_method_start_stop_exec_queue,