diff options
author | Felix Fietkau <nbd@nbd.name> | 2020-12-28 14:42:30 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2020-12-28 14:42:31 +0100 |
commit | 39fb8c3edc74a7e419d95e2946a0b5a1206edc25 (patch) | |
tree | 9a555c66849765c2641073864c7818c764e9ec05 /wireless.c | |
parent | 88c6003e2b4fdc0c990045ff140bf19b37ba745a (diff) | |
download | netifd-39fb8c3edc74a7e419d95e2946a0b5a1206edc25.tar.gz |
wireless: add support for not killing processes on teardown
When using a global hostapd/wpa_supplicant instance, it should not be killed
if a single radio is torn down
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'wireless.c')
-rw-r--r-- | wireless.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -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); |