ubus: don't request measurement from unsupported STAs
Don't request measurements from STAs which do not support the specific measurement mode. Otherwise, hostapd complains in the syslog about unsupported measurement modes. Signed-off-by: David Bauer <mail@david-bauer.net>
This commit is contained in:
15
sta.c
15
sta.c
@@ -202,6 +202,21 @@ usteer_handle_sta_event(struct usteer_node *node, const uint8_t *addr,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
usteer_sta_supports_beacon_measurement_mode(struct sta *sta, enum usteer_beacon_measurement_mode mode)
|
||||||
|
{
|
||||||
|
switch (mode) {
|
||||||
|
case BEACON_MEASUREMENT_PASSIVE:
|
||||||
|
return sta->rrm & (1 << 4);
|
||||||
|
case BEACON_MEASUREMENT_ACTIVE:
|
||||||
|
return sta->rrm & (1 << 5);
|
||||||
|
case BEACON_MEASUREMENT_TABLE:
|
||||||
|
return sta->rrm & (1 << 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static void __usteer_init usteer_sta_init(void)
|
static void __usteer_init usteer_sta_init(void)
|
||||||
{
|
{
|
||||||
usteer_timeout_init(&tq);
|
usteer_timeout_init(&tq);
|
||||||
|
5
ubus.c
5
ubus.c
@@ -547,6 +547,11 @@ int usteer_ubus_trigger_client_scan(struct sta_info *si)
|
|||||||
{
|
{
|
||||||
struct usteer_local_node *ln = container_of(si->node, struct usteer_local_node, node);
|
struct usteer_local_node *ln = container_of(si->node, struct usteer_local_node, node);
|
||||||
|
|
||||||
|
if (!usteer_sta_supports_beacon_measurement_mode(si->sta, BEACON_MEASUREMENT_ACTIVE)) {
|
||||||
|
MSG(DEBUG, "STA does not support beacon measurement sta=" MAC_ADDR_FMT "\n", MAC_ADDR_DATA(si->sta->addr));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
si->scan_band = !si->scan_band;
|
si->scan_band = !si->scan_band;
|
||||||
|
|
||||||
blob_buf_init(&b, 0);
|
blob_buf_init(&b, 0);
|
||||||
|
2
usteer.h
2
usteer.h
@@ -271,6 +271,8 @@ int usteer_ubus_notify_client_disassoc(struct sta_info *si);
|
|||||||
struct sta *usteer_sta_get(const uint8_t *addr, bool create);
|
struct sta *usteer_sta_get(const uint8_t *addr, bool create);
|
||||||
struct sta_info *usteer_sta_info_get(struct sta *sta, struct usteer_node *node, bool *create);
|
struct sta_info *usteer_sta_info_get(struct sta *sta, struct usteer_node *node, bool *create);
|
||||||
|
|
||||||
|
bool usteer_sta_supports_beacon_measurement_mode(struct sta *sta, enum usteer_beacon_measurement_mode mode);
|
||||||
|
|
||||||
void usteer_sta_info_update_timeout(struct sta_info *si, int timeout);
|
void usteer_sta_info_update_timeout(struct sta_info *si, int timeout);
|
||||||
void usteer_sta_info_update(struct sta_info *si, int signal, bool avg);
|
void usteer_sta_info_update(struct sta_info *si, int signal, bool avg);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user