#include "mib.h"
#include "nl80211_vendor.h"
+#ifdef CONFIG_SCSC_WLAN_ENHANCED_LOGGING
#include "scsc_wifilogger.h"
#include "scsc_wifilogger_rings.h"
#include "scsc_wifilogger_types.h"
+#endif
+#define SLSI_WIFI_TAG_RSSI 21
+#define SLSI_WIFI_TAG_REASON_CODE 14
+#define SLSI_WIFI_TAG_VENDOR_SPECIFIC 0
+#define SLSI_WIFI_TAG_EAPOL_MESSAGE_TYPE 29
+#define SLSI_WIFI_TAG_STATUS 4
#define SLSI_GSCAN_INVALID_RSSI 0x7FFF
#define SLSI_EPNO_AUTH_FIELD_WEP_OPEN 1
#define SLSI_EPNO_AUTH_FIELD_WPA_EAP 4
#define WIFI_EVENT_FW_BTM_FRAME_REQUEST 56 // Request for a BTM frame is received
#define WIFI_EVENT_FW_BTM_FRAME_RESPONSE 57 // A BTM frame is transmitted.
-
-#define WIFI_TAG_VD_CHANNEL_UTILISATION 0xf01a
-#define WIFI_TAG_VD_ROAMING_REASON 0xf019
-#define WIFI_TAG_VD_BTM_REQUEST_MODE 0xf01b
-#define WIFI_TAG_VD_BTM_RESPONSE_STATUS 0xf01c
-#define WIFI_TAG_VD_RETRY_COUNT 0xf00f
-#define WIFI_ROAMING_SEARCH_REASON_RESERVED 0
-#define WIFI_ROAMING_SEARCH_REASON_LOW_RSSI 1
-#define WIFI_ROAMING_SEARCH_REASON_LINK_LOSS 2
-#define WIFI_ROAMING_SEARCH_REASON_BTM_REQ 3
-#define WIFI_ROAMING_SEARCH_REASON_CU_TRIGGER 4
+#define WIFI_EVENT_FW_NR_FRAME_REQUEST 58
+#define WIFI_EVENT_FW_RM_FRAME_RESPONSE 59
+
+#define SLSI_WIFI_TAG_VD_CHANNEL_UTILISATION 0xf01a
+#define SLSI_WIFI_TAG_VD_ROAMING_REASON 0xf019
+#define SLSI_WIFI_TAG_VD_BTM_REQUEST_MODE 0xf01b
+#define SLSI_WIFI_TAG_VD_BTM_RESPONSE_STATUS 0xf01c
+#define SLSI_WIFI_TAG_VD_RETRY_COUNT 0xf00f
+#define SLSI_WIFI_TAG_VD_EAPOL_KEY_TYPE 0xF008
+#define SLSI_WIFI_EAPOL_KEY_TYPE_GTK 0x0000
+#define SLSI_WIFI_EAPOL_KEY_TYPE_PTK 0x0001
+#define SLSI_WIFI_ROAMING_SEARCH_REASON_RESERVED 0
+#define SLSI_WIFI_ROAMING_SEARCH_REASON_LOW_RSSI 1
+#define SLSI_WIFI_ROAMING_SEARCH_REASON_LINK_LOSS 2
+#define SLSI_WIFI_ROAMING_SEARCH_REASON_BTM_REQ 3
+#define SLSI_WIFI_ROAMING_SEARCH_REASON_CU_TRIGGER 4
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
char *slsi_get_roam_reason_str(int roam_reason)
{
switch (roam_reason) {
- case WIFI_ROAMING_SEARCH_REASON_RESERVED:
+ case SLSI_WIFI_ROAMING_SEARCH_REASON_RESERVED:
return "WIFI_ROAMING_SEARCH_REASON_RESERVED";
- case WIFI_ROAMING_SEARCH_REASON_LOW_RSSI:
+ case SLSI_WIFI_ROAMING_SEARCH_REASON_LOW_RSSI:
return "WIFI_ROAMING_SEARCH_REASON_LOW_RSSI";
- case WIFI_ROAMING_SEARCH_REASON_LINK_LOSS:
+ case SLSI_WIFI_ROAMING_SEARCH_REASON_LINK_LOSS:
return "WIFI_ROAMING_SEARCH_REASON_LINK_LOSS";
- case WIFI_ROAMING_SEARCH_REASON_BTM_REQ:
+ case SLSI_WIFI_ROAMING_SEARCH_REASON_BTM_REQ:
return "WIFI_ROAMING_SEARCH_REASON_BTM_REQ";
- case WIFI_ROAMING_SEARCH_REASON_CU_TRIGGER:
+ case SLSI_WIFI_ROAMING_SEARCH_REASON_CU_TRIGGER:
return "WIFI_ROAMING_SEARCH_REASON_CU_TRIGGER";
default:
return "UNKNOWN_REASON";
u64 timestamp = 0;
u8 *tlv_data;
u32 roam_reason, chan_utilisation, btm_request_mode, btm_response, eapol_msg_type;
- u32 deauth_reason, eapol_retry_count, roam_rssi, eapol_result_code;
- u16 vendor_len, tag_id, tag_len, vtag_id;
+ u32 deauth_reason, eapol_retry_count, roam_rssi, status_code;
+ u16 vendor_len, tag_id, tag_len, vtag_id, eapol_key_type;
u32 tag_value, vtag_value, rssi_bits = 0;
int roam_rssi_val;
__le16 *le16_ptr = NULL;
}
tag_value = slsi_convert_tlv_data_to_value(&tlv_data[i], tag_len);
switch (tag_id) {
- case WIFI_TAG_RSSI:
+ case SLSI_WIFI_TAG_RSSI:
roam_rssi = tag_value;
while (roam_rssi) {
rssi_bits++;
roam_rssi_val = ((1 << rssi_bits) - 1) ^ tag_value;
roam_rssi_val = -(roam_rssi_val + 1);
break;
- case WIFI_TAG_REASON_CODE:
+ case SLSI_WIFI_TAG_REASON_CODE:
deauth_reason = tag_value;
break;
- case WIFI_TAG_VENDOR_SPECIFIC:
+ case SLSI_WIFI_TAG_VENDOR_SPECIFIC:
vendor_len = tag_len - 2;
le16_ptr = (__le16 *)&tlv_data[i];
vtag_id = le16_to_cpu(*le16_ptr);
vtag_value = slsi_convert_tlv_data_to_value(&tlv_data[i + 2], vendor_len);
switch (vtag_id) {
- case WIFI_TAG_VD_CHANNEL_UTILISATION:
+ case SLSI_WIFI_TAG_VD_CHANNEL_UTILISATION:
chan_utilisation = vtag_value;
break;
- case WIFI_TAG_VD_ROAMING_REASON:
+ case SLSI_WIFI_TAG_VD_ROAMING_REASON:
roam_reason = vtag_value;
break;
- case WIFI_TAG_VD_BTM_REQUEST_MODE:
+ case SLSI_WIFI_TAG_VD_BTM_REQUEST_MODE:
btm_request_mode = vtag_value;
break;
- case WIFI_TAG_VD_BTM_RESPONSE_STATUS:
+ case SLSI_WIFI_TAG_VD_BTM_RESPONSE_STATUS:
btm_response = vtag_value;
break;
- case WIFI_TAG_VD_RETRY_COUNT:
+ case SLSI_WIFI_TAG_VD_RETRY_COUNT:
eapol_retry_count = vtag_value;
break;
+ case SLSI_WIFI_TAG_VD_EAPOL_KEY_TYPE:
+ eapol_key_type = vtag_value;
+ break;
}
break;
- case WIFI_TAG_EAPOL_MESSAGE_TYPE:
+ case SLSI_WIFI_TAG_EAPOL_MESSAGE_TYPE:
eapol_msg_type = tag_value;
break;
- case WIFI_TAG_STATUS:
- eapol_result_code = tag_value;
+ case SLSI_WIFI_TAG_STATUS:
+ status_code = tag_value;
break;
}
i += tag_len;
}
switch (event_id) {
- case WIFI_EVENT_FW_EAPOL_FRAME_TRANSMIT_START:
- SLSI_INFO(sdev, "WIFI_EVENT_FW_EAPOL_FRAME_TRANSMIT_START, Send 4way-H/S, M%d\n", eapol_msg_type);
+ case FAPI_EVENT_WIFI_EVENT_FW_EAPOL_FRAME_TRANSMIT_START:
+ if (eapol_key_type == SLSI_WIFI_EAPOL_KEY_TYPE_GTK)
+ SLSI_INFO(sdev, "WIFI_EVENT_FW_EAPOL_FRAME_TRANSMIT_START, Send GTK, G%d\n", eapol_msg_type);
+ else if (eapol_key_type == SLSI_WIFI_EAPOL_KEY_TYPE_PTK)
+ SLSI_INFO(sdev, "WIFI_EVENT_FW_EAPOL_FRAME_TRANSMIT_START, Send 4way-H/S, M%d\n",
+ eapol_msg_type);
break;
- case WIFI_EVENT_FW_EAPOL_FRAME_TRANSMIT_STOP:
+ case FAPI_EVENT_WIFI_EVENT_FW_EAPOL_FRAME_TRANSMIT_STOP:
SLSI_INFO(sdev, "WIFI_EVENT_FW_EAPOL_FRAME_TRANSMIT_STOP,Result Code:%d, Retry Count:%d\n",
- eapol_result_code, eapol_retry_count);
+ status_code, eapol_retry_count);
break;
- case WIFI_EVENT_FW_EAPOL_FRAME_RECEIVED:
- SLSI_INFO(sdev, "WIFI_EVENT_FW_EAPOL_FRAME_RECEIVED, Received 4way-H/S, M%d\n", eapol_msg_type);
+ case FAPI_EVENT_WIFI_EVENT_FW_EAPOL_FRAME_RECEIVED:
+ if (eapol_key_type == SLSI_WIFI_EAPOL_KEY_TYPE_GTK)
+ SLSI_INFO(sdev, "WIFI_EVENT_FW_EAPOL_FRAME_RECEIVED, Received GTK, G%d\n", eapol_msg_type);
+ else if (eapol_key_type == SLSI_WIFI_EAPOL_KEY_TYPE_PTK)
+ SLSI_INFO(sdev, "WIFI_EVENT_FW_EAPOL_FRAME_RECEIVED, Received 4way-H/S, M%d\n", eapol_msg_type);
break;
case WIFI_EVENT_FW_BTM_FRAME_REQUEST:
SLSI_INFO(sdev, "WIFI_EVENT_FW_BTM_FRAME_REQUEST,Request Mode:%d\n", btm_request_mode);
break;
case WIFI_EVENT_FW_BTM_FRAME_RESPONSE:
- SLSI_INFO(sdev, "WIFI_EVENT_FW_BTM_FRAME_RESPONSE:%s\n", btm_response ? "Success" : "Failure");
+ SLSI_INFO(sdev, "WIFI_EVENT_FW_BTM_FRAME_RESPONSE,Status code:%d\n", btm_response);
break;
- case WIFI_EVENT_ROAM_SEARCH_STARTED:
+ case FAPI_EVENT_WIFI_EVENT_ROAM_SEARCH_STARTED:
SLSI_INFO(sdev, "WIFI_EVENT_ROAM_SEARCH_STARTED, RSSI:%d, Deauth Reason:0x%04x, Channel Utilisation:%d,"
"Roam Reason: %s\n", roam_rssi_val, deauth_reason, chan_utilisation,
slsi_get_roam_reason_str(roam_reason));
break;
+ case FAPI_EVENT_WIFI_EVENT_FW_AUTH_STARTED:
+ SLSI_INFO(sdev, "WIFI_EVENT_FW_AUTH_STARTED\n");
+ break;
+ case FAPI_EVENT_WIFI_EVENT_AUTH_COMPLETE:
+ SLSI_INFO(sdev, "WIFI_EVENT_AUTH_COMPLETE,Status code:%d\n", status_code);
+ break;
+ case FAPI_EVENT_WIFI_EVENT_ROAM_ASSOC_COMPLETE:
+ SLSI_INFO(sdev, "WIFI_EVENT_ROAM_ASSOC_COMPLETE\n");
+ break;
+ case WIFI_EVENT_FW_NR_FRAME_REQUEST:
+ SLSI_INFO(sdev, "Send Radio Measurement Frame (Neighbor Report Req)\n");
+ break;
+ case WIFI_EVENT_FW_RM_FRAME_RESPONSE:
+ SLSI_INFO(sdev, "Received Radio Measurement Frame (Radio Measurement Rep)\n");
+ break;
}
slsi_kfree_skb(skb);
SLSI_MUTEX_LOCK(ndev_vif->vif_mutex);
- SLSI_INFO(sdev, "Received Association Response\n");
SLSI_NET_DBG1(dev, SLSI_MLME, "mlme_roamed_ind(vif:%d) Roaming to %pM\n",
fapi_get_vif(skb),
mgmt->bssid);
SLSI_NET_DBG1(dev, SLSI_MLME, "mlme_connect_ind(vif:%d, result:0x%04x)\n",
fapi_get_vif(skb), fw_result_code);
- SLSI_INFO(sdev, "Received Association Response\n");
if (!ndev_vif->activated) {
SLSI_NET_DBG1(dev, SLSI_MLME, "VIF not activated\n");
}
sdev->assoc_result_code = fw_result_code;
if (fw_result_code != FAPI_RESULTCODE_SUCCESS) {
- if (fw_result_code == FAPI_RESULTCODE_AUTH_NO_ACK)
+ if (fw_result_code == FAPI_RESULTCODE_AUTH_NO_ACK) {
SLSI_INFO(sdev, "Connect failed,Result code:AUTH_NO_ACK\n");
- else if (fw_result_code == FAPI_RESULTCODE_ASSOC_NO_ACK)
+ } else if (fw_result_code == FAPI_RESULTCODE_ASSOC_NO_ACK) {
SLSI_INFO(sdev, "Connect failed,Result code:ASSOC_NO_ACK\n");
- else
+ } else if (fw_result_code >= 0x8100 && fw_result_code <= 0x81FF) {
+ fw_result_code = fw_result_code & 0x00FF;
+ SLSI_INFO(sdev, "Connect failed(Auth failure), Result code:0x%04x\n", fw_result_code);
+ } else if (fw_result_code >= 0x8200 && fw_result_code <= 0x82FF) {
+ fw_result_code = fw_result_code & 0x00FF;
+ SLSI_INFO(sdev, "Connect failed(Assoc Failure), Result code:0x%04x\n", fw_result_code);
+ } else {
SLSI_INFO(sdev, "Connect failed,Result code:0x%04x\n", fw_result_code);
+ }
#ifdef CONFIG_SCSC_LOG_COLLECTION
/* Trigger log collection if fw result code is not success */
scsc_log_collector_schedule_collection(SCSC_LOG_HOST_WLAN, SCSC_LOG_HOST_WLAN_REASON_CONNECT_ERR);
#endif
status = fw_result_code;
} else {
+ SLSI_INFO(sdev, "Received Association Response\n");
if (!peer || !peer->assoc_ie) {
if (peer)
WARN(!peer->assoc_ie, "proc-started-ind not received before connect-ind");
#endif
if (reason >= 0 && reason <= 0xFF) {
SLSI_INFO(sdev, "Received DEAUTH, reason = %d\n", reason);
- } else if (reason >= 0x8200 && reason <= 0x82FF) {
+ } else if (reason >= 0x8100 && reason <= 0x81FF) {
reason = reason & 0x00FF;
SLSI_INFO(sdev, "Received DEAUTH, reason = %d\n", reason);
+ } else if (reason >= 0x8200 && reason <= 0x82FF) {
+ reason = reason & 0x00FF;
+ SLSI_INFO(sdev, "Received DISASSOC, reason = %d\n", reason);
} else {
SLSI_INFO(sdev, "Received DEAUTH, reason = Local Disconnect <%d>\n", reason);
}
struct netdev_vif *ndev_vif = netdev_priv(dev);
u16 data_unit_descriptor = fapi_get_u16(skb, u.mlme_received_frame_ind.data_unit_descriptor);
u16 frequency = SLSI_FREQ_FW_TO_HOST(fapi_get_u16(skb, u.mlme_received_frame_ind.channel_frequency));
- u8 *eapol = NULL;
u8 *eap = NULL;
u16 protocol = 0;
u32 dhcp_message_type = SLSI_DHCP_MESSAGE_TYPE_INVALID;
+ u16 eap_length = 0;
SLSI_NET_DBG2(dev, SLSI_MLME, "mlme_received_frame_ind(vif:%d, data descriptor:%d, freq:%d)\n",
fapi_get_vif(skb),
dev->last_rx = jiffies;
#endif
/* Storing Data for Logging Information */
- if ((skb->len + sizeof(struct ethhdr)) >= 99)
- eapol = skb->data + sizeof(struct ethhdr);
- if ((skb->len + sizeof(struct ethhdr)) >= 5)
+ if ((skb->len - sizeof(struct ethhdr)) >= 9) {
+ eap_length = (skb->len - sizeof(struct ethhdr)) - 4;
eap = skb->data + sizeof(struct ethhdr);
+ }
if (skb->len >= 285 && slsi_is_dhcp_packet(skb->data) != SLSI_TX_IS_NOT_DHCP)
dhcp_message_type = skb->data[284];
skb->protocol = eth_type_trans(skb, dev);
protocol = ntohs(skb->protocol);
if (protocol == ETH_P_PAE) {
- if (eapol && eapol[SLSI_EAPOL_IEEE8021X_TYPE_POS] == SLSI_IEEE8021X_TYPE_EAPOL_KEY) {
- if ((eapol[SLSI_EAPOL_TYPE_POS] == SLSI_EAPOL_TYPE_RSN_KEY ||
- eapol[SLSI_EAPOL_TYPE_POS] == SLSI_EAPOL_TYPE_WPA_KEY) &&
- (eapol[SLSI_EAPOL_KEY_INFO_LOWER_BYTE_POS] &
- SLSI_EAPOL_KEY_INFO_KEY_TYPE_BIT_IN_LOWER_BYTE) &&
- (eapol[SLSI_EAPOL_KEY_INFO_HIGHER_BYTE_POS] &
- SLSI_EAPOL_KEY_INFO_MIC_BIT_IN_HIGHER_BYTE) &&
- (eapol[SLSI_EAPOL_KEY_DATA_LENGTH_HIGHER_BYTE_POS] == 0) &&
- (eapol[SLSI_EAPOL_KEY_DATA_LENGTH_LOWER_BYTE_POS] == 0)) {
- SLSI_INFO(sdev, "Received 4way-H/S, M4\n");
- } else if (!(eapol[SLSI_EAPOL_KEY_INFO_HIGHER_BYTE_POS] &
- SLSI_EAPOL_KEY_INFO_MIC_BIT_IN_HIGHER_BYTE)) {
- SLSI_INFO(sdev, "Received 4way-H/S, M1\n");
- } else if (eapol[SLSI_EAPOL_KEY_INFO_HIGHER_BYTE_POS] &
- SLSI_EAPOL_KEY_INFO_SECURE_BIT_IN_HIGHER_BYTE) {
- SLSI_INFO(sdev, "Received 4way-H/S, M3\n");
- } else {
- SLSI_INFO(sdev, "Received 4way-H/S, M2\n");
- }
- } else if (eap && eap[SLSI_EAPOL_IEEE8021X_TYPE_POS] == SLSI_IEEE8021X_TYPE_EAP_PACKET) {
+ if (eap && eap[SLSI_EAPOL_IEEE8021X_TYPE_POS] == SLSI_IEEE8021X_TYPE_EAP_PACKET) {
if (eap[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_REQUEST)
- SLSI_INFO(sdev, "Received EAP-Request\n");
+ SLSI_INFO(sdev, "Received EAP-Request (%d)\n", eap_length);
else if (eap[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_RESPONSE)
- SLSI_INFO(sdev, "Received EAP-Response\n");
+ SLSI_INFO(sdev, "Received EAP-Response (%d)\n", eap_length);
else if (eap[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_SUCCESS)
- SLSI_INFO(sdev, "Received EAP-Success\n");
+ SLSI_INFO(sdev, "Received EAP-Success (%d)\n", eap_length);
else if (eap[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_FAILURE)
- SLSI_INFO(sdev, "Received EAP-Failure\n");
+ SLSI_INFO(sdev, "Received EAP-Failure (%d)\n", eap_length);
}
} else if (protocol == ETH_P_IP) {
if (dhcp_message_type == SLSI_DHCP_MESSAGE_TYPE_DISCOVER)
#include <linux/spinlock.h>
+int slsi_is_wps_msg_start_or_m17(u8 *eapol, u16 eap_length)
+{
+ /* Note that Message should not be M8.This check is to identify only WSC_START message or M1-M7 */
+ /*Return 1 If opcode type WSC msg and Msg Type M1-M7 or if opcode is WSC start.*/
+ if (eapol[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_REQUEST ||
+ eapol[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_RESPONSE)
+ if (eapol[SLSI_EAP_TYPE_POS] == SLSI_EAP_TYPE_EXPANDED && eap_length >= SLSI_EAP_OPCODE_POS - 3 &&
+ ((eapol[SLSI_EAP_OPCODE_POS] == SLSI_EAP_OPCODE_WSC_MSG && eap_length >= SLSI_EAP_MSGTYPE_POS - 3 &&
+ eapol[SLSI_EAP_MSGTYPE_POS] != SLSI_EAP_MSGTYPE_M8) ||
+ eapol[SLSI_EAP_OPCODE_POS] == SLSI_EAP_OPCODE_WSC_START))
+ return 1;
+ return 0;
+}
+
static int slsi_tx_eapol(struct slsi_dev *sdev, struct net_device *dev, struct sk_buff *skb)
{
struct netdev_vif *ndev_vif = netdev_priv(dev);
int ret = 0;
u32 dwell_time = sdev->fw_dwell_time;
u64 tx_bytes_tmp = 0;
+ u16 eap_length = 0;
slsi_spinlock_lock(&ndev_vif->peer_lock);
peer = slsi_get_peer_from_mac(sdev, dev, eth_hdr(skb)->h_dest);
* - Key type bit set in key info (pairwise=1, Group=0)
* - Key Data Length would be 0
*/
- if ((skb->len + sizeof(struct ethhdr)) >= 99)
+ if ((skb->len - sizeof(struct ethhdr)) >= 99)
eapol = skb->data + sizeof(struct ethhdr);
if (eapol && eapol[SLSI_EAPOL_IEEE8021X_TYPE_POS] == SLSI_IEEE8021X_TYPE_EAPOL_KEY) {
msg_type = FAPI_MESSAGETYPE_EAPOL_KEY_M123;
(eapol[SLSI_EAPOL_KEY_INFO_HIGHER_BYTE_POS] & SLSI_EAPOL_KEY_INFO_MIC_BIT_IN_HIGHER_BYTE) &&
(eapol[SLSI_EAPOL_KEY_DATA_LENGTH_HIGHER_BYTE_POS] == 0) &&
(eapol[SLSI_EAPOL_KEY_DATA_LENGTH_LOWER_BYTE_POS] == 0)) {
- SLSI_INFO(sdev, "Send 4way-H/S, M4\n");
msg_type = FAPI_MESSAGETYPE_EAPOL_KEY_M4;
dwell_time = 0;
- } else if (msg_type == FAPI_MESSAGETYPE_EAPOL_KEY_M123) {
- if (!(eapol[SLSI_EAPOL_KEY_INFO_HIGHER_BYTE_POS] &
- SLSI_EAPOL_KEY_INFO_MIC_BIT_IN_HIGHER_BYTE))
- SLSI_INFO(sdev, "Send 4way-H/S, M1\n");
- else if (eapol[SLSI_EAPOL_KEY_INFO_HIGHER_BYTE_POS] &
- SLSI_EAPOL_KEY_INFO_SECURE_BIT_IN_HIGHER_BYTE)
- SLSI_INFO(sdev, "Send 4way-H/S, M3\n");
- else
- SLSI_INFO(sdev, "Send 4way-H/S, M2\n");
}
} else {
msg_type = FAPI_MESSAGETYPE_EAP_MESSAGE;
- if ((skb->len - sizeof(struct ethhdr)) >= 5)
+ if ((skb->len - sizeof(struct ethhdr)) >= 9)
eapol = skb->data + sizeof(struct ethhdr);
dwell_time = 0;
if (eapol && eapol[SLSI_EAPOL_IEEE8021X_TYPE_POS] == SLSI_IEEE8021X_TYPE_EAP_PACKET) {
+ eap_length = (skb->len - sizeof(struct ethhdr)) - 4;
if (eapol[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_REQUEST)
- SLSI_INFO(sdev, "Send EAP-Request\n");
+ SLSI_INFO(sdev, "Send EAP-Request (%d)\n", eap_length);
else if (eapol[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_RESPONSE)
- SLSI_INFO(sdev, "Send EAP-Response\n");
+ SLSI_INFO(sdev, "Send EAP-Response (%d)\n", eap_length);
else if (eapol[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_SUCCESS)
- SLSI_INFO(sdev, "Send EAP-Success\n");
+ SLSI_INFO(sdev, "Send EAP-Success (%d)\n", eap_length);
else if (eapol[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_FAILURE)
- SLSI_INFO(sdev, "Send EAP-Failure\n");
+ SLSI_INFO(sdev, "Send EAP-Failure (%d)\n", eap_length);
/*Identify WPS_START & M1-M7 and set dwell time to 100ms */
- if (eapol[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_REQUEST ||
- eapol[SLSI_EAP_CODE_POS] == SLSI_EAP_PACKET_RESPONSE)
- if (eapol[SLSI_EAP_TYPE_POS] == SLSI_EAP_TYPE_EXPANDED &&
- ((eapol[SLSI_EAP_OPCODE_POS] == SLSI_EAP_OPCODE_WSC_MSG &&
- eapol[SLSI_EAP_MSGTYPE_POS] != SLSI_EAP_MSGTYPE_M8) ||
- eapol[SLSI_EAP_OPCODE_POS] == SLSI_EAP_OPCODE_WSC_START))
- dwell_time = SLSI_EAP_WPS_DWELL_TIME;
+ if (slsi_is_wps_msg_start_or_m17(eapol, eap_length))
+ dwell_time = SLSI_EAP_WPS_DWELL_TIME;
}
}
break;