qcacmn: Add multicast address in tx_capture header
In existing code peer's mac address is populated in tx_capture
receiver address field. In case of multicast and broadcast packets
the packets is transmitted on BSS peer so in case of broadcast/multicast
packets the transmitter address is same as receiver address in tx_capture
header.
Add change to populate receiver address field with ethernet destination
address in case of bss peer is tranmit status.
Change-Id: Ie9495d51391454313b1697ecedb8e8dec0459565
CRs-Fixed: 2261473
diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c
index 327a9ef..ac6bd94 100644
--- a/dp/wifi3.0/dp_main.c
+++ b/dp/wifi3.0/dp_main.c
@@ -6321,8 +6321,7 @@
case 2:
pdev->mcopy_mode = 1;
pdev->tx_sniffer_enable = 0;
- if (!pdev->enhanced_stats_en)
- dp_ppdu_ring_cfg(pdev);
+ dp_ppdu_ring_cfg(pdev);
if (!pdev->pktlog_ppdu_stats)
dp_h2t_cfg_stats_msg_send(pdev,
diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c
index 904463c..9453e23 100644
--- a/dp/wifi3.0/dp_tx.c
+++ b/dp/wifi3.0/dp_tx.c
@@ -2319,6 +2319,7 @@
{
struct tx_capture_hdr *ppdu_hdr;
struct dp_peer *peer = NULL;
+ struct ether_header *eh;
if (qdf_unlikely(!pdev->tx_sniffer_enable && !pdev->mcopy_mode))
return QDF_STATUS_E_NOSUPPORT;
@@ -2342,6 +2343,8 @@
pdev->m_copy_id.tx_peer_id = peer_id;
}
+ eh = (struct ether_header *)qdf_nbuf_data(netbuf);
+
if (!qdf_nbuf_push_head(netbuf, sizeof(struct tx_capture_hdr))) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
FL("No headroom"));
@@ -2350,10 +2353,15 @@
ppdu_hdr = (struct tx_capture_hdr *)qdf_nbuf_data(netbuf);
qdf_mem_copy(ppdu_hdr->ta, peer->vdev->mac_addr.raw,
- IEEE80211_ADDR_LEN);
+ IEEE80211_ADDR_LEN);
+ if (peer->bss_peer) {
+ qdf_mem_copy(ppdu_hdr->ra, eh->ether_dhost, IEEE80211_ADDR_LEN);
+ } else {
+ qdf_mem_copy(ppdu_hdr->ra, peer->mac_addr.raw,
+ IEEE80211_ADDR_LEN);
+ }
+
ppdu_hdr->ppdu_id = ppdu_id;
- qdf_mem_copy(ppdu_hdr->ra, peer->mac_addr.raw,
- IEEE80211_ADDR_LEN);
ppdu_hdr->peer_id = peer_id;
ppdu_hdr->first_msdu = first_msdu;
ppdu_hdr->last_msdu = last_msdu;