summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDARAM SUDHA <dsudha@qti.qualcomm.com>2014-09-29 17:32:56 +0530
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2014-10-21 14:49:03 +0530
commit41d02de5feb8e8c11ac4fe736f0b9eb29412d1aa (patch)
tree663d03ab3f349d7758f40022e68166436926cd1c
parent3794084ce877aea39b947afcd256702dcf600096 (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.h3
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c15
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c197
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;
}