X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=system.c;h=0b3c46629c567f2118fddcffae550bae91d0acb1;hb=824a4b3da2c0be19ccf54a48dcd4c10677b82c1a;hp=e1f4a647f45b528c62f7bcf896b08d97e64174bd;hpb=d2f216cddaf4ee73117bb2693fc53b77f67517ad;p=project%2Fprocd.git diff --git a/system.c b/system.c index e1f4a64..0b3c466 100644 --- a/system.c +++ b/system.c @@ -18,7 +18,7 @@ #include #include #include - +#include #include #include @@ -27,8 +27,6 @@ #include "watchdog.h" #include "hotplug.h" -#define HOSTNAME_PATH "/proc/sys/kernel/hostname" - static struct blob_buf b; static int system_board(struct ubus_context *ctx, struct ubus_object *obj, @@ -260,30 +258,30 @@ static int watchdog_set(struct ubus_context *ctx, struct ubus_object *obj, } enum { - EVENT_TYPE, - EVENT_DATA, - __EVENT_MAX + SIGNAL_PID, + SIGNAL_NUM, + __SIGNAL_MAX }; -static const struct blobmsg_policy event_policy[__WDT_MAX] = { - [EVENT_TYPE] = { .name = "frequency", .type = BLOBMSG_TYPE_INT32 }, - [EVENT_DATA] = { .name = "timeout", .type = BLOBMSG_TYPE_INT32 }, +static const struct blobmsg_policy signal_policy[__WDT_MAX] = { + [SIGNAL_PID] = { .name = "pid", .type = BLOBMSG_TYPE_INT32 }, + [SIGNAL_NUM] = { .name = "signum", .type = BLOBMSG_TYPE_INT32 }, }; -static int system_event(struct ubus_context *ctx, struct ubus_object *obj, +static int proc_signal(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { - struct blob_attr *tb[__EVENT_MAX]; + struct blob_attr *tb[__SIGNAL_MAX]; if (!msg) return UBUS_STATUS_INVALID_ARGUMENT; - blobmsg_parse(event_policy, __EVENT_MAX, tb, blob_data(msg), blob_len(msg)); - if (!tb[EVENT_TYPE]) + blobmsg_parse(signal_policy, __SIGNAL_MAX, tb, blob_data(msg), blob_len(msg)); + if (!tb[SIGNAL_PID || !tb[SIGNAL_NUM]]) return UBUS_STATUS_INVALID_ARGUMENT; - fprintf(stderr, "%s\n", blobmsg_get_string(tb[EVENT_TYPE])); + kill(blobmsg_get_u32(tb[SIGNAL_PID]), blobmsg_get_u32(tb[SIGNAL_NUM])); return 0; } @@ -293,7 +291,7 @@ static const struct ubus_method system_methods[] = { UBUS_METHOD_NOARG("info", system_info), UBUS_METHOD_NOARG("upgrade", system_upgrade), UBUS_METHOD("watchdog", watchdog_set, watchdog_policy), - UBUS_METHOD("event", system_event, event_policy), + UBUS_METHOD("signal", proc_signal, signal_policy), }; static struct ubus_object_type system_object_type =