100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman/* src/p80211/p80211req.c 200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Request/Indication/MacMgmt interface handling functions 400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. 600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* -------------------------------------------------------------------- 700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* linux-wlan 900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 1000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* The contents of this file are subject to the Mozilla Public 1100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* License Version 1.1 (the "License"); you may not use this file 1200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* except in compliance with the License. You may obtain a copy of 1300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* the License at http://www.mozilla.org/MPL/ 1400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 1500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Software distributed under the License is distributed on an "AS 1600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 1700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* implied. See the License for the specific language governing 1800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* rights and limitations under the License. 1900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 2000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Alternatively, the contents of this file may be used under the 2100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* terms of the GNU Public License version 2 (the "GPL"), in which 2200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* case the provisions of the GPL are applicable instead of the 2300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* above. If you wish to allow the use of your version of this file 2400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* only under the terms of the GPL and not to allow others to use 2500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* your version of this file under the MPL, indicate your decision 2600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* by deleting the provisions above and replace them with the notice 2700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* and other provisions required by the GPL. If you do not delete 2800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* the provisions above, a recipient may use your version of this 2900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* file under either the MPL or the GPL. 3000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 3100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* -------------------------------------------------------------------- 3200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 3300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Inquiries regarding the linux-wlan Open Source project can be 3400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* made directly to: 3500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 3600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* AbsoluteValue Systems Inc. 3700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* info@linux-wlan.com 3800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* http://www.linux-wlan.com 3900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 4000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* -------------------------------------------------------------------- 4100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 4200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Portions of the development of this software were funded by 4300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Intersil Corporation as part of PRISM(R) chipset product development. 4400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 4500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* -------------------------------------------------------------------- 4600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 4700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* This file contains the functions, types, and macros to support the 4800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* MLME request interface that's implemented via the device ioctls. 4900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 5000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* -------------------------------------------------------------------- 5100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman*/ 5200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 5300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include <linux/module.h> 5400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include <linux/kernel.h> 5500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include <linux/sched.h> 5600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include <linux/types.h> 5700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include <linux/skbuff.h> 5800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include <linux/wireless.h> 5900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include <linux/netdevice.h> 6000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include <linux/etherdevice.h> 6100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include <net/sock.h> 6200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include <linux/netlink.h> 6300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 6400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include "p80211types.h" 6500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include "p80211hdr.h" 6600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include "p80211mgmt.h" 6700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include "p80211conv.h" 6800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include "p80211msg.h" 6900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include "p80211netdev.h" 7000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include "p80211ioctl.h" 7100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include "p80211metadef.h" 7200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include "p80211metastruct.h" 7300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman#include "p80211req.h" 7400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 753d049431e08a847a222e20f406332529751b4365Edgardo Hamesstatic void p80211req_handlemsg(wlandevice_t *wlandev, struct p80211msg *msg); 76297f06cea635ea4552541a11e7fb7014425110c6Mithlesh Thukralstatic int p80211req_mibset_mibget(wlandevice_t *wlandev, 77b6bb56e6aa28085550179335247c649752ff2994Edgardo Hames struct p80211msg_dot11req_mibget *mib_msg, 78b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff int isget); 7900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 8000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman/*---------------------------------------------------------------- 8100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* p80211req_dorequest 8200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 8300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Handles an MLME reqest/confirm message. 8400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 8500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Arguments: 8600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* wlandev WLAN device struct 8700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* msgbuf Buffer containing a request message 8800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 8900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Returns: 9000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 0 on success, an errno otherwise 9100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 9200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Call context: 9300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Potentially blocks the caller, so it's a good idea to 9400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* not call this function from an interrupt context. 9500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman----------------------------------------------------------------*/ 965dd8acc8fd6b0476a2dc49bc6de4712d22c368c0Svenne Krapint p80211req_dorequest(wlandevice_t *wlandev, u8 *msgbuf) 9700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman{ 98b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff int result = 0; 993d049431e08a847a222e20f406332529751b4365Edgardo Hames struct p80211msg *msg = (struct p80211msg *) msgbuf; 10000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 10100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman /* Check to make sure the MSD is running */ 102b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (!((wlandev->msdstate == WLAN_MSD_HWPRESENT && 103b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff msg->msgcode == DIDmsg_lnxreq_ifstate) || 104b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wlandev->msdstate == WLAN_MSD_RUNNING || 105b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wlandev->msdstate == WLAN_MSD_FWLOAD)) { 10600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman return -ENODEV; 10700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman } 10800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 10900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman /* Check Permissions */ 11067a7b3788cd2b9f63a6cfe68e9e937c25709f053Patrick Rooney if (!capable(CAP_NET_ADMIN) && 11167a7b3788cd2b9f63a6cfe68e9e937c25709f053Patrick Rooney (msg->msgcode != DIDmsg_dot11req_mibget)) { 112b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff printk(KERN_ERR 113b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff "%s: only dot11req_mibget allowed for non-root.\n", 114b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wlandev->name); 11500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman return -EPERM; 11600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman } 11700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 11800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman /* Check for busy status */ 119b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (test_and_set_bit(1, &(wlandev->request_pending))) 12000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman return -EBUSY; 12100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 12200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman /* Allow p80211 to look at msg and handle if desired. */ 12300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman /* So far, all p80211 msgs are immediate, no waitq/timer necessary */ 12400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman /* This may change. */ 12500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman p80211req_handlemsg(wlandev, msg); 12600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 12700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman /* Pass it down to wlandev via wlandev->mlmerequest */ 128b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (wlandev->mlmerequest != NULL) 12900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman wlandev->mlmerequest(wlandev, msg); 13000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 131b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff clear_bit(1, &(wlandev->request_pending)); 13267a7b3788cd2b9f63a6cfe68e9e937c25709f053Patrick Rooney return result; /* if result==0, msg->status still may contain an err */ 13300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman} 13400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 13500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman/*---------------------------------------------------------------- 13600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* p80211req_handlemsg 13700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 13800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* p80211 message handler. Primarily looks for messages that 13900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* belong to p80211 and then dispatches the appropriate response. 14000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* TODO: we don't do anything yet. Once the linuxMIB is better 14100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* defined we'll need a get/set handler. 14200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 14300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Arguments: 14400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* wlandev WLAN device struct 14500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* msg message structure 14600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 14700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Returns: 14800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* nothing (any results are set in the status field of the msg) 14900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* 15000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Call context: 15100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman* Process thread 15200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman----------------------------------------------------------------*/ 1533d049431e08a847a222e20f406332529751b4365Edgardo Hamesstatic void p80211req_handlemsg(wlandevice_t *wlandev, struct p80211msg *msg) 15400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman{ 15500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman switch (msg->msgcode) { 15600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 157b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff case DIDmsg_lnxreq_hostwep:{ 158b6bb56e6aa28085550179335247c649752ff2994Edgardo Hames struct p80211msg_lnxreq_hostwep *req = 159b6bb56e6aa28085550179335247c649752ff2994Edgardo Hames (struct p80211msg_lnxreq_hostwep *) msg; 160b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wlandev->hostwep &= 161b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff ~(HOSTWEP_DECRYPT | HOSTWEP_ENCRYPT); 162b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (req->decrypt.data == P80211ENUM_truth_true) 163b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wlandev->hostwep |= HOSTWEP_DECRYPT; 164b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (req->encrypt.data == P80211ENUM_truth_true) 165b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wlandev->hostwep |= HOSTWEP_ENCRYPT; 16600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 167b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff break; 168b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } 16900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman case DIDmsg_dot11req_mibget: 170b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff case DIDmsg_dot11req_mibset:{ 171b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff int isget = (msg->msgcode == DIDmsg_dot11req_mibget); 172b6bb56e6aa28085550179335247c649752ff2994Edgardo Hames struct p80211msg_dot11req_mibget *mib_msg = 173b6bb56e6aa28085550179335247c649752ff2994Edgardo Hames (struct p80211msg_dot11req_mibget *) msg; 174b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff p80211req_mibset_mibget(wlandev, mib_msg, isget); 175b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } 17600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman default: 17700b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman ; 178b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } /* switch msg->msgcode */ 17900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 18000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman return; 18100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman} 18200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 183297f06cea635ea4552541a11e7fb7014425110c6Mithlesh Thukralstatic int p80211req_mibset_mibget(wlandevice_t *wlandev, 184b6bb56e6aa28085550179335247c649752ff2994Edgardo Hames struct p80211msg_dot11req_mibget *mib_msg, 18500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman int isget) 18600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman{ 187b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff p80211itemd_t *mibitem = (p80211itemd_t *) mib_msg->mibattribute.data; 188b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff p80211pstrd_t *pstr = (p80211pstrd_t *) mibitem->data; 189aaad430378dd128ee015c8ed6e77809317c496a5Solomon Peachy u8 *key = mibitem->data + sizeof(p80211pstrd_t); 19000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 19100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman switch (mibitem->did) { 192b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff case DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey0:{ 193b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (!isget) 194b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wep_change_key(wlandev, 0, key, pstr->len); 195b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff break; 196b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } 197b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff case DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey1:{ 198b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (!isget) 199b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wep_change_key(wlandev, 1, key, pstr->len); 200b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff break; 201b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } 202b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff case DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey2:{ 203b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (!isget) 204b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wep_change_key(wlandev, 2, key, pstr->len); 205b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff break; 206b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } 207b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff case DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey3:{ 208b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (!isget) 209b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wep_change_key(wlandev, 3, key, pstr->len); 210b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff break; 211b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } 212b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff case DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID:{ 213b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff u32 *data = (u32 *) mibitem->data; 21400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 215b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (isget) { 216b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff *data = 217b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wlandev->hostwep & HOSTWEP_DEFAULTKEY_MASK; 21800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman } else { 21900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman wlandev->hostwep &= ~(HOSTWEP_DEFAULTKEY_MASK); 22000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 221b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wlandev->hostwep |= 222b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff (*data & HOSTWEP_DEFAULTKEY_MASK); 22300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman } 224b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff break; 225b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } 226b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff case DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked:{ 227b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff u32 *data = (u32 *) mibitem->data; 22800b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 229b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (isget) { 230b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (wlandev->hostwep & HOSTWEP_PRIVACYINVOKED) 231b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff *data = P80211ENUM_truth_true; 232b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff else 233b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff *data = P80211ENUM_truth_false; 234b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } else { 23500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman wlandev->hostwep &= ~(HOSTWEP_PRIVACYINVOKED); 23600b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman if (*data == P80211ENUM_truth_true) 237b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wlandev->hostwep |= 238b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff HOSTWEP_PRIVACYINVOKED; 239b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } 240b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff break; 24100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman } 242b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff case DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted:{ 243b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff u32 *data = (u32 *) mibitem->data; 24400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 245b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (isget) { 24675f49e07520d036c2a0903694fdc0bcfb5523b76Mithlesh Thukral if (wlandev->hostwep & 24775f49e07520d036c2a0903694fdc0bcfb5523b76Mithlesh Thukral HOSTWEP_EXCLUDEUNENCRYPTED) 248b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff *data = P80211ENUM_truth_true; 249b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff else 250b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff *data = P80211ENUM_truth_false; 251b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } else { 252b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wlandev->hostwep &= 253b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff ~(HOSTWEP_EXCLUDEUNENCRYPTED); 254b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff if (*data == P80211ENUM_truth_true) 255b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff wlandev->hostwep |= 256b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff HOSTWEP_EXCLUDEUNENCRYPTED; 257b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff } 258b1de9675ac51aeff61a5a71247455d6cfaa86bb6Moritz Muehlenhoff break; 25900b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman } 26000b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman default: 26100b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman ; 26200b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman } 26300b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman 26400b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman return 0; 26500b3ed1685089ff52169a715de11106ed37df087Greg Kroah-Hartman} 266