diff options
| author | DARAM SUDHA <dsudha@qti.qualcomm.com> | 2014-09-29 17:32:56 +0530 |
|---|---|---|
| committer | AnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com> | 2014-10-21 14:49:03 +0530 |
| commit | 41d02de5feb8e8c11ac4fe736f0b9eb29412d1aa (patch) | |
| tree | 663d03ab3f349d7758f40022e68166436926cd1c | |
| parent | 3794084ce877aea39b947afcd256702dcf600096 (diff) | |
ioctl support to get stats in SAP mode
"iwpriv wlan0 get_stats" support is added in SAP to get txrx stats.
Change-Id: Iae2acf473b16470c762c46bde12ba83a876b2118
CRs-Fixed: 730867
| -rw-r--r-- | CORE/HDD/inc/wlan_hdd_wext.h | 3 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_hostapd.c | 15 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_wext.c | 197 |
3 files changed, 128 insertions, 87 deletions
diff --git a/CORE/HDD/inc/wlan_hdd_wext.h b/CORE/HDD/inc/wlan_hdd_wext.h index f4b73f78b1b3..ba402fb8c420 100644 --- a/CORE/HDD/inc/wlan_hdd_wext.h +++ b/CORE/HDD/inc/wlan_hdd_wext.h @@ -335,6 +335,9 @@ extern int hdd_wlan_get_frag_threshold(hdd_adapter_t *pAdapter, extern void hdd_wlan_get_version(hdd_adapter_t *pAdapter, union iwreq_data *wrqu, char *extra); +extern void hdd_wlan_get_stats(hdd_adapter_t *pAdapter, v_U16_t *length, + char *buffer, v_U16_t buf_len); + extern int iw_get_scan(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index a3537ffd78b8..9d7bd519c2a5 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -3251,6 +3251,18 @@ static iw_softap_ap_stats(struct net_device *dev, return 0; } +int +static iw_softap_get_stats(struct net_device *dev, + struct iw_request_info *info, + union iwreq_data *wrqu, char *extra) +{ + hdd_adapter_t *p_host_adapter = netdev_priv(dev); + + hdd_wlan_get_stats(p_host_adapter, &(wrqu->data.length), + extra, WE_MAX_STR_LEN); + return 0; +} + static int iw_softap_set_channel_range(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra) @@ -4791,6 +4803,8 @@ static const struct iw_priv_args hostapd_private_args[] = { IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 6 , 0, "disassoc_sta" }, { QCSAP_IOCTL_AP_STATS, 0, IW_PRIV_TYPE_CHAR | QCSAP_MAX_WSC_IE, "ap_stats" }, + { QCSAP_IOCTL_GET_STATS, 0, + IW_PRIV_TYPE_CHAR | WE_MAX_STR_LEN, "get_stats" }, { QCSAP_IOCTL_PRIV_GET_SOFTAP_LINK_SPEED, IW_PRIV_TYPE_CHAR | 18, IW_PRIV_TYPE_CHAR | 5, "getLinkSpeed" }, @@ -4899,6 +4913,7 @@ static const iw_handler hostapd_private[] = { [QCSAP_IOCTL_ASSOC_STA_MACADDR - SIOCIWFIRSTPRIV] = iw_softap_getassoc_stamacaddr, [QCSAP_IOCTL_DISASSOC_STA - SIOCIWFIRSTPRIV] = iw_softap_disassoc_sta, [QCSAP_IOCTL_AP_STATS - SIOCIWFIRSTPRIV] = iw_softap_ap_stats, + [QCSAP_IOCTL_GET_STATS - SIOCIWFIRSTPRIV] = iw_softap_get_stats, [QCSAP_IOCTL_PRIV_SET_THREE_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_set_three_ints_getnone, [QCSAP_IOCTL_PRIV_SET_VAR_INT_GET_NONE - SIOCIWFIRSTPRIV] = iw_set_var_ints_getnone, [QCSAP_IOCTL_SET_CHANNEL_RANGE - SIOCIWFIRSTPRIV] = iw_softap_set_channel_range, diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c index 8354fb0907b1..525a4d93eb91 100644 --- a/CORE/HDD/src/wlan_hdd_wext.c +++ b/CORE/HDD/src/wlan_hdd_wext.c @@ -654,6 +654,114 @@ int hdd_priv_get_data(struct iw_point *p_priv_data, return 0; } + +/**--------------------------------------------------------------------------- + + \brief hdd_wlan_get_stats - + + Helper function to get stats + + \param - pAdapter Pointer to the adapter. + wrqu - Pointer to IOCTL REQUEST Data. + extra - Pointer to char + + + \return - none + + --------------------------------------------------------------------------*/ +void hdd_wlan_get_stats(hdd_adapter_t *pAdapter, v_U16_t *length, + char *buffer, v_U16_t buf_len) +{ + hdd_tx_rx_stats_t *pStats = &pAdapter->hdd_stats.hddTxRxStats; + + snprintf(buffer, buf_len, + "\nTransmit" + "\ncalled %u, dropped %u, backpressured %u, queued %u" + "\n dropped BK %u, BE %u, VI %u, VO %u" + "\n classified BK %u, BE %u, VI %u, VO %u" + "\nbackpressured BK %u, BE %u, VI %u, VO %u" + "\n queued BK %u, BE %u, VI %u, VO %u" + "\nfetched %u, empty %u, lowres %u, deqerr %u" + "\ndequeued %u, depressured %u, deque-depressured %u, completed %u, flushed %u" + "\n fetched BK %u, BE %u, VI %u, VO %u" + "\n dequeued BK %u, BE %u, VI %u, VO %u" + "\n depressured BK %u, BE %u, VI %u, VO %u" + "\nDeque depressured BK %u, BE %u, VI %u, VO %u" + "\n flushed BK %u, BE %u, VI %u, VO %u" + "\n\nReceive" + "\nchains %u, packets %u, dropped %u, delivered %u, refused %u" + "\n", + pStats->txXmitCalled, + pStats->txXmitDropped, + pStats->txXmitBackPressured, + pStats->txXmitQueued, + + pStats->txXmitDroppedAC[WLANTL_AC_BK], + pStats->txXmitDroppedAC[WLANTL_AC_BE], + pStats->txXmitDroppedAC[WLANTL_AC_VI], + pStats->txXmitDroppedAC[WLANTL_AC_VO], + + pStats->txXmitClassifiedAC[WLANTL_AC_BK], + pStats->txXmitClassifiedAC[WLANTL_AC_BE], + pStats->txXmitClassifiedAC[WLANTL_AC_VI], + pStats->txXmitClassifiedAC[WLANTL_AC_VO], + + pStats->txXmitBackPressuredAC[WLANTL_AC_BK], + pStats->txXmitBackPressuredAC[WLANTL_AC_BE], + pStats->txXmitBackPressuredAC[WLANTL_AC_VI], + pStats->txXmitBackPressuredAC[WLANTL_AC_VO], + + pStats->txXmitQueuedAC[WLANTL_AC_BK], + pStats->txXmitQueuedAC[WLANTL_AC_BE], + pStats->txXmitQueuedAC[WLANTL_AC_VI], + pStats->txXmitQueuedAC[WLANTL_AC_VO], + + pStats->txFetched, + pStats->txFetchEmpty, + pStats->txFetchLowResources, + pStats->txFetchDequeueError, + + pStats->txFetchDequeued, + pStats->txFetchDePressured, + pStats->txDequeDePressured, + pStats->txCompleted, + pStats->txFlushed, + + pStats->txFetchedAC[WLANTL_AC_BK], + pStats->txFetchedAC[WLANTL_AC_BE], + pStats->txFetchedAC[WLANTL_AC_VI], + pStats->txFetchedAC[WLANTL_AC_VO], + + pStats->txFetchDequeuedAC[WLANTL_AC_BK], + pStats->txFetchDequeuedAC[WLANTL_AC_BE], + pStats->txFetchDequeuedAC[WLANTL_AC_VI], + pStats->txFetchDequeuedAC[WLANTL_AC_VO], + + pStats->txFetchDePressuredAC[WLANTL_AC_BK], + pStats->txFetchDePressuredAC[WLANTL_AC_BE], + pStats->txFetchDePressuredAC[WLANTL_AC_VI], + pStats->txFetchDePressuredAC[WLANTL_AC_VO], + + pStats->txDequeDePressuredAC[WLANTL_AC_BK], + pStats->txDequeDePressuredAC[WLANTL_AC_BE], + pStats->txDequeDePressuredAC[WLANTL_AC_VI], + pStats->txDequeDePressuredAC[WLANTL_AC_VO], + + pStats->txFlushedAC[WLANTL_AC_BK], + pStats->txFlushedAC[WLANTL_AC_BE], + pStats->txFlushedAC[WLANTL_AC_VI], + pStats->txFlushedAC[WLANTL_AC_VO], + + pStats->rxChains, + pStats->rxPackets, + pStats->rxDropped, + pStats->rxDelivered, + pStats->rxRefused + ); + *length = strlen(buffer) + 1; +} + + /**--------------------------------------------------------------------------- \brief hdd_wlan_get_version() - @@ -6826,93 +6934,8 @@ static int iw_get_char_setnone(struct net_device *dev, struct iw_request_info *i case WE_GET_STATS: { - hdd_tx_rx_stats_t *pStats = &pAdapter->hdd_stats.hddTxRxStats; - - snprintf(extra, WE_MAX_STR_LEN, - "\nTransmit" - "\ncalled %u, dropped %u, backpressured %u, queued %u" - "\n dropped BK %u, BE %u, VI %u, VO %u" - "\n classified BK %u, BE %u, VI %u, VO %u" - "\nbackpressured BK %u, BE %u, VI %u, VO %u" - "\n queued BK %u, BE %u, VI %u, VO %u" - "\nfetched %u, empty %u, lowres %u, deqerr %u" - "\ndequeued %u, depressured %u, deque-depressured %u, completed %u, flushed %u" - "\n fetched BK %u, BE %u, VI %u, VO %u" - "\n dequeued BK %u, BE %u, VI %u, VO %u" - "\n depressured BK %u, BE %u, VI %u, VO %u" - "\nDeque depressured BK %u, BE %u, VI %u, VO %u" - "\n flushed BK %u, BE %u, VI %u, VO %u" - "\n\nReceive" - "\nchains %u, packets %u, dropped %u, delivered %u, refused %u" - "\n", - pStats->txXmitCalled, - pStats->txXmitDropped, - pStats->txXmitBackPressured, - pStats->txXmitQueued, - - pStats->txXmitDroppedAC[WLANTL_AC_BK], - pStats->txXmitDroppedAC[WLANTL_AC_BE], - pStats->txXmitDroppedAC[WLANTL_AC_VI], - pStats->txXmitDroppedAC[WLANTL_AC_VO], - - pStats->txXmitClassifiedAC[WLANTL_AC_BK], - pStats->txXmitClassifiedAC[WLANTL_AC_BE], - pStats->txXmitClassifiedAC[WLANTL_AC_VI], - pStats->txXmitClassifiedAC[WLANTL_AC_VO], - - pStats->txXmitBackPressuredAC[WLANTL_AC_BK], - pStats->txXmitBackPressuredAC[WLANTL_AC_BE], - pStats->txXmitBackPressuredAC[WLANTL_AC_VI], - pStats->txXmitBackPressuredAC[WLANTL_AC_VO], - - pStats->txXmitQueuedAC[WLANTL_AC_BK], - pStats->txXmitQueuedAC[WLANTL_AC_BE], - pStats->txXmitQueuedAC[WLANTL_AC_VI], - pStats->txXmitQueuedAC[WLANTL_AC_VO], - - pStats->txFetched, - pStats->txFetchEmpty, - pStats->txFetchLowResources, - pStats->txFetchDequeueError, - - pStats->txFetchDequeued, - pStats->txFetchDePressured, - pStats->txDequeDePressured, - pStats->txCompleted, - pStats->txFlushed, - - pStats->txFetchedAC[WLANTL_AC_BK], - pStats->txFetchedAC[WLANTL_AC_BE], - pStats->txFetchedAC[WLANTL_AC_VI], - pStats->txFetchedAC[WLANTL_AC_VO], - - pStats->txFetchDequeuedAC[WLANTL_AC_BK], - pStats->txFetchDequeuedAC[WLANTL_AC_BE], - pStats->txFetchDequeuedAC[WLANTL_AC_VI], - pStats->txFetchDequeuedAC[WLANTL_AC_VO], - - pStats->txFetchDePressuredAC[WLANTL_AC_BK], - pStats->txFetchDePressuredAC[WLANTL_AC_BE], - pStats->txFetchDePressuredAC[WLANTL_AC_VI], - pStats->txFetchDePressuredAC[WLANTL_AC_VO], - - pStats->txDequeDePressuredAC[WLANTL_AC_BK], - pStats->txDequeDePressuredAC[WLANTL_AC_BE], - pStats->txDequeDePressuredAC[WLANTL_AC_VI], - pStats->txDequeDePressuredAC[WLANTL_AC_VO], - - pStats->txFlushedAC[WLANTL_AC_BK], - pStats->txFlushedAC[WLANTL_AC_BE], - pStats->txFlushedAC[WLANTL_AC_VI], - pStats->txFlushedAC[WLANTL_AC_VO], - - pStats->rxChains, - pStats->rxPackets, - pStats->rxDropped, - pStats->rxDelivered, - pStats->rxRefused - ); - wrqu->data.length = strlen(extra)+1; + hdd_wlan_get_stats(pAdapter, &(wrqu->data.length), + extra, WE_MAX_STR_LEN); break; } |
