qcacld-3.0: Add support for beacon filters in packet capture mode
Add support to send beacon received from firmware on STA interface to mon interface based on management rx filters set by user in vendor command. Change-Id: I186ab0d697da831894854d7680265e82dd3adcef CRs-Fixed: 3073478
This commit is contained in:
parent
37540338f6
commit
1d3fee3098
@ -459,6 +459,51 @@ pkt_capture_mgmt_tx_completion(struct wlan_objmgr_pdev *pdev,
|
||||
qdf_nbuf_free(wbuf);
|
||||
}
|
||||
|
||||
/**
|
||||
* pkt_capture_is_beacon_forward_enable() - API to check whether particular
|
||||
* beacon needs to be forwarded on mon interface based on vendor command
|
||||
* @vdev: vdev object
|
||||
* @wbuf: netbuf
|
||||
*
|
||||
* Return: bool
|
||||
*/
|
||||
static bool
|
||||
pkt_capture_is_beacon_forward_enable(struct wlan_objmgr_vdev *vdev,
|
||||
qdf_nbuf_t wbuf)
|
||||
{
|
||||
struct pkt_capture_vdev_priv *vdev_priv;
|
||||
struct qdf_mac_addr connected_bssid = {0};
|
||||
tpSirMacMgmtHdr mac_hdr;
|
||||
bool my_beacon = false;
|
||||
|
||||
vdev_priv = pkt_capture_vdev_get_priv(vdev);
|
||||
if (!vdev_priv) {
|
||||
pkt_capture_err("packet capture vdev priv is NULL");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (vdev_priv->frame_filter.mgmt_rx_frame_filter &
|
||||
PKT_CAPTURE_MGMT_CONNECT_NO_BEACON)
|
||||
return false;
|
||||
|
||||
mac_hdr = (tpSirMacMgmtHdr)(qdf_nbuf_data(wbuf));
|
||||
wlan_vdev_get_bss_peer_mac(vdev, &connected_bssid);
|
||||
|
||||
if (qdf_is_macaddr_equal((struct qdf_mac_addr *)mac_hdr->bssId,
|
||||
&connected_bssid))
|
||||
my_beacon = true;
|
||||
|
||||
if (vdev_priv->frame_filter.mgmt_rx_frame_filter &
|
||||
PKT_CAPTURE_MGMT_CONNECT_BEACON && !my_beacon)
|
||||
return false;
|
||||
|
||||
if (vdev_priv->frame_filter.mgmt_rx_frame_filter &
|
||||
PKT_CAPTURE_MGMT_CONNECT_SCAN_BEACON && my_beacon)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* process_pktcapture_mgmt_rx_data_cb() - process management rx packets
|
||||
* @rx_params: mgmt rx event params
|
||||
@ -508,8 +553,7 @@ pkt_capture_mgmt_rx_data_cb(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
if (pfc->type == SIR_MAC_MGMT_FRAME) {
|
||||
if (pfc->subType == SIR_MAC_MGMT_BEACON) {
|
||||
if (vdev_priv->frame_filter.mgmt_rx_frame_filter &
|
||||
PKT_CAPTURE_MGMT_CONNECT_NO_BEACON)
|
||||
if (!pkt_capture_is_beacon_forward_enable(vdev, wbuf))
|
||||
goto exit;
|
||||
} else {
|
||||
if (!((vdev_priv->frame_filter.mgmt_rx_frame_filter &
|
||||
|
@ -51,9 +51,9 @@ enum pkt_capture_mode {
|
||||
enum pkt_capture_config {
|
||||
PACKET_CAPTURE_CONFIG_TRIGGER_ENABLE = BIT(0),
|
||||
PACKET_CAPTURE_CONFIG_QOS_ENABLE = BIT(1),
|
||||
PACKET_CAPTURE_CONFIG_NO_BEACON_ENABLE = BIT(2),
|
||||
PACKET_CAPTURE_CONFIG_BEACON_ENABLE = BIT(3),
|
||||
PACKET_CAPTURE_CONFIG_OFF_CHANNEL_BEACON_ENABLE = BIT(4),
|
||||
PACKET_CAPTURE_CONFIG_BEACON_ENABLE = BIT(2),
|
||||
PACKET_CAPTURE_CONFIG_OFF_CHANNEL_BEACON_ENABLE = BIT(3),
|
||||
PACKET_CAPTURE_CONFIG_NO_BEACON_ENABLE = BIT(4),
|
||||
};
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user