diff --git a/components/dp/core/src/wlan_dp_softap_txrx.c b/components/dp/core/src/wlan_dp_softap_txrx.c index d2118fe699..51aad31263 100644 --- a/components/dp/core/src/wlan_dp_softap_txrx.c +++ b/components/dp/core/src/wlan_dp_softap_txrx.c @@ -441,46 +441,41 @@ void dp_wds_replace_peer_mac(void *soc, struct wlan_dp_intf *dp_intf, static QDF_STATUS dp_softap_validate_peer_state(struct wlan_dp_intf *dp_intf, qdf_nbuf_t nbuf) { - struct qdf_mac_addr *dest_mac_addr, *mac_addr; - static struct qdf_mac_addr bcast_mac_addr = QDF_MAC_ADDR_BCAST_INIT; + struct qdf_mac_addr *dest_mac_addr; + struct qdf_mac_addr mac_addr; + enum ol_txrx_peer_state peer_state; + void *soc; dest_mac_addr = (struct qdf_mac_addr *)(qdf_nbuf_data(nbuf) + QDF_NBUF_DEST_MAC_OFFSET); - if (QDF_NBUF_CB_GET_IS_MCAST(nbuf)) - mac_addr = &bcast_mac_addr; - else - mac_addr = dest_mac_addr; + if (QDF_NBUF_CB_GET_IS_BCAST(nbuf) || QDF_NBUF_CB_GET_IS_MCAST(nbuf)) + return QDF_STATUS_SUCCESS; - if (!QDF_NBUF_CB_GET_IS_BCAST(nbuf) && - !QDF_NBUF_CB_GET_IS_MCAST(nbuf)) { - /* for a unicast frame */ - enum ol_txrx_peer_state peer_state; - void *soc = cds_get_context(QDF_MODULE_ID_SOC); + /* for a unicast frame */ + qdf_copy_macaddr(&mac_addr, dest_mac_addr); + soc = cds_get_context(QDF_MODULE_ID_SOC); + QDF_BUG(soc); + dp_wds_replace_peer_mac(soc, dp_intf, mac_addr.bytes); + peer_state = cdp_peer_state_get(soc, dp_intf->intf_id, + mac_addr.bytes); - QDF_BUG(soc); - dp_wds_replace_peer_mac(soc, dp_intf, mac_addr->bytes); - peer_state = cdp_peer_state_get(soc, dp_intf->intf_id, - mac_addr->bytes); + if (peer_state == OL_TXRX_PEER_STATE_INVALID) { + dp_debug_rl("Failed to find right station"); + return QDF_STATUS_E_FAILURE; + } - if (peer_state == OL_TXRX_PEER_STATE_INVALID) { - dp_debug_rl("Failed to find right station"); + if (peer_state != OL_TXRX_PEER_STATE_CONN && + peer_state != OL_TXRX_PEER_STATE_AUTH) { + dp_debug_rl("Station not connected yet"); + return QDF_STATUS_E_FAILURE; + } + + if (peer_state == OL_TXRX_PEER_STATE_CONN) { + if (qdf_ntohs(qdf_nbuf_get_protocol(nbuf)) != ETHERTYPE_PAE) { + dp_debug_rl("NON-EAPOL packet in non-Authenticated state"); return QDF_STATUS_E_FAILURE; } - - if (peer_state != OL_TXRX_PEER_STATE_CONN && - peer_state != OL_TXRX_PEER_STATE_AUTH) { - dp_debug_rl("Station not connected yet"); - return QDF_STATUS_E_FAILURE; - } - - if (peer_state == OL_TXRX_PEER_STATE_CONN) { - if (qdf_ntohs(qdf_nbuf_get_protocol(nbuf)) != - ETHERTYPE_PAE) { - dp_debug_rl("NON-EAPOL packet in non-Authenticated state"); - return QDF_STATUS_E_FAILURE; - } - } } return QDF_STATUS_SUCCESS; }