hostapd: add OpenWrt specific statistic counters
This adds a new struct for storing statistics not (yet) tracked by hostapd regarding RRM and WNM activity. These statistics can be read using the get_status hostapd interface ubus method.
This commit is contained in:
parent
1d6e53a569
commit
cce2ed0f0f
3 changed files with 26 additions and 0 deletions
|
@ -184,6 +184,21 @@ struct mld_link_info {
|
||||||
u8 *resp_sta_profile;
|
u8 *resp_sta_profile;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct hostapd_openwrt_stats - OpenWrt custom STA/AP statistics
|
||||||
|
*/
|
||||||
|
struct hostapd_openwrt_stats {
|
||||||
|
struct {
|
||||||
|
u64 neighbor_report_tx;
|
||||||
|
} rrm;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
u64 bss_transition_query_rx;
|
||||||
|
u64 bss_transition_request_tx;
|
||||||
|
u64 bss_transition_response_rx;
|
||||||
|
} wnm;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct hostapd_data - hostapd per-BSS data structure
|
* struct hostapd_data - hostapd per-BSS data structure
|
||||||
*/
|
*/
|
||||||
|
@ -198,6 +213,9 @@ struct hostapd_data {
|
||||||
|
|
||||||
u8 own_addr[ETH_ALEN];
|
u8 own_addr[ETH_ALEN];
|
||||||
|
|
||||||
|
/* OpenWrt specific statistics */
|
||||||
|
struct hostapd_openwrt_stats openwrt_stats;
|
||||||
|
|
||||||
int num_sta; /* number of entries in sta_list */
|
int num_sta; /* number of entries in sta_list */
|
||||||
struct sta_info *sta_list; /* STA info list head */
|
struct sta_info *sta_list; /* STA info list head */
|
||||||
#define STA_HASH_SIZE 256
|
#define STA_HASH_SIZE 256
|
||||||
|
|
|
@ -269,6 +269,8 @@ static void hostapd_send_nei_report_resp(struct hostapd_data *hapd,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hapd->openwrt_stats.rrm.neighbor_report_tx++;
|
||||||
|
|
||||||
hostapd_drv_send_action(hapd, hapd->iface->freq, 0, addr,
|
hostapd_drv_send_action(hapd, hapd->iface->freq, 0, addr,
|
||||||
wpabuf_head(buf), wpabuf_len(buf));
|
wpabuf_head(buf), wpabuf_len(buf));
|
||||||
wpabuf_free(buf);
|
wpabuf_free(buf);
|
||||||
|
|
|
@ -410,6 +410,7 @@ static int ieee802_11_send_bss_trans_mgmt_request(struct hostapd_data *hapd,
|
||||||
mgmt->u.action.u.bss_tm_req.validity_interval = 1;
|
mgmt->u.action.u.bss_tm_req.validity_interval = 1;
|
||||||
pos = mgmt->u.action.u.bss_tm_req.variable;
|
pos = mgmt->u.action.u.bss_tm_req.variable;
|
||||||
|
|
||||||
|
hapd->openwrt_stats.wnm.bss_transition_request_tx++;
|
||||||
wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request to "
|
wpa_printf(MSG_DEBUG, "WNM: Send BSS Transition Management Request to "
|
||||||
MACSTR " dialog_token=%u req_mode=0x%x disassoc_timer=%u "
|
MACSTR " dialog_token=%u req_mode=0x%x disassoc_timer=%u "
|
||||||
"validity_interval=%u",
|
"validity_interval=%u",
|
||||||
|
@ -814,10 +815,12 @@ int ieee802_11_rx_wnm_action_ap(struct hostapd_data *hapd,
|
||||||
plen);
|
plen);
|
||||||
return 0;
|
return 0;
|
||||||
case WNM_BSS_TRANS_MGMT_QUERY:
|
case WNM_BSS_TRANS_MGMT_QUERY:
|
||||||
|
hapd->openwrt_stats.wnm.bss_transition_query_rx++;
|
||||||
ieee802_11_rx_bss_trans_mgmt_query(hapd, mgmt->sa, payload,
|
ieee802_11_rx_bss_trans_mgmt_query(hapd, mgmt->sa, payload,
|
||||||
plen);
|
plen);
|
||||||
return 0;
|
return 0;
|
||||||
case WNM_BSS_TRANS_MGMT_RESP:
|
case WNM_BSS_TRANS_MGMT_RESP:
|
||||||
|
hapd->openwrt_stats.wnm.bss_transition_response_rx++;
|
||||||
ieee802_11_rx_bss_trans_mgmt_resp(hapd, mgmt->sa, payload,
|
ieee802_11_rx_bss_trans_mgmt_resp(hapd, mgmt->sa, payload,
|
||||||
plen);
|
plen);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -865,6 +868,7 @@ int wnm_send_disassoc_imminent(struct hostapd_data *hapd,
|
||||||
|
|
||||||
pos = mgmt->u.action.u.bss_tm_req.variable;
|
pos = mgmt->u.action.u.bss_tm_req.variable;
|
||||||
|
|
||||||
|
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 "
|
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));
|
MACSTR, disassoc_timer, MAC2STR(sta->addr));
|
||||||
if (hostapd_drv_send_mlme(hapd, buf, pos - buf, 0, NULL, 0, 0) < 0) {
|
if (hostapd_drv_send_mlme(hapd, buf, pos - buf, 0, NULL, 0, 0) < 0) {
|
||||||
|
@ -947,6 +951,7 @@ int wnm_send_ess_disassoc_imminent(struct hostapd_data *hapd,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hapd->openwrt_stats.wnm.bss_transition_request_tx++;
|
||||||
if (disassoc_timer) {
|
if (disassoc_timer) {
|
||||||
/* send disassociation frame after time-out */
|
/* send disassociation frame after time-out */
|
||||||
set_disassoc_timer(hapd, sta, disassoc_timer);
|
set_disassoc_timer(hapd, sta, disassoc_timer);
|
||||||
|
@ -1028,6 +1033,7 @@ int wnm_send_bss_tm_req(struct hostapd_data *hapd, struct sta_info *sta,
|
||||||
}
|
}
|
||||||
os_free(buf);
|
os_free(buf);
|
||||||
|
|
||||||
|
hapd->openwrt_stats.wnm.bss_transition_request_tx++;
|
||||||
if (disassoc_timer) {
|
if (disassoc_timer) {
|
||||||
#ifdef CONFIG_IEEE80211BE
|
#ifdef CONFIG_IEEE80211BE
|
||||||
if (ap_sta_is_mld(hapd, sta)) {
|
if (ap_sta_is_mld(hapd, sta)) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue