/*----------------------------------------------------------------------------*/ VOID authAddIEChallengeText(IN P_ADAPTER_T prAdapter, IN OUT P_MSDU_INFO_T prMsduInfo) { P_WLAN_AUTH_FRAME_T prAuthFrame; P_STA_RECORD_T prStaRec; UINT_16 u2TransactionSeqNum; ASSERT(prMsduInfo); prStaRec = cnmGetStaRecByIndex(prAdapter, prMsduInfo->ucStaRecIndex); if (!prStaRec) return; ASSERT(prStaRec); /* For Management, frame header and payload are in a continuous buffer */ prAuthFrame = (P_WLAN_AUTH_FRAME_T) prMsduInfo->prPacket; WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TransactionSeqNum) /* Only consider SEQ_3 for Challenge Text */ if ((u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_3) && (prStaRec->ucAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY) && (prStaRec->prChallengeText != NULL)) { COPY_IE(((ULONG) (prMsduInfo->prPacket) + prMsduInfo->u2FrameLength), (prStaRec->prChallengeText)); prMsduInfo->u2FrameLength += IE_SIZE(prStaRec->prChallengeText); } return; } /* end of authAddIEChallengeText() */
/*----------------------------------------------------------------------------*/ VOID authHandleIEChallengeText ( P_ADAPTER_T prAdapter, P_SW_RFB_T prSwRfb, P_IE_HDR_T prIEHdr ) { P_WLAN_AUTH_FRAME_T prAuthFrame; P_STA_RECORD_T prStaRec; UINT_16 u2TransactionSeqNum; ASSERT(prSwRfb); ASSERT(prIEHdr); prStaRec = cnmGetStaRecByIndex(prAdapter, prSwRfb->ucStaRecIdx); ASSERT(prStaRec); if(!prStaRec) { return; } /* For Management, frame header and payload are in a continuous buffer */ prAuthFrame = (P_WLAN_AUTH_FRAME_T)prSwRfb->pvHeader; //WLAN_GET_FIELD_16(&prAuthFrame->u2AuthTransSeqNo, &u2TransactionSeqNum) u2TransactionSeqNum = prAuthFrame->u2AuthTransSeqNo; // NOTE(Kevin): Optimized for ARM /* Only consider SEQ_2 for Challenge Text */ if ((u2TransactionSeqNum == AUTH_TRANSACTION_SEQ_2) && (prStaRec->ucAuthAlgNum == AUTH_ALGORITHM_NUM_SHARED_KEY)) { /* Free previous allocated TCM memory */ if (prStaRec->prChallengeText) { ASSERT(0); cnmMemFree(prAdapter, prStaRec->prChallengeText); prStaRec->prChallengeText = (P_IE_CHALLENGE_TEXT_T)NULL; } if ( ( prStaRec->prChallengeText = cnmMemAlloc(prAdapter, RAM_TYPE_MSG, IE_SIZE(prIEHdr)) ) == NULL) { return; } /* Save the Challenge Text from Auth Seq 2 Frame, before sending Auth Seq 3 Frame */ COPY_IE(prStaRec->prChallengeText, prIEHdr); } return; } /* end of authAddIEChallengeText() */