linux/drivers/staging/vt6656/bssdb.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
   3 * All rights reserved.
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License as published by
   7 * the Free Software Foundation; either version 2 of the License, or
   8 * (at your option) any later version.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License along
  16 * with this program; if not, write to the Free Software Foundation, Inc.,
  17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  18 *
  19 *
  20 * File: bssdb.h
  21 *
  22 * Purpose: Handles the Basic Service Set & Node Database functions
  23 *
  24 * Author: Lyndon Chen
  25 *
  26 * Date: July 16, 2002
  27 *
  28 */
  29
  30#ifndef __BSSDB_H__
  31#define __BSSDB_H__
  32
  33#include <linux/skbuff.h>
  34#include "80211hdr.h"
  35#include "80211mgr.h"
  36#include "card.h"
  37#include "mib.h"
  38
  39/*---------------------  Export Definitions -------------------------*/
  40
  41#define MAX_NODE_NUM             64
  42#define MAX_BSS_NUM              42
  43#define LOST_BEACON_COUNT        10   /* 10 sec, XP defined */
  44#define MAX_PS_TX_BUF            32   // sta max power saving tx buf
  45#define ADHOC_LOST_BEACON_COUNT  30   // 30 sec, beacon lost for adhoc only
  46#define MAX_INACTIVE_COUNT       300  // 300 sec, inactive STA node refresh
  47
  48#define USE_PROTECT_PERIOD       10   // 10 sec, Use protect mode check period
  49#define ERP_RECOVER_COUNT        30   // 30 sec, ERP support callback check
  50#define BSS_CLEAR_COUNT           1
  51
  52#define RSSI_STAT_COUNT          10
  53#define MAX_CHECK_RSSI_COUNT     8
  54
  55// STA dwflags
  56#define WLAN_STA_AUTH            BIT0
  57#define WLAN_STA_ASSOC           BIT1
  58#define WLAN_STA_PS              BIT2
  59#define WLAN_STA_TIM             BIT3
  60// permanent; do not remove entry on expiration
  61#define WLAN_STA_PERM            BIT4
  62// If 802.1X is used, this flag is
  63// controlling whether STA is authorized to
  64// send and receive non-IEEE 802.1X frames
  65#define WLAN_STA_AUTHORIZED      BIT5
  66
  67//#define MAX_RATE            12
  68
  69#define MAX_WPA_IE_LEN      64
  70
  71
  72/*---------------------  Export Classes  ----------------------------*/
  73
  74/*---------------------  Export Variables  --------------------------*/
  75
  76
  77/*---------------------  Export Types  ------------------------------*/
  78
  79//
  80// IEEE 802.11 Structures and definitions
  81//
  82
  83typedef struct tagSERPObject {
  84    BOOL    bERPExist;
  85    BYTE    byERP;
  86} ERPObject, *PERPObject;
  87
  88
  89typedef struct tagSRSNCapObject {
  90    BOOL    bRSNCapExist;
  91    WORD    wRSNCap;
  92} SRSNCapObject, *PSRSNCapObject;
  93
  94// BSS info(AP)
  95#pragma pack(1)
  96typedef struct tagKnownBSS {
  97    // BSS info
  98    BOOL            bActive;
  99    BYTE            abyBSSID[WLAN_BSSID_LEN];
 100    unsigned int            uChannel;
 101    BYTE            abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
 102    BYTE            abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
 103    unsigned int            uRSSI;
 104    BYTE            bySQ;
 105    WORD            wBeaconInterval;
 106    WORD            wCapInfo;
 107    BYTE            abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
 108    BYTE            byRxRate;
 109
 110//    WORD            wATIMWindow;
 111    BYTE            byRSSIStatCnt;
 112    signed long            ldBmMAX;
 113    signed long            ldBmAverage[RSSI_STAT_COUNT];
 114    signed long            ldBmAverRange;
 115    //For any BSSID selection improvment
 116    BOOL            bSelected;
 117
 118    //++ WPA informations
 119    BOOL            bWPAValid;
 120    BYTE            byGKType;
 121    BYTE            abyPKType[4];
 122    WORD            wPKCount;
 123    BYTE            abyAuthType[4];
 124    WORD            wAuthCount;
 125    BYTE            byDefaultK_as_PK;
 126    BYTE            byReplayIdx;
 127    //--
 128
 129    //++ WPA2 informations
 130    BOOL            bWPA2Valid;
 131    BYTE            byCSSGK;
 132    WORD            wCSSPKCount;
 133    BYTE            abyCSSPK[4];
 134    WORD            wAKMSSAuthCount;
 135    BYTE            abyAKMSSAuthType[4];
 136
 137    //++  wpactl
 138    BYTE            byWPAIE[MAX_WPA_IE_LEN];
 139    BYTE            byRSNIE[MAX_WPA_IE_LEN];
 140    WORD            wWPALen;
 141    WORD            wRSNLen;
 142
 143    // Clear count
 144    unsigned int            uClearCount;
 145//    BYTE            abyIEs[WLAN_BEACON_FR_MAXLEN];
 146    unsigned int            uIELength;
 147    QWORD           qwBSSTimestamp;
 148    QWORD           qwLocalTSF;     // local TSF timer
 149
 150    CARD_PHY_TYPE   eNetworkTypeInUse;
 151
 152    ERPObject       sERP;
 153    SRSNCapObject   sRSNCapObj;
 154    BYTE            abyIEs[1024];   // don't move this field !!
 155
 156} __attribute__ ((__packed__))
 157KnownBSS , *PKnownBSS;
 158
 159
 160
 161typedef enum tagNODE_STATE {
 162    NODE_FREE,
 163    NODE_AGED,
 164    NODE_KNOWN,
 165    NODE_AUTH,
 166    NODE_ASSOC
 167} NODE_STATE, *PNODE_STATE;
 168
 169
 170// STA node info
 171typedef struct tagKnownNodeDB {
 172    // STA info
 173    BOOL            bActive;
 174    BYTE            abyMACAddr[WLAN_ADDR_LEN];
 175    BYTE            abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
 176    BYTE            abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
 177    WORD            wTxDataRate;
 178    BOOL            bShortPreamble;
 179    BOOL            bERPExist;
 180    BOOL            bShortSlotTime;
 181    unsigned int            uInActiveCount;
 182    WORD            wMaxBasicRate;     //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp.
 183    WORD            wMaxSuppRate;      //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon.
 184    WORD            wSuppRate;
 185    BYTE            byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode
 186    BYTE            byTopCCKBasicRate; //Records the highest basic rate in CCK mode
 187
 188    // For AP mode
 189    struct sk_buff_head sTxPSQueue;
 190    WORD            wCapInfo;
 191    WORD            wListenInterval;
 192    WORD            wAID;
 193    NODE_STATE      eNodeState;
 194    BOOL            bPSEnable;
 195    BOOL            bRxPSPoll;
 196    BYTE            byAuthSequence;
 197    unsigned long           ulLastRxJiffer;
 198    BYTE            bySuppRate;
 199    DWORD           dwFlags;
 200    WORD            wEnQueueCnt;
 201
 202    BOOL            bOnFly;
 203    unsigned long long       KeyRSC;
 204    BYTE            byKeyIndex;
 205    DWORD           dwKeyIndex;
 206    BYTE            byCipherSuite;
 207    DWORD           dwTSC47_16;
 208    WORD            wTSC15_0;
 209    unsigned int            uWepKeyLength;
 210    BYTE            abyWepKey[WLAN_WEPMAX_KEYLEN];
 211    //
 212    // Auto rate fallback vars
 213    BOOL            bIsInFallback;
 214    unsigned int            uAverageRSSI;
 215    unsigned int            uRateRecoveryTimeout;
 216    unsigned int            uRatePollTimeout;
 217    unsigned int            uTxFailures;
 218    unsigned int            uTxAttempts;
 219
 220    unsigned int            uTxRetry;
 221    unsigned int            uFailureRatio;
 222    unsigned int            uRetryRatio;
 223    unsigned int            uTxOk[MAX_RATE+1];
 224    unsigned int            uTxFail[MAX_RATE+1];
 225    unsigned int            uTimeCount;
 226
 227} KnownNodeDB, *PKnownNodeDB;
 228
 229/*---------------------  Export Functions  --------------------------*/
 230
 231PKnownBSS BSSpSearchBSSList(void *hDeviceContext,
 232                            PBYTE pbyDesireBSSID,
 233                            PBYTE pbyDesireSSID,
 234                            CARD_PHY_TYPE ePhyType);
 235
 236PKnownBSS BSSpAddrIsInBSSList(void *hDeviceContext,
 237                              PBYTE abyBSSID,
 238                              PWLAN_IE_SSID pSSID);
 239
 240void BSSvClearBSSList(void *hDeviceContext, BOOL bKeepCurrBSSID);
 241
 242BOOL BSSbInsertToBSSList(void *hDeviceContext,
 243                         PBYTE abyBSSIDAddr,
 244                         QWORD qwTimestamp,
 245                         WORD wBeaconInterval,
 246                         WORD wCapInfo,
 247                         BYTE byCurrChannel,
 248                         PWLAN_IE_SSID pSSID,
 249                         PWLAN_IE_SUPP_RATES pSuppRates,
 250                         PWLAN_IE_SUPP_RATES pExtSuppRates,
 251                         PERPObject psERP,
 252                         PWLAN_IE_RSN pRSN,
 253                         PWLAN_IE_RSN_EXT pRSNWPA,
 254                         PWLAN_IE_COUNTRY pIE_Country,
 255                         PWLAN_IE_QUIET pIE_Quiet,
 256                         unsigned int uIELength,
 257                         PBYTE pbyIEs,
 258                         void *pRxPacketContext);
 259
 260BOOL BSSbUpdateToBSSList(void *hDeviceContext,
 261                         QWORD qwTimestamp,
 262                         WORD wBeaconInterval,
 263                         WORD wCapInfo,
 264                         BYTE byCurrChannel,
 265                         BOOL bChannelHit,
 266                         PWLAN_IE_SSID pSSID,
 267                         PWLAN_IE_SUPP_RATES pSuppRates,
 268                         PWLAN_IE_SUPP_RATES pExtSuppRates,
 269                         PERPObject psERP,
 270                         PWLAN_IE_RSN pRSN,
 271                         PWLAN_IE_RSN_EXT pRSNWPA,
 272                         PWLAN_IE_COUNTRY pIE_Country,
 273                         PWLAN_IE_QUIET pIE_Quiet,
 274                         PKnownBSS pBSSList,
 275                         unsigned int uIELength,
 276                         PBYTE pbyIEs,
 277                         void *pRxPacketContext);
 278
 279BOOL BSSbIsSTAInNodeDB(void *hDeviceContext,
 280                       PBYTE abyDstAddr,
 281                       unsigned int *puNodeIndex);
 282
 283void BSSvCreateOneNode(void *hDeviceContext, unsigned int *puNodeIndex);
 284
 285void BSSvUpdateAPNode(void *hDeviceContext,
 286                      PWORD pwCapInfo,
 287                      PWLAN_IE_SUPP_RATES pItemRates,
 288                      PWLAN_IE_SUPP_RATES pExtSuppRates);
 289
 290void BSSvSecondCallBack(void *hDeviceContext);
 291
 292void BSSvUpdateNodeTxCounter(void *hDeviceContext,
 293                             PSStatCounter pStatistic,
 294                             BYTE byTSR,
 295                             BYTE byPktNO);
 296
 297void BSSvRemoveOneNode(void *hDeviceContext,
 298                       unsigned int uNodeIndex);
 299
 300void BSSvAddMulticastNode(void *hDeviceContext);
 301
 302void BSSvClearNodeDBTable(void *hDeviceContext,
 303                          unsigned int uStartIndex);
 304
 305void BSSvClearAnyBSSJoinRecord(void *hDeviceContext);
 306
 307#endif /* __BSSDB_H__ */
 308