diff --git a/core/hdd/src/wlan_hdd_station_info.c b/core/hdd/src/wlan_hdd_station_info.c index 55e35911e6a7..b8a631fa2646 100644 --- a/core/hdd/src/wlan_hdd_station_info.c +++ b/core/hdd/src/wlan_hdd_station_info.c @@ -422,6 +422,12 @@ static int32_t hdd_add_tx_bitrate(struct sk_buff *skb, goto fail; } nla_nest_end(skb, nla_attr); + + hdd_nofl_debug( + "STA Tx rate info:: bitrate:%d, bitrate_compat:%d, NSS:%d", + bitrate, bitrate_compat, + hdd_sta_ctx->cache_conn_info.txrate.nss); + return 0; fail: return -EINVAL; @@ -630,24 +636,36 @@ hdd_add_ap_standard_info(struct sk_buff *skb, struct hdd_station_ctx *hdd_sta_ctx, int idx) { struct nlattr *nla_attr; + struct hdd_connection_info *conn_info; + conn_info = &hdd_sta_ctx->cache_conn_info; nla_attr = nla_nest_start(skb, idx); if (!nla_attr) goto fail; - if (hdd_sta_ctx->cache_conn_info.conn_flag.vht_present) + if (conn_info->conn_flag.vht_present) { if (nla_put(skb, NL80211_ATTR_VHT_CAPABILITY, - sizeof(hdd_sta_ctx->cache_conn_info.vht_caps), - &hdd_sta_ctx->cache_conn_info.vht_caps)) { + sizeof(conn_info->vht_caps), + &conn_info->vht_caps)) { hdd_err("put fail"); goto fail; } - if (hdd_sta_ctx->cache_conn_info.conn_flag.ht_present) + hdd_nofl_debug("STA VHT capabilities:"); + qdf_trace_hex_dump(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_DEBUG, + (uint8_t *)&conn_info->vht_caps, + sizeof(conn_info->vht_caps)); + } + if (conn_info->conn_flag.ht_present) { if (nla_put(skb, NL80211_ATTR_HT_CAPABILITY, - sizeof(hdd_sta_ctx->cache_conn_info.ht_caps), - &hdd_sta_ctx->cache_conn_info.ht_caps)) { + sizeof(conn_info->ht_caps), + &conn_info->ht_caps)) { hdd_err("put fail"); goto fail; } + hdd_nofl_debug("STA HT capabilities:"); + qdf_trace_hex_dump(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_DEBUG, + (uint8_t *)&conn_info->ht_caps, + sizeof(conn_info->ht_caps)); + } nla_nest_end(skb, nla_attr); return 0; fail: @@ -656,20 +674,25 @@ fail: #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)) && \ defined(WLAN_FEATURE_11AX) -static int32_t hdd_add_he_oper_info( - struct sk_buff *skb, - struct hdd_station_ctx *hdd_sta_ctx) +static int32_t hdd_add_he_oper_info(struct sk_buff *skb, + struct hdd_station_ctx *hdd_sta_ctx) { int32_t ret = 0; + struct hdd_connection_info *conn_info; - if (!hdd_sta_ctx->cache_conn_info.he_oper_len || - !hdd_sta_ctx->cache_conn_info.he_operation) + conn_info = &hdd_sta_ctx->cache_conn_info; + if (!conn_info->he_oper_len || !conn_info->he_operation) return ret; - if (nla_put(skb, HE_OPERATION, - hdd_sta_ctx->cache_conn_info.he_oper_len, - hdd_sta_ctx->cache_conn_info.he_operation)) + if (nla_put(skb, HE_OPERATION, conn_info->he_oper_len, + conn_info->he_operation)) { ret = -EINVAL; + } else { + hdd_nofl_debug("STA HE operation:"); + qdf_trace_hex_dump(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_DEBUG, + (uint8_t *)&conn_info->he_operation, + conn_info->he_oper_len); + } qdf_mem_free(hdd_sta_ctx->cache_conn_info.he_operation); hdd_sta_ctx->cache_conn_info.he_operation = NULL; @@ -778,14 +801,20 @@ static int hdd_get_station_info(struct hdd_context *hdd_ctx, hdd_err("put fail"); goto fail; } - if (hdd_sta_ctx->cache_conn_info.conn_flag.ht_op_present) + if (hdd_sta_ctx->cache_conn_info.conn_flag.ht_op_present) { if (nla_put(skb, HT_OPERATION, (sizeof(hdd_sta_ctx->cache_conn_info.ht_operation)), &hdd_sta_ctx->cache_conn_info.ht_operation)) { hdd_err("put fail"); goto fail; } - if (hdd_sta_ctx->cache_conn_info.conn_flag.vht_op_present) + hdd_nofl_debug("STA HT operation:"); + qdf_trace_hex_dump( + QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_DEBUG, + (uint8_t *)&hdd_sta_ctx->cache_conn_info.ht_operation, + sizeof(hdd_sta_ctx->cache_conn_info.ht_operation)); + } + if (hdd_sta_ctx->cache_conn_info.conn_flag.vht_op_present) { if (nla_put(skb, VHT_OPERATION, (sizeof(hdd_sta_ctx-> cache_conn_info.vht_operation)), @@ -793,11 +822,17 @@ static int hdd_get_station_info(struct hdd_context *hdd_ctx, hdd_err("put fail"); goto fail; } + hdd_nofl_debug("STA VHT operation:"); + qdf_trace_hex_dump( + QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_DEBUG, + (uint8_t *)&hdd_sta_ctx->cache_conn_info.vht_operation, + sizeof(hdd_sta_ctx->cache_conn_info.vht_operation)); + } if (hdd_add_he_oper_info(skb, hdd_sta_ctx)) { hdd_err("put fail"); goto fail; } - if (hdd_sta_ctx->cache_conn_info.conn_flag.hs20_present) + if (hdd_sta_ctx->cache_conn_info.conn_flag.hs20_present) { if (nla_put(skb, AP_INFO_HS20_INDICATION, (sizeof(hdd_sta_ctx->cache_conn_info.hs20vendor_ie) - 1), @@ -805,6 +840,12 @@ static int hdd_get_station_info(struct hdd_context *hdd_ctx, hdd_err("put fail"); goto fail; } + hdd_nofl_debug("STA hs20 vendor IE:"); + qdf_trace_hex_dump( + QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_DEBUG, + (uint8_t *)(tmp_hs20 + 1), + sizeof(hdd_sta_ctx->cache_conn_info.hs20vendor_ie) - 1); + } if (nla_put_u32(skb, DISCONNECT_REASON, adapter->last_disconnect_reason)) { @@ -818,9 +859,27 @@ static int hdd_get_station_info(struct hdd_context *hdd_ctx, skb_tailroom(skb), ie_len, nl_buf_len); goto fail; } + + hdd_nofl_debug("Beacon IEs len: %u", ie_len); + qdf_mem_free(ies); } + hdd_nofl_debug( + "STA Info:: SSID:%s, BSSID:" QDF_MAC_ADDR_FMT ", freq:%d, " + "Noise:%d, signal:%d, roam_count:%d, last_auth_type:%d, " + "dot11mode:%d, disconnect_reason:%d, ", + hdd_sta_ctx->cache_conn_info.last_ssid.SSID.ssId, + QDF_MAC_ADDR_REF(hdd_sta_ctx->cache_conn_info.bssid.bytes), + hdd_sta_ctx->cache_conn_info.chan_freq, + (hdd_sta_ctx->cache_conn_info.noise + 100), + (hdd_sta_ctx->cache_conn_info.signal + 100), + hdd_sta_ctx->cache_conn_info.roam_count, + hdd_convert_auth_type( + hdd_sta_ctx->cache_conn_info.last_auth_type), + hdd_convert_dot11mode(hdd_sta_ctx->cache_conn_info.dot11mode), + adapter->last_disconnect_reason); + return cfg80211_vendor_cmd_reply(skb); fail: if (skb) @@ -883,6 +942,7 @@ static int32_t hdd_add_survey_info_sap(struct sk_buff *skb, goto fail; } nla_nest_end(skb, nla_attr); + hdd_nofl_debug("Remote STA freq: %d", stainfo->freq); return 0; fail: return -EINVAL; @@ -932,6 +992,7 @@ static int hdd_add_tx_bitrate_sap(struct sk_buff *skb, goto fail; } nla_nest_end(skb, nla_attr); + hdd_nofl_debug("Remote STA VHT NSS: %d", stainfo->nss); return 0; fail: return -EINVAL; @@ -980,6 +1041,7 @@ static int32_t hdd_add_sta_info_sap(struct sk_buff *skb, int8_t rssi, goto fail; nla_nest_end(skb, nla_attr); + hdd_nofl_debug("Remote STA RSSI: %d", rssi - HDD_NOISE_FLOOR_DBM); return 0; fail: return -EINVAL; @@ -1092,6 +1154,9 @@ static int hdd_add_ap_standard_info_sap(struct sk_buff *skb, hdd_err("put fail"); goto fail; } + + hdd_nofl_debug("Remote STA VHT capabilities len:%u", + (uint32_t)sizeof(stainfo->vht_caps)); } if (stainfo->ht_present) { if (nla_put(skb, NL80211_ATTR_HT_CAPABILITY, @@ -1100,6 +1165,9 @@ static int hdd_add_ap_standard_info_sap(struct sk_buff *skb, hdd_err("put fail"); goto fail; } + + hdd_nofl_debug("Remote STA HT capabilities len:%u", + (uint32_t)sizeof(stainfo->ht_caps)); } nla_nest_end(skb, nla_attr); return 0; @@ -1225,13 +1293,15 @@ static int hdd_get_cached_station_remote(struct hdd_context *hdd_ctx, if (!(stainfo->rx_mc_bc_cnt & HDD_STATION_INFO_RX_MC_BC_COUNT)) { hdd_debug("rx mc bc count is not supported by FW"); - } - - else if (nla_put_u32(skb, REMOTE_RX_BC_MC_COUNT, - (stainfo->rx_mc_bc_cnt & - (~HDD_STATION_INFO_RX_MC_BC_COUNT)))) { + } else if (nla_put_u32(skb, REMOTE_RX_BC_MC_COUNT, + (stainfo->rx_mc_bc_cnt & + (~HDD_STATION_INFO_RX_MC_BC_COUNT)))) { hdd_err("rx mc bc put fail"); goto fail; + } else { + hdd_nofl_debug("Remote STA RX mc_bc_count: %d", + (stainfo->rx_mc_bc_cnt & + (~HDD_STATION_INFO_RX_MC_BC_COUNT))); } /* Currently rx_retry count is not supported */ @@ -1241,6 +1311,8 @@ static int hdd_get_cached_station_remote(struct hdd_context *hdd_ctx, hdd_err("rx retry count put fail"); goto fail; } + hdd_nofl_debug("Remote STA retry count: %d", + stainfo->rx_retry_cnt); } if (stainfo->assoc_req_ies.len) { @@ -1249,7 +1321,19 @@ static int hdd_get_cached_station_remote(struct hdd_context *hdd_ctx, hdd_err("Failed to put assoc req IEs"); goto fail; } + hdd_nofl_debug("Remote STA assoc req IE len: %d", + stainfo->assoc_req_ies.len); } + + hdd_nofl_debug( + "Remote STA Info:: freq:%d, RSSI:%d, Tx NSS:%d, Reason code:%d," + "capability:0x%x, Supported mode:%d, chan_width:%d, Tx rate:%d," + "Rx rate:%d, dot11mode:%d", + stainfo->freq, stainfo->rssi - HDD_NOISE_FLOOR_DBM, + stainfo->nss, stainfo->reason_code, stainfo->capability, + stainfo->support_mode, channel_width, stainfo->tx_rate, + stainfo->rx_rate, stainfo->dot11_mode); + hdd_sta_info_detach(&adapter->cache_sta_info_list, &stainfo); hdd_put_sta_info_ref(&adapter->cache_sta_info_list, &stainfo, true, STA_INFO_GET_CACHED_STATION_REMOTE);