| /* src/prism2/driver/prism2mib.c |
| * |
| * Management request for mibset/mibget |
| * |
| * Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. |
| * -------------------------------------------------------------------- |
| * |
| * linux-wlan |
| * |
| * The contents of this file are subject to the Mozilla Public |
| * License Version 1.1 (the "License"); you may not use this file |
| * except in compliance with the License. You may obtain a copy of |
| * the License at http://www.mozilla.org/MPL/ |
| * |
| * Software distributed under the License is distributed on an "AS |
| * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or |
| * implied. See the License for the specific language governing |
| * rights and limitations under the License. |
| * |
| * Alternatively, the contents of this file may be used under the |
| * terms of the GNU Public License version 2 (the "GPL"), in which |
| * case the provisions of the GPL are applicable instead of the |
| * above. If you wish to allow the use of your version of this file |
| * only under the terms of the GPL and not to allow others to use |
| * your version of this file under the MPL, indicate your decision |
| * by deleting the provisions above and replace them with the notice |
| * and other provisions required by the GPL. If you do not delete |
| * the provisions above, a recipient may use your version of this |
| * file under either the MPL or the GPL. |
| * |
| * -------------------------------------------------------------------- |
| * |
| * Inquiries regarding the linux-wlan Open Source project can be |
| * made directly to: |
| * |
| * AbsoluteValue Systems Inc. |
| * info@linux-wlan.com |
| * http://www.linux-wlan.com |
| * |
| * -------------------------------------------------------------------- |
| * |
| * Portions of the development of this software were funded by |
| * Intersil Corporation as part of PRISM(R) chipset product development. |
| * |
| * -------------------------------------------------------------------- |
| * |
| * The functions in this file handle the mibset/mibget management |
| * functions. |
| * |
| * -------------------------------------------------------------------- |
| */ |
| |
| /*================================================================*/ |
| /* System Includes */ |
| #define WLAN_DBVAR prism2_debug |
| |
| #include "version.h" |
| |
| |
| #include <linux/version.h> |
| |
| #include <linux/module.h> |
| #include <linux/kernel.h> |
| #include <linux/sched.h> |
| #include <linux/types.h> |
| #include <linux/slab.h> |
| #include <linux/wireless.h> |
| #include <linux/netdevice.h> |
| #include <asm/io.h> |
| #include <linux/delay.h> |
| #include <asm/byteorder.h> |
| |
| #include "wlan_compat.h" |
| |
| //#if (WLAN_HOSTIF == WLAN_PCMCIA) |
| //#include <pcmcia/version.h> |
| //#include <pcmcia/cs_types.h> |
| //#include <pcmcia/cs.h> |
| //#include <pcmcia/cistpl.h> |
| //#include <pcmcia/ds.h> |
| //#include <pcmcia/cisreg.h> |
| //#endif |
| // |
| //#if ((WLAN_HOSTIF == WLAN_PLX) || (WLAN_HOSTIF == WLAN_PCI)) |
| //#include <linux/ioport.h> |
| //#include <linux/pci.h> |
| //endif |
| |
| //#if (WLAN_HOSTIF == WLAN_USB) |
| #include <linux/usb.h> |
| //#endif |
| |
| /*================================================================*/ |
| /* Project Includes */ |
| |
| #include "p80211types.h" |
| #include "p80211hdr.h" |
| #include "p80211mgmt.h" |
| #include "p80211conv.h" |
| #include "p80211msg.h" |
| #include "p80211netdev.h" |
| #include "p80211metadef.h" |
| #include "p80211metastruct.h" |
| #include "hfa384x.h" |
| #include "prism2mgmt.h" |
| |
| /*================================================================*/ |
| /* Local Constants */ |
| |
| #define MIB_TMP_MAXLEN 200 /* Max length of RID record (in bytes). */ |
| |
| /*================================================================*/ |
| /* Local Types */ |
| |
| #define F_AP 0x1 /* MIB is supported on Access Points. */ |
| #define F_STA 0x2 /* MIB is supported on stations. */ |
| #define F_READ 0x4 /* MIB may be read. */ |
| #define F_WRITE 0x8 /* MIB may be written. */ |
| |
| typedef struct mibrec |
| { |
| UINT32 did; |
| UINT16 flag; |
| UINT16 parm1; |
| UINT16 parm2; |
| UINT16 parm3; |
| int (*func)(struct mibrec *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| } mibrec_t; |
| |
| /*================================================================*/ |
| /* Local Function Declarations */ |
| |
| static int prism2mib_bytestr2pstr( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_bytearea2pstr( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_uint32( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_uint32array( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_uint32offset( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_truth( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_preamble( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_flag( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_appcfinfoflag( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_regulatorydomains( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_wepdefaultkey( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_powermanagement( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_privacyinvoked( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_excludeunencrypted( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_fragmentationthreshold( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_operationalrateset( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_groupaddress( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_fwid( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_authalg( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_authalgenable( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static int prism2mib_priv( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data); |
| |
| static void prism2mib_priv_authlist( |
| hfa384x_t *hw, |
| prism2sta_authlist_t *list); |
| |
| static void prism2mib_priv_accessmode( |
| hfa384x_t *hw, |
| UINT32 mode); |
| |
| static void prism2mib_priv_accessallow( |
| hfa384x_t *hw, |
| p80211macarray_t *macarray); |
| |
| static void prism2mib_priv_accessdeny( |
| hfa384x_t *hw, |
| p80211macarray_t *macarray); |
| |
| static void prism2mib_priv_deauthenticate( |
| hfa384x_t *hw, |
| UINT8 *addr); |
| |
| /*================================================================*/ |
| /* Local Static Definitions */ |
| |
| static mibrec_t mibtab[] = { |
| |
| /* dot11smt MIB's */ |
| |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11StationID, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFOWNMACADDR, HFA384x_RID_CNFOWNMACADDR_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11MediumOccupancyLimit, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFAPPCFINFO, HFA384x_RID_CNFAPPCFINFO_LEN, 0, |
| prism2mib_uint32offset }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11CFPollable, |
| F_STA | F_READ, |
| HFA384x_RID_CFPOLLABLE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11CFPPeriod, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFAPPCFINFO, HFA384x_RID_CNFAPPCFINFO_LEN, 1, |
| prism2mib_uint32offset }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11CFPMaxDuration, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFAPPCFINFO, HFA384x_RID_CNFAPPCFINFO_LEN, 2, |
| prism2mib_uint32offset }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11AuthenticationResponseTimeOut, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFAUTHRSPTIMEOUT, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11PrivacyOptionImplemented, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_PRIVACYOPTIMP, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11PowerManagementMode, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFPMENABLED, 0, 0, |
| prism2mib_powermanagement }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11DesiredSSID, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFDESIREDSSID, HFA384x_RID_CNFDESIREDSSID_LEN, 0, |
| prism2mib_bytestr2pstr }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11DesiredBSSType, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_priv }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11OperationalRateSet, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_TXRATECNTL, 0, 0, |
| prism2mib_operationalrateset }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11OperationalRateSet, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_TXRATECNTL0, 0, 0, |
| prism2mib_operationalrateset }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11BeaconPeriod, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFAPBCNINT, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11DTIMPeriod, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFOWNDTIMPER, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11smt_dot11StationConfigTable_dot11AssociationResponseTimeOut, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_PROTOCOLRSPTIME, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithm1, |
| F_AP | F_STA | F_READ, |
| 1, 0, 0, |
| prism2mib_authalg }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithm2, |
| F_AP | F_STA | F_READ, |
| 2, 0, 0, |
| prism2mib_authalg }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithm3, |
| F_AP | F_STA | F_READ, |
| 3, 0, 0, |
| prism2mib_authalg }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithm4, |
| F_AP | F_STA | F_READ, |
| 4, 0, 0, |
| prism2mib_authalg }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithm5, |
| F_AP | F_STA | F_READ, |
| 5, 0, 0, |
| prism2mib_authalg }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithm6, |
| F_AP | F_STA | F_READ, |
| 6, 0, 0, |
| prism2mib_authalg }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithmsEnable1, |
| F_AP | F_STA | F_READ | F_WRITE, |
| 1, 0, 0, |
| prism2mib_authalgenable }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithmsEnable2, |
| F_AP | F_STA | F_READ | F_WRITE, |
| 2, 0, 0, |
| prism2mib_authalgenable }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithmsEnable3, |
| F_AP | F_STA | F_READ | F_WRITE, |
| 3, 0, 0, |
| prism2mib_authalgenable }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithmsEnable4, |
| F_AP | F_STA | F_READ | F_WRITE, |
| 4, 0, 0, |
| prism2mib_authalgenable }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithmsEnable5, |
| F_AP | F_STA | F_READ | F_WRITE, |
| 5, 0, 0, |
| prism2mib_authalgenable }, |
| { DIDmib_dot11smt_dot11AuthenticationAlgorithmsTable_dot11AuthenticationAlgorithmsEnable6, |
| F_AP | F_STA | F_READ | F_WRITE, |
| 6, 0, 0, |
| prism2mib_authalgenable }, |
| { DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey0, |
| F_AP | F_STA | F_WRITE, |
| HFA384x_RID_CNFWEPDEFAULTKEY0, 0, 0, |
| prism2mib_wepdefaultkey }, |
| { DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey1, |
| F_AP | F_STA | F_WRITE, |
| HFA384x_RID_CNFWEPDEFAULTKEY1, 0, 0, |
| prism2mib_wepdefaultkey }, |
| { DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey2, |
| F_AP | F_STA | F_WRITE, |
| HFA384x_RID_CNFWEPDEFAULTKEY2, 0, 0, |
| prism2mib_wepdefaultkey }, |
| { DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey3, |
| F_AP | F_STA | F_WRITE, |
| HFA384x_RID_CNFWEPDEFAULTKEY3, 0, 0, |
| prism2mib_wepdefaultkey }, |
| { DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFWEPFLAGS, HFA384x_WEPFLAGS_PRIVINVOKED, 0, |
| prism2mib_privacyinvoked }, |
| { DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFWEPDEFAULTKEYID, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFWEPFLAGS, HFA384x_WEPFLAGS_EXCLUDE, 0, |
| prism2mib_excludeunencrypted }, |
| { DIDmib_dot11phy_dot11PhyOperationTable_dot11ShortPreambleEnabled, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFSHORTPREAMBLE, 0, 0, |
| prism2mib_preamble }, |
| |
| /* dot11mac MIB's */ |
| |
| { DIDmib_dot11mac_dot11OperationTable_dot11MACAddress, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFOWNMACADDR, HFA384x_RID_CNFOWNMACADDR_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_RTSTHRESH, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_RTSTHRESH0, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11mac_dot11OperationTable_dot11ShortRetryLimit, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_SHORTRETRYLIMIT, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11mac_dot11OperationTable_dot11LongRetryLimit, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_LONGRETRYLIMIT, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_FRAGTHRESH, 0, 0, |
| prism2mib_fragmentationthreshold }, |
| { DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_FRAGTHRESH0, 0, 0, |
| prism2mib_fragmentationthreshold }, |
| { DIDmib_dot11mac_dot11OperationTable_dot11MaxTransmitMSDULifetime, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_MAXTXLIFETIME, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11mac_dot11OperationTable_dot11MaxReceiveLifetime, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_MAXRXLIFETIME, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address1, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address2, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address3, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address4, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address5, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address6, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address7, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address8, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address9, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address10, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address11, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address12, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address13, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address14, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address15, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address16, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address17, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address18, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address19, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address20, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address21, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address22, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address23, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address24, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address25, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address26, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address27, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address28, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address29, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address30, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address31, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| { DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address32, |
| F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_groupaddress }, |
| |
| /* dot11phy MIB's */ |
| |
| { DIDmib_dot11phy_dot11PhyOperationTable_dot11PHYType, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_PHYTYPE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11phy_dot11PhyOperationTable_dot11TempType, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_TEMPTYPE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel, |
| F_STA | F_READ, |
| HFA384x_RID_CURRENTCHANNEL, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel, |
| F_AP | F_READ, |
| HFA384x_RID_CNFOWNCHANNEL, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentCCAMode, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_CCAMODE, 0, 0, |
| prism2mib_uint32 }, |
| |
| /* p2Table MIB's */ |
| |
| { DIDmib_p2_p2Table_p2MMTx, |
| F_AP | F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_priv }, |
| { DIDmib_p2_p2Table_p2EarlyBeacon, |
| F_AP | F_READ | F_WRITE, |
| BIT7, 0, 0, |
| prism2mib_appcfinfoflag }, |
| { DIDmib_p2_p2Table_p2ReceivedFrameStatistics, |
| F_AP | F_STA | F_READ, |
| 0, 0, 0, |
| prism2mib_priv }, |
| { DIDmib_p2_p2Table_p2CommunicationTallies, |
| F_AP | F_STA | F_READ, |
| 0, 0, 0, |
| prism2mib_priv }, |
| { DIDmib_p2_p2Table_p2Authenticated, |
| F_AP | F_READ, |
| 0, 0, 0, |
| prism2mib_priv }, |
| { DIDmib_p2_p2Table_p2Associated, |
| F_AP | F_READ, |
| 0, 0, 0, |
| prism2mib_priv }, |
| { DIDmib_p2_p2Table_p2PowerSaveUserCount, |
| F_AP | F_READ, |
| 0, 0, 0, |
| prism2mib_priv }, |
| { DIDmib_p2_p2Table_p2Comment, |
| F_AP | F_STA | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_priv }, |
| { DIDmib_p2_p2Table_p2AccessMode, |
| F_AP | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_priv }, |
| { DIDmib_p2_p2Table_p2AccessAllow, |
| F_AP | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_priv }, |
| { DIDmib_p2_p2Table_p2AccessDeny, |
| F_AP | F_READ | F_WRITE, |
| 0, 0, 0, |
| prism2mib_priv }, |
| { DIDmib_p2_p2Table_p2ChannelInfoResults, |
| F_AP | F_READ, |
| 0, 0, 0, |
| prism2mib_priv }, |
| |
| /* p2Static MIB's */ |
| |
| { DIDmib_p2_p2Static_p2CnfPortType, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFPORTTYPE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfOwnMACAddress, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFOWNMACADDR, HFA384x_RID_CNFOWNMACADDR_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_p2_p2Static_p2CnfDesiredSSID, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFDESIREDSSID, HFA384x_RID_CNFDESIREDSSID_LEN, 0, |
| prism2mib_bytestr2pstr }, |
| { DIDmib_p2_p2Static_p2CnfOwnChannel, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFOWNCHANNEL, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfOwnSSID, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFOWNSSID, HFA384x_RID_CNFOWNSSID_LEN, 0, |
| prism2mib_bytestr2pstr }, |
| { DIDmib_p2_p2Static_p2CnfOwnATIMWindow, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFOWNATIMWIN, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfSystemScale, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFSYSSCALE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfMaxDataLength, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFMAXDATALEN, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfWDSAddress, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFWDSADDR, HFA384x_RID_CNFWDSADDR_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_p2_p2Static_p2CnfPMEnabled, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFPMENABLED, 0, 0, |
| prism2mib_truth }, |
| { DIDmib_p2_p2Static_p2CnfPMEPS, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFPMEPS, 0, 0, |
| prism2mib_truth }, |
| { DIDmib_p2_p2Static_p2CnfMulticastReceive, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFMULTICASTRX, 0, 0, |
| prism2mib_truth }, |
| { DIDmib_p2_p2Static_p2CnfMaxSleepDuration, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFMAXSLEEPDUR, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfPMHoldoverDuration, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFPMHOLDDUR, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfOwnName, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFOWNNAME, HFA384x_RID_CNFOWNNAME_LEN, 0, |
| prism2mib_bytestr2pstr }, |
| { DIDmib_p2_p2Static_p2CnfOwnDTIMPeriod, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFOWNDTIMPER, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfWDSAddress1, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFWDSADDR1, HFA384x_RID_CNFWDSADDR1_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_p2_p2Static_p2CnfWDSAddress2, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFWDSADDR2, HFA384x_RID_CNFWDSADDR2_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_p2_p2Static_p2CnfWDSAddress3, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFWDSADDR3, HFA384x_RID_CNFWDSADDR3_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_p2_p2Static_p2CnfWDSAddress4, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFWDSADDR4, HFA384x_RID_CNFWDSADDR4_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_p2_p2Static_p2CnfWDSAddress5, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFWDSADDR5, HFA384x_RID_CNFWDSADDR5_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_p2_p2Static_p2CnfWDSAddress6, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFWDSADDR6, HFA384x_RID_CNFWDSADDR6_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_p2_p2Static_p2CnfMulticastPMBuffering, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFMCASTPMBUFF, 0, 0, |
| prism2mib_truth }, |
| { DIDmib_p2_p2Static_p2CnfWEPDefaultKeyID, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFWEPDEFAULTKEYID, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfWEPDefaultKey0, |
| F_AP | F_STA | F_WRITE, |
| HFA384x_RID_CNFWEPDEFAULTKEY0, 0, 0, |
| prism2mib_wepdefaultkey }, |
| { DIDmib_p2_p2Static_p2CnfWEPDefaultKey1, |
| F_AP | F_STA | F_WRITE, |
| HFA384x_RID_CNFWEPDEFAULTKEY1, 0, 0, |
| prism2mib_wepdefaultkey }, |
| { DIDmib_p2_p2Static_p2CnfWEPDefaultKey2, |
| F_AP | F_STA | F_WRITE, |
| HFA384x_RID_CNFWEPDEFAULTKEY2, 0, 0, |
| prism2mib_wepdefaultkey }, |
| { DIDmib_p2_p2Static_p2CnfWEPDefaultKey3, |
| F_AP | F_STA | F_WRITE, |
| HFA384x_RID_CNFWEPDEFAULTKEY3, 0, 0, |
| prism2mib_wepdefaultkey }, |
| { DIDmib_p2_p2Static_p2CnfWEPFlags, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFWEPFLAGS, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfAuthentication, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFAUTHENTICATION, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfMaxAssociatedStations, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFMAXASSOCSTATIONS, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfTxControl, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFTXCONTROL, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfRoamingMode, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFROAMINGMODE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfHostAuthentication, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFHOSTAUTHASSOC, 0, 0, |
| prism2mib_truth }, |
| { DIDmib_p2_p2Static_p2CnfRcvCrcError, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFRCVCRCERROR, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfAltRetryCount, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFALTRETRYCNT, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfBeaconInterval, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFAPBCNINT, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfMediumOccupancyLimit, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFAPPCFINFO, HFA384x_RID_CNFAPPCFINFO_LEN, 0, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2Static_p2CnfCFPPeriod, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFAPPCFINFO, HFA384x_RID_CNFAPPCFINFO_LEN, 1, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2Static_p2CnfCFPMaxDuration, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFAPPCFINFO, HFA384x_RID_CNFAPPCFINFO_LEN, 2, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2Static_p2CnfCFPFlags, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFAPPCFINFO, HFA384x_RID_CNFAPPCFINFO_LEN, 3, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2Static_p2CnfSTAPCFInfo, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFSTAPCFINFO, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfPriorityQUsage, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFPRIORITYQUSAGE, HFA384x_RID_CNFPRIOQUSAGE_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2Static_p2CnfTIMCtrl, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFTIMCTRL, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfThirty2Tally, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFTHIRTY2TALLY, 0, 0, |
| prism2mib_truth }, |
| { DIDmib_p2_p2Static_p2CnfEnhSecurity, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFENHSECURITY, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfShortPreamble, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFSHORTPREAMBLE, 0, 0, |
| prism2mib_preamble }, |
| { DIDmib_p2_p2Static_p2CnfExcludeLongPreamble, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_CNFEXCLONGPREAMBLE, 0, 0, |
| prism2mib_truth }, |
| { DIDmib_p2_p2Static_p2CnfAuthenticationRspTO, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFAUTHRSPTIMEOUT, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfBasicRates, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFBASICRATES, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Static_p2CnfSupportedRates, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFSUPPRATES, 0, 0, |
| prism2mib_uint32 }, |
| |
| /* p2Dynamic MIB's */ |
| |
| { DIDmib_p2_p2Dynamic_p2CreateIBSS, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CREATEIBSS, 0, 0, |
| prism2mib_truth }, |
| { DIDmib_p2_p2Dynamic_p2FragmentationThreshold, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_FRAGTHRESH, 0, 0, |
| prism2mib_fragmentationthreshold }, |
| { DIDmib_p2_p2Dynamic_p2RTSThreshold, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_RTSTHRESH, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2TxRateControl, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_TXRATECNTL, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2PromiscuousMode, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_PROMISCMODE, 0, 0, |
| prism2mib_truth }, |
| { DIDmib_p2_p2Dynamic_p2FragmentationThreshold0, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_FRAGTHRESH0, 0, 0, |
| prism2mib_fragmentationthreshold }, |
| { DIDmib_p2_p2Dynamic_p2FragmentationThreshold1, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_FRAGTHRESH1, 0, 0, |
| prism2mib_fragmentationthreshold }, |
| { DIDmib_p2_p2Dynamic_p2FragmentationThreshold2, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_FRAGTHRESH2, 0, 0, |
| prism2mib_fragmentationthreshold }, |
| { DIDmib_p2_p2Dynamic_p2FragmentationThreshold3, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_FRAGTHRESH3, 0, 0, |
| prism2mib_fragmentationthreshold }, |
| { DIDmib_p2_p2Dynamic_p2FragmentationThreshold4, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_FRAGTHRESH4, 0, 0, |
| prism2mib_fragmentationthreshold }, |
| { DIDmib_p2_p2Dynamic_p2FragmentationThreshold5, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_FRAGTHRESH5, 0, 0, |
| prism2mib_fragmentationthreshold }, |
| { DIDmib_p2_p2Dynamic_p2FragmentationThreshold6, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_FRAGTHRESH6, 0, 0, |
| prism2mib_fragmentationthreshold }, |
| { DIDmib_p2_p2Dynamic_p2RTSThreshold0, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_RTSTHRESH0, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2RTSThreshold1, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_RTSTHRESH1, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2RTSThreshold2, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_RTSTHRESH2, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2RTSThreshold3, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_RTSTHRESH3, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2RTSThreshold4, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_RTSTHRESH4, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2RTSThreshold5, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_RTSTHRESH5, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2RTSThreshold6, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_RTSTHRESH6, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2TxRateControl0, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_TXRATECNTL0, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2TxRateControl1, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_TXRATECNTL1, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2TxRateControl2, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_TXRATECNTL2, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2TxRateControl3, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_TXRATECNTL3, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2TxRateControl4, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_TXRATECNTL4, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2TxRateControl5, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_TXRATECNTL5, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Dynamic_p2TxRateControl6, |
| F_AP | F_READ | F_WRITE, |
| HFA384x_RID_TXRATECNTL6, 0, 0, |
| prism2mib_uint32 }, |
| |
| /* p2Behavior MIB's */ |
| |
| { DIDmib_p2_p2Behavior_p2TickTime, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_ITICKTIME, 0, 0, |
| prism2mib_uint32 }, |
| |
| /* p2NIC MIB's */ |
| |
| { DIDmib_p2_p2NIC_p2MaxLoadTime, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_MAXLOADTIME, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2NIC_p2DLBufferPage, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_DOWNLOADBUFFER, HFA384x_RID_DOWNLOADBUFFER_LEN, 0, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2NIC_p2DLBufferOffset, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_DOWNLOADBUFFER, HFA384x_RID_DOWNLOADBUFFER_LEN, 1, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2NIC_p2DLBufferLength, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_DOWNLOADBUFFER, HFA384x_RID_DOWNLOADBUFFER_LEN, 2, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2NIC_p2PRIIdentity, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_PRIIDENTITY, HFA384x_RID_PRIIDENTITY_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2NIC_p2PRISupRange, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_PRISUPRANGE, HFA384x_RID_PRISUPRANGE_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2NIC_p2CFIActRanges, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_PRI_CFIACTRANGES, HFA384x_RID_CFIACTRANGES_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2NIC_p2BuildSequence, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_BUILDSEQ, HFA384x_RID_BUILDSEQ_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2NIC_p2PrimaryFWID, |
| F_AP | F_STA | F_READ, |
| 0, 0, 0, |
| prism2mib_fwid }, |
| { DIDmib_p2_p2NIC_p2SecondaryFWID, |
| F_AP | F_STA | F_READ, |
| 0, 0, 0, |
| prism2mib_fwid }, |
| { DIDmib_p2_p2NIC_p2TertiaryFWID, |
| F_AP | F_READ, |
| 0, 0, 0, |
| prism2mib_fwid }, |
| { DIDmib_p2_p2NIC_p2NICSerialNumber, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_NICSERIALNUMBER, HFA384x_RID_NICSERIALNUMBER_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_p2_p2NIC_p2NICIdentity, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_NICIDENTITY, HFA384x_RID_NICIDENTITY_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2NIC_p2MFISupRange, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_MFISUPRANGE, HFA384x_RID_MFISUPRANGE_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2NIC_p2CFISupRange, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_CFISUPRANGE, HFA384x_RID_CFISUPRANGE_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2NIC_p2ChannelList, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_CHANNELLIST, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2NIC_p2RegulatoryDomains, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_REGULATORYDOMAINS, HFA384x_RID_REGULATORYDOMAINS_LEN, 0, |
| prism2mib_regulatorydomains }, |
| { DIDmib_p2_p2NIC_p2TempType, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_TEMPTYPE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2NIC_p2STAIdentity, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_STAIDENTITY, HFA384x_RID_STAIDENTITY_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2NIC_p2STASupRange, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_STASUPRANGE, HFA384x_RID_STASUPRANGE_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2NIC_p2MFIActRanges, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_STA_MFIACTRANGES, HFA384x_RID_MFIACTRANGES_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2NIC_p2STACFIActRanges, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_STA_CFIACTRANGES, HFA384x_RID_CFIACTRANGES2_LEN, 0, |
| prism2mib_uint32array }, |
| |
| /* p2MAC MIB's */ |
| |
| { DIDmib_p2_p2MAC_p2PortStatus, |
| F_STA | F_READ, |
| HFA384x_RID_PORTSTATUS, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2CurrentSSID, |
| F_STA | F_READ, |
| HFA384x_RID_CURRENTSSID, HFA384x_RID_CURRENTSSID_LEN, 0, |
| prism2mib_bytestr2pstr }, |
| { DIDmib_p2_p2MAC_p2CurrentBSSID, |
| F_STA | F_READ, |
| HFA384x_RID_CURRENTBSSID, HFA384x_RID_CURRENTBSSID_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| { DIDmib_p2_p2MAC_p2CommsQuality, |
| F_STA | F_READ, |
| HFA384x_RID_COMMSQUALITY, HFA384x_RID_COMMSQUALITY_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2MAC_p2CommsQualityCQ, |
| F_STA | F_READ, |
| HFA384x_RID_COMMSQUALITY, HFA384x_RID_COMMSQUALITY_LEN, 0, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2MAC_p2CommsQualityASL, |
| F_STA | F_READ, |
| HFA384x_RID_COMMSQUALITY, HFA384x_RID_COMMSQUALITY_LEN, 1, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2MAC_p2CommsQualityANL, |
| F_STA | F_READ, |
| HFA384x_RID_COMMSQUALITY, HFA384x_RID_COMMSQUALITY_LEN, 2, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2MAC_p2dbmCommsQuality, |
| F_STA | F_READ, |
| HFA384x_RID_DBMCOMMSQUALITY, HFA384x_RID_DBMCOMMSQUALITY_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2MAC_p2dbmCommsQualityCQ, |
| F_STA | F_READ, |
| HFA384x_RID_COMMSQUALITY, HFA384x_RID_COMMSQUALITY_LEN, 0, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2MAC_p2dbmCommsQualityASL, |
| F_STA | F_READ, |
| HFA384x_RID_COMMSQUALITY, HFA384x_RID_COMMSQUALITY_LEN, 1, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2MAC_p2dbmCommsQualityANL, |
| F_STA | F_READ, |
| HFA384x_RID_COMMSQUALITY, HFA384x_RID_COMMSQUALITY_LEN, 2, |
| prism2mib_uint32offset }, |
| { DIDmib_p2_p2MAC_p2CurrentTxRate, |
| F_STA | F_READ, |
| HFA384x_RID_CURRENTTXRATE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2CurrentBeaconInterval, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_CURRENTBCNINT, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2StaCurrentScaleThresholds, |
| F_STA | F_READ, |
| HFA384x_RID_CURRENTSCALETHRESH, HFA384x_RID_STACURSCALETHRESH_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2MAC_p2APCurrentScaleThresholds, |
| F_AP | F_READ, |
| HFA384x_RID_CURRENTSCALETHRESH, HFA384x_RID_APCURSCALETHRESH_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2MAC_p2ProtocolRspTime, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_PROTOCOLRSPTIME, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2ShortRetryLimit, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_SHORTRETRYLIMIT, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2LongRetryLimit, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_LONGRETRYLIMIT, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2MaxTransmitLifetime, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_MAXTXLIFETIME, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2MaxReceiveLifetime, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_MAXRXLIFETIME, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2CFPollable, |
| F_STA | F_READ, |
| HFA384x_RID_CFPOLLABLE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2AuthenticationAlgorithms, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_AUTHALGORITHMS, HFA384x_RID_AUTHALGORITHMS_LEN, 0, |
| prism2mib_uint32array }, |
| { DIDmib_p2_p2MAC_p2PrivacyOptionImplemented, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_PRIVACYOPTIMP, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2CurrentTxRate1, |
| F_AP | F_READ, |
| HFA384x_RID_CURRENTTXRATE1, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2CurrentTxRate2, |
| F_AP | F_READ, |
| HFA384x_RID_CURRENTTXRATE2, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2CurrentTxRate3, |
| F_AP | F_READ, |
| HFA384x_RID_CURRENTTXRATE3, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2CurrentTxRate4, |
| F_AP | F_READ, |
| HFA384x_RID_CURRENTTXRATE4, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2CurrentTxRate5, |
| F_AP | F_READ, |
| HFA384x_RID_CURRENTTXRATE5, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2CurrentTxRate6, |
| F_AP | F_READ, |
| HFA384x_RID_CURRENTTXRATE6, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2MAC_p2OwnMACAddress, |
| F_AP | F_READ, |
| HFA384x_RID_OWNMACADDRESS, HFA384x_RID_OWNMACADDRESS_LEN, 0, |
| prism2mib_bytearea2pstr }, |
| |
| /* p2Modem MIB's */ |
| |
| { DIDmib_p2_p2Modem_p2PHYType, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_PHYTYPE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Modem_p2CurrentChannel, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_CURRENTCHANNEL, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Modem_p2CurrentPowerState, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_CURRENTPOWERSTATE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Modem_p2CCAMode, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_CCAMODE, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Modem_p2TxPowerMax, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_TXPOWERMAX, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel, |
| F_AP | F_STA | F_READ | F_WRITE, |
| HFA384x_RID_TXPOWERMAX, 0, 0, |
| prism2mib_uint32 }, |
| { DIDmib_p2_p2Modem_p2SupportedDataRates, |
| F_AP | F_STA | F_READ, |
| HFA384x_RID_SUPPORTEDDATARATES, HFA384x_RID_SUPPORTEDDATARATES_LEN, 0, |
| prism2mib_bytestr2pstr }, |
| |
| /* And finally, lnx mibs */ |
| { DIDmib_lnx_lnxConfigTable_lnxRSNAIE, |
| F_STA | F_READ | F_WRITE, |
| HFA384x_RID_CNFWPADATA, 0, 0, |
| prism2mib_priv }, |
| { 0, 0, 0, 0, 0, NULL}}; |
| |
| /*---------------------------------------------------------------- |
| These MIB's are not supported at this time: |
| |
| DIDmib_dot11phy_dot11PhyOperationTable_dot11ChannelAgilityPresent |
| DIDmib_dot11phy_dot11PhyOperationTable_dot11ChannelAgilityEnabled |
| DIDmib_dot11phy_dot11PhyDSSSTable_dot11PBCCOptionImplemented |
| DIDmib_dot11phy_dot11RegDomainsSupportedTable_dot11RegDomainsSupportIndex |
| DIDmib_dot11phy_dot11SupportedDataRatesTxTable_dot11SupportedDataRatesTxIndex |
| DIDmib_dot11phy_dot11SupportedDataRatesTxTable_dot11SupportedDataRatesTxValue |
| DIDmib_dot11phy_dot11SupportedDataRatesRxTable_dot11SupportedDataRatesRxIndex |
| DIDmib_dot11phy_dot11SupportedDataRatesRxTable_dot11SupportedDataRatesRxValue |
| |
| DIDmib_dot11phy_dot11RegDomainsSupportedTable_dot11RegDomainsSupportValue |
| TODO: need to investigate why wlan has this as enumerated and Prism2 has this |
| as btye str. |
| |
| DIDmib_dot11phy_dot11PhyDSSSTable_dot11ShortPreambleOptionImplemented |
| TODO: Find out the firmware version number(s) for identifying |
| whether the firmware is capable of short preamble. TRUE or FALSE |
| will be returned based on the version of the firmware. |
| |
| WEP Key mappings aren't supported in the f/w. |
| DIDmib_dot11smt_dot11WEPKeyMappingsTable_dot11WEPKeyMappingIndex |
| DIDmib_dot11smt_dot11WEPKeyMappingsTable_dot11WEPKeyMappingAddress |
| DIDmib_dot11smt_dot11WEPKeyMappingsTable_dot11WEPKeyMappingWEPOn |
| DIDmib_dot11smt_dot11WEPKeyMappingsTable_dot11WEPKeyMappingValue |
| DIDmib_dot11smt_dot11PrivacyTable_dot11WEPKeyMappingLength |
| |
| TODO: implement counters. |
| DIDmib_dot11smt_dot11PrivacyTable_dot11WEPICVErrorCount |
| DIDmib_dot11smt_dot11PrivacyTable_dot11WEPExcludedCount |
| DIDmib_dot11mac_dot11CountersTable_dot11TransmittedFragmentCount |
| DIDmib_dot11mac_dot11CountersTable_dot11MulticastTransmittedFrameCount |
| DIDmib_dot11mac_dot11CountersTable_dot11FailedCount |
| DIDmib_dot11mac_dot11CountersTable_dot11RetryCount |
| DIDmib_dot11mac_dot11CountersTable_dot11MultipleRetryCount |
| DIDmib_dot11mac_dot11CountersTable_dot11FrameDuplicateCount |
| DIDmib_dot11mac_dot11CountersTable_dot11RTSSuccessCount |
| DIDmib_dot11mac_dot11CountersTable_dot11RTSFailureCount |
| DIDmib_dot11mac_dot11CountersTable_dot11ACKFailureCount |
| DIDmib_dot11mac_dot11CountersTable_dot11ReceivedFragmentCount |
| DIDmib_dot11mac_dot11CountersTable_dot11MulticastReceivedFrameCount |
| DIDmib_dot11mac_dot11CountersTable_dot11FCSErrorCount |
| DIDmib_dot11mac_dot11CountersTable_dot11TransmittedFrameCount |
| DIDmib_dot11mac_dot11CountersTable_dot11WEPUndecryptableCount |
| |
| TODO: implement sane values for these. |
| DIDmib_dot11mac_dot11OperationTable_dot11ManufacturerID |
| DIDmib_dot11mac_dot11OperationTable_dot11ProductID |
| |
| Not too worried about these at the moment. |
| DIDmib_dot11phy_dot11PhyAntennaTable_dot11CurrentTxAntenna |
| DIDmib_dot11phy_dot11PhyAntennaTable_dot11DiversitySupport |
| DIDmib_dot11phy_dot11PhyAntennaTable_dot11CurrentRxAntenna |
| DIDmib_dot11phy_dot11PhyTxPowerTable_dot11NumberSupportedPowerLevels |
| DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel1 |
| DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel2 |
| DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel3 |
| DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel4 |
| DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel5 |
| DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel6 |
| DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel7 |
| DIDmib_dot11phy_dot11PhyTxPowerTable_dot11TxPowerLevel8 |
| DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel |
| |
| Ummm, FH and IR don't apply |
| DIDmib_dot11phy_dot11PhyFHSSTable_dot11HopTime |
| DIDmib_dot11phy_dot11PhyFHSSTable_dot11CurrentChannelNumber |
| DIDmib_dot11phy_dot11PhyFHSSTable_dot11MaxDwellTime |
| DIDmib_dot11phy_dot11PhyFHSSTable_dot11CurrentDwellTime |
| DIDmib_dot11phy_dot11PhyFHSSTable_dot11CurrentSet |
| DIDmib_dot11phy_dot11PhyFHSSTable_dot11CurrentPattern |
| DIDmib_dot11phy_dot11PhyFHSSTable_dot11CurrentIndex |
| DIDmib_dot11phy_dot11PhyDSSSTable_dot11CCAModeSupported |
| DIDmib_dot11phy_dot11PhyDSSSTable_dot11EDThreshold |
| DIDmib_dot11phy_dot11PhyIRTable_dot11CCAWatchdogTimerMax |
| DIDmib_dot11phy_dot11PhyIRTable_dot11CCAWatchdogCountMax |
| DIDmib_dot11phy_dot11PhyIRTable_dot11CCAWatchdogTimerMin |
| DIDmib_dot11phy_dot11PhyIRTable_dot11CCAWatchdogCountMin |
| |
| We just don't have enough antennas right now to worry about this. |
| DIDmib_dot11phy_dot11AntennasListTable_dot11AntennaListIndex |
| DIDmib_dot11phy_dot11AntennasListTable_dot11SupportedTxAntenna |
| DIDmib_dot11phy_dot11AntennasListTable_dot11SupportedRxAntenna |
| DIDmib_dot11phy_dot11AntennasListTable_dot11DiversitySelectionRx |
| |
| ------------------------------------------------------------------*/ |
| |
| /*================================================================*/ |
| /* Function Definitions */ |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_mibset_mibget |
| * |
| * Set the value of a mib item. |
| * |
| * Arguments: |
| * wlandev wlan device structure |
| * msgp ptr to msg buffer |
| * |
| * Returns: |
| * 0 success and done |
| * <0 success, but we're waiting for something to finish. |
| * >0 an error occurred while handling the message. |
| * Side effects: |
| * |
| * Call context: |
| * process thread (usually) |
| * interrupt |
| ----------------------------------------------------------------*/ |
| |
| int prism2mgmt_mibset_mibget(wlandevice_t *wlandev, void *msgp) |
| { |
| hfa384x_t *hw = wlandev->priv; |
| int result, isget; |
| mibrec_t *mib; |
| UINT16 which; |
| |
| p80211msg_dot11req_mibset_t *msg = msgp; |
| p80211itemd_t *mibitem; |
| |
| DBFENTER; |
| |
| msg->resultcode.status = P80211ENUM_msgitem_status_data_ok; |
| msg->resultcode.data = P80211ENUM_resultcode_success; |
| |
| /* |
| ** Determine if this is an Access Point or a station. |
| */ |
| |
| which = hw->ap ? F_AP : F_STA; |
| |
| /* |
| ** Find the MIB in the MIB table. Note that a MIB may be in the |
| ** table twice...once for an AP and once for a station. Make sure |
| ** to get the correct one. Note that DID=0 marks the end of the |
| ** MIB table. |
| */ |
| |
| mibitem = (p80211itemd_t *) msg->mibattribute.data; |
| |
| for (mib = mibtab; mib->did != 0; mib++) |
| if (mib->did == mibitem->did && (mib->flag & which)) |
| break; |
| |
| if (mib->did == 0) { |
| msg->resultcode.data = P80211ENUM_resultcode_not_supported; |
| goto done; |
| } |
| |
| /* |
| ** Determine if this is a "mibget" or a "mibset". If this is a |
| ** "mibget", then make sure that the MIB may be read. Otherwise, |
| ** this is a "mibset" so make make sure that the MIB may be written. |
| */ |
| |
| isget = (msg->msgcode == DIDmsg_dot11req_mibget); |
| |
| if (isget) { |
| if (!(mib->flag & F_READ)) { |
| msg->resultcode.data = |
| P80211ENUM_resultcode_cant_get_writeonly_mib; |
| goto done; |
| } |
| } else { |
| if (!(mib->flag & F_WRITE)) { |
| msg->resultcode.data = |
| P80211ENUM_resultcode_cant_set_readonly_mib; |
| goto done; |
| } |
| } |
| |
| /* |
| ** Execute the MIB function. If things worked okay, then make |
| ** sure that the MIB function also worked okay. If so, and this |
| ** is a "mibget", then the status value must be set for both the |
| ** "mibattribute" parameter and the mib item within the data |
| ** portion of the "mibattribute". |
| */ |
| |
| result = mib->func(mib, isget, wlandev, hw, msg, |
| (void *) mibitem->data); |
| |
| if (msg->resultcode.data == P80211ENUM_resultcode_success) { |
| if (result != 0) { |
| WLAN_LOG_DEBUG(1, "get/set failure, result=%d\n", |
| result); |
| msg->resultcode.data = |
| P80211ENUM_resultcode_implementation_failure; |
| } else { |
| if (isget) { |
| msg->mibattribute.status = |
| P80211ENUM_msgitem_status_data_ok; |
| mibitem->status = |
| P80211ENUM_msgitem_status_data_ok; |
| } |
| } |
| } |
| |
| done: |
| DBFEXIT; |
| |
| return(0); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_bytestr2pstr |
| * |
| * Get/set pstr data to/from a byte string. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Number of bytes of RID data. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_bytestr2pstr( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| p80211pstrd_t *pstr = (p80211pstrd_t*) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| hfa384x_bytestr_t *p2bytestr = (hfa384x_bytestr_t*) bytebuf; |
| |
| DBFENTER; |
| |
| if (isget) { |
| result = hfa384x_drvr_getconfig(hw, mib->parm1, bytebuf, mib->parm2); |
| prism2mgmt_bytestr2pstr(p2bytestr, pstr); |
| } else { |
| memset(bytebuf, 0, mib->parm2); |
| prism2mgmt_pstr2bytestr(p2bytestr, pstr); |
| result = hfa384x_drvr_setconfig(hw, mib->parm1, bytebuf, mib->parm2); |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_bytearea2pstr |
| * |
| * Get/set pstr data to/from a byte area. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Number of bytes of RID data. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_bytearea2pstr( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| p80211pstrd_t *pstr = (p80211pstrd_t*) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| |
| DBFENTER; |
| |
| if (isget) { |
| result = hfa384x_drvr_getconfig(hw, mib->parm1, bytebuf, mib->parm2); |
| prism2mgmt_bytearea2pstr(bytebuf, pstr, mib->parm2); |
| } else { |
| memset(bytebuf, 0, mib->parm2); |
| prism2mgmt_pstr2bytearea(bytebuf, pstr); |
| result = hfa384x_drvr_setconfig(hw, mib->parm1, bytebuf, mib->parm2); |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_uint32 |
| * |
| * Get/set uint32 data. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_uint32( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| UINT32 *uint32 = (UINT32*) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| UINT16 *wordbuf = (UINT16*) bytebuf; |
| |
| DBFENTER; |
| |
| if (isget) { |
| result = hfa384x_drvr_getconfig16(hw, mib->parm1, wordbuf); |
| *uint32 = *wordbuf; |
| /* [MSM] Removed, getconfig16 returns the value in host order. |
| * prism2mgmt_prism2int2p80211int(wordbuf, uint32); |
| */ |
| } else { |
| /* [MSM] Removed, setconfig16 expects host order. |
| * prism2mgmt_p80211int2prism2int(wordbuf, uint32); |
| */ |
| *wordbuf = *uint32; |
| result = hfa384x_drvr_setconfig16(hw, mib->parm1, *wordbuf); |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_uint32array |
| * |
| * Get/set an array of uint32 data. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Number of bytes of RID data. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_uint32array( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| UINT32 *uint32 = (UINT32 *) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| UINT16 *wordbuf = (UINT16*) bytebuf; |
| int i, cnt; |
| |
| DBFENTER; |
| |
| cnt = mib->parm2 / sizeof(UINT16); |
| |
| if (isget) { |
| result = hfa384x_drvr_getconfig(hw, mib->parm1, wordbuf, mib->parm2); |
| for (i = 0; i < cnt; i++) |
| prism2mgmt_prism2int2p80211int(wordbuf+i, uint32+i); |
| } else { |
| for (i = 0; i < cnt; i++) |
| prism2mgmt_p80211int2prism2int(wordbuf+i, uint32+i); |
| result = hfa384x_drvr_setconfig(hw, mib->parm1, wordbuf, mib->parm2); |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_uint32offset |
| * |
| * Get/set a single element in an array of uint32 data. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Number of bytes of RID data. |
| * parm3 Element index. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_uint32offset( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| UINT32 *uint32 = (UINT32*) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| UINT16 *wordbuf = (UINT16*) bytebuf; |
| UINT16 cnt; |
| |
| DBFENTER; |
| |
| cnt = mib->parm2 / sizeof(UINT16); |
| |
| result = hfa384x_drvr_getconfig(hw, mib->parm1, wordbuf, mib->parm2); |
| if (result == 0) { |
| if (isget) { |
| if (mib->parm3 < cnt) |
| prism2mgmt_prism2int2p80211int(wordbuf+mib->parm3, uint32); |
| else |
| *uint32 = 0; |
| } else { |
| if (mib->parm3 < cnt) { |
| prism2mgmt_p80211int2prism2int(wordbuf+mib->parm3, uint32); |
| result = hfa384x_drvr_setconfig(hw, mib->parm1, wordbuf, mib->parm2); |
| } |
| } |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_truth |
| * |
| * Get/set truth data. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_truth( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| UINT32 *uint32 = (UINT32*) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| UINT16 *wordbuf = (UINT16*) bytebuf; |
| |
| DBFENTER; |
| |
| if (isget) { |
| result = hfa384x_drvr_getconfig16(hw, mib->parm1, wordbuf); |
| *uint32 = (*wordbuf) ? |
| P80211ENUM_truth_true : P80211ENUM_truth_false; |
| } else { |
| *wordbuf = ((*uint32) == P80211ENUM_truth_true) ? 1 : 0; |
| result = hfa384x_drvr_setconfig16(hw, mib->parm1, *wordbuf); |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_flag |
| * |
| * Get/set a flag. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Bit to get/set. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_flag( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| UINT32 *uint32 = (UINT32*) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| UINT16 *wordbuf = (UINT16*) bytebuf; |
| UINT32 flags; |
| |
| DBFENTER; |
| |
| result = hfa384x_drvr_getconfig16(hw, mib->parm1, wordbuf); |
| if (result == 0) { |
| /* [MSM] Removed, getconfig16 returns the value in host order. |
| * prism2mgmt_prism2int2p80211int(wordbuf, &flags); |
| */ |
| flags = *wordbuf; |
| if (isget) { |
| *uint32 = (flags & mib->parm2) ? |
| P80211ENUM_truth_true : P80211ENUM_truth_false; |
| } else { |
| if ((*uint32) == P80211ENUM_truth_true) |
| flags |= mib->parm2; |
| else |
| flags &= ~mib->parm2; |
| /* [MSM] Removed, setconfig16 expects host order. |
| * prism2mgmt_p80211int2prism2int(wordbuf, &flags); |
| */ |
| *wordbuf = flags; |
| result = hfa384x_drvr_setconfig16(hw, mib->parm1, *wordbuf); |
| } |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_appcfinfoflag |
| * |
| * Get/set a single flag in the APPCFINFO record. |
| * |
| * MIB record parameters: |
| * parm1 Bit to get/set. |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_appcfinfoflag( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| UINT32 *uint32 = (UINT32*) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| UINT16 *wordbuf = (UINT16*) bytebuf; |
| UINT16 word; |
| |
| DBFENTER; |
| |
| result = hfa384x_drvr_getconfig(hw, HFA384x_RID_CNFAPPCFINFO, |
| bytebuf, HFA384x_RID_CNFAPPCFINFO_LEN); |
| if (result == 0) { |
| if (isget) { |
| *uint32 = (hfa384x2host_16(wordbuf[3]) & mib->parm1) ? |
| P80211ENUM_truth_true : P80211ENUM_truth_false; |
| } else { |
| word = hfa384x2host_16(wordbuf[3]); |
| word = ((*uint32) == P80211ENUM_truth_true) ? |
| (word | mib->parm1) : (word & ~mib->parm1); |
| wordbuf[3] = host2hfa384x_16(word); |
| result = hfa384x_drvr_setconfig(hw, HFA384x_RID_CNFAPPCFINFO, |
| bytebuf, HFA384x_RID_CNFAPPCFINFO_LEN); |
| } |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_regulatorydomains |
| * |
| * Get regulatory domain data. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Number of bytes of RID data. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_regulatorydomains( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| UINT32 cnt; |
| p80211pstrd_t *pstr = (p80211pstrd_t*) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| UINT16 *wordbuf = (UINT16*) bytebuf; |
| |
| DBFENTER; |
| |
| result = 0; |
| |
| if (isget) { |
| result = hfa384x_drvr_getconfig(hw, mib->parm1, wordbuf, mib->parm2); |
| prism2mgmt_prism2int2p80211int(wordbuf, &cnt); |
| pstr->len = (UINT8) cnt; |
| memcpy(pstr->data, &wordbuf[1], pstr->len); |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_wepdefaultkey |
| * |
| * Get/set WEP default keys. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Number of bytes of RID data. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_wepdefaultkey( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| p80211pstrd_t *pstr = (p80211pstrd_t*) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| UINT16 len; |
| |
| DBFENTER; |
| |
| if (isget) { |
| result = 0; /* Should never happen. */ |
| } else { |
| len = (pstr->len > 5) ? HFA384x_RID_CNFWEP128DEFAULTKEY_LEN : |
| HFA384x_RID_CNFWEPDEFAULTKEY_LEN; |
| memset(bytebuf, 0, len); |
| prism2mgmt_pstr2bytearea(bytebuf, pstr); |
| result = hfa384x_drvr_setconfig(hw, mib->parm1, bytebuf, len); |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_powermanagement |
| * |
| * Get/set 802.11 power management value. Note that this is defined differently |
| * by 802.11 and Prism2: |
| * |
| * Meaning 802.11 Prism2 |
| * active 1 false |
| * powersave 2 true |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_powermanagement( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| UINT32 *uint32 = (UINT32*) data; |
| UINT32 value; |
| |
| DBFENTER; |
| |
| if (isget) { |
| result = prism2mib_uint32(mib, isget, wlandev, hw, msg, &value); |
| *uint32 = (value == 0) ? 1 : 2; |
| } else { |
| value = ((*uint32) == 1) ? 0 : 1; |
| result = prism2mib_uint32(mib, isget, wlandev, hw, msg, &value); |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_preamble |
| * |
| * Get/set Prism2 short preamble |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_preamble( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| UINT32 *uint32 = (UINT32*) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| UINT16 *wordbuf = (UINT16*) bytebuf; |
| |
| DBFENTER; |
| |
| if (isget) { |
| result = hfa384x_drvr_getconfig16(hw, mib->parm1, wordbuf); |
| *uint32 = *wordbuf; |
| } else { |
| *wordbuf = *uint32; |
| result = hfa384x_drvr_setconfig16(hw, mib->parm1, *wordbuf); |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_privacyinvoked |
| * |
| * Get/set the dot11PrivacyInvoked value. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Bit value for PrivacyInvoked flag. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_privacyinvoked( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| |
| DBFENTER; |
| |
| if (wlandev->hostwep & HOSTWEP_DECRYPT) { |
| if (wlandev->hostwep & HOSTWEP_DECRYPT) |
| mib->parm2 |= HFA384x_WEPFLAGS_DISABLE_RXCRYPT; |
| if (wlandev->hostwep & HOSTWEP_ENCRYPT) |
| mib->parm2 |= HFA384x_WEPFLAGS_DISABLE_TXCRYPT; |
| } |
| |
| result = prism2mib_flag(mib, isget, wlandev, hw, msg, data); |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_excludeunencrypted |
| * |
| * Get/set the dot11ExcludeUnencrypted value. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Bit value for ExcludeUnencrypted flag. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_excludeunencrypted( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| |
| DBFENTER; |
| |
| result = prism2mib_flag(mib, isget, wlandev, hw, msg, data); |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_fragmentationthreshold |
| * |
| * Get/set the fragmentation threshold. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_fragmentationthreshold( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| UINT32 *uint32 = (UINT32*) data; |
| |
| DBFENTER; |
| |
| if (!isget) |
| if ((*uint32) % 2) { |
| WLAN_LOG_WARNING("Attempt to set odd number " |
| "FragmentationThreshold\n"); |
| msg->resultcode.data = P80211ENUM_resultcode_not_supported; |
| return(0); |
| } |
| |
| result = prism2mib_uint32(mib, isget, wlandev, hw, msg, data); |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_operationalrateset |
| * |
| * Get/set the operational rate set. |
| * |
| * MIB record parameters: |
| * parm1 Prism2 RID value. |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_operationalrateset( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| p80211pstrd_t *pstr = (p80211pstrd_t *) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| UINT16 *wordbuf = (UINT16*) bytebuf; |
| |
| DBFENTER; |
| |
| if (isget) { |
| result = hfa384x_drvr_getconfig16(hw, mib->parm1, wordbuf); |
| prism2mgmt_get_oprateset(wordbuf, pstr); |
| } else { |
| prism2mgmt_set_oprateset(wordbuf, pstr); |
| result = hfa384x_drvr_setconfig16(hw, mib->parm1, *wordbuf); |
| result = hfa384x_drvr_setconfig16(hw, HFA384x_RID_CNFSUPPRATES, *wordbuf); |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_groupaddress |
| * |
| * Get/set the dot11GroupAddressesTable. |
| * |
| * MIB record parameters: |
| * parm1 Not used. |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_groupaddress( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| p80211pstrd_t *pstr = (p80211pstrd_t *) data; |
| UINT8 bytebuf[MIB_TMP_MAXLEN]; |
| UINT16 len; |
| |
| DBFENTER; |
| |
| /* TODO: fix this. f/w doesn't support mcast filters */ |
| |
| if (isget) { |
| prism2mgmt_get_grpaddr(mib->did, pstr, hw); |
| return(0); |
| } |
| |
| result = prism2mgmt_set_grpaddr(mib->did, bytebuf, pstr, hw); |
| if (result != 0) { |
| msg->resultcode.data = P80211ENUM_resultcode_not_supported; |
| return(result); |
| } |
| |
| if (hw->dot11_grpcnt <= MAX_PRISM2_GRP_ADDR) { |
| len = hw->dot11_grpcnt * WLAN_ADDR_LEN; |
| memcpy(bytebuf, hw->dot11_grp_addr[0], len); |
| result = hfa384x_drvr_setconfig(hw, HFA384x_RID_GROUPADDR, bytebuf, len); |
| |
| /* |
| ** Turn off promiscuous mode if count is equal to MAX. We may |
| ** have been at a higher count in promiscuous mode and need to |
| ** turn it off. |
| */ |
| |
| /* but only if we're not already in promisc mode. :) */ |
| if ((hw->dot11_grpcnt == MAX_PRISM2_GRP_ADDR) && |
| !( wlandev->netdev->flags & IFF_PROMISC)) { |
| result = hfa384x_drvr_setconfig16(hw, |
| HFA384x_RID_PROMISCMODE, 0); |
| } |
| } else { |
| |
| /* |
| ** Clear group addresses in card and set to promiscuous mode. |
| */ |
| |
| memset(bytebuf, 0, sizeof(bytebuf)); |
| result = hfa384x_drvr_setconfig(hw, HFA384x_RID_GROUPADDR, |
| bytebuf, 0); |
| if (result == 0) { |
| result = hfa384x_drvr_setconfig16(hw, |
| HFA384x_RID_PROMISCMODE, 1); |
| } |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_fwid |
| * |
| * Get the firmware ID. |
| * |
| * MIB record parameters: |
| * parm1 Not used. |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_fwid( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| p80211pstrd_t *pstr = (p80211pstrd_t *) data; |
| hfa384x_FWID_t fwid; |
| |
| DBFENTER; |
| |
| if (isget) { |
| result = hfa384x_drvr_getconfig(hw, HFA384x_RID_FWID, |
| &fwid, HFA384x_RID_FWID_LEN); |
| if (mib->did == DIDmib_p2_p2NIC_p2PrimaryFWID) { |
| fwid.primary[HFA384x_FWID_LEN - 1] = '\0'; |
| pstr->len = strlen(fwid.primary); |
| memcpy(pstr->data, fwid.primary, pstr->len); |
| } else { |
| fwid.secondary[HFA384x_FWID_LEN - 1] = '\0'; |
| pstr->len = strlen(fwid.secondary); |
| memcpy(pstr->data, fwid.secondary, pstr->len); |
| } |
| } else |
| result = 0; /* Should never happen. */ |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_authalg |
| * |
| * Get values from the AuhtenticationAlgorithmsTable. |
| * |
| * MIB record parameters: |
| * parm1 Table index (1-6). |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_authalg( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| UINT32 *uint32 = (UINT32*) data; |
| |
| DBFENTER; |
| |
| /* MSM: pkx supplied code that code queries RID FD4D....but the f/w's |
| * results are bogus. Therefore, we have to simulate the appropriate |
| * results here in the driver based on our knowledge of existing MAC |
| * features. That's the whole point behind this ugly function. |
| */ |
| |
| if (isget) { |
| msg->resultcode.data = P80211ENUM_resultcode_success; |
| switch (mib->parm1) { |
| case 1: /* Open System */ |
| *uint32 = P80211ENUM_authalg_opensystem; |
| break; |
| case 2: /* SharedKey */ |
| *uint32 = P80211ENUM_authalg_sharedkey; |
| break; |
| default: |
| *uint32 = 0; |
| msg->resultcode.data = P80211ENUM_resultcode_not_supported; |
| break; |
| } |
| } |
| |
| DBFEXIT; |
| return(0); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_authalgenable |
| * |
| * Get/set the enable values from the AuhtenticationAlgorithmsTable. |
| * |
| * MIB record parameters: |
| * parm1 Table index (1-6). |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_authalgenable( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| int result; |
| UINT32 *uint32 = (UINT32*) data; |
| |
| int index; |
| UINT16 cnf_auth; |
| UINT16 mask; |
| |
| DBFENTER; |
| |
| index = mib->parm1 - 1; |
| |
| result = hfa384x_drvr_getconfig16( hw, |
| HFA384x_RID_CNFAUTHENTICATION, &cnf_auth); |
| WLAN_LOG_DEBUG(2,"cnfAuthentication0=%d, index=%d\n", cnf_auth, index); |
| |
| if (isget) { |
| if ( index == 0 || index == 1 ) { |
| *uint32 = (cnf_auth & (1<<index)) ? |
| P80211ENUM_truth_true: P80211ENUM_truth_false; |
| } else { |
| *uint32 = P80211ENUM_truth_false; |
| msg->resultcode.data = P80211ENUM_resultcode_not_supported; |
| } |
| } else { |
| if ( index == 0 || index == 1 ) { |
| mask = 1 << index; |
| if (*uint32==P80211ENUM_truth_true ) { |
| cnf_auth |= mask; |
| } else { |
| cnf_auth &= ~mask; |
| } |
| result = hfa384x_drvr_setconfig16( hw, |
| HFA384x_RID_CNFAUTHENTICATION, cnf_auth); |
| WLAN_LOG_DEBUG(2,"cnfAuthentication:=%d\n", cnf_auth); |
| if ( result ) { |
| WLAN_LOG_DEBUG(1,"Unable to set p2cnfAuthentication to %d\n", cnf_auth); |
| msg->resultcode.data = P80211ENUM_resultcode_implementation_failure; |
| } |
| } else { |
| msg->resultcode.data = P80211ENUM_resultcode_not_supported; |
| } |
| } |
| |
| DBFEXIT; |
| return(result); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_priv |
| * |
| * Get/set values in the "priv" data structure. |
| * |
| * MIB record parameters: |
| * parm1 Not used. |
| * parm2 Not used. |
| * parm3 Not used. |
| * |
| * Arguments: |
| * mib MIB record. |
| * isget MIBGET/MIBSET flag. |
| * wlandev wlan device structure. |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * msg Message structure. |
| * data Data buffer. |
| * |
| * Returns: |
| * 0 - Success. |
| * ~0 - Error. |
| * |
| ----------------------------------------------------------------*/ |
| |
| static int prism2mib_priv( |
| mibrec_t *mib, |
| int isget, |
| wlandevice_t *wlandev, |
| hfa384x_t *hw, |
| p80211msg_dot11req_mibset_t *msg, |
| void *data) |
| { |
| UINT32 *uint32 = (UINT32*) data; |
| p80211pstrd_t *pstr = (p80211pstrd_t*) data; |
| p80211macarray_t *macarray = (p80211macarray_t *) data; |
| |
| int i, cnt, result, done; |
| |
| prism2sta_authlist_t old; |
| |
| /* |
| ** "test" is a lot longer than necessary but who cares? ...as long as |
| ** it is long enough! |
| */ |
| |
| UINT8 test[sizeof(wlandev->rx) + sizeof(hw->tallies)]; |
| |
| DBFENTER; |
| |
| switch (mib->did) { |
| case DIDmib_p2_p2Table_p2ReceivedFrameStatistics: |
| |
| /* |
| ** Note: The values in this record are changed by the |
| ** interrupt handler and therefore cannot be guaranteed |
| ** to be stable while they are being copied. However, |
| ** the interrupt handler will take priority over this |
| ** code. Hence, if the same values are copied twice, |
| ** then we are ensured that the values have not been |
| ** changed. If they have, then just try again. Don't |
| ** try more than 10 times...if we still haven't got it, |
| ** then the values we do have are probably good enough. |
| ** This scheme for copying values is used in order to |
| ** prevent having to block the interrupt handler while |
| ** we copy the values. |
| */ |
| |
| if (isget) |
| for (i = 0; i < 10; i++) { |
| memcpy(data, &wlandev->rx, sizeof(wlandev->rx)); |
| memcpy(test, &wlandev->rx, sizeof(wlandev->rx)); |
| if (memcmp(data, test, sizeof(wlandev->rx)) == 0) break; |
| } |
| |
| break; |
| |
| case DIDmib_p2_p2Table_p2CommunicationTallies: |
| |
| /* |
| ** Note: The values in this record are changed by the |
| ** interrupt handler and therefore cannot be guaranteed |
| ** to be stable while they are being copied. See the |
| ** note above about copying values. |
| */ |
| |
| if (isget) { |
| result = hfa384x_drvr_commtallies(hw); |
| |
| /* ?????? We need to wait a bit here for the */ |
| /* tallies to get updated. ?????? */ |
| /* MSM: TODO: The right way to do this is to |
| * add a "commtallie" wait queue to the |
| * priv structure that gets run every time |
| * we receive a commtally info frame. |
| * This process would sleep on that |
| * queue and get awakened when the |
| * the requested info frame arrives. |
| * Don't have time to do and test this |
| * right now. |
| */ |
| |
| /* Ugh, this is nasty. */ |
| for (i = 0; i < 10; i++) { |
| memcpy(data, |
| &hw->tallies, |
| sizeof(hw->tallies)); |
| memcpy(test, |
| &hw->tallies, |
| sizeof(hw->tallies)); |
| if ( memcmp(data, |
| test, |
| sizeof(hw->tallies)) == 0) |
| break; |
| } |
| } |
| |
| break; |
| |
| case DIDmib_p2_p2Table_p2Authenticated: |
| |
| if (isget) { |
| prism2mib_priv_authlist(hw, &old); |
| |
| macarray->cnt = 0; |
| for (i = 0; i < old.cnt; i++) { |
| if (!old.assoc[i]) { |
| memcpy(macarray->data[macarray->cnt], old.addr[i], WLAN_ADDR_LEN); |
| macarray->cnt++; |
| } |
| } |
| } |
| |
| break; |
| |
| case DIDmib_p2_p2Table_p2Associated: |
| |
| if (isget) { |
| prism2mib_priv_authlist(hw, &old); |
| |
| macarray->cnt = 0; |
| for (i = 0; i < old.cnt; i++) { |
| if (old.assoc[i]) { |
| memcpy(macarray->data[macarray->cnt], old.addr[i], WLAN_ADDR_LEN); |
| macarray->cnt++; |
| } |
| } |
| } |
| |
| break; |
| |
| case DIDmib_p2_p2Table_p2PowerSaveUserCount: |
| |
| if (isget) |
| *uint32 = hw->psusercount; |
| |
| break; |
| |
| case DIDmib_p2_p2Table_p2Comment: |
| |
| if (isget) { |
| pstr->len = strlen(hw->comment); |
| memcpy(pstr->data, hw->comment, pstr->len); |
| } else { |
| cnt = pstr->len; |
| if (cnt < 0) cnt = 0; |
| if (cnt >= sizeof(hw->comment)) |
| cnt = sizeof(hw->comment)-1; |
| memcpy(hw->comment, pstr->data, cnt); |
| pstr->data[cnt] = '\0'; |
| } |
| |
| break; |
| |
| case DIDmib_p2_p2Table_p2AccessMode: |
| |
| if (isget) |
| *uint32 = hw->accessmode; |
| else |
| prism2mib_priv_accessmode(hw, *uint32); |
| |
| break; |
| |
| case DIDmib_p2_p2Table_p2AccessAllow: |
| |
| if (isget) { |
| macarray->cnt = hw->allow.cnt; |
| memcpy(macarray->data, hw->allow.addr, |
| macarray->cnt*WLAN_ADDR_LEN); |
| } else { |
| prism2mib_priv_accessallow(hw, macarray); |
| } |
| |
| break; |
| |
| case DIDmib_p2_p2Table_p2AccessDeny: |
| |
| if (isget) { |
| macarray->cnt = hw->deny.cnt; |
| memcpy(macarray->data, hw->deny.addr, |
| macarray->cnt*WLAN_ADDR_LEN); |
| } else { |
| prism2mib_priv_accessdeny(hw, macarray); |
| } |
| |
| break; |
| |
| case DIDmib_p2_p2Table_p2ChannelInfoResults: |
| |
| if (isget) { |
| done = atomic_read(&hw->channel_info.done); |
| if (done == 0) { |
| msg->resultcode.status = P80211ENUM_msgitem_status_no_value; |
| break; |
| } |
| if (done == 1) { |
| msg->resultcode.status = P80211ENUM_msgitem_status_incomplete_itemdata; |
| break; |
| } |
| |
| for (i = 0; i < 14; i++, uint32 += 5) { |
| uint32[0] = i+1; |
| uint32[1] = hw->channel_info.results.result[i].anl; |
| uint32[2] = hw->channel_info.results.result[i].pnl; |
| uint32[3] = (hw->channel_info.results.result[i].active & HFA384x_CHINFORESULT_BSSACTIVE) ? 1 : 0; |
| uint32[4] = (hw->channel_info.results.result[i].active & HFA384x_CHINFORESULT_PCFACTIVE) ? 1 : 0; |
| } |
| } |
| |
| break; |
| |
| case DIDmib_dot11smt_dot11StationConfigTable_dot11DesiredBSSType: |
| |
| if (isget) |
| *uint32 = hw->dot11_desired_bss_type; |
| else |
| hw->dot11_desired_bss_type = *uint32; |
| |
| break; |
| |
| case DIDmib_lnx_lnxConfigTable_lnxRSNAIE: { |
| hfa384x_WPAData_t wpa; |
| if (isget) { |
| hfa384x_drvr_getconfig( hw, HFA384x_RID_CNFWPADATA, |
| (UINT8 *) &wpa, sizeof(wpa)); |
| pstr->len = hfa384x2host_16(wpa.datalen); |
| memcpy(pstr->data, wpa.data, pstr->len); |
| } else { |
| wpa.datalen = host2hfa384x_16(pstr->len); |
| memcpy(wpa.data, pstr->data, pstr->len); |
| |
| result = hfa384x_drvr_setconfig(hw, HFA384x_RID_CNFWPADATA, |
| (UINT8 *) &wpa, sizeof(wpa)); |
| } |
| break; |
| } |
| default: |
| WLAN_LOG_ERROR("Unhandled DID 0x%08x\n", mib->did); |
| } |
| |
| DBFEXIT; |
| return(0); |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_priv_authlist |
| * |
| * Get a copy of the list of authenticated stations. |
| * |
| * Arguments: |
| * priv "priv" structure. |
| * list List of authenticated stations. |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| |
| static void prism2mib_priv_authlist( |
| hfa384x_t *hw, |
| prism2sta_authlist_t *list) |
| { |
| prism2sta_authlist_t test; |
| int i; |
| |
| DBFENTER; |
| |
| /* |
| ** Note: The values in this record are changed by the interrupt |
| ** handler and therefore cannot be guaranteed to be stable while |
| ** they are being copied. However, the interrupt handler will |
| ** take priority over this code. Hence, if the same values are |
| ** copied twice, then we are ensured that the values have not |
| ** been changed. If they have, then just try again. Don't try |
| ** more than 10 times...the list of authenticated stations is |
| ** unlikely to be changing frequently enough that we can't get |
| ** a snapshot in 10 tries. Don't try more than this so that we |
| ** don't risk locking-up for long periods of time. If we still |
| ** haven't got the snapshot, then generate an error message and |
| ** return an empty list (since this is the only valid list that |
| ** we can guarentee). This scheme for copying values is used in |
| ** order to prevent having to block the interrupt handler while |
| ** we copy the values. |
| */ |
| |
| for (i = 0; i < 10; i++) { |
| memcpy(list, &hw->authlist, sizeof(prism2sta_authlist_t)); |
| memcpy(&test, &hw->authlist, sizeof(prism2sta_authlist_t)); |
| if (memcmp(list, &test, sizeof(prism2sta_authlist_t)) == 0) |
| break; |
| } |
| |
| if (i >= 10) { |
| list->cnt = 0; |
| WLAN_LOG_ERROR("Could not obtain snapshot of authenticated stations.\n"); |
| } |
| |
| DBFEXIT; |
| return; |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_priv_accessmode |
| * |
| * Set the Access Mode. |
| * |
| * Arguments: |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * mode New access mode. |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| |
| static void prism2mib_priv_accessmode( |
| hfa384x_t *hw, |
| UINT32 mode) |
| { |
| prism2sta_authlist_t old; |
| int i, j, deauth; |
| UINT8 *addr; |
| |
| DBFENTER; |
| |
| /* |
| ** If the mode is not changing or it is changing to "All", then it's |
| ** okay to go ahead without a lot of messing around. Otherwise, the |
| ** access mode is changing in a way that may leave some stations |
| ** authenticated which should not be authenticated. It will be |
| ** necessary to de-authenticate these stations. |
| */ |
| |
| if (mode == WLAN_ACCESS_ALL || mode == hw->accessmode) { |
| hw->accessmode = mode; |
| return; |
| } |
| |
| /* |
| ** Switch to the new access mode. Once this is done, then the interrupt |
| ** handler (which uses this value) will be prevented from authenticating |
| ** ADDITIONAL stations which should not be authenticated. Then get a |
| ** copy of the current list of authenticated stations. |
| */ |
| |
| hw->accessmode = mode; |
| |
| prism2mib_priv_authlist(hw, &old); |
| |
| /* |
| ** Now go through the list of previously authenticated stations (some |
| ** of which might de-authenticate themselves while we are processing it |
| ** but that is okay). Any station which no longer matches the access |
| ** mode, must be de-authenticated. |
| */ |
| |
| for (i = 0; i < old.cnt; i++) { |
| addr = old.addr[i]; |
| |
| if (mode == WLAN_ACCESS_NONE) |
| deauth = 1; |
| else { |
| if (mode == WLAN_ACCESS_ALLOW) { |
| for (j = 0; j < hw->allow.cnt; j++) |
| if (memcmp(addr, hw->allow.addr[j], |
| WLAN_ADDR_LEN) == 0) |
| break; |
| deauth = (j >= hw->allow.cnt); |
| } else { |
| for (j = 0; j < hw->deny.cnt; j++) |
| if (memcmp(addr, hw->deny.addr[j], |
| WLAN_ADDR_LEN) == 0) |
| break; |
| deauth = (j < hw->deny.cnt); |
| } |
| } |
| |
| if (deauth) prism2mib_priv_deauthenticate(hw, addr); |
| } |
| |
| DBFEXIT; |
| return; |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_priv_accessallow |
| * |
| * Change the list of allowed MAC addresses. |
| * |
| * Arguments: |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * macarray New array of MAC addresses. |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| |
| static void prism2mib_priv_accessallow( |
| hfa384x_t *hw, |
| p80211macarray_t *macarray) |
| { |
| prism2sta_authlist_t old; |
| int i, j; |
| |
| DBFENTER; |
| |
| /* |
| ** Change the access list. Note that the interrupt handler may be in |
| ** the middle of using the access list!!! Since the interrupt handler |
| ** will always have priority over this process and this is the only |
| ** process that will modify the list, this problem can be handled as |
| ** follows: |
| ** |
| ** 1. Set the "modify" flag. |
| ** 2. Change the first copy of the list. |
| ** 3. Clear the "modify" flag. |
| ** 4. Change the backup copy of the list. |
| ** |
| ** The interrupt handler will check the "modify" flag. If NOT set, then |
| ** the first copy of the list is valid and may be used. Otherwise, the |
| ** first copy is being changed but the backup copy is valid and may be |
| ** used. Doing things this way prevents having to have the interrupt |
| ** handler block while the list is being updated. |
| */ |
| |
| hw->allow.modify = 1; |
| |
| hw->allow.cnt = macarray->cnt; |
| memcpy(hw->allow.addr, macarray->data, macarray->cnt*WLAN_ADDR_LEN); |
| |
| hw->allow.modify = 0; |
| |
| hw->allow.cnt1 = macarray->cnt; |
| memcpy(hw->allow.addr1, macarray->data, macarray->cnt*WLAN_ADDR_LEN); |
| |
| /* |
| ** If the current access mode is "Allow", then changing the access |
| ** list may leave some stations authenticated which should not be |
| ** authenticated. It will be necessary to de-authenticate these |
| ** stations. Otherwise, the list can be changed without a lot of fuss. |
| */ |
| |
| if (hw->accessmode == WLAN_ACCESS_ALLOW) { |
| |
| /* |
| ** Go through the list of authenticated stations (some of |
| ** which might de-authenticate themselves while we are |
| ** processing it but that is okay). Any station which is |
| ** no longer in the list of allowed stations, must be |
| ** de-authenticated. |
| */ |
| |
| prism2mib_priv_authlist(hw, &old); |
| |
| for (i = 0; i < old.cnt; i++) { |
| for (j = 0; j < hw->allow.cnt; j++) |
| if (memcmp(old.addr[i], hw->allow.addr[j], |
| WLAN_ADDR_LEN) == 0) |
| break; |
| if (j >= hw->allow.cnt) |
| prism2mib_priv_deauthenticate(hw, old.addr[i]); |
| } |
| } |
| |
| DBFEXIT; |
| return; |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_priv_accessdeny |
| * |
| * Change the list of denied MAC addresses. |
| * |
| * Arguments: |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * macarray New array of MAC addresses. |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| |
| static void prism2mib_priv_accessdeny( |
| hfa384x_t *hw, |
| p80211macarray_t *macarray) |
| { |
| prism2sta_authlist_t old; |
| int i, j; |
| |
| DBFENTER; |
| |
| /* |
| ** Change the access list. Note that the interrupt handler may be in |
| ** the middle of using the access list!!! Since the interrupt handler |
| ** will always have priority over this process and this is the only |
| ** process that will modify the list, this problem can be handled as |
| ** follows: |
| ** |
| ** 1. Set the "modify" flag. |
| ** 2. Change the first copy of the list. |
| ** 3. Clear the "modify" flag. |
| ** 4. Change the backup copy of the list. |
| ** |
| ** The interrupt handler will check the "modify" flag. If NOT set, then |
| ** the first copy of the list is valid and may be used. Otherwise, the |
| ** first copy is being changed but the backup copy is valid and may be |
| ** used. Doing things this way prevents having to have the interrupt |
| ** handler block while the list is being updated. |
| */ |
| |
| hw->deny.modify = 1; |
| |
| hw->deny.cnt = macarray->cnt; |
| memcpy(hw->deny.addr, macarray->data, macarray->cnt*WLAN_ADDR_LEN); |
| |
| hw->deny.modify = 0; |
| |
| hw->deny.cnt1 = macarray->cnt; |
| memcpy(hw->deny.addr1, macarray->data, macarray->cnt*WLAN_ADDR_LEN); |
| |
| /* |
| ** If the current access mode is "Deny", then changing the access |
| ** list may leave some stations authenticated which should not be |
| ** authenticated. It will be necessary to de-authenticate these |
| ** stations. Otherwise, the list can be changed without a lot of fuss. |
| */ |
| |
| if (hw->accessmode == WLAN_ACCESS_DENY) { |
| |
| /* |
| ** Go through the list of authenticated stations (some of |
| ** which might de-authenticate themselves while we are |
| ** processing it but that is okay). Any station which is |
| ** now in the list of denied stations, must be de-authenticated. |
| */ |
| |
| prism2mib_priv_authlist(hw, &old); |
| |
| for (i = 0; i < old.cnt; i++) |
| for (j = 0; j < hw->deny.cnt; j++) |
| if (memcmp(old.addr[i], hw->deny.addr[j], |
| WLAN_ADDR_LEN) == 0) { |
| prism2mib_priv_deauthenticate(hw, old.addr[i]); |
| break; |
| } |
| } |
| |
| DBFEXIT; |
| return; |
| } |
| |
| /*---------------------------------------------------------------- |
| * prism2mib_priv_deauthenticate |
| * |
| * De-authenticate a station. This is done by sending a HandoverAddress |
| * information frame to the firmware. This should work, according to |
| * Intersil. |
| * |
| * Arguments: |
| * priv "priv" structure. |
| * hw "hw" structure. |
| * addr MAC address of station to be de-authenticated. |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| |
| static void prism2mib_priv_deauthenticate( |
| hfa384x_t *hw, |
| UINT8 *addr) |
| { |
| DBFENTER; |
| hfa384x_drvr_handover(hw, addr); |
| DBFEXIT; |
| return; |
| } |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_pstr2bytestr |
| * |
| * Convert the pstr data in the WLAN message structure into an hfa384x |
| * byte string format. |
| * |
| * Arguments: |
| * bytestr hfa384x byte string data type |
| * pstr wlan message data |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| |
| void prism2mgmt_pstr2bytestr(hfa384x_bytestr_t *bytestr, p80211pstrd_t *pstr) |
| { |
| DBFENTER; |
| |
| bytestr->len = host2hfa384x_16((UINT16)(pstr->len)); |
| memcpy(bytestr->data, pstr->data, pstr->len); |
| DBFEXIT; |
| } |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_pstr2bytearea |
| * |
| * Convert the pstr data in the WLAN message structure into an hfa384x |
| * byte area format. |
| * |
| * Arguments: |
| * bytearea hfa384x byte area data type |
| * pstr wlan message data |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| |
| void prism2mgmt_pstr2bytearea(UINT8 *bytearea, p80211pstrd_t *pstr) |
| { |
| DBFENTER; |
| |
| memcpy(bytearea, pstr->data, pstr->len); |
| DBFEXIT; |
| } |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_bytestr2pstr |
| * |
| * Convert the data in an hfa384x byte string format into a |
| * pstr in the WLAN message. |
| * |
| * Arguments: |
| * bytestr hfa384x byte string data type |
| * msg wlan message |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| |
| void prism2mgmt_bytestr2pstr(hfa384x_bytestr_t *bytestr, p80211pstrd_t *pstr) |
| { |
| DBFENTER; |
| |
| pstr->len = (UINT8)(hfa384x2host_16((UINT16)(bytestr->len))); |
| memcpy(pstr->data, bytestr->data, pstr->len); |
| DBFEXIT; |
| } |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_bytearea2pstr |
| * |
| * Convert the data in an hfa384x byte area format into a pstr |
| * in the WLAN message. |
| * |
| * Arguments: |
| * bytearea hfa384x byte area data type |
| * msg wlan message |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| |
| void prism2mgmt_bytearea2pstr(UINT8 *bytearea, p80211pstrd_t *pstr, int len) |
| { |
| DBFENTER; |
| |
| pstr->len = (UINT8)len; |
| memcpy(pstr->data, bytearea, len); |
| DBFEXIT; |
| } |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_prism2int2p80211int |
| * |
| * Convert an hfa384x integer into a wlan integer |
| * |
| * Arguments: |
| * prism2enum pointer to hfa384x integer |
| * wlanenum pointer to p80211 integer |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| |
| void prism2mgmt_prism2int2p80211int(UINT16 *prism2int, UINT32 *wlanint) |
| { |
| DBFENTER; |
| |
| *wlanint = (UINT32)hfa384x2host_16(*prism2int); |
| DBFEXIT; |
| } |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_p80211int2prism2int |
| * |
| * Convert a wlan integer into an hfa384x integer |
| * |
| * Arguments: |
| * prism2enum pointer to hfa384x integer |
| * wlanenum pointer to p80211 integer |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| |
| void prism2mgmt_p80211int2prism2int(UINT16 *prism2int, UINT32 *wlanint) |
| { |
| DBFENTER; |
| |
| *prism2int = host2hfa384x_16((UINT16)(*wlanint)); |
| DBFEXIT; |
| } |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_prism2enum2p80211enum |
| * |
| * Convert the hfa384x enumerated int into a p80211 enumerated int |
| * |
| * Arguments: |
| * prism2enum pointer to hfa384x integer |
| * wlanenum pointer to p80211 integer |
| * rid hfa384x record id |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| void prism2mgmt_prism2enum2p80211enum(UINT16 *prism2enum, UINT32 *wlanenum, UINT16 rid) |
| { |
| DBFENTER; |
| |
| /* At the moment, the need for this functionality hasn't |
| presented itself. All the wlan enumerated values are |
| a 1-to-1 match against the Prism2 enumerated values*/ |
| DBFEXIT; |
| return; |
| } |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_p80211enum2prism2enum |
| * |
| * Convert the p80211 enumerated int into an hfa384x enumerated int |
| * |
| * Arguments: |
| * prism2enum pointer to hfa384x integer |
| * wlanenum pointer to p80211 integer |
| * rid hfa384x record id |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| void prism2mgmt_p80211enum2prism2enum(UINT16 *prism2enum, UINT32 *wlanenum, UINT16 rid) |
| { |
| DBFENTER; |
| |
| /* At the moment, the need for this functionality hasn't |
| presented itself. All the wlan enumerated values are |
| a 1-to-1 match against the Prism2 enumerated values*/ |
| DBFEXIT; |
| return; |
| } |
| |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_get_oprateset |
| * |
| * Convert the hfa384x bit area into a wlan octet string. |
| * |
| * Arguments: |
| * rate Prism2 bit area |
| * pstr wlan octet string |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| void prism2mgmt_get_oprateset(UINT16 *rate, p80211pstrd_t *pstr) |
| { |
| UINT8 len; |
| UINT8 *datarate; |
| |
| DBFENTER; |
| |
| len = 0; |
| datarate = pstr->data; |
| |
| /* 1 Mbps */ |
| if ( BIT0 & (*rate) ) { |
| len += (UINT8)1; |
| *datarate = (UINT8)2; |
| datarate++; |
| } |
| |
| /* 2 Mbps */ |
| if ( BIT1 & (*rate) ) { |
| len += (UINT8)1; |
| *datarate = (UINT8)4; |
| datarate++; |
| } |
| |
| /* 5.5 Mbps */ |
| if ( BIT2 & (*rate) ) { |
| len += (UINT8)1; |
| *datarate = (UINT8)11; |
| datarate++; |
| } |
| |
| /* 11 Mbps */ |
| if ( BIT3 & (*rate) ) { |
| len += (UINT8)1; |
| *datarate = (UINT8)22; |
| datarate++; |
| } |
| |
| pstr->len = len; |
| |
| DBFEXIT; |
| return; |
| } |
| |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_set_oprateset |
| * |
| * Convert the wlan octet string into an hfa384x bit area. |
| * |
| * Arguments: |
| * rate Prism2 bit area |
| * pstr wlan octet string |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| void prism2mgmt_set_oprateset(UINT16 *rate, p80211pstrd_t *pstr) |
| { |
| UINT8 *datarate; |
| int i; |
| |
| DBFENTER; |
| |
| *rate = 0; |
| |
| datarate = pstr->data; |
| |
| for ( i=0; i < pstr->len; i++, datarate++ ) { |
| switch (*datarate) { |
| case 2: /* 1 Mbps */ |
| *rate |= BIT0; |
| break; |
| case 4: /* 2 Mbps */ |
| *rate |= BIT1; |
| break; |
| case 11: /* 5.5 Mbps */ |
| *rate |= BIT2; |
| break; |
| case 22: /* 11 Mbps */ |
| *rate |= BIT3; |
| break; |
| default: |
| WLAN_LOG_DEBUG(1, "Unrecoginzed Rate of %d\n", |
| *datarate); |
| break; |
| } |
| } |
| |
| DBFEXIT; |
| return; |
| } |
| |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_get_grpaddr |
| * |
| * Retrieves a particular group address from the list of |
| * group addresses. |
| * |
| * Arguments: |
| * did mibitem did |
| * pstr wlan octet string |
| * priv prism2 driver private data structure |
| * |
| * Returns: |
| * Nothing |
| * |
| ----------------------------------------------------------------*/ |
| void prism2mgmt_get_grpaddr(UINT32 did, p80211pstrd_t *pstr, |
| hfa384x_t *hw ) |
| { |
| int index; |
| |
| DBFENTER; |
| |
| index = prism2mgmt_get_grpaddr_index(did); |
| |
| if ( index >= 0 ) { |
| pstr->len = WLAN_ADDR_LEN; |
| memcpy(pstr->data, hw->dot11_grp_addr[index], |
| WLAN_ADDR_LEN); |
| } |
| |
| DBFEXIT; |
| return; |
| } |
| |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_set_grpaddr |
| * |
| * Convert the wlan octet string into an hfa384x bit area. |
| * |
| * Arguments: |
| * did mibitem did |
| * buf |
| * groups |
| * |
| * Returns: |
| * 0 Success |
| * !0 Error |
| * |
| ----------------------------------------------------------------*/ |
| int prism2mgmt_set_grpaddr(UINT32 did, UINT8 *prism2buf, |
| p80211pstrd_t *pstr, hfa384x_t *hw ) |
| { |
| UINT8 no_addr[WLAN_ADDR_LEN]; |
| int index; |
| |
| DBFENTER; |
| |
| memset(no_addr, 0, WLAN_ADDR_LEN); |
| if (memcmp(no_addr, pstr->data, WLAN_ADDR_LEN) != 0) { |
| |
| /* |
| ** The address is NOT 0 so we are "adding" an address to the |
| ** group address list. Check to make sure we aren't trying |
| ** to add more than the maximum allowed number of group |
| ** addresses in the list. The new address is added to the |
| ** end of the list regardless of the DID used to add the |
| ** address. |
| */ |
| |
| if (hw->dot11_grpcnt >= MAX_GRP_ADDR) return(-1); |
| |
| memcpy(hw->dot11_grp_addr[hw->dot11_grpcnt], pstr->data, |
| WLAN_ADDR_LEN); |
| hw->dot11_grpcnt += 1; |
| } else { |
| |
| /* |
| ** The address is 0. Interpret this as "deleting" an address |
| ** from the group address list. Get the address index from |
| ** the DID. If this is within the range of used addresses, |
| ** then delete the specified address by shifting all following |
| ** addresses down. Then clear the last address (which should |
| ** now be unused). If the address index is NOT within the |
| ** range of used addresses, then just ignore the address. |
| */ |
| |
| index = prism2mgmt_get_grpaddr_index(did); |
| if (index >= 0 && index < hw->dot11_grpcnt) { |
| hw->dot11_grpcnt -= 1; |
| memmove(hw->dot11_grp_addr[index], |
| hw->dot11_grp_addr[index + 1], |
| ((hw->dot11_grpcnt)-index) * WLAN_ADDR_LEN); |
| memset(hw->dot11_grp_addr[hw->dot11_grpcnt], 0, |
| WLAN_ADDR_LEN); |
| } |
| } |
| |
| DBFEXIT; |
| return(0); |
| } |
| |
| |
| /*---------------------------------------------------------------- |
| * prism2mgmt_get_grpaddr_index |
| * |
| * Gets the index in the group address list based on the did. |
| * |
| * Arguments: |
| * did mibitem did |
| * |
| * Returns: |
| * >= 0 If valid did |
| * < 0 If not valid did |
| * |
| ----------------------------------------------------------------*/ |
| int prism2mgmt_get_grpaddr_index( UINT32 did ) |
| { |
| int index; |
| |
| DBFENTER; |
| |
| index = -1; |
| |
| switch (did) { |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address1: |
| index = 0; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address2: |
| index = 1; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address3: |
| index = 2; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address4: |
| index = 3; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address5: |
| index = 4; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address6: |
| index = 5; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address7: |
| index = 6; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address8: |
| index = 7; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address9: |
| index = 8; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address10: |
| index = 9; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address11: |
| index = 10; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address12: |
| index = 11; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address13: |
| index = 12; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address14: |
| index = 13; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address15: |
| index = 14; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address16: |
| index = 15; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address17: |
| index = 16; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address18: |
| index = 17; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address19: |
| index = 18; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address20: |
| index = 19; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address21: |
| index = 20; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address22: |
| index = 21; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address23: |
| index = 22; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address24: |
| index = 23; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address25: |
| index = 24; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address26: |
| index = 25; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address27: |
| index = 26; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address28: |
| index = 27; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address29: |
| index = 28; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address30: |
| index = 29; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address31: |
| index = 30; |
| break; |
| case DIDmib_dot11mac_dot11GroupAddressesTable_dot11Address32: |
| index = 31; |
| break; |
| } |
| |
| DBFEXIT; |
| return index; |
| } |