From ad5df33271d4ab97b49b9241208ab824f9dac850 Mon Sep 17 00:00:00 2001 From: John Crispin 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 --- .../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