2009-06-13 13:38:31 +02:00
|
|
|
/*
|
|
|
|
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* File: bssdb.h
|
|
|
|
*
|
|
|
|
* Purpose: Handles the Basic Service Set & Node Database functions
|
|
|
|
*
|
|
|
|
* Author: Lyndon Chen
|
|
|
|
*
|
|
|
|
* Date: July 16, 2002
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __BSSDB_H__
|
|
|
|
#define __BSSDB_H__
|
|
|
|
|
|
|
|
#include <linux/skbuff.h>
|
|
|
|
#include "80211hdr.h"
|
|
|
|
#include "80211mgr.h"
|
|
|
|
#include "card.h"
|
|
|
|
#include "mib.h"
|
|
|
|
|
|
|
|
/*--------------------- Export Definitions -------------------------*/
|
|
|
|
|
|
|
|
#define MAX_NODE_NUM 64
|
|
|
|
#define MAX_BSS_NUM 42
|
|
|
|
#define LOST_BEACON_COUNT 10 // 10 sec, XP defined
|
|
|
|
#define MAX_PS_TX_BUF 32 // sta max power saving tx buf
|
|
|
|
#define ADHOC_LOST_BEACON_COUNT 30 // 30 sec, beacon lost for adhoc only
|
|
|
|
#define MAX_INACTIVE_COUNT 300 // 300 sec, inactive STA node refresh
|
|
|
|
|
|
|
|
#define USE_PROTECT_PERIOD 10 // 10 sec, Use protect mode check period
|
|
|
|
#define ERP_RECOVER_COUNT 30 // 30 sec, ERP support callback check
|
|
|
|
#define BSS_CLEAR_COUNT 1
|
|
|
|
|
|
|
|
#define RSSI_STAT_COUNT 10
|
|
|
|
#define MAX_CHECK_RSSI_COUNT 8
|
|
|
|
|
|
|
|
// STA dwflags
|
|
|
|
#define WLAN_STA_AUTH BIT0
|
|
|
|
#define WLAN_STA_ASSOC BIT1
|
|
|
|
#define WLAN_STA_PS BIT2
|
|
|
|
#define WLAN_STA_TIM BIT3
|
|
|
|
// permanent; do not remove entry on expiration
|
|
|
|
#define WLAN_STA_PERM BIT4
|
|
|
|
// If 802.1X is used, this flag is
|
|
|
|
// controlling whether STA is authorized to
|
|
|
|
// send and receive non-IEEE 802.1X frames
|
|
|
|
#define WLAN_STA_AUTHORIZED BIT5
|
|
|
|
|
|
|
|
//#define MAX_RATE 12
|
|
|
|
|
|
|
|
#define MAX_WPA_IE_LEN 64
|
|
|
|
|
|
|
|
|
|
|
|
/*--------------------- Export Classes ----------------------------*/
|
|
|
|
|
|
|
|
/*--------------------- Export Variables --------------------------*/
|
|
|
|
|
|
|
|
|
|
|
|
/*--------------------- Export Types ------------------------------*/
|
|
|
|
|
|
|
|
//
|
|
|
|
// IEEE 802.11 Structures and definitions
|
|
|
|
//
|
|
|
|
|
|
|
|
typedef struct tagSERPObject {
|
|
|
|
BOOL bERPExist;
|
|
|
|
BYTE byERP;
|
2009-08-12 23:54:06 +02:00
|
|
|
}ERPObject, *PERPObject;
|
2009-06-13 13:38:31 +02:00
|
|
|
|
|
|
|
|
|
|
|
typedef struct tagSRSNCapObject {
|
|
|
|
BOOL bRSNCapExist;
|
|
|
|
WORD wRSNCap;
|
2009-08-12 23:54:06 +02:00
|
|
|
}SRSNCapObject, *PSRSNCapObject;
|
2009-06-13 13:38:31 +02:00
|
|
|
|
|
|
|
// BSS info(AP)
|
|
|
|
#pragma pack(1)
|
|
|
|
typedef struct tagKnownBSS {
|
|
|
|
// BSS info
|
|
|
|
BOOL bActive;
|
|
|
|
BYTE abyBSSID[WLAN_BSSID_LEN];
|
|
|
|
UINT uChannel;
|
|
|
|
BYTE abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
|
|
|
|
BYTE abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1];
|
|
|
|
UINT uRSSI;
|
|
|
|
BYTE bySQ;
|
|
|
|
WORD wBeaconInterval;
|
|
|
|
WORD wCapInfo;
|
|
|
|
BYTE abySSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1];
|
|
|
|
BYTE byRxRate;
|
|
|
|
|
|
|
|
// WORD wATIMWindow;
|
|
|
|
BYTE byRSSIStatCnt;
|
|
|
|
LONG ldBmMAX;
|
|
|
|
LONG ldBmAverage[RSSI_STAT_COUNT];
|
|
|
|
LONG ldBmAverRange;
|
|
|
|
//For any BSSID selection improvment
|
|
|
|
BOOL bSelected;
|
|
|
|
|
|
|
|
//++ WPA informations
|
|
|
|
BOOL bWPAValid;
|
|
|
|
BYTE byGKType;
|
|
|
|
BYTE abyPKType[4];
|
|
|
|
WORD wPKCount;
|
|
|
|
BYTE abyAuthType[4];
|
|
|
|
WORD wAuthCount;
|
|
|
|
BYTE byDefaultK_as_PK;
|
|
|
|
BYTE byReplayIdx;
|
|
|
|
//--
|
|
|
|
|
|
|
|
//++ WPA2 informations
|
|
|
|
BOOL bWPA2Valid;
|
|
|
|
BYTE byCSSGK;
|
|
|
|
WORD wCSSPKCount;
|
|
|
|
BYTE abyCSSPK[4];
|
|
|
|
WORD wAKMSSAuthCount;
|
|
|
|
BYTE abyAKMSSAuthType[4];
|
|
|
|
|
|
|
|
//++ wpactl
|
|
|
|
BYTE byWPAIE[MAX_WPA_IE_LEN];
|
|
|
|
BYTE byRSNIE[MAX_WPA_IE_LEN];
|
|
|
|
WORD wWPALen;
|
|
|
|
WORD wRSNLen;
|
|
|
|
|
|
|
|
// Clear count
|
|
|
|
UINT uClearCount;
|
|
|
|
// BYTE abyIEs[WLAN_BEACON_FR_MAXLEN];
|
|
|
|
UINT uIELength;
|
|
|
|
QWORD qwBSSTimestamp;
|
|
|
|
QWORD qwLocalTSF; // local TSF timer
|
|
|
|
|
|
|
|
CARD_PHY_TYPE eNetworkTypeInUse;
|
|
|
|
|
|
|
|
ERPObject sERP;
|
|
|
|
SRSNCapObject sRSNCapObj;
|
|
|
|
BYTE abyIEs[1024]; // don't move this field !!
|
|
|
|
|
|
|
|
}__attribute__ ((__packed__))
|
2009-08-12 23:54:06 +02:00
|
|
|
KnownBSS , *PKnownBSS;
|
2009-06-13 13:38:31 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef enum tagNODE_STATE {
|
|
|
|
NODE_FREE,
|
|
|
|
NODE_AGED,
|
|
|
|
NODE_KNOWN,
|
|
|
|
NODE_AUTH,
|
|
|
|
NODE_ASSOC
|
|
|
|
} NODE_STATE, *PNODE_STATE;
|
|
|
|
|
|
|
|
|
|
|
|
// STA node info
|
|
|
|
typedef struct tagKnownNodeDB {
|
|
|
|
// STA info
|
|
|
|
BOOL bActive;
|
|
|
|
BYTE abyMACAddr[WLAN_ADDR_LEN];
|
|
|
|
BYTE abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
|
|
|
|
BYTE abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN];
|
|
|
|
WORD wTxDataRate;
|
|
|
|
BOOL bShortPreamble;
|
|
|
|
BOOL bERPExist;
|
|
|
|
BOOL bShortSlotTime;
|
|
|
|
UINT uInActiveCount;
|
|
|
|
WORD wMaxBasicRate; //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp.
|
|
|
|
WORD wMaxSuppRate; //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon.
|
|
|
|
WORD wSuppRate;
|
|
|
|
BYTE byTopOFDMBasicRate;//Records the highest basic rate in OFDM mode
|
|
|
|
BYTE byTopCCKBasicRate; //Records the highest basic rate in CCK mode
|
|
|
|
|
|
|
|
// For AP mode
|
|
|
|
struct sk_buff_head sTxPSQueue;
|
|
|
|
WORD wCapInfo;
|
|
|
|
WORD wListenInterval;
|
|
|
|
WORD wAID;
|
|
|
|
NODE_STATE eNodeState;
|
|
|
|
BOOL bPSEnable;
|
|
|
|
BOOL bRxPSPoll;
|
|
|
|
BYTE byAuthSequence;
|
|
|
|
ULONG ulLastRxJiffer;
|
|
|
|
BYTE bySuppRate;
|
|
|
|
DWORD dwFlags;
|
|
|
|
WORD wEnQueueCnt;
|
|
|
|
|
|
|
|
BOOL bOnFly;
|
|
|
|
ULONGLONG KeyRSC;
|
|
|
|
BYTE byKeyIndex;
|
|
|
|
DWORD dwKeyIndex;
|
|
|
|
BYTE byCipherSuite;
|
|
|
|
DWORD dwTSC47_16;
|
|
|
|
WORD wTSC15_0;
|
|
|
|
UINT uWepKeyLength;
|
|
|
|
BYTE abyWepKey[WLAN_WEPMAX_KEYLEN];
|
|
|
|
//
|
|
|
|
// Auto rate fallback vars
|
|
|
|
BOOL bIsInFallback;
|
|
|
|
UINT uAverageRSSI;
|
|
|
|
UINT uRateRecoveryTimeout;
|
|
|
|
UINT uRatePollTimeout;
|
|
|
|
UINT uTxFailures;
|
|
|
|
UINT uTxAttempts;
|
|
|
|
|
|
|
|
UINT uTxRetry;
|
|
|
|
UINT uFailureRatio;
|
|
|
|
UINT uRetryRatio;
|
|
|
|
UINT uTxOk[MAX_RATE+1];
|
|
|
|
UINT uTxFail[MAX_RATE+1];
|
|
|
|
UINT uTimeCount;
|
|
|
|
|
2009-08-12 23:54:06 +02:00
|
|
|
} KnownNodeDB, *PKnownNodeDB;
|
2009-06-13 13:38:31 +02:00
|
|
|
|
|
|
|
|
|
|
|
/*--------------------- Export Functions --------------------------*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PKnownBSS
|
|
|
|
BSSpSearchBSSList(
|
|
|
|
IN HANDLE hDeviceContext,
|
|
|
|
IN PBYTE pbyDesireBSSID,
|
|
|
|
IN PBYTE pbyDesireSSID,
|
|
|
|
IN CARD_PHY_TYPE ePhyType
|
|
|
|
);
|
|
|
|
|
|
|
|
PKnownBSS
|
|
|
|
BSSpAddrIsInBSSList(
|
|
|
|
IN HANDLE hDeviceContext,
|
|
|
|
IN PBYTE abyBSSID,
|
|
|
|
IN PWLAN_IE_SSID pSSID
|
|
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
BSSvClearBSSList(
|
|
|
|
IN HANDLE hDeviceContext,
|
|
|
|
IN BOOL bKeepCurrBSSID
|
|
|
|
);
|
|
|
|
|
|
|
|
BOOL
|
|
|
|
BSSbInsertToBSSList(
|
|
|
|
IN HANDLE hDeviceContext,
|
|
|
|
IN PBYTE abyBSSIDAddr,
|
|
|
|
IN QWORD qwTimestamp,
|
|
|
|
IN WORD wBeaconInterval,
|
|
|
|
IN WORD wCapInfo,
|
|
|
|
IN BYTE byCurrChannel,
|
|
|
|
IN PWLAN_IE_SSID pSSID,
|
|
|
|
IN PWLAN_IE_SUPP_RATES pSuppRates,
|
|
|
|
IN PWLAN_IE_SUPP_RATES pExtSuppRates,
|
|
|
|
IN PERPObject psERP,
|
|
|
|
IN PWLAN_IE_RSN pRSN,
|
|
|
|
IN PWLAN_IE_RSN_EXT pRSNWPA,
|
|
|
|
IN PWLAN_IE_COUNTRY pIE_Country,
|
|
|
|
IN PWLAN_IE_QUIET pIE_Quiet,
|
|
|
|
IN UINT uIELength,
|
|
|
|
IN PBYTE pbyIEs,
|
|
|
|
IN HANDLE pRxPacketContext
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
|
|
BSSbUpdateToBSSList(
|
|
|
|
IN HANDLE hDeviceContext,
|
|
|
|
IN QWORD qwTimestamp,
|
|
|
|
IN WORD wBeaconInterval,
|
|
|
|
IN WORD wCapInfo,
|
|
|
|
IN BYTE byCurrChannel,
|
|
|
|
IN BOOL bChannelHit,
|
|
|
|
IN PWLAN_IE_SSID pSSID,
|
|
|
|
IN PWLAN_IE_SUPP_RATES pSuppRates,
|
|
|
|
IN PWLAN_IE_SUPP_RATES pExtSuppRates,
|
|
|
|
IN PERPObject psERP,
|
|
|
|
IN PWLAN_IE_RSN pRSN,
|
|
|
|
IN PWLAN_IE_RSN_EXT pRSNWPA,
|
|
|
|
IN PWLAN_IE_COUNTRY pIE_Country,
|
|
|
|
IN PWLAN_IE_QUIET pIE_Quiet,
|
|
|
|
IN PKnownBSS pBSSList,
|
|
|
|
IN UINT uIELength,
|
|
|
|
IN PBYTE pbyIEs,
|
|
|
|
IN HANDLE pRxPacketContext
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
BOOL
|
|
|
|
BSSbIsSTAInNodeDB(
|
|
|
|
IN HANDLE hDeviceContext,
|
|
|
|
IN PBYTE abyDstAddr,
|
|
|
|
OUT PUINT puNodeIndex
|
|
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
BSSvCreateOneNode(
|
|
|
|
IN HANDLE hDeviceContext,
|
|
|
|
OUT PUINT puNodeIndex
|
|
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
BSSvUpdateAPNode(
|
|
|
|
IN HANDLE hDeviceContext,
|
|
|
|
IN PWORD pwCapInfo,
|
|
|
|
IN PWLAN_IE_SUPP_RATES pItemRates,
|
|
|
|
IN PWLAN_IE_SUPP_RATES pExtSuppRates
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
VOID
|
|
|
|
BSSvSecondCallBack(
|
|
|
|
IN HANDLE hDeviceContext
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
VOID
|
|
|
|
BSSvUpdateNodeTxCounter(
|
|
|
|
IN HANDLE hDeviceContext,
|
|
|
|
IN PSStatCounter pStatistic,
|
|
|
|
IN BYTE byTSR,
|
|
|
|
IN BYTE byPktNO
|
|
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
BSSvRemoveOneNode(
|
|
|
|
IN HANDLE hDeviceContext,
|
|
|
|
IN UINT uNodeIndex
|
|
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
BSSvAddMulticastNode(
|
|
|
|
IN HANDLE hDeviceContext
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
VOID
|
|
|
|
BSSvClearNodeDBTable(
|
|
|
|
IN HANDLE hDeviceContext,
|
|
|
|
IN UINT uStartIndex
|
|
|
|
);
|
|
|
|
|
|
|
|
VOID
|
|
|
|
BSSvClearAnyBSSJoinRecord(
|
|
|
|
IN HANDLE hDeviceContext
|
|
|
|
);
|
|
|
|
|
|
|
|
#endif //__BSSDB_H__
|