All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] staging: r8188eu: start cleaning up OnAction_back
@ 2022-05-08 16:14 Martin Kaiser
  2022-05-08 16:14 ` [PATCH 1/5] staging: r8188eu: read addr2 from ieee80211_mgmt Martin Kaiser
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Martin Kaiser @ 2022-05-08 16:14 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging,
	linux-kernel, Martin Kaiser

Add a struct ieee80211_mgmt variable to OnAction_back, simplify the
parsing of the received management frame.

Martin Kaiser (5):
  staging: r8188eu: read addr2 from ieee80211_mgmt
  staging: r8188eu: don't check the category in OnAction_back
  staging: r8188eu: read destination address from ieee80211_mgmt
  staging: r8188eu: use back action codes from ieee80211.h
  staging: r8188eu: read back action code from ieee80211_mgmt

 drivers/staging/r8188eu/core/rtw_mlme_ext.c | 84 ++++++++++-----------
 1 file changed, 40 insertions(+), 44 deletions(-)

-- 
2.30.2


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/5] staging: r8188eu: read addr2 from ieee80211_mgmt
  2022-05-08 16:14 [PATCH 0/5] staging: r8188eu: start cleaning up OnAction_back Martin Kaiser
@ 2022-05-08 16:14 ` Martin Kaiser
  2022-05-08 16:14 ` [PATCH 2/5] staging: r8188eu: don't check the category in OnAction_back Martin Kaiser
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Martin Kaiser @ 2022-05-08 16:14 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging,
	linux-kernel, Martin Kaiser

Define a struct ieee80211_mgmt variable in the OnAction_back function. Use
it to read addr2. For management frames, addr2 is the source address (sa).

Signed-off-by: Martin Kaiser <martin@kaiser.cx>
---
 drivers/staging/r8188eu/core/rtw_mlme_ext.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/r8188eu/core/rtw_mlme_ext.c b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
index 848b5051aa13..2f67e3c08191 100644
--- a/drivers/staging/r8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
@@ -1467,7 +1467,7 @@ unsigned int OnDisassoc(struct adapter *padapter, struct recv_frame *precv_frame
 
 unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_frame)
 {
-	u8 *addr;
+	struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)precv_frame->rx_data;
 	struct sta_info *psta = NULL;
 	struct recv_reorder_ctrl *preorder_ctrl;
 	unsigned char		*frame_body;
@@ -1485,8 +1485,7 @@ unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_fr
 		if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS))
 			return _SUCCESS;
 
-	addr = GetAddr2Ptr(pframe);
-	psta = rtw_get_stainfo(pstapriv, addr);
+	psta = rtw_get_stainfo(pstapriv, mgmt->sa);
 
 	if (!psta)
 		return _SUCCESS;
@@ -1501,12 +1500,12 @@ unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_fr
 		switch (action) {
 		case RTW_WLAN_ACTION_ADDBA_REQ: /* ADDBA request */
 			memcpy(&pmlmeinfo->ADDBA_req, &frame_body[2], sizeof(struct ADDBA_request));
-			process_addba_req(padapter, (u8 *)&pmlmeinfo->ADDBA_req, addr);
+			process_addba_req(padapter, (u8 *)&pmlmeinfo->ADDBA_req, mgmt->sa);
 
 			if (pmlmeinfo->bAcceptAddbaReq)
-				issue_action_BA(padapter, addr, RTW_WLAN_ACTION_ADDBA_RESP, 0);
+				issue_action_BA(padapter, mgmt->sa, RTW_WLAN_ACTION_ADDBA_RESP, 0);
 			else
-				issue_action_BA(padapter, addr, RTW_WLAN_ACTION_ADDBA_RESP, 37);/* reject ADDBA Req */
+				issue_action_BA(padapter, mgmt->sa, RTW_WLAN_ACTION_ADDBA_RESP, 37);/* reject ADDBA Req */
 			break;
 		case RTW_WLAN_ACTION_ADDBA_RESP: /* ADDBA response */
 			status = get_unaligned_le16(&frame_body[3]);
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/5] staging: r8188eu: don't check the category in OnAction_back
  2022-05-08 16:14 [PATCH 0/5] staging: r8188eu: start cleaning up OnAction_back Martin Kaiser
  2022-05-08 16:14 ` [PATCH 1/5] staging: r8188eu: read addr2 from ieee80211_mgmt Martin Kaiser
@ 2022-05-08 16:14 ` Martin Kaiser
  2022-05-08 16:14 ` [PATCH 3/5] staging: r8188eu: read destination address from ieee80211_mgmt Martin Kaiser
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Martin Kaiser @ 2022-05-08 16:14 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging,
	linux-kernel, Martin Kaiser

Do not check the category in OnAction_back. OnAction has already checked
the category before calling OnAction_back.

Signed-off-by: Martin Kaiser <martin@kaiser.cx>
---
 drivers/staging/r8188eu/core/rtw_mlme_ext.c | 76 ++++++++++-----------
 1 file changed, 37 insertions(+), 39 deletions(-)

diff --git a/drivers/staging/r8188eu/core/rtw_mlme_ext.c b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
index 2f67e3c08191..1543ba17c559 100644
--- a/drivers/staging/r8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
@@ -1471,7 +1471,7 @@ unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_fr
 	struct sta_info *psta = NULL;
 	struct recv_reorder_ctrl *preorder_ctrl;
 	unsigned char		*frame_body;
-	unsigned char		category, action;
+	unsigned char		action;
 	unsigned short	tid, status;
 	struct mlme_ext_priv	*pmlmeext = &padapter->mlmeextpriv;
 	struct mlme_ext_info	*pmlmeinfo = &pmlmeext->mlmext_info;
@@ -1492,47 +1492,45 @@ unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_fr
 
 	frame_body = (unsigned char *)(pframe + sizeof(struct ieee80211_hdr_3addr));
 
-	category = frame_body[0];
-	if (category == WLAN_CATEGORY_BACK) { /*  representing Block Ack */
-		if (!pmlmeinfo->HT_enable)
-			return _SUCCESS;
-		action = frame_body[1];
-		switch (action) {
-		case RTW_WLAN_ACTION_ADDBA_REQ: /* ADDBA request */
-			memcpy(&pmlmeinfo->ADDBA_req, &frame_body[2], sizeof(struct ADDBA_request));
-			process_addba_req(padapter, (u8 *)&pmlmeinfo->ADDBA_req, mgmt->sa);
+	if (!pmlmeinfo->HT_enable)
+		return _SUCCESS;
+	action = frame_body[1];
+	switch (action) {
+	case RTW_WLAN_ACTION_ADDBA_REQ: /* ADDBA request */
+		memcpy(&pmlmeinfo->ADDBA_req, &frame_body[2], sizeof(struct ADDBA_request));
+		process_addba_req(padapter, (u8 *)&pmlmeinfo->ADDBA_req, mgmt->sa);
 
-			if (pmlmeinfo->bAcceptAddbaReq)
-				issue_action_BA(padapter, mgmt->sa, RTW_WLAN_ACTION_ADDBA_RESP, 0);
-			else
-				issue_action_BA(padapter, mgmt->sa, RTW_WLAN_ACTION_ADDBA_RESP, 37);/* reject ADDBA Req */
-			break;
-		case RTW_WLAN_ACTION_ADDBA_RESP: /* ADDBA response */
-			status = get_unaligned_le16(&frame_body[3]);
-			tid = ((frame_body[5] >> 2) & 0x7);
-			if (status == 0) {	/* successful */
-				psta->htpriv.agg_enable_bitmap |= 1 << tid;
-				psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
-			} else {
-				psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
-			}
-			break;
-		case RTW_WLAN_ACTION_DELBA: /* DELBA */
-			if ((frame_body[3] & BIT(3)) == 0) {
-				psta->htpriv.agg_enable_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf));
-				psta->htpriv.candidate_tid_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf));
-			} else if ((frame_body[3] & BIT(3)) == BIT(3)) {
-				tid = (frame_body[3] >> 4) & 0x0F;
-				preorder_ctrl =  &psta->recvreorder_ctrl[tid];
-				preorder_ctrl->enable = false;
-				preorder_ctrl->indicate_seq = 0xffff;
-			}
-			/* todo: how to notify the host while receiving DELETE BA */
-			break;
-		default:
-			break;
+		if (pmlmeinfo->bAcceptAddbaReq)
+			issue_action_BA(padapter, mgmt->sa, RTW_WLAN_ACTION_ADDBA_RESP, 0);
+		else
+			issue_action_BA(padapter, mgmt->sa, RTW_WLAN_ACTION_ADDBA_RESP, 37);/* reject ADDBA Req */
+		break;
+	case RTW_WLAN_ACTION_ADDBA_RESP: /* ADDBA response */
+		status = get_unaligned_le16(&frame_body[3]);
+		tid = ((frame_body[5] >> 2) & 0x7);
+		if (status == 0) {	/* successful */
+			psta->htpriv.agg_enable_bitmap |= 1 << tid;
+			psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
+		} else {
+			psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
 		}
+		break;
+	case RTW_WLAN_ACTION_DELBA: /* DELBA */
+		if ((frame_body[3] & BIT(3)) == 0) {
+			psta->htpriv.agg_enable_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf));
+			psta->htpriv.candidate_tid_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf));
+		} else if ((frame_body[3] & BIT(3)) == BIT(3)) {
+			tid = (frame_body[3] >> 4) & 0x0F;
+			preorder_ctrl =  &psta->recvreorder_ctrl[tid];
+			preorder_ctrl->enable = false;
+			preorder_ctrl->indicate_seq = 0xffff;
+		}
+		/* todo: how to notify the host while receiving DELETE BA */
+		break;
+	default:
+		break;
 	}
+
 	return _SUCCESS;
 }
 
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/5] staging: r8188eu: read destination address from ieee80211_mgmt
  2022-05-08 16:14 [PATCH 0/5] staging: r8188eu: start cleaning up OnAction_back Martin Kaiser
  2022-05-08 16:14 ` [PATCH 1/5] staging: r8188eu: read addr2 from ieee80211_mgmt Martin Kaiser
  2022-05-08 16:14 ` [PATCH 2/5] staging: r8188eu: don't check the category in OnAction_back Martin Kaiser
@ 2022-05-08 16:14 ` Martin Kaiser
  2022-05-08 16:14 ` [PATCH 4/5] staging: r8188eu: use back action codes from ieee80211.h Martin Kaiser
  2022-05-08 16:14 ` [PATCH 5/5] staging: r8188eu: read back action code from ieee80211_mgmt Martin Kaiser
  4 siblings, 0 replies; 6+ messages in thread
From: Martin Kaiser @ 2022-05-08 16:14 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging,
	linux-kernel, Martin Kaiser

For management frames, addr1 is the destination address (da). Read this
address from struct ieee80211_mgmt instead of calling a driver-specific
macro.

Signed-off-by: Martin Kaiser <martin@kaiser.cx>
---
 drivers/staging/r8188eu/core/rtw_mlme_ext.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/r8188eu/core/rtw_mlme_ext.c b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
index 1543ba17c559..1061732b9a25 100644
--- a/drivers/staging/r8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
@@ -1478,7 +1478,7 @@ unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_fr
 	u8 *pframe = precv_frame->rx_data;
 	struct sta_priv *pstapriv = &padapter->stapriv;
 	/* check RA matches or not */
-	if (memcmp(myid(&padapter->eeprompriv), GetAddr1Ptr(pframe), ETH_ALEN))/* for if1, sta/ap mode */
+	if (memcmp(myid(&padapter->eeprompriv), mgmt->da, ETH_ALEN))/* for if1, sta/ap mode */
 		return _SUCCESS;
 
 	if ((pmlmeinfo->state & 0x03) != WIFI_FW_AP_STATE)
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 4/5] staging: r8188eu: use back action codes from ieee80211.h
  2022-05-08 16:14 [PATCH 0/5] staging: r8188eu: start cleaning up OnAction_back Martin Kaiser
                   ` (2 preceding siblings ...)
  2022-05-08 16:14 ` [PATCH 3/5] staging: r8188eu: read destination address from ieee80211_mgmt Martin Kaiser
@ 2022-05-08 16:14 ` Martin Kaiser
  2022-05-08 16:14 ` [PATCH 5/5] staging: r8188eu: read back action code from ieee80211_mgmt Martin Kaiser
  4 siblings, 0 replies; 6+ messages in thread
From: Martin Kaiser @ 2022-05-08 16:14 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging,
	linux-kernel, Martin Kaiser

Use the defines from ieee80211.h for the back action codes.

Signed-off-by: Martin Kaiser <martin@kaiser.cx>
---
 drivers/staging/r8188eu/core/rtw_mlme_ext.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/r8188eu/core/rtw_mlme_ext.c b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
index 1061732b9a25..2a7b85aefa56 100644
--- a/drivers/staging/r8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
@@ -1496,16 +1496,16 @@ unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_fr
 		return _SUCCESS;
 	action = frame_body[1];
 	switch (action) {
-	case RTW_WLAN_ACTION_ADDBA_REQ: /* ADDBA request */
+	case WLAN_ACTION_ADDBA_REQ:
 		memcpy(&pmlmeinfo->ADDBA_req, &frame_body[2], sizeof(struct ADDBA_request));
 		process_addba_req(padapter, (u8 *)&pmlmeinfo->ADDBA_req, mgmt->sa);
 
 		if (pmlmeinfo->bAcceptAddbaReq)
-			issue_action_BA(padapter, mgmt->sa, RTW_WLAN_ACTION_ADDBA_RESP, 0);
+			issue_action_BA(padapter, mgmt->sa, WLAN_ACTION_ADDBA_RESP, 0);
 		else
-			issue_action_BA(padapter, mgmt->sa, RTW_WLAN_ACTION_ADDBA_RESP, 37);/* reject ADDBA Req */
+			issue_action_BA(padapter, mgmt->sa, WLAN_ACTION_ADDBA_RESP, 37);/* reject ADDBA Req */
 		break;
-	case RTW_WLAN_ACTION_ADDBA_RESP: /* ADDBA response */
+	case WLAN_ACTION_ADDBA_RESP:
 		status = get_unaligned_le16(&frame_body[3]);
 		tid = ((frame_body[5] >> 2) & 0x7);
 		if (status == 0) {	/* successful */
@@ -1515,7 +1515,7 @@ unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_fr
 			psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
 		}
 		break;
-	case RTW_WLAN_ACTION_DELBA: /* DELBA */
+	case WLAN_ACTION_DELBA:
 		if ((frame_body[3] & BIT(3)) == 0) {
 			psta->htpriv.agg_enable_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf));
 			psta->htpriv.candidate_tid_bitmap &= ~(1 << ((frame_body[3] >> 4) & 0xf));
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 5/5] staging: r8188eu: read back action code from ieee80211_mgmt
  2022-05-08 16:14 [PATCH 0/5] staging: r8188eu: start cleaning up OnAction_back Martin Kaiser
                   ` (3 preceding siblings ...)
  2022-05-08 16:14 ` [PATCH 4/5] staging: r8188eu: use back action codes from ieee80211.h Martin Kaiser
@ 2022-05-08 16:14 ` Martin Kaiser
  4 siblings, 0 replies; 6+ messages in thread
From: Martin Kaiser @ 2022-05-08 16:14 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging,
	linux-kernel, Martin Kaiser

Read the back action code from struct ieee80211_mgmt.

struct ieee80211_mgmt contains an "action" union. Each of its members
starts with an 8-bit action code. Treat the union as addba_req when we
read the action code although we do not yet know if it is an addba_req.
This approach is similar to ieee80211_iface_process_skb.

Signed-off-by: Martin Kaiser <martin@kaiser.cx>
---
 drivers/staging/r8188eu/core/rtw_mlme_ext.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/r8188eu/core/rtw_mlme_ext.c b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
index 2a7b85aefa56..8a9236ba7c66 100644
--- a/drivers/staging/r8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
@@ -1471,7 +1471,6 @@ unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_fr
 	struct sta_info *psta = NULL;
 	struct recv_reorder_ctrl *preorder_ctrl;
 	unsigned char		*frame_body;
-	unsigned char		action;
 	unsigned short	tid, status;
 	struct mlme_ext_priv	*pmlmeext = &padapter->mlmeextpriv;
 	struct mlme_ext_info	*pmlmeinfo = &pmlmeext->mlmext_info;
@@ -1494,8 +1493,8 @@ unsigned int OnAction_back(struct adapter *padapter, struct recv_frame *precv_fr
 
 	if (!pmlmeinfo->HT_enable)
 		return _SUCCESS;
-	action = frame_body[1];
-	switch (action) {
+	/* All union members start with an action code, it's ok to use addba_req. */
+	switch (mgmt->u.action.u.addba_req.action_code) {
 	case WLAN_ACTION_ADDBA_REQ:
 		memcpy(&pmlmeinfo->ADDBA_req, &frame_body[2], sizeof(struct ADDBA_request));
 		process_addba_req(padapter, (u8 *)&pmlmeinfo->ADDBA_req, mgmt->sa);
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-05-08 16:15 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-08 16:14 [PATCH 0/5] staging: r8188eu: start cleaning up OnAction_back Martin Kaiser
2022-05-08 16:14 ` [PATCH 1/5] staging: r8188eu: read addr2 from ieee80211_mgmt Martin Kaiser
2022-05-08 16:14 ` [PATCH 2/5] staging: r8188eu: don't check the category in OnAction_back Martin Kaiser
2022-05-08 16:14 ` [PATCH 3/5] staging: r8188eu: read destination address from ieee80211_mgmt Martin Kaiser
2022-05-08 16:14 ` [PATCH 4/5] staging: r8188eu: use back action codes from ieee80211.h Martin Kaiser
2022-05-08 16:14 ` [PATCH 5/5] staging: r8188eu: read back action code from ieee80211_mgmt Martin Kaiser

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.