Эх сурвалжийг харах

qcacmn: Log additional EAPOL packets

Add changes to log additional EAPOL packet types.

Change-Id: I02f1de89f7e0fcf68cea20208df1ed153126852d
CRs-Fixed: 3370979
Amit Mehta 2 жил өмнө
parent
commit
7e50aa48ab

+ 1 - 0
qdf/inc/qdf_nbuf.h

@@ -110,6 +110,7 @@
 #define EAPOL_PACKET_TYPE_START                 1
 #define EAPOL_PACKET_TYPE_LOGOFF                2
 #define EAPOL_PACKET_TYPE_KEY                   3
+#define EAPOL_PACKET_TYPE_ASF			4
 
 #define EAPOL_KEY_TYPE_MASK			0x0800
 #define EAPOL_KEY_ENCRYPTED_MASK		0x0010

+ 19 - 1
qdf/inc/qdf_types.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2014-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -1016,6 +1016,15 @@ struct qdf_mac_addr {
  * @QDF_ROAM_EVENTID: roam eventid from fw
  * @QDF_PROTO_DNS_QUERY: dns query
  * @QDF_PROTO_DNS_RES: dns response
+ * QDF_PROTO_EAP_REQUEST: EAP Request
+ * QDF_PROTO_EAP_RESPONSE: EAP Response
+ * QDF_PROTO_EAP_SUCCESS: EAP Success
+ * QDF_PROTO_EAP_FAILURE: EAP Filure
+ * QDF_PROTO_EAP_INITIATE: EAP Initiate
+ * QDF_PROTO_EAP_FINISH: EAP Finish
+ * QDF_PROTO_EAPOL_START: EAPOL-Start message
+ * QDF_PROTO_EAPOL_LOGOFF: EAPOL Log Off message.
+ * QDF_PROTO_EAPOL_ASF: ASF Alert message
  * @QDF_PROTO_SUBTYPE_MAX: subtype max
  */
 enum qdf_proto_subtype {
@@ -1055,6 +1064,15 @@ enum qdf_proto_subtype {
 	QDF_ROAM_EVENTID,
 	QDF_PROTO_DNS_QUERY,
 	QDF_PROTO_DNS_RES,
+	QDF_PROTO_EAP_REQUEST,
+	QDF_PROTO_EAP_RESPONSE,
+	QDF_PROTO_EAP_SUCCESS,
+	QDF_PROTO_EAP_FAILURE,
+	QDF_PROTO_EAP_INITIATE,
+	QDF_PROTO_EAP_FINISH,
+	QDF_PROTO_EAPOL_START,
+	QDF_PROTO_EAPOL_LOGOFF,
+	QDF_PROTO_EAPOL_ASF,
 	QDF_PROTO_SUBTYPE_MAX
 };
 

+ 61 - 5
qdf/linux/src/qdf_nbuf.c

@@ -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 */
 
 /**
- * __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
  *
- * This func. returns the subtype of EAPOL packet.
- *
  * 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:
  *
@@ -1531,8 +1529,8 @@ __qdf_nbuf_data_get_dhcp_subtype(uint8_t *data)
  *
  * 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;
 	enum qdf_proto_subtype subtype;
@@ -1561,6 +1559,64 @@ __qdf_nbuf_data_get_eapol_subtype(uint8_t *data)
 	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);
 
 /**

+ 47 - 1
qdf/linux/src/qdf_trace.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2014-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -1237,6 +1237,24 @@ static const char *qdf_dp_subtype_to_str(enum qdf_proto_subtype subtype)
 		return "ROAM COMP";
 	case QDF_ROAM_EVENTID:
 		return "ROAM EVENTID";
+	case QDF_PROTO_EAP_REQUEST:
+		return "EAP REQ";
+	case QDF_PROTO_EAP_RESPONSE:
+		return "EAP RSP";
+	case QDF_PROTO_EAP_SUCCESS:
+		return "EAP SUC";
+	case QDF_PROTO_EAP_FAILURE:
+		return "EAP FAIL";
+	case QDF_PROTO_EAP_INITIATE:
+		return "EAP INIT";
+	case QDF_PROTO_EAP_FINISH:
+		return "EAP FINISH";
+	case QDF_PROTO_EAPOL_START:
+		return "START";
+	case QDF_PROTO_EAPOL_LOGOFF:
+		return "LOGOFF";
+	case QDF_PROTO_EAPOL_ASF:
+		return "ASF";
 	default:
 		return "invalid";
 	}
@@ -1519,6 +1537,24 @@ uint8_t *qdf_get_pkt_type_string(uint8_t type, uint8_t subtype)
 		return "DNS_Q";
 	case QDF_PROTO_DNS_RES:
 		return "DNS_RS";
+	case QDF_PROTO_EAP_REQUEST:
+		return "EAP_REQ";
+	case QDF_PROTO_EAP_RESPONSE:
+		return "EAP-RSP";
+	case QDF_PROTO_EAP_SUCCESS:
+		return "EAP-SUCCESS";
+	case QDF_PROTO_EAP_FAILURE:
+		return "EAP-FAIL";
+	case QDF_PROTO_EAP_INITIATE:
+		return "EAP-INIT";
+	case QDF_PROTO_EAP_FINISH:
+		return "EAP-FINISH";
+	case QDF_PROTO_EAPOL_START:
+		return "EAPOL-START";
+	case QDF_PROTO_EAPOL_LOGOFF:
+		return "EAPOL-LOGOFF";
+	case QDF_PROTO_EAPOL_ASF:
+		return "EAPOL-ASF";
 	default:
 		switch (type) {
 		case QDF_PROTO_TYPE_EAPOL:
@@ -1775,6 +1811,16 @@ static int qdf_subtype_to_wlan_main_tag(enum qdf_proto_subtype subtype)
 		return WLAN_CONN_DIAG_EAPOL_M3_EVENT;
 	case QDF_PROTO_EAPOL_M4:
 		return WLAN_CONN_DIAG_EAPOL_M4_EVENT;
+	case QDF_PROTO_EAP_REQUEST:
+		return WLAN_CONN_DIAG_EAP_REQ_EVENT;
+	case QDF_PROTO_EAP_RESPONSE:
+		return WLAN_CONN_DIAG_EAP_RESP_EVENT;
+	case QDF_PROTO_EAP_SUCCESS:
+		return WLAN_CONN_DIAG_EAP_SUCC_EVENT;
+	case QDF_PROTO_EAP_FAILURE:
+		return WLAN_CONN_DIAG_EAP_FAIL_EVENT;
+	case QDF_PROTO_EAPOL_START:
+		return WLAN_CONN_DIAG_EAP_START_EVENT;
 	default:
 		return WLAN_CONN_DIAG_MAX;
 	}