summaryrefslogtreecommitdiff
path: root/wireless.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2020-12-28 14:42:30 +0100
committerFelix Fietkau <nbd@nbd.name>2020-12-28 14:42:31 +0100
commit39fb8c3edc74a7e419d95e2946a0b5a1206edc25 (patch)
tree9a555c66849765c2641073864c7818c764e9ec05 /wireless.c
parent88c6003e2b4fdc0c990045ff140bf19b37ba745a (diff)
downloadnetifd-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.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/wireless.c b/wireless.c
index a9917a3..818f7c9 100644
--- a/wireless.c
+++ b/wireless.c
@@ -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);