2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
34 -------- ---------- ----------------------------------------------
35 John 2004-10-1 copy from RT2560
37 #include "../rt_config.h"
40 ==========================================================================
42 authentication state machine init procedure
44 Sm - the state machine
48 ==========================================================================
50 VOID
AuthRspStateMachineInit(
53 IN STATE_MACHINE_FUNC Trans
[])
55 StateMachineInit(Sm
, Trans
, MAX_AUTH_RSP_STATE
, MAX_AUTH_RSP_MSG
, (STATE_MACHINE_FUNC
)Drop
, AUTH_RSP_IDLE
, AUTH_RSP_MACHINE_BASE
);
58 StateMachineSetAction(Sm
, AUTH_RSP_IDLE
, MT2_PEER_DEAUTH
, (STATE_MACHINE_FUNC
)PeerDeauthAction
);
61 StateMachineSetAction(Sm
, AUTH_RSP_WAIT_CHAL
, MT2_PEER_DEAUTH
, (STATE_MACHINE_FUNC
)PeerDeauthAction
);
66 ==========================================================================
71 ==========================================================================
73 VOID
PeerAuthSimpleRspGenAndSend(
75 IN PHEADER_802_11 pHdr80211
,
81 HEADER_802_11 AuthHdr
;
83 PUCHAR pOutBuffer
= NULL
;
86 if (Reason
!= MLME_SUCCESS
)
88 DBGPRINT(RT_DEBUG_TRACE
, ("Peer AUTH fail...\n"));
92 //Get an unused nonpaged memory
93 NStatus
= MlmeAllocateMemory(pAd
, &pOutBuffer
);
94 if (NStatus
!= NDIS_STATUS_SUCCESS
)
97 DBGPRINT(RT_DEBUG_TRACE
, ("Send AUTH response (seq#2)...\n"));
98 MgtMacHeaderInit(pAd
, &AuthHdr
, SUBTYPE_AUTH
, 0, pHdr80211
->Addr2
, pAd
->MlmeAux
.Bssid
);
99 MakeOutgoingFrame(pOutBuffer
, &FrameLen
,
100 sizeof(HEADER_802_11
), &AuthHdr
,
105 MiniportMMRequest(pAd
, 0, pOutBuffer
, FrameLen
);
106 MlmeFreeMemory(pAd
, pOutBuffer
);
110 ==========================================================================
113 IRQL = DISPATCH_LEVEL
115 ==========================================================================
117 VOID
PeerDeauthAction(
118 IN PRTMP_ADAPTER pAd
,
119 IN PMLME_QUEUE_ELEM Elem
)
121 UCHAR Addr2
[MAC_ADDR_LEN
];
124 if (PeerDeauthSanity(pAd
, Elem
->Msg
, Elem
->MsgLen
, Addr2
, &Reason
))
126 if (INFRA_ON(pAd
) && MAC_ADDR_EQUAL(Addr2
, pAd
->CommonCfg
.Bssid
))
128 DBGPRINT(RT_DEBUG_TRACE
,("AUTH_RSP - receive DE-AUTH from our AP (Reason=%d)\n", Reason
));
130 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
132 union iwreq_data wrqu
;
133 memset(wrqu
.ap_addr
.sa_data
, 0, MAC_ADDR_LEN
);
134 wireless_send_event(pAd
->net_dev
, SIOCGIWAP
, &wrqu
, NULL
);
136 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
139 // send wireless event - for deauthentication
140 if (pAd
->CommonCfg
.bWirelessEvent
)
141 RTMPSendWirelessEvent(pAd
, IW_DEAUTH_EVENT_FLAG
, pAd
->MacTab
.Content
[BSSID_WCID
].Addr
, BSS0
, 0);
145 // Authentication Mode Cisco_LEAP has start a timer
146 // We should cancel it if using LEAP
148 if (pAd
->StaCfg
.LeapAuthMode
== CISCO_AuthModeLEAP
)
150 RTMPCancelTimer(&pAd
->StaCfg
.LeapAuthTimer
, &TimerCancelled
);
151 //Check is it mach the LEAP Authentication failed as possible a Rogue AP
152 //on it's PortSecured not equal to WPA_802_1X_PORT_SECURED while process the Authenticaton.
153 if ((pAd
->StaCfg
.PortSecured
!= WPA_802_1X_PORT_SECURED
) && (pAd
->Mlme
.LeapMachine
.CurrState
!= LEAP_IDLE
))
155 RogueApTableSetEntry(pAd
, &pAd
->StaCfg
.RogueApTab
, Addr2
, LEAP_REASON_AUTH_TIMEOUT
);
158 #endif // LEAP_SUPPORT //
163 DBGPRINT(RT_DEBUG_TRACE
,("AUTH_RSP - PeerDeauthAction() sanity check fail\n"));