From: David Bauer Date: Sat, 18 Dec 2021 16:24:09 +0000 (+0100) Subject: hostapd: make OpenWrt statistics per-BSS X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=54cfe0774ce4203d23ffcb397ba15bd36968d098;p=openwrt%2Fstaging%2Fynezz.git hostapd: make OpenWrt statistics per-BSS WNM and RRM statistics were incorrectly per-PHY, leading to shared statistic counters per BSS. Signed-off-by: David Bauer --- diff --git a/package/network/services/hostapd/patches/590-rrm-wnm-statistics.patch b/package/network/services/hostapd/patches/590-rrm-wnm-statistics.patch index feb3b091c1..737fdbb5d0 100644 --- a/package/network/services/hostapd/patches/590-rrm-wnm-statistics.patch +++ b/package/network/services/hostapd/patches/590-rrm-wnm-statistics.patch @@ -1,6 +1,6 @@ --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h -@@ -441,6 +441,21 @@ struct hostapd_sta_info { +@@ -148,6 +148,21 @@ struct hostapd_sae_commit_queue { }; /** @@ -19,26 +19,26 @@ +}; + +/** - * struct hostapd_iface - hostapd per-interface data structure + * struct hostapd_data - hostapd per-BSS data structure */ - struct hostapd_iface { -@@ -562,6 +577,9 @@ struct hostapd_iface { - u64 last_channel_time_busy; - u8 channel_utilization; + struct hostapd_data { +@@ -161,6 +176,9 @@ struct hostapd_data { + + u8 own_addr[ETH_ALEN]; + /* OpenWrt specific statistics */ + struct hostapd_openwrt_stats openwrt_stats; + - unsigned int chan_util_samples_sum; - unsigned int chan_util_num_sample_periods; - unsigned int chan_util_average; + int num_sta; /* number of entries in sta_list */ + struct sta_info *sta_list; /* STA info list head */ + #define STA_HASH_SIZE 256 --- a/src/ap/wnm_ap.c +++ b/src/ap/wnm_ap.c @@ -386,6 +386,7 @@ static int ieee802_11_send_bss_trans_mgm mgmt->u.action.u.bss_tm_req.validity_interval = 1; pos = mgmt->u.action.u.bss_tm_req.variable; -+ hapd->iface->openwrt_stats.wnm.bss_transition_request_tx++; ++ hapd->openwrt_stats.wnm.bss_transition_request_tx++; wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request to " MACSTR " dialog_token=%u req_mode=0x%x disassoc_timer=%u " "validity_interval=%u", @@ -46,12 +46,12 @@ switch (action) { case WNM_BSS_TRANS_MGMT_QUERY: -+ hapd->iface->openwrt_stats.wnm.bss_transition_query_rx++; ++ hapd->openwrt_stats.wnm.bss_transition_query_rx++; ieee802_11_rx_bss_trans_mgmt_query(hapd, mgmt->sa, payload, plen); return 0; case WNM_BSS_TRANS_MGMT_RESP: -+ hapd->iface->openwrt_stats.wnm.bss_transition_response_rx++; ++ hapd->openwrt_stats.wnm.bss_transition_response_rx++; ieee802_11_rx_bss_trans_mgmt_resp(hapd, mgmt->sa, payload, plen); return 0; @@ -59,7 +59,7 @@ pos = mgmt->u.action.u.bss_tm_req.variable; -+ hapd->iface->openwrt_stats.wnm.bss_transition_request_tx++; ++ hapd->openwrt_stats.wnm.bss_transition_request_tx++; wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request frame to indicate imminent disassociation (disassoc_timer=%d) to " MACSTR, disassoc_timer, MAC2STR(sta->addr)); if (hostapd_drv_send_mlme(hapd, buf, pos - buf, 0, NULL, 0, 0) < 0) { @@ -67,7 +67,7 @@ return -1; } -+ hapd->iface->openwrt_stats.wnm.bss_transition_request_tx++; ++ hapd->openwrt_stats.wnm.bss_transition_request_tx++; if (disassoc_timer) { /* send disassociation frame after time-out */ set_disassoc_timer(hapd, sta, disassoc_timer); @@ -75,7 +75,7 @@ } os_free(buf); -+ hapd->iface->openwrt_stats.wnm.bss_transition_request_tx++; ++ hapd->openwrt_stats.wnm.bss_transition_request_tx++; if (disassoc_timer) { /* send disassociation frame after time-out */ set_disassoc_timer(hapd, sta, disassoc_timer); @@ -85,7 +85,7 @@ } } -+ hapd->iface->openwrt_stats.rrm.neighbor_report_tx++; ++ hapd->openwrt_stats.rrm.neighbor_report_tx++; + hostapd_drv_send_action(hapd, hapd->iface->freq, 0, addr, wpabuf_head(buf), wpabuf_len(buf)); diff --git a/package/network/services/hostapd/src/src/ap/ubus.c b/package/network/services/hostapd/src/src/ap/ubus.c index 20ee7c90e7..bcb80f4a33 100644 --- a/package/network/services/hostapd/src/src/ap/ubus.c +++ b/package/network/services/hostapd/src/src/ap/ubus.c @@ -432,14 +432,14 @@ hostapd_bss_get_status(struct ubus_context *ctx, struct ubus_object *obj, /* RRM */ rrm_table = blobmsg_open_table(&b, "rrm"); - blobmsg_add_u64(&b, "neighbor_report_tx", hapd->iface->openwrt_stats.rrm.neighbor_report_tx); + blobmsg_add_u64(&b, "neighbor_report_tx", hapd->openwrt_stats.rrm.neighbor_report_tx); blobmsg_close_table(&b, rrm_table); /* WNM */ wnm_table = blobmsg_open_table(&b, "wnm"); - blobmsg_add_u64(&b, "bss_transition_query_rx", hapd->iface->openwrt_stats.wnm.bss_transition_query_rx); - blobmsg_add_u64(&b, "bss_transition_request_tx", hapd->iface->openwrt_stats.wnm.bss_transition_request_tx); - blobmsg_add_u64(&b, "bss_transition_response_rx", hapd->iface->openwrt_stats.wnm.bss_transition_response_rx); + blobmsg_add_u64(&b, "bss_transition_query_rx", hapd->openwrt_stats.wnm.bss_transition_query_rx); + blobmsg_add_u64(&b, "bss_transition_request_tx", hapd->openwrt_stats.wnm.bss_transition_request_tx); + blobmsg_add_u64(&b, "bss_transition_response_rx", hapd->openwrt_stats.wnm.bss_transition_response_rx); blobmsg_close_table(&b, wnm_table); /* Airtime */