|
@@ -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)) {
|
|
|
- /* for a unicast frame */
|
|
|
- enum ol_txrx_peer_state peer_state;
|
|
|
- void *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);
|
|
|
+ if (QDF_NBUF_CB_GET_IS_BCAST(nbuf) || QDF_NBUF_CB_GET_IS_MCAST(nbuf))
|
|
|
+ return QDF_STATUS_SUCCESS;
|
|
|
+
|
|
|
+ /* 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);
|
|
|
+
|
|
|
+ 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");
|
|
|
- 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 &&
|
|
|
- peer_state != OL_TXRX_PEER_STATE_AUTH) {
|
|
|
- dp_debug_rl("Station not connected yet");
|
|
|
+ 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) {
|
|
|
- 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;
|
|
|
}
|