diff --git a/components/pkt_capture/core/inc/wlan_pkt_capture_main.h b/components/pkt_capture/core/inc/wlan_pkt_capture_main.h index 3d3ee30f11..675586bcfe 100644 --- a/components/pkt_capture/core/inc/wlan_pkt_capture_main.h +++ b/components/pkt_capture/core/inc/wlan_pkt_capture_main.h @@ -190,10 +190,12 @@ void pkt_capture_record_channel(struct wlan_objmgr_vdev *vdev); * pkt_capture_mon() - Wrapper function to invoke mon cb * @cb_ctx: packet capture callback context * @msdu: packet + * @vdev: pointer to vdev + * @ch_freq: channel frequency * * Return: None */ -void pkt_capture_mon(struct pkt_capture_cb_context *cb_ctx, - qdf_nbuf_t msdu); +void pkt_capture_mon(struct pkt_capture_cb_context *cb_ctx, qdf_nbuf_t msdu, + struct wlan_objmgr_vdev *vdev, uint16_t ch_freq); #endif /* end of _WLAN_PKT_CAPTURE_MAIN_H_ */ diff --git a/components/pkt_capture/core/inc/wlan_pkt_capture_mon_thread.h b/components/pkt_capture/core/inc/wlan_pkt_capture_mon_thread.h index 006fa0a085..e52a5596dd 100644 --- a/components/pkt_capture/core/inc/wlan_pkt_capture_mon_thread.h +++ b/components/pkt_capture/core/inc/wlan_pkt_capture_mon_thread.h @@ -41,7 +41,7 @@ typedef void (*pkt_capture_mon_thread_cb)( void *context, void *ppdev, void *monpkt, uint8_t vdev_id, uint8_t tid, - uint8_t status, bool pkt_format, + uint16_t status, bool pkt_format, uint8_t *bssid, uint8_t tx_retry_cnt); @@ -66,7 +66,7 @@ struct pkt_capture_mon_pkt { void *monpkt; uint8_t vdev_id; uint8_t tid; - uint8_t status; + uint16_t status; bool pkt_format; uint8_t bssid[QDF_MAC_ADDR_SIZE]; uint8_t tx_retry_cnt; diff --git a/components/pkt_capture/core/src/wlan_pkt_capture_data_txrx.c b/components/pkt_capture/core/src/wlan_pkt_capture_data_txrx.c index 59fdef0aa9..db714a80cc 100644 --- a/components/pkt_capture/core/src/wlan_pkt_capture_data_txrx.c +++ b/components/pkt_capture/core/src/wlan_pkt_capture_data_txrx.c @@ -434,7 +434,7 @@ static void pkt_capture_rx_data_cb( void *context, void *ppdev, void *nbuf_list, uint8_t vdev_id, uint8_t tid, - uint8_t status, bool pkt_format, + uint16_t status, bool pkt_format, uint8_t *bssid, uint8_t tx_retry_cnt) { struct pkt_capture_vdev_priv *vdev_priv; @@ -528,7 +528,7 @@ pkt_capture_rx_data_cb( */ headroom = qdf_nbuf_headroom(msdu); qdf_nbuf_update_radiotap(&rx_status, msdu, headroom); - pkt_capture_mon(cb_ctx, msdu); + pkt_capture_mon(cb_ctx, msdu, vdev, 0); msdu = next_buf; } @@ -556,7 +556,7 @@ free_buf: static void pkt_capture_tx_data_cb( void *context, void *ppdev, void *nbuf_list, uint8_t vdev_id, - uint8_t tid, uint8_t status, bool pkt_format, + uint8_t tid, uint16_t status, bool pkt_format, uint8_t *bssid, uint8_t tx_retry_cnt) { qdf_nbuf_t msdu, next_buf; @@ -701,7 +701,7 @@ pkt_capture_tx_data_cb( */ headroom = qdf_nbuf_headroom(msdu); qdf_nbuf_update_radiotap(&tx_status, msdu, headroom); - pkt_capture_mon(cb_ctx, msdu); + pkt_capture_mon(cb_ctx, msdu, vdev, 0); msdu = next_buf; } return; diff --git a/components/pkt_capture/core/src/wlan_pkt_capture_main.c b/components/pkt_capture/core/src/wlan_pkt_capture_main.c index 3fab22c63a..ec1ebecab3 100644 --- a/components/pkt_capture/core/src/wlan_pkt_capture_main.c +++ b/components/pkt_capture/core/src/wlan_pkt_capture_main.c @@ -83,6 +83,7 @@ pkt_capture_register_callbacks(struct wlan_objmgr_vdev *vdev, target_if_pkt_capture_register_tx_ops(&vdev_priv->tx_ops); target_if_pkt_capture_register_rx_ops(&vdev_priv->rx_ops); + pkt_capture_record_channel(vdev); return QDF_STATUS_SUCCESS; } diff --git a/components/pkt_capture/core/src/wlan_pkt_capture_mgmt_txrx.c b/components/pkt_capture/core/src/wlan_pkt_capture_mgmt_txrx.c index 71295bacc5..983c7b716e 100644 --- a/components/pkt_capture/core/src/wlan_pkt_capture_mgmt_txrx.c +++ b/components/pkt_capture/core/src/wlan_pkt_capture_mgmt_txrx.c @@ -58,7 +58,7 @@ pkt_capture_mgmt_status_map(uint8_t status) * @nbuf_list: netbuf list * @vdev_id: vdev id for which packet is captured * @tid: tid number - * @status: Tx status + * @ch_freq: channel frequency * @pkt_format: Frame format * @tx_retry_cnt: tx retry count * @@ -66,7 +66,7 @@ pkt_capture_mgmt_status_map(uint8_t status) */ static void pkt_capture_mgmtpkt_cb(void *context, void *ppdev, void *nbuf_list, - uint8_t vdev_id, uint8_t tid, uint8_t status, + uint8_t vdev_id, uint8_t tid, uint16_t ch_freq, bool pkt_format, uint8_t *bssid, uint8_t tx_retry_cnt) { struct pkt_capture_vdev_priv *vdev_priv; @@ -100,7 +100,7 @@ pkt_capture_mgmtpkt_cb(void *context, void *ppdev, void *nbuf_list, while (msdu) { next_buf = qdf_nbuf_queue_next(msdu); qdf_nbuf_set_next(msdu, NULL); /* Add NULL terminator */ - pkt_capture_mon(cb_ctx, msdu); + pkt_capture_mon(cb_ctx, msdu, vdev, ch_freq); msdu = next_buf; } @@ -158,7 +158,7 @@ pkt_capture_mgmtpkt_process(struct wlan_objmgr_psoc *psoc, pkt->monpkt = nbuf; pkt->vdev_id = WLAN_INVALID_VDEV_ID; pkt->tid = WLAN_INVALID_TID; - pkt->status = status; + pkt->status = txrx_status->chan_freq; pkt->pkt_format = PKTCAPTURE_PKT_FORMAT_80211; pkt_capture_indicate_monpkt(vdev, pkt); diff --git a/components/pkt_capture/core/src/wlan_pkt_capture_mon_thread.c b/components/pkt_capture/core/src/wlan_pkt_capture_mon_thread.c index 8773e0d63c..337bd419f3 100644 --- a/components/pkt_capture/core/src/wlan_pkt_capture_mon_thread.c +++ b/components/pkt_capture/core/src/wlan_pkt_capture_mon_thread.c @@ -23,13 +23,19 @@ #include "wlan_pkt_capture_mon_thread.h" #include #include "cds_ieee80211_common.h" +#include "wlan_mgmt_txrx_utils_api.h" +#include "cdp_txrx_ctrl.h" +#include "cfg_ucfg_api.h" -void pkt_capture_mon(struct pkt_capture_cb_context *cb_ctx, - qdf_nbuf_t msdu) +void pkt_capture_mon(struct pkt_capture_cb_context *cb_ctx, qdf_nbuf_t msdu, + struct wlan_objmgr_vdev *vdev, uint16_t ch_freq) { struct radiotap_header *rthdr; uint8_t rtlen, type, sub_type; struct ieee80211_frame *wh; + void *soc = cds_get_context(QDF_MODULE_ID_SOC); + struct wlan_objmgr_pdev *pdev = wlan_vdev_get_pdev(vdev); + cdp_config_param_type val; rthdr = (struct radiotap_header *)qdf_nbuf_data(msdu); rtlen = rthdr->it_len; @@ -42,6 +48,20 @@ void pkt_capture_mon(struct pkt_capture_cb_context *cb_ctx, qdf_nbuf_free(msdu); return; } + + if ((type == IEEE80211_FC0_TYPE_MGT) && + (sub_type == MGMT_SUBTYPE_AUTH)) { + uint8_t chan = wlan_freq_to_chan(ch_freq); + + val.cdp_pdev_param_monitor_chan = chan; + cdp_txrx_set_pdev_param(soc, wlan_objmgr_pdev_get_pdev_id(pdev), + CDP_MONITOR_CHANNEL, val); + + val.cdp_pdev_param_mon_freq = ch_freq; + cdp_txrx_set_pdev_param(soc, wlan_objmgr_pdev_get_pdev_id(pdev), + CDP_MONITOR_FREQUENCY, val); + } + if (cb_ctx->mon_cb(cb_ctx->mon_ctx, msdu) != QDF_STATUS_SUCCESS) { pkt_capture_err("Frame Rx to HDD failed"); qdf_nbuf_free(msdu);