|
@@ -1512,11 +1512,9 @@ __qdf_nbuf_data_get_dhcp_subtype(uint8_t *data)
|
|
#define EAPOL_WPA_KEY_INFO_ENCR_KEY_DATA BIT(12) /* IEEE 802.11i/RSN only */
|
|
#define EAPOL_WPA_KEY_INFO_ENCR_KEY_DATA BIT(12) /* IEEE 802.11i/RSN only */
|
|
|
|
|
|
/**
|
|
/**
|
|
- * __qdf_nbuf_data_get_eapol_subtype() - get the subtype of EAPOL packet.
|
|
|
|
|
|
+ * __qdf_nbuf_data_get_eapol_key() - Get EAPOL key
|
|
* @data: Pointer to EAPOL packet data buffer
|
|
* @data: Pointer to EAPOL packet data buffer
|
|
*
|
|
*
|
|
- * This func. returns the subtype of EAPOL packet.
|
|
|
|
- *
|
|
|
|
* We can distinguish M1/M3 from M2/M4 by the ack bit in the keyinfo field
|
|
* We can distinguish M1/M3 from M2/M4 by the ack bit in the keyinfo field
|
|
* The ralationship between the ack bit and EAPOL type is as follows:
|
|
* The ralationship between the ack bit and EAPOL type is as follows:
|
|
*
|
|
*
|
|
@@ -1531,8 +1529,8 @@ __qdf_nbuf_data_get_dhcp_subtype(uint8_t *data)
|
|
*
|
|
*
|
|
* Return: subtype of the EAPOL packet.
|
|
* Return: subtype of the EAPOL packet.
|
|
*/
|
|
*/
|
|
-enum qdf_proto_subtype
|
|
|
|
-__qdf_nbuf_data_get_eapol_subtype(uint8_t *data)
|
|
|
|
|
|
+static inline enum qdf_proto_subtype
|
|
|
|
+__qdf_nbuf_data_get_eapol_key(uint8_t *data)
|
|
{
|
|
{
|
|
uint16_t key_info, key_data_length;
|
|
uint16_t key_info, key_data_length;
|
|
enum qdf_proto_subtype subtype;
|
|
enum qdf_proto_subtype subtype;
|
|
@@ -1561,6 +1559,64 @@ __qdf_nbuf_data_get_eapol_subtype(uint8_t *data)
|
|
return subtype;
|
|
return subtype;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * __qdf_nbuf_data_get_eap_code() - Get EAPOL code
|
|
|
|
+ * @data: Pointer to EAPOL packet data buffer
|
|
|
|
+ *
|
|
|
|
+ * Return: subtype of the EAPOL packet.
|
|
|
|
+ */
|
|
|
|
+static inline enum qdf_proto_subtype
|
|
|
|
+__qdf_nbuf_data_get_eap_code(uint8_t *data)
|
|
|
|
+{
|
|
|
|
+ uint8_t code = *(data + EAP_CODE_OFFSET);
|
|
|
|
+
|
|
|
|
+ switch (code) {
|
|
|
|
+ case QDF_EAP_REQUEST:
|
|
|
|
+ return QDF_PROTO_EAP_REQUEST;
|
|
|
|
+ case QDF_EAP_RESPONSE:
|
|
|
|
+ return QDF_PROTO_EAP_RESPONSE;
|
|
|
|
+ case QDF_EAP_SUCCESS:
|
|
|
|
+ return QDF_PROTO_EAP_SUCCESS;
|
|
|
|
+ case QDF_EAP_FAILURE:
|
|
|
|
+ return QDF_PROTO_EAP_FAILURE;
|
|
|
|
+ case QDF_EAP_INITIATE:
|
|
|
|
+ return QDF_PROTO_EAP_INITIATE;
|
|
|
|
+ case QDF_EAP_FINISH:
|
|
|
|
+ return QDF_PROTO_EAP_FINISH;
|
|
|
|
+ default:
|
|
|
|
+ return QDF_PROTO_INVALID;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * __qdf_nbuf_data_get_eapol_subtype() - get the subtype of EAPOL packet.
|
|
|
|
+ * @data: Pointer to EAPOL packet data buffer
|
|
|
|
+ *
|
|
|
|
+ * This func. returns the subtype of EAPOL packet.
|
|
|
|
+ *
|
|
|
|
+ * Return: subtype of the EAPOL packet.
|
|
|
|
+ */
|
|
|
|
+enum qdf_proto_subtype
|
|
|
|
+__qdf_nbuf_data_get_eapol_subtype(uint8_t *data)
|
|
|
|
+{
|
|
|
|
+ uint8_t pkt_type = *(data + EAPOL_PACKET_TYPE_OFFSET);
|
|
|
|
+
|
|
|
|
+ switch (pkt_type) {
|
|
|
|
+ case EAPOL_PACKET_TYPE_EAP:
|
|
|
|
+ return __qdf_nbuf_data_get_eap_code(data);
|
|
|
|
+ case EAPOL_PACKET_TYPE_START:
|
|
|
|
+ return QDF_PROTO_EAPOL_START;
|
|
|
|
+ case EAPOL_PACKET_TYPE_LOGOFF:
|
|
|
|
+ return QDF_PROTO_EAPOL_LOGOFF;
|
|
|
|
+ case EAPOL_PACKET_TYPE_KEY:
|
|
|
|
+ return __qdf_nbuf_data_get_eapol_key(data);
|
|
|
|
+ case EAPOL_PACKET_TYPE_ASF:
|
|
|
|
+ return QDF_PROTO_EAPOL_ASF;
|
|
|
|
+ default:
|
|
|
|
+ return QDF_PROTO_INVALID;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
qdf_export_symbol(__qdf_nbuf_data_get_eapol_subtype);
|
|
qdf_export_symbol(__qdf_nbuf_data_get_eapol_subtype);
|
|
|
|
|
|
/**
|
|
/**
|