diff options
-rw-r--r-- | scripts/netifd-wireless.sh | 1 | ||||
-rw-r--r-- | wireless.c | 7 | ||||
-rw-r--r-- | wireless.h | 1 |
3 files changed, 8 insertions, 1 deletions
diff --git a/scripts/netifd-wireless.sh b/scripts/netifd-wireless.sh index 72f36d6..73bce3d 100644 --- a/scripts/netifd-wireless.sh +++ b/scripts/netifd-wireless.sh @@ -174,6 +174,7 @@ _wireless_add_process() { json_add_int pid "$1" json_add_string exe "$exe" [ -n "$3" ] && json_add_boolean required 1 + [ -n "$4" ] && json_add_boolean keep 1 exe2="$(readlink -f /proc/$1/exe)" [ "$exe" != "$exe2" ] && echo "WARNING (wireless_add_process): executable path $exe does not match process $1 path ($exe2)" _wdev_notify @@ -254,7 +254,7 @@ wireless_process_kill_all(struct wireless_device *wdev, int signal, bool free) list_for_each_entry_safe(proc, tmp, &wdev->script_proc, list) { bool check = wireless_process_check(proc); - if (check) { + if (check && !proc->keep) { D(WIRELESS, "Wireless device '%s' kill pid %d\n", wdev->name, proc->pid); kill(proc->pid, signal); } @@ -1250,12 +1250,14 @@ wireless_device_add_process(struct wireless_device *wdev, struct blob_attr *data PROC_ATTR_PID, PROC_ATTR_EXE, PROC_ATTR_REQUIRED, + PROC_ATTR_KEEP, __PROC_ATTR_MAX }; static const struct blobmsg_policy proc_policy[__PROC_ATTR_MAX] = { [PROC_ATTR_PID] = { .name = "pid", .type = BLOBMSG_TYPE_INT32 }, [PROC_ATTR_EXE] = { .name = "exe", .type = BLOBMSG_TYPE_STRING }, [PROC_ATTR_REQUIRED] = { .name = "required", .type = BLOBMSG_TYPE_BOOL }, + [PROC_ATTR_KEEP] = { .name = "keep", .type = BLOBMSG_TYPE_BOOL }, }; struct blob_attr *tb[__PROC_ATTR_MAX]; struct wireless_process *proc; @@ -1282,6 +1284,9 @@ wireless_device_add_process(struct wireless_device *wdev, struct blob_attr *data if (tb[PROC_ATTR_REQUIRED]) proc->required = blobmsg_get_bool(tb[PROC_ATTR_REQUIRED]); + if (tb[PROC_ATTR_KEEP]) + proc->keep = blobmsg_get_bool(tb[PROC_ATTR_KEEP]); + D(WIRELESS, "Wireless device '%s' add pid %d\n", wdev->name, proc->pid); list_add(&proc->list, &wdev->script_proc); uloop_timeout_set(&wdev->script_check, 0); @@ -127,6 +127,7 @@ struct wireless_process { int pid; bool required; + bool keep; }; void wireless_device_create(struct wireless_driver *drv, const char *name, struct blob_attr *data); |