~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to drivers/staging/rt2860/sta/auth_rsp.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 *************************************************************************
3
 
 * Ralink Tech Inc.
4
 
 * 5F., No.36, Taiyuan St., Jhubei City,
5
 
 * Hsinchu County 302,
6
 
 * Taiwan, R.O.C.
7
 
 *
8
 
 * (c) Copyright 2002-2007, Ralink Technology, Inc.
9
 
 *
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.                                   *
14
 
 *                                                                       *
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.                          *
19
 
 *                                                                       *
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.             *
24
 
 *                                                                       *
25
 
 *************************************************************************
26
 
 
27
 
        Module Name:
28
 
        auth_rsp.c
29
 
 
30
 
        Abstract:
31
 
 
32
 
        Revision History:
33
 
        Who                     When                    What
34
 
        --------        ----------              ----------------------------------------------
35
 
        John            2004-10-1               copy from RT2560
36
 
*/
37
 
#include "../rt_config.h"
38
 
 
39
 
/*
40
 
    ==========================================================================
41
 
    Description:
42
 
        authentication state machine init procedure
43
 
    Parameters:
44
 
        Sm - the state machine
45
 
 
46
 
        IRQL = PASSIVE_LEVEL
47
 
 
48
 
    ==========================================================================
49
 
 */
50
 
void AuthRspStateMachineInit(struct rt_rtmp_adapter *pAd,
51
 
                             struct rt_state_machine *Sm,
52
 
                             IN STATE_MACHINE_FUNC Trans[])
53
 
{
54
 
        StateMachineInit(Sm, Trans, MAX_AUTH_RSP_STATE, MAX_AUTH_RSP_MSG,
55
 
                         (STATE_MACHINE_FUNC) Drop, AUTH_RSP_IDLE,
56
 
                         AUTH_RSP_MACHINE_BASE);
57
 
 
58
 
        /* column 1 */
59
 
        StateMachineSetAction(Sm, AUTH_RSP_IDLE, MT2_PEER_DEAUTH,
60
 
                              (STATE_MACHINE_FUNC) PeerDeauthAction);
61
 
 
62
 
        /* column 2 */
63
 
        StateMachineSetAction(Sm, AUTH_RSP_WAIT_CHAL, MT2_PEER_DEAUTH,
64
 
                              (STATE_MACHINE_FUNC) PeerDeauthAction);
65
 
 
66
 
}
67
 
 
68
 
/*
69
 
    ==========================================================================
70
 
    Description:
71
 
 
72
 
        IRQL = DISPATCH_LEVEL
73
 
 
74
 
    ==========================================================================
75
 
*/
76
 
void PeerAuthSimpleRspGenAndSend(struct rt_rtmp_adapter *pAd,
77
 
                                 struct rt_header_802_11 * pHdr80211,
78
 
                                 u16 Alg,
79
 
                                 u16 Seq,
80
 
                                 u16 Reason, u16 Status)
81
 
{
82
 
        struct rt_header_802_11 AuthHdr;
83
 
        unsigned long FrameLen = 0;
84
 
        u8 *pOutBuffer = NULL;
85
 
        int NStatus;
86
 
 
87
 
        if (Reason != MLME_SUCCESS) {
88
 
                DBGPRINT(RT_DEBUG_TRACE, ("Peer AUTH fail...\n"));
89
 
                return;
90
 
        }
91
 
        /*Get an unused nonpaged memory */
92
 
        NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);
93
 
        if (NStatus != NDIS_STATUS_SUCCESS)
94
 
                return;
95
 
 
96
 
        DBGPRINT(RT_DEBUG_TRACE, ("Send AUTH response (seq#2)...\n"));
97
 
        MgtMacHeaderInit(pAd, &AuthHdr, SUBTYPE_AUTH, 0, pHdr80211->Addr2,
98
 
                         pAd->MlmeAux.Bssid);
99
 
        MakeOutgoingFrame(pOutBuffer, &FrameLen, sizeof(struct rt_header_802_11),
100
 
                          &AuthHdr, 2, &Alg, 2, &Seq, 2, &Reason, END_OF_ARGS);
101
 
        MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);
102
 
        MlmeFreeMemory(pAd, pOutBuffer);
103
 
}
104
 
 
105
 
/*
106
 
    ==========================================================================
107
 
    Description:
108
 
 
109
 
        IRQL = DISPATCH_LEVEL
110
 
 
111
 
    ==========================================================================
112
 
*/
113
 
void PeerDeauthAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem)
114
 
{
115
 
        u8 Addr2[MAC_ADDR_LEN];
116
 
        u16 Reason;
117
 
 
118
 
        if (PeerDeauthSanity(pAd, Elem->Msg, Elem->MsgLen, Addr2, &Reason)) {
119
 
                if (INFRA_ON(pAd)
120
 
                    && MAC_ADDR_EQUAL(Addr2, pAd->CommonCfg.Bssid)
121
 
                    ) {
122
 
                        DBGPRINT(RT_DEBUG_TRACE,
123
 
                                 ("AUTH_RSP - receive DE-AUTH from our AP (Reason=%d)\n",
124
 
                                  Reason));
125
 
 
126
 
                        RtmpOSWrielessEventSend(pAd, SIOCGIWAP, -1, NULL, NULL,
127
 
                                                0);
128
 
 
129
 
                        /* send wireless event - for deauthentication */
130
 
                        if (pAd->CommonCfg.bWirelessEvent)
131
 
                                RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG,
132
 
                                                      pAd->MacTab.
133
 
                                                      Content[BSSID_WCID].Addr,
134
 
                                                      BSS0, 0);
135
 
 
136
 
                        LinkDown(pAd, TRUE);
137
 
                }
138
 
        } else {
139
 
                DBGPRINT(RT_DEBUG_TRACE,
140
 
                         ("AUTH_RSP - PeerDeauthAction() sanity check fail\n"));
141
 
        }
142
 
}