211 lines
7.0 KiB
C
211 lines
7.0 KiB
C
|
/*
|
||
|
*************************************************************************
|
||
|
* Ralink Tech Inc.
|
||
|
* 5F., No.36, Taiyuan St., Jhubei City,
|
||
|
* Hsinchu County 302,
|
||
|
* Taiwan, R.O.C.
|
||
|
*
|
||
|
* (c) Copyright 2002-2007, Ralink Technology, Inc.
|
||
|
*
|
||
|
* 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., *
|
||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||
|
* *
|
||
|
*************************************************************************
|
||
|
|
||
|
Module Name:
|
||
|
aironet.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Revision History:
|
||
|
Who When What
|
||
|
-------- ---------- ----------------------------------------------
|
||
|
Name Date Modification logs
|
||
|
Paul Lin 04-06-15 Initial
|
||
|
*/
|
||
|
|
||
|
#ifndef __AIRONET_H__
|
||
|
#define __AIRONET_H__
|
||
|
|
||
|
// Measurement Type definition
|
||
|
#define MSRN_TYPE_UNUSED 0
|
||
|
#define MSRN_TYPE_CHANNEL_LOAD_REQ 1
|
||
|
#define MSRN_TYPE_NOISE_HIST_REQ 2
|
||
|
#define MSRN_TYPE_BEACON_REQ 3
|
||
|
#define MSRN_TYPE_FRAME_REQ 4
|
||
|
|
||
|
// Scan Mode in Beacon Request
|
||
|
#define MSRN_SCAN_MODE_PASSIVE 0
|
||
|
#define MSRN_SCAN_MODE_ACTIVE 1
|
||
|
#define MSRN_SCAN_MODE_BEACON_TABLE 2
|
||
|
|
||
|
// PHY type definition for Aironet beacon report, CCX 2 table 36-9
|
||
|
#define PHY_FH 1
|
||
|
#define PHY_DSS 2
|
||
|
#define PHY_UNUSED 3
|
||
|
#define PHY_OFDM 4
|
||
|
#define PHY_HR_DSS 5
|
||
|
#define PHY_ERP 6
|
||
|
|
||
|
// RPI table in dBm
|
||
|
#define RPI_0 0 // Power <= -87
|
||
|
#define RPI_1 1 // -87 < Power <= -82
|
||
|
#define RPI_2 2 // -82 < Power <= -77
|
||
|
#define RPI_3 3 // -77 < Power <= -72
|
||
|
#define RPI_4 4 // -72 < Power <= -67
|
||
|
#define RPI_5 5 // -67 < Power <= -62
|
||
|
#define RPI_6 6 // -62 < Power <= -57
|
||
|
#define RPI_7 7 // -57 < Power
|
||
|
|
||
|
// Cisco Aironet IAPP definetions
|
||
|
#define AIRONET_IAPP_TYPE 0x32
|
||
|
#define AIRONET_IAPP_SUBTYPE_REQUEST 0x01
|
||
|
#define AIRONET_IAPP_SUBTYPE_REPORT 0x81
|
||
|
|
||
|
// Measurement Request detail format
|
||
|
typedef struct _MEASUREMENT_REQUEST {
|
||
|
UCHAR Channel;
|
||
|
UCHAR ScanMode; // Use only in beacon request, other requests did not use this field
|
||
|
USHORT Duration;
|
||
|
} MEASUREMENT_REQUEST, *PMEASUREMENT_REQUEST;
|
||
|
|
||
|
// Beacon Measurement Report
|
||
|
// All these field might change to UCHAR, because we didn't do anything to these report.
|
||
|
// We copy all these beacons and report to CCX 2 AP.
|
||
|
typedef struct _BEACON_REPORT {
|
||
|
UCHAR Channel;
|
||
|
UCHAR Spare;
|
||
|
USHORT Duration;
|
||
|
UCHAR PhyType; // Definiation is listed above table 36-9
|
||
|
UCHAR RxPower;
|
||
|
UCHAR BSSID[6];
|
||
|
UCHAR ParentTSF[4];
|
||
|
UCHAR TargetTSF[8];
|
||
|
USHORT BeaconInterval;
|
||
|
USHORT CapabilityInfo;
|
||
|
} BEACON_REPORT, *PBEACON_REPORT;
|
||
|
|
||
|
// Frame Measurement Report (Optional)
|
||
|
typedef struct _FRAME_REPORT {
|
||
|
UCHAR Channel;
|
||
|
UCHAR Spare;
|
||
|
USHORT Duration;
|
||
|
UCHAR TA;
|
||
|
UCHAR BSSID[6];
|
||
|
UCHAR RSSI;
|
||
|
UCHAR Count;
|
||
|
} FRAME_REPORT, *PFRAME_REPORT;
|
||
|
|
||
|
#pragma pack(1)
|
||
|
// Channel Load Report
|
||
|
typedef struct _CHANNEL_LOAD_REPORT {
|
||
|
UCHAR Channel;
|
||
|
UCHAR Spare;
|
||
|
USHORT Duration;
|
||
|
UCHAR CCABusy;
|
||
|
} CHANNEL_LOAD_REPORT, *PCHANNEL_LOAD_REPORT;
|
||
|
#pragma pack()
|
||
|
|
||
|
// Nosie Histogram Report
|
||
|
typedef struct _NOISE_HIST_REPORT {
|
||
|
UCHAR Channel;
|
||
|
UCHAR Spare;
|
||
|
USHORT Duration;
|
||
|
UCHAR Density[8];
|
||
|
} NOISE_HIST_REPORT, *PNOISE_HIST_REPORT;
|
||
|
|
||
|
// Radio Management Capability element
|
||
|
typedef struct _RADIO_MANAGEMENT_CAPABILITY {
|
||
|
UCHAR Eid; // TODO: Why the Eid is 1 byte, not normal 2 bytes???
|
||
|
UCHAR Length;
|
||
|
UCHAR AironetOui[3]; // AIronet OUI (00 40 96)
|
||
|
UCHAR Type; // Type / Version
|
||
|
USHORT Status; // swap16 required
|
||
|
} RADIO_MANAGEMENT_CAPABILITY, *PRADIO_MANAGEMENT_CAPABILITY;
|
||
|
|
||
|
// Measurement Mode Bit definition
|
||
|
typedef struct _MEASUREMENT_MODE {
|
||
|
UCHAR Rsvd:4;
|
||
|
UCHAR Report:1;
|
||
|
UCHAR NotUsed:1;
|
||
|
UCHAR Enable:1;
|
||
|
UCHAR Parallel:1;
|
||
|
} MEASUREMENT_MODE, *PMEASUREMENT_MODE;
|
||
|
|
||
|
// Measurement Request element, This is little endian mode
|
||
|
typedef struct _MEASUREMENT_REQUEST_ELEMENT {
|
||
|
USHORT Eid;
|
||
|
USHORT Length; // swap16 required
|
||
|
USHORT Token; // non-zero unique token
|
||
|
UCHAR Mode; // Measurement Mode
|
||
|
UCHAR Type; // Measurement type
|
||
|
} MEASUREMENT_REQUEST_ELEMENT, *PMEASUREMENT_REQUEST_ELEMENT;
|
||
|
|
||
|
// Measurement Report element, This is little endian mode
|
||
|
typedef struct _MEASUREMENT_REPORT_ELEMENT {
|
||
|
USHORT Eid;
|
||
|
USHORT Length; // swap16 required
|
||
|
USHORT Token; // non-zero unique token
|
||
|
UCHAR Mode; // Measurement Mode
|
||
|
UCHAR Type; // Measurement type
|
||
|
} MEASUREMENT_REPORT_ELEMENT, *PMEASUREMENT_REPORT_ELEMENT;
|
||
|
|
||
|
// Cisco Aironet IAPP Frame Header, Network byte order used
|
||
|
typedef struct _AIRONET_IAPP_HEADER {
|
||
|
UCHAR CiscoSnapHeader[8]; // 8 bytes Cisco snap header
|
||
|
USHORT Length; // IAPP ID & length, remember to swap16 in LE system
|
||
|
UCHAR Type; // IAPP type
|
||
|
UCHAR SubType; // IAPP subtype
|
||
|
UCHAR DA[6]; // Destination MAC address
|
||
|
UCHAR SA[6]; // Source MAC address
|
||
|
USHORT Token; // Dialog token, no need to swap16 since it is for yoken usage only
|
||
|
} AIRONET_IAPP_HEADER, *PAIRONET_IAPP_HEADER;
|
||
|
|
||
|
// Radio Measurement Request frame
|
||
|
typedef struct _AIRONET_RM_REQUEST_FRAME {
|
||
|
AIRONET_IAPP_HEADER IAPP; // Common header
|
||
|
UCHAR Delay; // Activation Delay
|
||
|
UCHAR Offset; // Measurement offset
|
||
|
} AIRONET_RM_REQUEST_FRAME, *PAIRONET_RM_REQUEST_FRAME;
|
||
|
|
||
|
// Radio Measurement Report frame
|
||
|
typedef struct _AIRONET_RM_REPORT_FRAME {
|
||
|
AIRONET_IAPP_HEADER IAPP; // Common header
|
||
|
} AIRONET_RM_REPORT_FRAME, *PAIRONET_RM_REPORT_FRAME;
|
||
|
|
||
|
// Saved element request actions which will saved in StaCfg.
|
||
|
typedef struct _RM_REQUEST_ACTION {
|
||
|
MEASUREMENT_REQUEST_ELEMENT ReqElem; // Saved request element
|
||
|
MEASUREMENT_REQUEST Measurement; // Saved measurement within the request element
|
||
|
} RM_REQUEST_ACTION, *PRM_REQUEST_ACTION;
|
||
|
|
||
|
// CCX administration control
|
||
|
typedef union _CCX_CONTROL {
|
||
|
struct {
|
||
|
UINT32 Enable:1; // Enable CCX2
|
||
|
UINT32 LeapEnable:1; // Enable LEAP at CCX2
|
||
|
UINT32 RMEnable:1; // Radio Measurement Enable
|
||
|
UINT32 DCRMEnable:1; // Non serving channel Radio Measurement enable
|
||
|
UINT32 QOSEnable:1; // Enable QOS for CCX 2.0 support
|
||
|
UINT32 FastRoamEnable:1; // Enable fast roaming
|
||
|
UINT32 Rsvd:2; // Not used
|
||
|
UINT32 dBmToRoam:8; // the condition to roam when receiving Rssi less than this value. It's negative value.
|
||
|
UINT32 TuLimit:16; // Limit for different channel scan
|
||
|
} field;
|
||
|
UINT32 word;
|
||
|
} CCX_CONTROL, *PCCX_CONTROL;
|
||
|
|
||
|
#endif // __AIRONET_H__
|