mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-10-30 01:52:51 +00:00
hostapd: globally ban clients when they are kicked
Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
@@ -520,6 +520,24 @@ static const struct blobmsg_policy del_policy[__DEL_CLIENT_MAX] = {
|
||||
[DEL_CLIENT_GLOBAL_BAN] = { "global_ban", BLOBMSG_TYPE_INT8 },
|
||||
};
|
||||
|
||||
static int
|
||||
hostapd_bss_del_client_cb(struct hostapd_iface *iface, void *ctx)
|
||||
{
|
||||
struct blob_attr **tb = ctx;
|
||||
u8 addr[ETH_ALEN];
|
||||
int i;
|
||||
|
||||
hwaddr_aton(blobmsg_data(tb[DEL_CLIENT_ADDR]), addr);
|
||||
|
||||
syslog(0, "blogic %s:%s[%d]\n", __FILE__, __func__, __LINE__);
|
||||
for (i = 0; i < iface->num_bss; i++) {
|
||||
struct hostapd_data *bss = iface->bss[i];
|
||||
|
||||
hostapd_bss_ban_client(bss, addr, blobmsg_get_u32(tb[DEL_CLIENT_BAN_TIME]));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
hostapd_bss_del_client(struct ubus_context *ctx, struct ubus_object *obj,
|
||||
struct ubus_request_data *req, const char *method,
|
||||
@@ -529,7 +547,7 @@ hostapd_bss_del_client(struct ubus_context *ctx, struct ubus_object *obj,
|
||||
struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj);
|
||||
struct sta_info *sta;
|
||||
bool deauth = false, global = false;
|
||||
int reason;
|
||||
int reason, ban_time = 0;;
|
||||
u8 addr[ETH_ALEN];
|
||||
|
||||
blobmsg_parse(del_policy, __DEL_CLIENT_MAX, tb, blob_data(msg), blob_len(msg));
|
||||
@@ -561,16 +579,11 @@ hostapd_bss_del_client(struct ubus_context *ctx, struct ubus_object *obj,
|
||||
}
|
||||
|
||||
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]));
|
||||
}
|
||||
ban_time = blobmsg_get_u32(tb[DEL_CLIENT_BAN_TIME]);
|
||||
if (global)
|
||||
hapd->iface->interfaces->for_each_interface(hapd->iface->interfaces, hostapd_bss_del_client_cb, tb);
|
||||
else
|
||||
hostapd_bss_ban_client(hapd, addr, ban_time);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -520,6 +520,24 @@ static const struct blobmsg_policy del_policy[__DEL_CLIENT_MAX] = {
|
||||
[DEL_CLIENT_GLOBAL_BAN] = { "global_ban", BLOBMSG_TYPE_INT8 },
|
||||
};
|
||||
|
||||
static int
|
||||
hostapd_bss_del_client_cb(struct hostapd_iface *iface, void *ctx)
|
||||
{
|
||||
struct blob_attr **tb = ctx;
|
||||
u8 addr[ETH_ALEN];
|
||||
int i;
|
||||
|
||||
hwaddr_aton(blobmsg_data(tb[DEL_CLIENT_ADDR]), addr);
|
||||
|
||||
syslog(0, "blogic %s:%s[%d]\n", __FILE__, __func__, __LINE__);
|
||||
for (i = 0; i < iface->num_bss; i++) {
|
||||
struct hostapd_data *bss = iface->bss[i];
|
||||
|
||||
hostapd_bss_ban_client(bss, addr, blobmsg_get_u32(tb[DEL_CLIENT_BAN_TIME]));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
hostapd_bss_del_client(struct ubus_context *ctx, struct ubus_object *obj,
|
||||
struct ubus_request_data *req, const char *method,
|
||||
@@ -529,7 +547,7 @@ hostapd_bss_del_client(struct ubus_context *ctx, struct ubus_object *obj,
|
||||
struct hostapd_data *hapd = container_of(obj, struct hostapd_data, ubus.obj);
|
||||
struct sta_info *sta;
|
||||
bool deauth = false, global = false;
|
||||
int reason;
|
||||
int reason, ban_time = 0;;
|
||||
u8 addr[ETH_ALEN];
|
||||
|
||||
blobmsg_parse(del_policy, __DEL_CLIENT_MAX, tb, blob_data(msg), blob_len(msg));
|
||||
@@ -561,16 +579,11 @@ hostapd_bss_del_client(struct ubus_context *ctx, struct ubus_object *obj,
|
||||
}
|
||||
|
||||
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]));
|
||||
}
|
||||
ban_time = blobmsg_get_u32(tb[DEL_CLIENT_BAN_TIME]);
|
||||
if (global)
|
||||
hapd->iface->interfaces->for_each_interface(hapd->iface->interfaces, hostapd_bss_del_client_cb, tb);
|
||||
else
|
||||
hostapd_bss_ban_client(hapd, addr, ban_time);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user