Files
wlan-ap/patches/0023-hostapd-add-global_ban-as-a-del_client-option.patch
John Crispin d329e3a9ca patches/: re-order and fold patches
Signed-off-by: John Crispin <john@phrozen.org>
2024-04-27 16:15:25 +02:00

74 lines
2.4 KiB
Diff

From ad5df33271d4ab97b49b9241208ab824f9dac850 Mon Sep 17 00:00:00 2001
From: John Crispin <john@phrozen.org>
Date: Tue, 14 Nov 2023 16:50:42 +0100
Subject: [PATCH 23/68] hostapd: add global_ban as a del_client option
Signed-off-by: John Crispin <john@phrozen.org>
---
.../services/hostapd/src/src/ap/ubus.c | 21 ++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/package/network/services/hostapd/src/src/ap/ubus.c b/package/network/services/hostapd/src/src/ap/ubus.c
index a65565bef6..114141e088 100644
--- a/package/network/services/hostapd/src/src/ap/ubus.c
+++ b/package/network/services/hostapd/src/src/ap/ubus.c
@@ -459,6 +459,7 @@ enum {
DEL_CLIENT_REASON,
DEL_CLIENT_DEAUTH,
DEL_CLIENT_BAN_TIME,
+ DEL_CLIENT_GLOBAL_BAN,
__DEL_CLIENT_MAX
};
@@ -467,6 +468,7 @@ static const struct blobmsg_policy del_policy[__DEL_CLIENT_MAX] = {
[DEL_CLIENT_REASON] = { "reason", BLOBMSG_TYPE_INT32 },
[DEL_CLIENT_DEAUTH] = { "deauth", BLOBMSG_TYPE_INT8 },
[DEL_CLIENT_BAN_TIME] = { "ban_time", BLOBMSG_TYPE_INT32 },
+ [DEL_CLIENT_GLOBAL_BAN] = { "global_ban", BLOBMSG_TYPE_INT8 },
};
static int
@@ -477,7 +479,7 @@ hostapd_bss_del_client(struct ubus_context *ctx, struct ubus_object *obj,
struct blob_attr *tb[__DEL_CLIENT_MAX];
struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj);
struct sta_info *sta;
- bool deauth = false;
+ bool deauth = false, global = false;
int reason;
u8 addr[ETH_ALEN];
@@ -495,6 +497,9 @@ hostapd_bss_del_client(struct ubus_context *ctx, struct ubus_object *obj,
if (tb[DEL_CLIENT_DEAUTH])
deauth = blobmsg_get_bool(tb[DEL_CLIENT_DEAUTH]);
+ if (tb[DEL_CLIENT_GLOBAL_BAN])
+ global = blobmsg_get_bool(tb[DEL_CLIENT_GLOBAL_BAN]);
+
sta = ap_get_sta(hapd, addr);
if (sta) {
if (deauth) {
@@ -506,8 +511,18 @@ hostapd_bss_del_client(struct ubus_context *ctx, struct ubus_object *obj,
}
}
- if (tb[DEL_CLIENT_BAN_TIME])
- hostapd_bss_ban_client(hapd, addr, blobmsg_get_u32(tb[DEL_CLIENT_BAN_TIME]));
+ if (tb[DEL_CLIENT_BAN_TIME]) {
+ int i;
+
+ for (i = 0; i < hapd->iface->num_bss; i++) {
+ struct hostapd_data *bss = hapd->iface->bss[i];
+
+ if (!global && bss != hapd)
+ continue;
+
+ hostapd_bss_ban_client(bss, addr, blobmsg_get_u32(tb[DEL_CLIENT_BAN_TIME]));
+ }
+ }
return 0;
}
--
2.34.1