1 #ifndef __ZDAUTHREQ_C__
2 #define __ZDAUTHREQ_C__
6 U8 AuthReqState
= STE_AUTH_REQ_IDLE
;
7 static MacAddr_t AuSta
;
10 BOOLEAN
DeauthReq(Signal_t
*signal
)
14 ReasonCode Rsn
= RC_UNSPEC_REASON
;
19 memcpy((U8
*)&Sta
, (U8
*)&signal
->frmInfo
.Sta
, 6);
20 Rsn
= signal
->frmInfo
.rCode
;
21 pdot11Obj
->StatusNotify(STA_DEAUTHED
, (u8
*)&Sta
);
23 vapId
= signal
->vapId
;
24 UpdateStaStatus(&Sta
, STATION_STATE_NOT_AUTH
, vapId
);
26 pfrmDesc
= allocFdesc();
28 sigEnque(pMgtQ
, (signal
));
32 mkDisAssoc_DeAuthFrm(pfrmDesc
, ST_DEAUTH
, &Sta
, Rsn
, vapId
);
33 sendMgtFrame(signal
, pfrmDesc
);
39 BOOLEAN
AuthReq(Signal_t
*signal
)
43 U16 auSC
= SC_SUCCESSFUL
;
47 pfrmDesc
= allocFdesc();
49 FPRINT("allocFdesc failed");
50 sigEnque(pMgtQ
, (signal
));
54 memcpy((U8
*)&AuSta
, (U8
*)&signal
->frmInfo
.Sta
, 6);
55 //memcpy((U8 *)&AuSta, (U8 *)&mBssId, 6);
56 mkAuthFrm(pfrmDesc
, &AuSta
, mAuthAlg
, 1, auSC
, NULL
, vapId
);
57 //This fix is to prevent a deatuh from AP right after Auth success
58 // that cause start_timer again. And crash the driver.
59 pdot11Obj
->StopTimer(DO_AUTH
);
60 pdot11Obj
->StartTimer(AUTH_TIMEOUT
, DO_AUTH
);
61 AuthReqState
= STE_WAIT_AUTH_SEQ2
;
62 return sendMgtFrame(signal
, pfrmDesc
);
66 BOOLEAN
AuthEven(Signal_t
*signal
)
79 pfrmDesc
= signal
->frmInfo
.frmDesc
;
81 auSeq
= authSeqNum(rdu
);
82 auAlg
= authType(rdu
);
83 memcpy((U8
*)&Sta
, (U8
*)addr2(rdu
), 6);
84 if (memcmp(&AuSta
, &Sta
, 6) != 0){
85 //FPRINT("Not for my Auth AP");
89 if ((AuthReqState
== STE_WAIT_AUTH_SEQ2
) && (auSeq
!= 2)){
94 if ((AuthReqState
== STE_WAIT_AUTH_SEQ4
) && (auSeq
!= 4)){
99 auSC
= authStatus(rdu
);
100 if (auSC
!= SC_SUCCESSFUL
){
101 FPRINT("Auth Failed!!!");
102 FPRINT_V("Status Code", auSC
);
106 pdot11Obj
->StopTimer(DO_AUTH
);
107 //FPRINT_V("auAlg", auAlg);
109 if (AuthReqState
== STE_WAIT_AUTH_SEQ4
){
110 UpdateStaStatus(&Sta
, STATION_STATE_AUTH_KEY
, vapId
);
111 AuthReqState
= STE_AUTH_REQ_IDLE
;
114 signal
->id
= SIG_ASSOC_REQ
;
115 signal
->block
= BLOCK_ASOC
;
116 sigEnque(pMgtQ
, (signal
));
120 } else if (AuthReqState
== STE_WAIT_AUTH_SEQ2
){
121 if (auAlg
== OPEN_SYSTEM
){
122 FPRINT("Auth Success !!!");
123 UpdateStaStatus(&Sta
, STATION_STATE_AUTH_OPEN
, vapId
);
124 AuthReqState
= STE_AUTH_REQ_IDLE
;
127 signal
->id
= SIG_ASSOC_REQ
;
128 signal
->block
= BLOCK_ASOC
;
129 sigEnque(pMgtQ
, (signal
));
134 if (auAlg
== SHARE_KEY
){
135 if (!getElem(rdu
, EID_CTEXT
, (Element
*)&ChalText
[0],1)){
136 FPRINT("Get ChalText failed");
140 FPRINT("Send Auth Seq 3 frame");
141 auSC
= SC_SUCCESSFUL
;
142 mkAuthFrm(pfrmDesc
, &mBssId
, mAuthAlg
, 3, auSC
, &ChalText
[2], vapId
);
143 pdot11Obj
->StartTimer(AUTH_TIMEOUT
, DO_AUTH
);
144 AuthReqState
= STE_WAIT_AUTH_SEQ4
;
145 pfrmDesc
->ConfigSet
|= FORCE_WEP_SET
;
146 return sendMgtFrame(signal
, pfrmDesc
);
151 FPRINT("auth_release");
157 BOOLEAN
AuthTimeOut(Signal_t
*signal
)
160 FPRINT("AuthTimeOut");
162 if ((AuthReqState
== STE_WAIT_AUTH_SEQ2
) ||
165 (AuthReqState
== STE_WAIT_AUTH_SEQ4
)){
166 UpdateStaStatus(&mBssId
, STATION_STATE_NOT_AUTH
, vapId
);
167 AuthReqState
= STE_AUTH_REQ_IDLE
;
170 mRequestFlag
|= CONNECT_TOUT_SET
;
175 BOOLEAN
AuthReqEntry(Signal_t
*signal
)
179 if (AuthReqState
== STE_AUTH_REQ_IDLE
){
182 return DeauthReq(signal
);
185 return AuthReq(signal
);
190 }else if ((AuthReqState
== STE_WAIT_AUTH_SEQ2
) || (AuthReqState
== STE_WAIT_AUTH_SEQ4
)){
193 goto auth_discard
;//return TRUE;
196 goto auth_discard
;//return TRUE;
199 return AuthEven(signal
);
202 return AuthTimeOut(signal
);
211 pfrmDesc
= signal
->frmInfo
.frmDesc
;