0% found this document useful (0 votes)
130 views94 pages

Ralink Technology, Corp.: Rt2070 Linux Station Release Notes and User'S Guide

Uploaded by

Pedro Carlos
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
130 views94 pages

Ralink Technology, Corp.: Rt2070 Linux Station Release Notes and User'S Guide

Uploaded by

Pedro Carlos
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 94

RALINK TECHNOLOGY, CORP.

RT2070 LINUX STATION RELEASE NOTES


AND USER’S GUIDE
USB WIRELESS CARD

Copyright © 2008 Ralink Technology, Corp.


All Rights Reserved.
This document is property of Ralink Technology Corporation Transmittal, receipt, or possession of this
document does not express, license, or imply any rights to use, sell, design, or manufacture from this
information or the software documented herein. No reproduction, publication, or disclosure of this
information, in whole or in part, shall be allowed, unless the prior written consent of Ralink Technology
Corporation is obtained.

NOTE: THIS DOCUMENT CONTAINS SENSITIVE INFORMATION AND HAS RESTRICTED DISTRIBUTION.

Proprietary Notice and Liability Disclaimer


RT2870 Linux Station Release Notes and User’s Guide

The confidential Information, technology or any Intellectual Property embodied therein, including without
limitation, specifications, product features, data, source code, object code, computer programs, drawings,
schematics, know-how, notes, models, reports, contracts, schedules and samples, constitute the Proprietary
Information of Ralink (hereinafter "Proprietary Information")

All the Proprietary Information is provided "AS IS". No Warranty of any kind, whether express or implied, is
given hereunder with regards to any Proprietary Information or the use, performance or function thereof.
Ralink hereby disclaims any warranties, including but not limited warranties of non-infringement,
merchantability, completeness, accuracy, fitness for any particular purpose, functionality and any warranty
related to course of performance or dealing of Proprietary Information. In no event shall Ralink be liable for
any special, indirect or consequential damages associated with or arising from use of the Proprietary
Information in any way, including any loss of use, data or profits.

Ralink retains all right, title or interest in any Proprietary Information or any Intellectual Property embodied
therein. The Proprietary Information shall not in whole or in part be reversed, decompiled or disassembled,
nor reproduced or sublicensed or disclosed to any third party without Ralink's prior written consent.

Ralink reserves the right, at its own discretion, to update or revise the Proprietary Information from time to
time, of which Ralink is not obligated to inform or send notice. Please check back if you have any question.
Information or items marked as "not yet supported" shall not be relied on, nor taken as any warranty
or permission of use.

Ralink Technology Corporation (Taiwan)

5F, No.36, Tai-Yuen Street,


ChuPei City
HsinChu Hsien 302, Taiwan, ROC
Tel +886-3-560-0868
Fax +886-3-560-0818

Sales Taiwan: [email protected]


Technical Support Taiwan: [email protected]

http://www.ralinktech.com/

2/94
RT2870 Linux Station Release Notes and User’s Guide

Contents
1 VERSION HISTORY........................................................5 4.1.16 ENCRYPTYPE: ......................................................21
4.1.17 DEFAULTKEYID: ..................................................21
2 README ......................................................................5
4.1.18 KEY1 .................................................................21
3 CONFIGURATION .........................................................8 4.1.19 KEY2 .................................................................21
4.1.20 KEY3 .................................................................21
3.1 CONFIGURATION FILE : RT2870STA.DAT ....................... 8
4.1.21 KEY4 .................................................................22
3.2 USAGE ..................................................................... 9
4.1.22 WPAPSK...........................................................22
3.2.1 COUNTRYREGION .................................................. 9
4.1.23 WMMCAPABLE ...................................................22
3.2.2 COUNTRYREGIONFORABAND ................................ 10
4.1.24 IEEE80211H .....................................................22
3.2.3 SSID................................................................. 10
4.1.25 PSMODE ...........................................................23
3.2.4 WIRELESSMODE ................................................. 10
4.1.26 RESETCOUNTER ...................................................23
3.2.5 CHANNEL ........................................................... 11
4.1.27 DEBUG...............................................................23
3.2.6 BGPROTECTION .................................................. 11
4.1.28 FIXEDTXMODE ....................................................23
3.2.7 TXPREAMBLE ...................................................... 11
4.1.29 LONGRETRY ........................................................24
3.2.8 RTSTHRESHOLD .................................................. 11
4.1.30 SHORTRETRY.......................................................24
3.2.9 FRAGTHRESHOLD ................................................ 11
4.2 IWPRIV RA0 SHOW USAGE ..........................................25
3.2.10 TXBURST ........................................................... 11
4.2.1 CONNSTATUS ......................................................25
3.2.11 PKTAGGREGATE .................................................. 11
4.2.2 DRIVERVER .........................................................25
3.2.12 NETWORKTYPE ................................................... 12
4.2.3 BAINFO ..............................................................25
3.2.13 AUTHMODE ....................................................... 12
4.2.4 RXBULK ..............................................................25
3.2.14 ENCRYPTYPE ...................................................... 12
4.2.5 TXBULK ..............................................................25
3.2.15 DEFAULTKEYID ................................................... 12
4.3 IWPRIV RA0 USAGE ...................................................25
3.2.16 WEP KEYTYPE .................................................... 12
4.3.1 RADIO_OFF .........................................................25
3.2.17 WEP HEX KEY .................................................... 13
4.3.2 RADIO_ON ..........................................................26
3.2.18 WEP KEY STRING ................................................ 13
4.4 IWPRIV EXAMPLES.....................................................26
3.2.19 WPAPSK .......................................................... 13
4.4.1 INFRASTRUCTURE .................................................26
3.2.20 WMMCAPABLE ................................................... 13
4.4.1.1 OPEN/NONE ....................................................26
3.2.21 IEEE80211H..................................................... 14
4.4.1.2 SHARED/WEP ..................................................26
3.2.22 PSMODE ........................................................... 14
4.4.1.3 WPAPSK/TKIP ..................................................26
3.2.23 FASTROAMING ................................................... 14
4.4.1.4 WPAPSK/AES ...................................................26
3.2.24 ROAMTHRESHOLD ............................................... 14
4.4.1.5 WPA2PSK/TKIP ................................................27
3.2.25 CARRIERDETECT .................................................. 14
4.4.2 AD-HOC.............................................................27
3.2.26 APSDCAPABLE ................................................... 14
4.4.2.1 OPEN/NONE ....................................................27
3.2.27 APSDAC........................................................... 15
4.4.2.2 WPANONE/TKIP ..............................................27
3.2.28 WIRELESSEVENT ................................................. 15
4.4.3 GET SITE SURVEY ..................................................28
3.2.29 CARRIERDETECT .................................................. 15
4.4.4 GET STATISTICS ...................................................28
3.2.30 ANTDIVERSITY .................................................... 15
4.4.5 ANY SSID..........................................................28
3.3 MORE INFORMATION .......................................... 15
4.5 IWLIST ....................................................................28
4 WIRELESS TOOLS........................................................ 17 4.6 IWCONFIG ...............................................................28

4.1 IWPRIV RA0 SET USAGE ............................................. 17 5 WPS – WI-FI PROTECTED SETUP..................................30
4.1.1 DRIVERVERSION .................................................. 17
5.1 IWPRIV USAGE .........................................................30
4.1.2 COUNTRYREGION ................................................ 17
5.1.1 WSC_CONF_MODE ...............................................30
4.1.3 COUNTRYREGIONABAND ...................................... 18
5.1.2 WSC_MODE ........................................................31
4.1.4 SSID................................................................. 18
5.1.3 WSC_PIN ............................................................31
4.1.5 WIRELESSMODE ................................................. 18
5.1.4 WSC_ SSID ..........................................................31
4.1.6 TXBURST: .......................................................... 19
5.1.5 WSC_START ........................................................31
4.1.7 PKTAGGREGATE: ................................................. 19
5.1.6 WSC_ STOP .........................................................31
4.1.8 TXPREAMBLE:..................................................... 19
5.1.7 WSC_GEN_PINCODE .............................................32
4.1.9 TXPOWER:......................................................... 19
5.1.8 WSC_CRED_COUNT ..............................................32
4.1.10 CHANNEL ........................................................... 20
5.1.9 WSC_CRED_SSID ..................................................32
4.1.11 BGPROTECTION:................................................. 20
5.1.10 WSC_CRED_AUTH ................................................32
4.1.12 RTSTHRESHOLD:................................................. 20
5.1.11 WSC_CRED_ENCR ................................................33
4.1.13 FRAGTHRESHOLD: ............................................... 20
5.1.12 WSC_CRED_KEYIDX ..............................................33
4.1.14 NETWORKTYPE: .................................................. 20
5.1.13 WSC_CRED_KEY ...................................................33
4.1.15 AUTHMODE:...................................................... 21

3/94
RT2870 Linux Station Release Notes and User’s Guide

5.1.14 WSC_CRED_MAC ................................................. 34 6.3.4 FREQUENCY OFFSET TUNING...................................53


5.1.15 WSC_CONN_BY_IDX ............................................ 34 6.3.5 RX.....................................................................53
5.1.16 WSC_AUTO_CONN .............................................. 34 6.3.6 SHOW ALL ATE PARAMETERS ..................................54
5.2 WPS STA AS AN ENROLLEE OR REGISTRAR.................... 35 6.3.7 ONLINE HELP .......................................................54
5.2.1 ENROLLEE MODE ................................................ 35 6.3.8 DISPLAY RX PACKET COUNT AND RSSI .....................55
5.2.1.1 PIN MODE: ........................................................ 35 6.4 IWPRIV RA0 BBP [PARAMETERS]=[VALUE] .....................56
5.2.1.2 PBC MODE: ....................................................... 35 6.4.1 BBPID...............................................................56
5.2.2 REGISTRAR MODE ............................................... 36 6.4.2 BBPID=VALUE....................................................56
5.2.2.1 PIN MODE: ........................................................ 36 6.5 IWPRIV RA0 MAC [PARAMETERS]=[VAL] ........................56
5.2.2.2 PBC MODE: ....................................................... 37 6.5.1 MAC_OFFSET...................................................56
5.3 WPS IOCTL USAGE ................................................. 38 6.5.2 MAC_OFFSET=VALUE ........................................56
5.3.1 IWPRIV COMMANDS WITHOUT ARGUMENT ............... 38 6.6 IWPRIV RA0 E2P [PARAMETERS]=[VAL] .........................57
5.3.2 IWPRIV COMMANDS WITH ONE INT ARGUMENT ........ 38 6.6.1 EEP_ADDR .......................................................57
5.3.3 IWPRIV COMMANDS WITH STRING ARGUMENT .......... 39 6.6.2 EEP_ADDR=VALUE ............................................57
5.4 WPS IOCTL SAMPLE PROGRAM ................................. 40 6.7 EXAMPLE.................................................................57
6.7.1 HARDWARE ACCESS ..............................................57
6 ATE TEST COMMAND FORMAT................................... 44
6.7.2 STATISTIC COUNTER OPERATION ..............................57
6.1 IWPRIV RA0 SET [PARAMETERS]=[VAL] ......................... 45 6.7.3 SUGGESTION:......................................................57
6.1.1 ATE.................................................................. 45 6.8 ATED ......................................................................58
6.1.2 ATEDA............................................................. 45 6.8.1 INTRODUCTION ....................................................58
6.1.3 ATESA.............................................................. 45 6.8.2 ENVIRONMENT SETUP ...........................................58
6.1.4 ATEBSSID ........................................................ 45 6.8.3 HOW TO USE ATED FOR ATE PURPOSE .....................58
6.1.5 ATECHANNEL .................................................. 46
7 IOCTL .........................................................................60
6.1.6 ATETXPOW0.................................................... 46
6.1.7 ATETXPOW1.................................................... 46 7.1 PARAMETERS FOR IWCONFIG .......................................60
6.1.8 ATETXFREQOFFSET ......................................... 46 7.2 PARAMETERS FOR IWPRIV ...........................................67
6.1.9 ATETXLEN........................................................ 46 7.2.1 SET DATA, PARAMETERS IS SAME AS IWPRIV .............67
6.1.10 ATETXCNT ....................................................... 46 7.2.2 GET DATA, PARAMETERS IS SAME AS IWPRIV .............68
6.1.11 ATETXMODE (REFER TO TXMODE) ...................... 47 7.2.3 SET RAW DATA WITH FLAGS ..................................68
6.1.12 ATETXBW (REFER TO TXMODE)........................... 47 7.2.4 GET RAW DATA WITH FLAGS ..................................77
6.1.13 ATETXGI (REFER TO TXMODE) ............................. 47
8 IOCTL HOW TO ...........................................................88
6.1.14 ATETXMCS (REFER TO TXMODE) ......................... 47
6.1.15 ATETXANT....................................................... 47 8.1 GET DATA ...............................................................88
6.1.16 ATERXANT....................................................... 47 8.1.1 GET STATION CONNECTION STATUS:........................88
6.1.17 ATERXFER........................................................ 48 8.1.2 GET STATION STATISTICS INFORMATION: ..................88
6.1.18 ATESHOW ....................................................... 48 8.1.3 GET AP LIST TABLE: .............................................88
6.1.19 ATEHELP.......................................................... 48 8.1.4 GET SCAN TABLE: ................................................89
6.1.20 RESETCOUNTER .................................................. 48 8.1.5 GET STATION’S MAC:..........................................89
6.1.21 ATERRF............................................................ 48 8.1.6 GET STATION CONNECTION STATUS:........................89
6.1.22 ATEWRF1 ........................................................ 48 8.1.7 GET AP’S BSSID.................................................89
6.1.23 ATEWRF2 ........................................................ 49 8.1.8 GET SSID ..........................................................90
6.1.24 ATEWRF3 ........................................................ 49 8.1.9 GET STATION’S LAST TX RELATED INFORMATION:.......90
6.1.25 ATEWRF4 ........................................................ 49 8.1.10 GET STATION’S LAST RX RELATED INFORMATION: ......90
6.2 TX MODE, MCS, BW AND GI SELECTION TABLE ............ 49 8.1.11 GET STATION’S WIRELESS MODE:............................90
6.2.1 MODE = 0, LEGACY CCK ..................................... 49 8.1.12 GET BSS TYPE: ....................................................91
6.2.2 MODE = 1, LEGACY OFDM ................................. 49 8.1.13 GET AUTHENTICATION MODE:...............................91
6.2.3 MODE = 2, HT MIXED MODE .............................. 50 8.1.14 GET ENCRYPTION TYPE:........................................92
6.2.4 MODE = 3, HT GREENFIELD ................................. 50 8.1.15 GET RSSI 0 (UNIT: DB).........................................93
6.3 EXAMPLES............................................................... 51 8.1.16 GET RSSI 1 (UNIT: DB).........................................93
6.3.1 CHECK EVM & POWER ........................................ 51 8.1.17 GET RSSI 2 (UNIT: DB).........................................93
6.3.2 CHECK CARRIER................................................... 52 8.1.18 GET DRIVER WIRELESS EXTENSION VERSION ..............94
6.3.3 CHECK SPECTURM MASK ....................................... 52

4/94
RT2870 Linux Station Release Notes and User’s Guide

1 VERSION HISTORY

Version 2.1.0.0

1. New generation schema for multiple OS porting

2. New eFuse function and eFuse buffer mode

3. Fixed Ad-hoc ping failed in noisy environment.

4. Fixed WPS failed with D-Link DIR-628 in 5GHz.

5. Support kthread.

6. New IEEE802.11r functionality.

Version 2.0.1.0

1. Fix eFuse bug on big-endian platform

2. Fix one bug for ATE TX power handling and ATE frequency offset bug.

3. Fix difficult to enter power save mode issue.

4. Fix a bug that is hard to connect with hidden-SSID AP.

5. New firmware update.

Version 2.0.0.0

1. Initial version of RT2070 single chip use.

2 README

Model Name

RT2070 Wireless LAN Linux Driver

Supporting Kernel

• Linux kernel 2.4 and 2.6 series


• Tested in Redhat 7.3 or later

Driver Name

• Kernel 2.4.x: rt2070sta.o

5/94
RT2870 Linux Station Release Notes and User’s Guide

• Kernel 2.6.x: rt2070sta.ko

Description

This is a Linux device driver for Ralink RT2070 ABGN WLAN Card.

Features

This driver implements basic IEEE802.11 functionality, including:


Infrastructure and Ad-Hoc modes with open, shared, WPA-PSK, WPA2-PSK authentication methods.
NONE, WEP, TKIP and AES encryption.

6/94
RT2870 Linux Station Release Notes and User’s Guide

Build Instructions

1. $tar -xvzf yyyy_mmdd_RT2070_Linux_STA_x.x.x.x.tgz

go to "./yyyy_mmdd_RT2070_Linux_STA_x.x.x.x" directory.
2. In Makefile
a. set the "MODE = STA" in Makefile
b. choose the TARGET to Linux by set "TARGET = LINUX"
c. define the Linux kernel source include file path LINUX_SRC modify to meet your need.
3. In os/linux/config.mk

define the GCC and LD of the target machine.

define the compiler flags CFLAGS.

modify to meet your need.

** Build for being controlled by NetworkManager

Please set 'HAS_WPA_SUPPLICANT=y' and 'HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y'.

** Build for being controlled by WpaSupplicant with Ralink Driver

Please set 'HAS_WPA_SUPPLICANT=y' and 'HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n'.


4. compile driver source code

$make
5. $cp RT2870STA.dat /etc/Wireless/RT2870STA/RT2870STA.dat

# !!!CHECK IF IT IS A BINARY FILE BEFORE LOADING !!!


6. load driver

#[kernel 2.4]

# $/sbin/insmod rt2070sta.o

# $/sbin/ifconfig ra0 inet YOUR_IP up

#[kernel 2.6]

# $/sbin/insmod rt2070sta.ko

# $/sbin/ifconfig ra0 inet YOUR_IP up


7. unload driver

$/sbin/ifconfig ra0 down

$/sbin/rmmod rt2070sta

7/94
RT2870 Linux Station Release Notes and User’s Guide

3 CONFIGURATION

RT2070 driver can be configured via following interfaces:

• configuration file
• "iwconfig" command
• "iwpriv" command

Note:

• modify configuration file "RT2870STA.dat" in /etc/Wireless/RT2870STA/RT2870STA.dat.


• both iwconfig and iwpriv comes with kernel.
• please refer to the following sections for details on iwpriv usage.

3.1 Configuration File : RT2870STA.dat

Copy this file to /etc/Wireless/RT2870STA/RT2870STA.dat

This file is a binary file and will be read on loading rt.o module. Use "vi -b RT2870STA.dat" to modify settings
according to your need. Set the NetworkType to "Adhoc" for using Adhoc-mode, or Infrastructure. Set Channel
to "0" for auto-select on Infrastructure mode. set SSID for connecting to your Accss-point.

AuthMode

• WEPAUTO
• OPEN
• SHARED
• WPAPSK
• WPA2PSK
• WPANONE

EncrypType

• NONE
• WEP
• TKIP
• AES

for more information refer to the Readme file.

The word of "Default" must not be removed

Default
NetworkType=Infra TxPower=100
CountryRegion=5
WirelessMode=9 BGProtection=0
CountryRegionABand=
7 Channel=0 TxPreamble=0

CountryCode= BasicRate=15 RTSThreshold=2347

SSID=Dennis2070AP BeaconPeriod=100 FragThreshold=2346

8/94
RT2870 Linux Station Release Notes and User’s Guide

TxBurst=1 Key1Str= RoamThreshold=70

PktAggregate=0 Key2Type=0 APSDCapable=0

WmmCapable=0 Key2Str= APSDAC=0;0;0;0

AckPolicy=0;0;0;0 Key3Type=0 IEEE80211H=0

AuthMode=OPEN Key3Str= TGnWifiTest=0

EncrypType=NONE Key4Type=0 WirelessEvent=0

WPAPSK= Key4Str= CarrierDetect=0

DefaultKeyID=1 PSMode=CAM AntDiversity=0

Key1Type=0 FastRoaming=0

NOTE:

WMM parameters

• WmmCapable Set it as 1 to turn on WMM Qos support

• AckPolicy1~4 Ack policy which supports normal Ack or no Ack (AC_BK, AC_BE, AC_VI, AC_VO)

All WMM parameters do not support iwpriv command but ‘WmmCapable’’, please store all parameter to
RT2870STA.dat, and restart driver.

3.2 Usage

Syntax is 'Param'='Value' and describes below.

SectionNumber Param

Value

...

...

...

3.2.1 CountryRegion

value
Region Channels
0 1-11

1 1-13

2 10-11

3 10-13

4 14

9/94
RT2870 Linux Station Release Notes and User’s Guide

5 1-14

6 3-9

7 5-13

3.2.2 CountryRegionForABand

value
Region Channels
0 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165

1 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140

2 36, 40, 44, 48, 52, 56, 60, 64

3 52, 56, 60, 64, 149, 153, 157, 161

4 149, 153, 157, 161, 165

5 149, 153, 157, 161

6 36, 40, 44, 48

7 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165

8 52, 56, 60, 64

9 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165

10 36, 40, 44, 48, 149, 153, 157, 161, 165

11 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161

3.2.3 SSID

value

0~z, 1~32 ascii characters.

3.2.4 WirelessMode

value

0: legacy 11b/g mixed

1: legacy 11B only

2: legacy 11A only // Not support in RfIcType=1(id=RFIC_5225)

// and RfIcType=2(id=RFIC_5325)

3: legacy 11a/b/g mixed // Not support in RfIcType=1(id=RFIC_5225)

// and RfIcType=2(id=RFIC_5325)

4: legacy 11G only

10/94
RT2870 Linux Station Release Notes and User’s Guide

3.2.5 Channel

value

depends on CountryRegion or CountryRegionForABand

3.2.6 BGProtection

value

0: Auto

1: Always on

2: Always off

3.2.7 TxPreamble

value

0:Preamble Long

1:Preamble Short

2:Auto

3.2.8 RTSThreshold

value

1~2347

3.2.9 FragThreshold

value

256~2346

3.2.10 TxBurst

value

0: Disable

1: Enable

3.2.11 PktAggregate

value

0: Disable

1: Enable

11/94
RT2870 Linux Station Release Notes and User’s Guide

3.2.12 NetworkType

value

Infra: infrastructure mode

Adhoc: adhoc mode

3.2.13 AuthMode

value

OPEN For open system

SHARED For shared key system

WEPAUTO Auto switch between OPEN and SHARED

WPAPSK For WPA pre-shared key (Infra)

WPA2PSK For WPA2 pre-shared key (Infra)

WPANONE For WPA pre-shared key (Adhoc)

WPA

WPA2

3.2.14 EncrypType

value

NONE For AuthMode=OPEN

WEP For AuthMode=OPEN or AuthMode=SHARED

TKIP For AuthMode=WPAPSK or WPA2PSK

AES For AuthMode=WPAPSK or WPA2PSK

3.2.15 DefaultKeyID

value

1~4

3.2.16 WEP KeyType

Key1Type=vaule

Key2Type=value

Key3Type=vaule

Key4Type=vaule

12/94
RT2870 Linux Station Release Notes and User’s Guide

value

0 hexadecimal type

1 assic type

(usage : reading profile only)

3.2.17 WEP Hex Key

Key1=value

Key2=value

Key3=value

Key4=value

value

10 or 26 hexadecimal characters eg: 012345678

5 or 13 ascii characters eg: passd

(usage : "iwpriv" only)

3.2.18 WEP Key String

Key1Str=value

Key2Str=value

Key3Str=vaule

Key4Str=vaule

value

10 or 26 characters (key type=0)

5 or 13 characters (key type=1)

(usage : reading profile only)

3.2.19 WPAPSK

value

8~63 ASCII or

64 HEX characters

3.2.20 WmmCapable

value

13/94
RT2870 Linux Station Release Notes and User’s Guide

0: Disable WMM

1: Enable WMM

3.2.21 IEEE80211H

Enabel IEEE802.11h support

Value:

0:Disable

1:Enable

3.2.22 PSMode

value

CAM Constantly Awake Mode

Max_PSP Max Power Savings

Fast_PSP Power Save Mode

3.2.23 FastRoaming

value

0: Disabled

1: Enabled

3.2.24 RoamThreshold

value

0 ~ 255

3.2.25 CarrierDetect

value

0: Disabled

1: Enabled

3.2.26 APSDCapable

value

0: Disabled

1: Enabled

14/94
RT2870 Linux Station Release Notes and User’s Guide

3.2.27 APSDAC

Value

APSDAC=0;0;0;0 // Power Save for AC_BE, AC_BK, AC_VI, AC_VO

0: Disabled

1: Enabled

3.2.28 WirelessEvent

value

0: Disabled

1: Enabled (send custom wireless event)

3.2.29 CarrierDetect

value

0: Disabled

1: Enabled

3.2.30 AntDiversity

value

0: Disabled

1: Enabled

3.3 MORE INFORMATION

If you want for rt2070 driver to auto-load at boot time:

A) choose ra0 for first RT2070 WLAN card, ra1 for second RT2070 WLAN card, etc.

B) create(edit) 'ifcfg-ra0' file in /etc/sysconfig/network-scripts/,

edit( or add the line) in /etc/modules.conf:

alias ra0 rt2070sta

C) edit(create) the file /etc/sysconfig/network-scripts/ifcfg-ra0

DEVICE='ra0'

ONBOOT='yes'

NOTE:

15/94
RT2870 Linux Station Release Notes and User’s Guide

if you use dhcp, add this line too.

BOOTPROTO='dhcp'

D) To ease the Default Gateway setting,

add the line

GATEWAY=x.x.x.x

in /etc/sysconfig/network

16/94
RT2870 Linux Station Release Notes and User’s Guide

4 WIRELESS TOOLS

4.1 Iwpriv ra0 set Usage

This is detailed explanation of each parameter for iwpriv.

Before reading this document, make sure you already read README.

iwpriv ra0 set [parameters]=[Value]

NOTE:

Execute one iwpriv/set command simultaneously.

4.1.1 DriverVersion

Check driver version by issue iwpriv set command.

Range:

Any value

Value:

4.1.2 CountryRegion

Set country region.

Range:

{0~7}

Value:
Region Channels
0 1-11

1 1-13

2 10-11

3 10-13

4 14

5 1-14

6 3-9

7 5-13

17/94
RT2870 Linux Station Release Notes and User’s Guide

4.1.3 CountryRegionABand

Set country region for A band.

Range:

{0~11}

Value:
Region Channels
0 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165

1 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140

2 36, 40, 44, 48, 52, 56, 60, 64

3 52, 56, 60, 64, 149, 153, 157, 161

4 149, 153, 157, 161, 165

5 149, 153, 157, 161

6 36, 40, 44, 48

7 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165

8 52, 56, 60, 64

9 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165

10 36, 40, 44, 48, 149, 153, 157, 161, 165

11 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161

4.1.4 SSID

Set AP SSID

Range:

{0~z, 1~32 ascii characters}

Value:

4.1.5 WirelessMode

Set Wireless Mode

Range:

{0~10}

Value:

0: legacy 11b/g mixed

1: legacy 11B only

18/94
RT2870 Linux Station Release Notes and User’s Guide

2: legacy 11A only

3: legacy 11a/b/g mixed

4: legacy 11G only

4.1.6 TxBurst:

Set TxBurst Enable or Disable

Range:

{0,1}

Value:

0:Disable,

1:Enable

4.1.7 PktAggregate:

Set Tx Aggregate Enable or Disable

Range:

{0,1}

Value:

0:Disable,

1:Enable

4.1.8 TxPreamble:

Set TxPreamble

Range:

{0~2}

Value:

0:Preamble Long,

1:Preamble Short,

2:Auto

4.1.9 TxPower:

Set Tx power in percentage

19/94
RT2870 Linux Station Release Notes and User’s Guide

Range:

{0~100}

Value:

4.1.10 Channel

Set Channel, depends on CountryRegion or CountryRegionABand

4.1.11 BGProtection:

Set 11B/11G Protection

Range:

{0~2}

Value:

0:Auto,

1:Always on,

2:Always off

4.1.12 RTSThreshold:

Set RTS Threshold

Range:

{1~2347}

Value:

4.1.13 FragThreshold:

Set Fragment Threshold

Range:

{256~2346}

Value:

4.1.14 NetworkType:

Set Network type

Range:

{Infra,Adhoc}

Value:

20/94
RT2870 Linux Station Release Notes and User’s Guide

4.1.15 AuthMode:

Set Authentication Mode

Range:

{OPEN,SHARED,WEPAUTO,WPAPSK,WPA2PSK,WPANONE}

Value:

4.1.16 EncrypType:

Set Encryption Type

Range:

{NONE,WEP,TKIP,AES}

Value:

4.1.17 DefaultKeyID:

Set Default Key ID

Range:

{1~4}

Value:

4.1.18 Key1

Set Key1 String

Range:

{5 ascii characters or 10 hex number or

13 ascii characters or 26 hex numbers}

Value:

4.1.19 Key2

Set Key2 String

Range:

{5 ascii characters or 10 hex number or

13 ascii characters or 26 hex numbers}

Value:

4.1.20 Key3

21/94
RT2870 Linux Station Release Notes and User’s Guide

Set Key3 String

Range:

{5 ascii characters or 10 hex number or

13 ascii characters or 26 hex numbers}

Value:

4.1.21 Key4

Set Key4 String

Range:

{5 ascii characters or 10 hex number or

13 ascii characters or 26 hex numbers}

Value:

4.1.22 WPAPSK

WPA Pre-Shared Key

Range:

{8~63 ascii or 64 hex characters}

Value:

4.1.23 WmmCapable

Set WMM Capable

Range:

{0,1}

Value:

0:Disable WMM,

1:Enable WMM

4.1.24 IEEE80211H

Enabel IEEE802.11h support

Range:

{0,1}

Value:

22/94
RT2870 Linux Station Release Notes and User’s Guide

0:Disable

1:Enable

4.1.25 PSMode

Set Power Saving Mode

Range:

{CAM, MAX_PSP, FAST_PSP}

Value:

4.1.26 ResetCounter

Reset statistics counter

Range:

Any vlaue

Value:

4.1.27 Debug

Set on debug level

Range:

{0 ~ 5}

Value:

0: OFF no debug message display

1: ERROR display error message

2: WARN display warning message

3: TRACE display trace message, usually used.

4: INFO display informatic message

5: LOUD display all message

4.1.28 FixedTxMode

Set Fixed Tx Mode for fixed rate setting

value

Mode = CCK

23/94
RT2870 Linux Station Release Notes and User’s Guide

MCS= 0 => 1Mbps

MCS= 1 => 2Mbps

MCS= 2 => 5.5 Mbps

MCS= 3 => 11 Mbps

Mode = OFDM

MCS= 0 => 6Mbps

MCS= 1 => 9Mbps

MCS= 2 => 12Mbps

MCS= 3 => 18Mbps

MCS= 4 => 24Mbps

MCS= 5 => 36Mbps

MCS= 6 => 48Mbps

MCS= 7 => 54Mbps

4.1.29 LongRetry

USAGE:

iwpriv ra0 set LongRetry=value

value :

0~255

4.1.30 ShortRetry

USAGE:

iwpriv ra0 set ShortRetry=value

value :

0~255

24/94
RT2870 Linux Station Release Notes and User’s Guide

4.2 Iwpriv ra0 show Usage

This is detailed explanation of each parameter for iwpriv.

Before reading this document, make sure you already read README.

iwpriv ra0 show [parameters]

4.2.1 connStatus

Show STA connection Status

4.2.2 driverVer

Show STA current driver version

4.2.3 bainfo

Show STA current BA information

4.2.4 rxbulk

Show STA current rxbluk information

4.2.5 txbulk

Show STA current txbluk information

4.3 Iwpriv ra0 Usage

This is detailed explanation of each parameter for iwpriv.

Before reading this document, make sure you already read README.

iwpriv ra0 [parameters]

4.3.1 radio_off

Turn STA radio off

25/94
RT2870 Linux Station Release Notes and User’s Guide

4.3.2 radio_on

Turn STA radio on

4.4 Iwpriv Examples

4.4.1 Infrastructure

4.4.1.1 OPEN/NONE

Config STA to link with AP which is OPEN/NONE(Authentication/Encryption)

1. iwpriv ra0 set NetworkType=Infra

2. iwpriv ra0 set AuthMode=OPEN

3. iwpriv ra0 set EncrypType=NONE

4. iwpriv ra0 set SSID="AP's SSID"

4.4.1.2 SHARED/WEP

Config STA to link with AP which is SHARED/WEP(Authentication/Encryption)

1. iwpriv ra0 set NetworkType=Infra

2. iwpriv ra0 set AuthMode=SHARED

3. iwpriv ra0 set EncrypType=WEP

4. iwpriv ra0 set DefaultKeyID=1

5. iwpriv ra0 set Key1="AP's wep key"

6. iwpriv ra0 set SSID="AP's SSID"

4.4.1.3 WPAPSK/TKIP

Config STA to link with AP which is WPAPSK/TKIP(Authentication/Encryption)

1. iwpriv ra0 set NetworkType=Infra

2. iwpriv ra0 set AuthMode=WPAPSK

3. iwpriv ra0 set EncrypType=TKIP

4. iwpriv ra0 set SSID="AP's SSID"

5. iwpriv ra0 set WPAPSK="AP's wpa-preshared key"

6. iwpriv ra0 set SSID="AP's SSID"

4.4.1.4 WPAPSK/AES

26/94
RT2870 Linux Station Release Notes and User’s Guide

Config STA to link with AP which is WPAPSK/AES(Authentication/Encryption)

1. iwpriv ra0 set NetworkType=Infra

2. iwpriv ra0 set AuthMode=WPAPSK

3. iwpriv ra0 set EncrypType=AES

4. iwpriv ra0 set SSID="AP's SSID"

5. iwpriv ra0 set WPAPSK="AP's wpa-preshared key"

6. iwpriv ra0 set SSID="AP's SSID"

4.4.1.5 WPA2PSK/TKIP

Config STA to link with AP which is WPA2PSK/TKIP(Authentication/Encryption)

1. iwpriv ra0 set NetworkType=Infra

2. iwpriv ra0 set AuthMode=WPA2PSK

3. iwpriv ra0 set EncrypType=TKIP

4. iwpriv ra0 set SSID="AP's SSID"

5. iwpriv ra0 set WPAPSK=12345678

6. iwpriv ra0 set SSID="AP's SSID"

4.4.2 Ad-Hoc

4.4.2.1 OPEN/NONE

Config STA to create/link as adhoc mode, which is OPEN/NONE(Authentication/Encryption)

1. iwpriv ra0 set NetworkType=Adhoc

2. iwpriv ra0 set AuthMode=OPEN

3. iwpriv ra0 set EncrypType=NONE

4. iwpriv ra0 set SSID="Adhoc's SSID"

4.4.2.2 WPANONE/TKIP

Config STA to create/link as adhoc mode, which is WPANONE/TKIP(Authentication/Encryption)

1. iwpriv ra0 set NetworkType=Adhoc

2. iwpriv ra0 set AuthMode=WPANONE

3. iwpriv ra0 set EncrypType=TKIP

4. iwpriv ra0 set SSID="AP's SSID"

27/94
RT2870 Linux Station Release Notes and User’s Guide

5. iwpriv ra0 set WPAPSK=12345678

6. iwpriv ra0 set SSID="AP's SSID"

4.4.3 Get site survey

usage:

iwpriv ra0 get_site_survey

4.4.4 Get Statistics

usage:

iwpriv ra0 stat ; read statistic counter

iwpriv ra0 set ResetCounter=0 ; reset statistic counter

4.4.5 ANY SSID

Link with an AP which is the largest strength, set ANY SSID (ssidLen=0)

usage:

iwconfig ra0 essid ""

or

iwpriv ra0 set SSID=""

4.5 iwlist

This is detailed explanation of each parameters for iwlist.

iwlist ra0 scanning ; list the results after scanning(manual rescan)

4.6 iwconfig

The following are our support in standard configuration – iwconfig

1) iwconfig ra0 essid {NN|on|off} ; set essid

2) iwconfig ra0 mode {managed|ad-hoc|...} ; set wireless mode

3) iwconfig ra0 freq N.NNNN[k|M|G]] ; set frequency

4) iwconfig ra0 channel N ; set channel

28/94
RT2870 Linux Station Release Notes and User’s Guide

5) iwconfig ra0 ap {N|off|auto} ; set AP address

6) iwconfig ra0 nick N ; set nickname

7) iwconfig ra0 rate {N|auto|fixed} ; set rate

8) iwconfig ra0 rts {N|auto|fixed|off} ; set RTS threshold

9) iwconfig ra0 frag {N|auto|fixed|off} ; set Fragment threshold

10) iwconfig ra0 enc {NNNN-NNNN|off} ; set encryption type

11) iwconfig ra0 power {period N|timeout N} ; set power management modes

NOTE:

Wireless extension usage, please refer to man page of 'iwconfig', 'iwlist' and 'iwpriv'.

29/94
RT2870 Linux Station Release Notes and User’s Guide

5 WPS – WI-FI PROTECTED SETUP

Simple Config Architectural Overview

This section presents a high-level description of the Simple Config architecture. Much of the material
is taken directly from the Simple Config specification.

Figure 1 depicts the major components and their interfaces as defined by Wi-Fi Simple Config Spec.
There are three logical components involved: the Registrar, the access point (AP), and the Enrollee.

 The Enrollee is a device seeking to join a WLAN domain. Once an Enrollee obtains a
valid credential, it becomes a member.

 A Registrar is an entity with the authority to issue and revoke domain credentials. A
registrar can be integrated into an AP.

 The AP can be either a WLAN AP or a wireless router.

Components and Interfaces

Registration initiation is ordinarily accomplished by a user action such as powering up the Enrollee
and, optionally, running a setup wizard on the Registrar (PC).

5.1 Iwpriv Usage

This is detailed explanation of each parameters for iwpriv.

Before reading this document, make sure you already read README.

iwpriv ra0 [commands]=[Value]

NOTE:

Wireless extension private handlers.

5.1.1 wsc_conf_mode

Set WPS conf mode.

Range:

{0, 1, 2}

30/94
RT2870 Linux Station Release Notes and User’s Guide

Value:

0: WPS Disabled

1: Enrollee

2: Registrar

5.1.2 wsc_mode

Set WPS mode, PIN or PBC.

Range:

{1, 2}

Value:

1: PIN

2: PBC

5.1.3 wsc_pin

Set Enrollee's PIN Code.

Range:

{00000000 ~ 99999999}

Value:

5.1.4 wsc_ ssid

Set WPS AP SSID.

Range:

{0~z, 1~32 ascii characters}

Value:

5.1.5 wsc_start

Trigger RT2070 STA driver to do WPS process.

Range:

NULL

Value:

5.1.6 wsc_ stop

Stop WPS process and don't wait upon two-minute timeout.

31/94
RT2870 Linux Station Release Notes and User’s Guide

Range:

NULL

Value:

5.1.7 wsc_gen_pincode

Generate new PIN code.

Range:

NULL

Value:

5.1.8 wsc_cred_count

Set count of WPS credential, only support one credential for M8 in Registrar mode.

Range:

{1 ~ 8}

Value:

5.1.9 wsc_cred_ssid

Set SSID into credtentail[idx].

Range:

{"idx ssid_str"}

Value:

idx: 0 ~ 7

ssid_str: 0~z, 1~32 ascii characters

Example:

iwpriv ra0 wsc_cred_ssid "0 wps_ap1"

5.1.10 wsc_cred_auth

Set AuthMode into credtentail[idx].

Range:

{"idx auth_str"}

Value:

idx: 0 ~ 7

32/94
RT2870 Linux Station Release Notes and User’s Guide

auth_str: OPEN, WPAPSK, WPA2PSK, SHARED, WPA, WPA2

Example:

iwpriv ra0 wsc_cred_auth "0 WPAPSK"

5.1.11 wsc_cred_encr

Set EncrypType into credtentail[idx].

Range:

{"idx encr_str"}

Value:

idx: 0 ~ 7

encr_str: NONE, WEP, TKIP, AES

Example:

iwpriv ra0 wsc_cred_encr "0 TKIP"

5.1.12 wsc_cred_keyIdx

Set Key Index into credtentail[idx].

Range:

{"idx key_index"}

Value:

idx: 0 ~ 7

key_index: 1 ~ 4

Example:

iwpriv ra0 wsc_cred_keyIdx "0 1"

5.1.13 wsc_cred_key

Set Key into credtentail[idx].

Range:

{"idx key"}

Value:

idx: 0 ~ 7

key: ASCII string (wep_key_len(=5,13), passphrase_len(=8~63))

OR

33/94
RT2870 Linux Station Release Notes and User’s Guide

Hex string (wep_key_len(=10,26), passphrase_len(=64))

Example:

iwpriv ra0 wsc_cred_key "0 12345678" ;; Passphrase

iwpriv ra0 wsc_cred_key "0 abcd" ;; WEP Key

5.1.14 wsc_cred_mac

Set AP's MAC into credtentail[idx].

Range:

{"idx mac_str"}

Value:

idx: 0 ~ 7

mac_str: xx:xx:xx:xx:xx:xx

Example:

iwpriv ra0 wsc_cred_mac "0 00:11:22:33:44:55"

5.1.15 wsc_conn_by_idx

Connect AP by credential index.

Range:

{0 ~ 7}

Value:

idx: 0 ~ 7

5.1.16 wsc_auto_conn

If the registration is successful, driver will re-connect to AP or not.

Range:

{0, 1}

Value:

0: Disabled, driver won't re-connect to AP with new configurations.

1: Enabled, driver will re-connect to AP with new configurations.

34/94
RT2870 Linux Station Release Notes and User’s Guide

5.2 WPS STA as an Enrollee or Registrar

Build WPS function. Please set 'HAS_WSC=y'.

5.2.1 Enrollee Mode

5.2.1.1 PIN mode:


Running Scenarios (case 'a' and 'b')

a. Adding an Enrollee to AP+Registrar (EAP)

[AP+Registrar]<----EAP--->[Enrollee Client]

b. Adding an Enrollee with external Registrar (UPnP/EAP)

[External Registrar]<----UPnP--->[AP_Proxy]<---EAP--->[Enrollee Client]

Note:

'EAP' indicates to use wireless medium and 'UPnP' indicates to use

wired or wireless medium.


(i) [Registrar] or [AP+Registrar]

Enter the Enrollee PinCode on the Registrar and start WPS on the Registrar.

Note:

How to get the Enrollee PinCode? Use 'iwpriv ra0 stat' on the Enrollee.
(ii) [RT2070 Linux WPS STA]

iwpriv ra0 wsc_conf_mode 1 ;; Enrollee

iwpriv ra0 wsc_mode 1 ;; PIN

iwpriv ra0 wsc_ssid "AP's SSID"

iwpriv ra0 wsc_start

(iii) If the registration is successful, the Enrollee will be re-configured with the new parameters,
and will connect to the AP with these new parameters.

5.2.1.2 PBC mode:


Running Scenarios (case 'a' only)

a. Adding an Enrollee to AP+Registrar (EAP)

[AP+Registrar]<----EAP--->[Client]

35/94
RT2870 Linux Station Release Notes and User’s Guide

(i) [AP+Registrar]

Start PBC on the Registrar.


(ii) [RT2070 Linux WPS STA]

iwpriv ra0 wsc_conf_mode 1 ;; Enrollee

iwpriv ra0 wsc_mode 2 ;; PBC

iwpriv ra0 wsc_start


(iii) If the registration is successful, the Enrollee will be re-configured with the new parameters,
and will connect to the AP with these new parameters.

5.2.2 Registrar Mode

5.2.2.1 PIN mode:


Running Scenarios (case 'a' and 'b')

a. Configure the un-configured AP

[Unconfigured AP]<----EAP--->[Registrar]

b. Configure the configured AP

Configured AP]<----EAP--->[Registrar]

(i) [AP]

Start PIN on the Enrollee WPS AP.

(ii) [RT2070 Linux WPS STA]

iwpriv ra0 wsc_conf_mode 2 ;; Registrar

iwpriv ra0 wsc_mode 1 ;; PIN

iwpriv ra0 wsc_pin xxxxxxxx ;; AP's PIN Code

iwpriv ra0 wsc_ssid "AP's SSID"

iwpriv ra0 wsc_start

(iii) If the registration is successful;

in case 'a':

The Registrar will be re-configured with the new parameters, and will connect to the AP
with these new parameters;

in case 'b':

The Registrar will be re-configured with AP's configurations, and will connect to the AP
with these new parameters.

36/94
RT2870 Linux Station Release Notes and User’s Guide

5.2.2.2 PBC mode:


Running Scenarios (case 'a' and 'b')

a. Configure the un-configured AP

[Unconfigured AP]<----EAP--->[Registrar]

b. Configure the configured AP

Configured AP]<----EAP--->[Registrar]

(i) [AP]

Start PBC on the Enrollee WPS AP.

(ii) [RT2070 Linux WPS STA]

iwpriv ra0 wsc_conf_mode 2 ;; Registrar

iwpriv ra0 wsc_mode 2 ;; PBC

iwpriv ra0 wsc_start

(iii) If the registration is successful;

in case 'a':

The Registrar will be re-configured with the new parameters, and will connect to the AP
with these new parameters;

in case 'b':

The Registrar will be re-configured with AP's configurations, and will connect to the AP
with these new parameters.

37/94
RT2870 Linux Station Release Notes and User’s Guide

5.3 WPS IOCTL Usage

Detail parameters and arguments, please refer to above section for detail.

5.3.1 iwpriv commands without argument

1. iwpriv ra0 wsc_start

2. iwpriv ra0 wsc_stop

3. iwpriv ra0 wsc_gen_pincode

Example:

memset(&lwreq, 0, sizeof(lwreq));

sprintf(lwreq.ifr_name, "ra0", 3);

lwreq.u.mode = WSC_STOP;

/* Perform the private ioctl */

if(ioctl(skfd, RTPRIV_IOCTL_SET_WSC_PROFILE_U32_ITEM, &lwreq) < 0)

fprintf(stderr, "Interface doesn't accept private ioctl...\n");

return -1;

5.3.2 iwpriv commands with one INT argument

1. iwpriv ra0 wsc_cred_count 1

2. iwpriv ra0 wsc_conn_by_idx 1

3. iwpriv ra0 wsc_auto_conn 1

4. iwpriv ra0 wsc_conf_mode 1

5. iwpriv ra0 wsc_mode 1

6. iwpriv ra0 wsc_pin 12345678

Example:

memset(&lwreq, 0, sizeof(lwreq));

lwreq.u.data.length = 1;

38/94
RT2870 Linux Station Release Notes and User’s Guide

cred_count = 1;

((int *) buffer)[i] = (int) cred_count;

offset = sizeof(int);

sprintf(lwreq.ifr_name, "ra0", 3);

lwreq.u.mode = WSC_CREDENTIAL_COUNT;

memcpy(lwreq.u.name + offset, buffer, IFNAMSIZ - offset);

/* Perform the private ioctl */

if(ioctl(skfd, RTPRIV_IOCTL_SET_WSC_PROFILE_U32_ITEM, &lwreq) < 0)

fprintf(stderr, "Interface doesn't accept private ioctl...\n");

return -1;

5.3.3 iwpriv commands with string argument

1. iwpriv ra0 wsc_ssid “0 xxxxx”

2. iwpriv ra0 wsc_cred_ssid “0 xxxxx”

3. iwpriv ra0 wsc_cred_auth “0 WPAPSK”

4. iwpriv ra0 wsc_cred_encr “0 TKIP”

5. iwpriv ra0 wsc_cred_keyIdx “0 1”

6. iwpriv ra0 wsc_cred_key “0 12345”

7. iwpriv ra0 wsc_cred_mac “0 00:11:22:33:44:55”

Example:

memset(&lwreq, 0, sizeof(lwreq));

memset(buffer, 0, 2048);

sprintf(lwreq.ifr_name, "ra0", 3);

sprintf(buffer, "0 wps_ssid_1");

lwreq.u.data.length = strlen(buffer) + 1;

lwreq.u.data.pointer = (caddr_t) buffer;

lwreq.u.data.flags = WSC_CREDENTIAL_SSID;

39/94
RT2870 Linux Station Release Notes and User’s Guide

/* Perform the private ioctl */

if(ioctl(skfd, RTPRIV_IOCTL_SET_WSC_PROFILE_STRING_ITEM, &lwreq) < 0)

fprintf(stderr, "Interface doesn't accept private ioctl...\n");

return -1;

5.4 WPS IOCTL Sample Program

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <assert.h>

#include <netinet/in.h> /* for sockaddr_in */

#include <fcntl.h>

#include <time.h>

#include <sys/times.h>

#include <unistd.h>

#include <sys/socket.h> /* for connect and socket*/

#include <sys/stat.h>

#include <err.h>

#include <errno.h>

#include <asm/types.h>

#include </usr/include/linux/wireless.h>

#include <sys/ioctl.h>

#define IFNAMSIZ 16

#define RTPRIV_IOCTL_SET_WSC_PROFILE_U32_ITEM (SIOCIWFIRSTPRIV + 0x14)

#define RTPRIV_IOCTL_SET_WSC_PROFILE_STRING_ITEM (SIOCIWFIRSTPRIV + 0x16)

40/94
RT2870 Linux Station Release Notes and User’s Guide

enum {

WSC_CREDENTIAL_COUNT = 1,

WSC_CREDENTIAL_SSID = 2,

WSC_CREDENTIAL_AUTH_MODE = 3,

WSC_CREDENTIAL_ENCR_TYPE = 4,

WSC_CREDENTIAL_KEY_INDEX = 5,

WSC_CREDENTIAL_KEY = 6,

WSC_CREDENTIAL_MAC = 7,

WSC_SET_DRIVER_CONNECT_BY_CREDENTIAL_IDX = 8,

WSC_SET_DRIVER_AUTO_CONNECT = 9,

WSC_SET_CONF_MODE = 10, // Enrollee or Registrar

WSC_SET_MODE = 11, // PIN or PBC

WSC_SET_PIN = 12,

WSC_SET_SSID = 13,

WSC_START = 14,

WSC_STOP = 15,

WSC_GEN_PIN_CODE = 16,

};

int main()

struct iwreq lwreq;

char buffer[2048] = {0};

int cred_count;

int offset = 0; /* Space for sub-ioctl index */

int skfd, i = 0; /* generic raw socket desc. */

skfd = socket(AF_INET, SOCK_DGRAM, 0);

if (skfd < 0)

return -1;

41/94
RT2870 Linux Station Release Notes and User’s Guide

//////////// WSC_STOP ////////////

memset(&lwreq, 0, sizeof(lwreq));

sprintf(lwreq.ifr_name, "ra0", 3);

lwreq.u.mode = WSC_STOP;

/* Perform the private ioctl */

if(ioctl(skfd, RTPRIV_IOCTL_SET_WSC_PROFILE_U32_ITEM, &lwreq) < 0)

fprintf(stderr, "Interface doesn't accept private ioctl...\n");

return -1;

///////////////////////////////////

/////// WSC_CREDENTIAL_COUNT ///////

memset(&lwreq, 0, sizeof(lwreq));

lwreq.u.data.length = 1;

cred_count = 1;

((int *) buffer)[i] = (int) cred_count;

offset = sizeof(int);

sprintf(lwreq.ifr_name, "ra0", 3);

lwreq.u.mode = WSC_CREDENTIAL_COUNT;

memcpy(lwreq.u.name + offset, buffer, IFNAMSIZ - offset);

/* Perform the private ioctl */

if(ioctl(skfd, RTPRIV_IOCTL_SET_WSC_PROFILE_U32_ITEM, &lwreq) < 0)

fprintf(stderr, "Interface doesn't accept private ioctl...\n");

return -1;

42/94
RT2870 Linux Station Release Notes and User’s Guide

///////////////////////////////////

/////// WSC_CREDENTIAL_SSID ///////

memset(&lwreq, 0, sizeof(lwreq));

memset(buffer, 0, 2048);

sprintf(lwreq.ifr_name, "ra0", 3);

sprintf(buffer, "0 wps_ssid_1");

lwreq.u.data.length = strlen(buffer) + 1;

lwreq.u.data.pointer = (caddr_t) buffer;

lwreq.u.data.flags = WSC_CREDENTIAL_SSID;

/* Perform the private ioctl */

if(ioctl(skfd, RTPRIV_IOCTL_SET_WSC_PROFILE_STRING_ITEM, &lwreq) < 0)

fprintf(stderr, "Interface doesn't accept private ioctl...\n");

return -1;

///////////////////////////////////

close(skfd);

return 0;

43/94
RT2870 Linux Station Release Notes and User’s Guide

6 ATE TEST COMMAND FORMAT

****** IMPORTANT ******

If you are not familiar with hardware, it is recommanded not to modify hardware default value.

44/94
RT2870 Linux Station Release Notes and User’s Guide

6.1 iwpriv ra0 set [parameters]=[val]

Syntax: Example

Section# parameters 11.1.5 ATECHANNEL

Explanation Set ATE channel.

Value: Value:

0: … 1:

1: … 2:

.: … .:

6.1.1 ATE

Set ATE actions.

Value:

ATESTART - Stop STA & ATE function.

ATESTOP - Start STA function.

TXCONT - Start STA continuous TX, for power mask.

TXCARR - Start STA carrier test, for frequency calibration.

TXFRAME - Transmit frame, for EVM.

RXFRAME - Continuous RX, for PER/FER.

6.1.2 ATEDA

Set ATE frame header addr1.

Value:

xx:xx:xx:xx:xx:xx ; hex

6.1.3 ATESA

Set ATE frame header addr2.

Value:

xx:xx:xx:xx:xx:xx ; hex

6.1.4 ATEBSSID

45/94
RT2870 Linux Station Release Notes and User’s Guide

Set ATE frame header addr3.

Value:

xx:xx:xx:xx:xx:xx ; hex

6.1.5 ATECHANNEL

Set ATE Channel, deimal.

Value:

802.11b/g: 1 ~ 14 depends on CountryRegion setting

6.1.6 ATETXPOW0

Set ATE Tx power for Antenna 1.

Value:

0 ~ 31 ; 5-bits only, deimal

6.1.7 ATETXPOW1

Set ATE Tx power for Antenna 2.

Value:

0 ~ 31 ; 5-bits only, decimal

6.1.8 ATETXFREQOFFSET

Set ATE RF frequency offset.

Value:

0 ~ 63 ; unit: 2KHz, deimal

6.1.9 ATETXLEN

Set ATE frame length.

Value:

24 ~ 1500 ; decimal

6.1.10 ATETXCNT

Set ATE frame Tx count.

Value:

1~ ; 32-bit, decimal

46/94
RT2870 Linux Station Release Notes and User’s Guide

6.1.11 ATETXMODE (Refer to TxMode)

Set ATE Tx Mode.

Value:

0: CCK 802.11b

1: OFDM 802.11g

2: HT_MIX 802.11b/g/n

3: Green Field 802.11n

6.1.12 ATETXBW (Refer to TxMode)

Set ATE Tx Bandwidth.

Value:

0: 20MHz

1: 40MHz

6.1.13 ATETXGI (Refer to TxMode)

Set ATE Tx Guard Interval.

Value:

0: Long

1: Short

6.1.14 ATETXMCS (Refer to TxMode)

Set ATE Tx MCS type.

Value:

0 ~ 15

6.1.15 ATETXANT

Set ATE TX antenna.

Value:

0: All

1: Antenna one

2: Antenna two

6.1.16 ATERXANT

47/94
RT2870 Linux Station Release Notes and User’s Guide

Set ATE RX antenna.

Value:

0: All

1: Antenna one

2: Antenna two

3: Antenna three

6.1.17 ATERXFER

Set ATE to periodic show up RxCount(per-second) and RxTotalCount.

Value:

0: Disable counter show up

1: Enable counter show up

6.1.18 ATESHOW

Show all parameters of ATE.

Value:

6.1.19 ATEHELP

List all commands of ATE.

Value:

6.1.20 ResetCounter

Reset statistic counter.

Value:

6.1.21 ATERRF

Read all of the RF registers.

Value:

6.1.22 ATEWRF1

48/94
RT2870 Linux Station Release Notes and User’s Guide

Write the RF register 1.

Value:

xxxxxxxx ;32-bit, hex

6.1.23 ATEWRF2

Write the RF register 2.

Value:

xxxxxxxx ;32-bit, hex

6.1.24 ATEWRF3

Write the RF register 3.

Value:

xxxxxxxx ;32-bit, hex

6.1.25 ATEWRF4

Write the RF register 4.

Value:

xxxxxxxx ;32-bit, hex

6.2 Tx Mode, MCS, BW and GI Selection Table

6.2.1 MODE = 0, Legacy CCK


MCS = 0 Long Preamble CCK 1Mbps
MCS = 1 Long Preamble CCK 2Mbps
MCS = 2 Long Preamble CCK 5.5Mbps
MCS = 3 Long Preamble CCK 11Mbps
MCS = 8 Short Preamble CCK 1Mbps, * illegal rate
MCS = 9 Short Preamble CCK 2Mbps
MCS = 10 Short Preamble 5.5Mbps
MCS = 11 Short Preamble 11Mbps
Notes:

1. Other MCS codes are reserved in legacy CCK mode.

2. BW, SGI and STBC are reserved in legacy CCK mode.

6.2.2 MODE = 1, Legacy OFDM


MCS = 0 6Mbps
MCS = 1 9Mbps
MCS = 2 12Mbps

49/94
RT2870 Linux Station Release Notes and User’s Guide

MCS = 3 18Mbps
MCS = 4 24Mbps
MCS = 5 36Mbps
MCS = 6 48Mbps
MCS = 7 54Mbps
Notes:

1. Other MCS code in legacy CCK mode are reserved.

2. When BW = 1, duplicate legacy OFDM is sent.

3. SGI, STBC are reserved in legacy OFDM mode.

6.2.3 MODE = 2, HT Mixed Mode

6.2.4 MODE = 3, HT Greenfield


MCS = 0 (1S) (BW=0, SGI=0) 6.5Mbps
MCS = 1 (BW=0, SGI=0) 13Mbps
MCS = 2 (BW=0, SGI=0) 19.5Mbps
MCS = 3 (BW=0, SGI=0) 26Mbps
MCS = 4 (BW=0, SGI=0) 39Mbps
MCS = 5 (BW=0, SGI=0) 52Mbps
MCS = 6 (BW=0, SGI=0) 58.5Mbps
MCS = 7 (BW=0, SGI=0) 65Mbps
MCS = 8 (2S) (BW=0, SGI=0) 13Mbps
MCS = 9 (BW=0, SGI=0) 26Mbps
MCS = 10 (BW=0, SGI=0) 39Mbps
MCS = 11 (BW=0, SGI=0) 52Mbps
MCS = 12 (BW=0, SGI=0) 78Mbps
MCS = 13 (BW=0, SGI=0) 104Mbps
MCS = 14 (BW=0, SGI=0) 117Mbps
MCS = 15 (BW=0, SGI=0) 130Mbps
MCS = 32 (BW=1, SGI=0) HT duplicate 6Mbps

50/94
RT2870 Linux Station Release Notes and User’s Guide

Notes:

1. When BW=1, PHY_RATE = PHY_RATE * 2

2. When SGI=1, PHY_RATE = PHY_RATE * 10/9

3. The effects of BW and SGI are accumulative.

4. When MCS=0~7(1S, One Tx Stream), STBC option is supported. SGI option is supported.
BW option is supported.

5. When MCS=8~15(2S, Two Tx Stream), STBC option is NOT supported. SGI option is
supported. BW option is supported.

6. When MCS=32, only SGI option is supported. BW and STBC option are not supported.
(BW =1, STBC=0)

7. Other MCS code in HT mode are reserved.

8. When STBC is supported. Only STBC = 1 is allowed. STBC will extend the transmission
range but will not increase transmission rate.

6.3 Examples

6.3.1 Check EVM & Power

iwpriv ra0 set ATE=ATESTART

iwpriv ra0 set ATEDA=00:11:22:33:44:55

iwpriv ra0 set ATESA=00:aa:bb:cc:dd:ee

iwpriv ra0 set ATEBSSID=00:11:22:33:44:55

iwpriv ra0 set ATECHANNEL=1 ; set Channel

iwpriv ra0 set ATETXMODE=1 ; set TX-Mode.

iwpriv ra0 set ATETXMCS=7 ; set MCS type.

iwpriv ra0 set ATETXBW=0 ; set Bandwidth

iwpriv ra0 set ATETXGI=0 ; set Long GI.

iwpriv ra0 set ATETXLEN=1024 ; set packet length.

iwpriv ra0 set ATETXPOW0=18

iwpriv ra0 set ATETXPOW1=18

iwpriv ra0 set ATETXCNT=100000

iwpriv ra0 set ATE=TXFRAME

iwpriv ra0 set ATETXPOW0=19

51/94
RT2870 Linux Station Release Notes and User’s Guide

iwpriv ra0 set ATETXPOW0=20

iwpriv ra0 set ATE=ATESTART

6.3.2 Check Carrier

iwpriv ra0 set ATE=ATESTART

iwpriv ra0 set ATECHANNEL=1 ; set Channel

iwpriv ra0 set ATETXMODE=1 ; set TX-Mode.

iwpriv ra0 set ATETXMCS=7 ; set MCS type.

iwpriv ra0 set ATETXBW=0 ; set Bandwidth

iwpriv ra0 set ATETXCNT=200 ; Tx frame count(decmial)

iwpriv ra0 set ATE=TXFRAME ; Start Tx Frame(inform BBP to change, modulation mode)

iwpriv ra0 set ATE=TXCARR ; Start Tx carrier, Measure carrier with instrument

iwpriv ra0 set ATETXPOW0=05

iwpriv ra0 set ATETXPOW1=05

iwpriv ra0 set ATETXFREQOFFSET=19

iwpriv ra0 set ATE=ATESTART

6.3.3 Check specturm mask

iwpriv ra0 set ATE=ATESTART

iwpriv ra0 set ATECHANNEL=1 ; set Channel

iwpriv ra0 set ATETXMODE=1 ; set TX-Mode.

iwpriv ra0 set ATETXMCS=7 ; set MCS type.

iwpriv ra0 set ATETXBW=0 ; set Bandwidth

iwpriv ra0 set ATETXCNT=200 ; Tx frame count(decmial)

iwpriv ra0 set ATE=TXFRAME ; Start Tx Frame(inform BBP to change, modulation mode)

iwpriv ra0 set ATE=TXCONT ; Start continuous TX, Measure specturm mask with instrument

iwpriv ra0 set ATETXPOW0=5

iwpriv ra0 set ATETXPOW1=5

iwpriv ra0 set ATE=ATESTART

52/94
RT2870 Linux Station Release Notes and User’s Guide

6.3.4 Frequency offset tuning

iwpriv ra0 set ATE=ATESTART

iwpriv ra0 set ATECHANNEL=1 ; set Channel

iwpriv ra0 set ATETXMODE=1 ; set TX-Mode.

iwpriv ra0 set ATETXMCS=7 ; set MCS type.

iwpriv ra0 set ATETXCNT=200 ; Tx frame count(decmial)

iwpriv ra0 set ATETXFREQOFFSET=0 ; Set frequency offset 0(decimal)

iwpriv ra0 set ATE=TXFRAME ; Start Tx Frame

iwpriv ra0 set ATE=TXCARR ; Start Tx carrier, Measure carrier frequency with instrument

iwpriv ra0 set ATETXFREQOFFSET=10 ; Dynamic turning frequency offset, 10(decimal)

iwpriv ra0 set ATETXFREQOFFSET=20 ; Dynamic turning frequency offset, 20(decimal)

iwpriv ra0 set ATE=ATESTART ; Stop, Store the tuning result to EEPROM

6.3.5 Rx

iwpriv ra0 set ATE=ATESTART

iwpriv ra0 set ATECHANNEL=1 ; set Channel

iwpriv ra0 set ResetCounter=0 ; Reset statistic counter

iwpriv ra0 set ATETXMODE=1 ; set TX-Mode.

iwpriv ra0 set ATETXMCS=7 ; set MCS type.

iwpriv ra0 set ATETXBW=0 ; set Bandwidth

iwpriv ra0 set ATE=RXFRAME ; Start Rx,

iwpriv ra0 set ATERXFER=1 ; show RxCnt and RSSI/per-antenna, Transmit test packets

iwpriv ra0 set ATE=ATESTART ; Stop

iwpriv ra0 stat ; get statistics counter

iwpriv ra0 set ATERXFER=1

iwpriv ra0 set ATERXANT=1

iwpriv ra0 set ATE=ATESTART

iwpriv ra0 set ATERXANT=0

iwpriv ra0 set ATE=RXFRAME

53/94
RT2870 Linux Station Release Notes and User’s Guide

6.3.6 Show all ate parameters

iwpriv ra0 set ATESHOW=1

Mode=4

TxPower0=0

TxPower1=0

TxAntennaSel=0

RxAntennaSel=0

BBPCurrentBW=0

GI=0

MCS=7

TxMode=1

Addr1=00:11:22:aa:bb:cc

Addr2=00:11:22:aa:bb:cc

Addr3=00:11:22:aa:bb:cc

Channel=1

TxLength=1024

TxCount=40000

TxRate=11

RFFreqOffset=0

6.3.7 Online help

iwpriv ra0 set ATEHELP=1

ATE=ATESTART, ATESTOP, TXCONT, TXCARR, TXFRAME, RXFRAME

ATEDA

ATESA

ATEBSSID

ATECHANNEL, range:0~14

ATETXPOW0, set power level of antenna 1.

ATETXPOW1, set power level of antenna 2.

54/94
RT2870 Linux Station Release Notes and User’s Guide

ATETXANT, set TX antenna. 0:all, 1:antenna one, 2:antenna two.

ATERXANT, set RX antenna.0:all, 1:antenna one, 2:antenna tow, 3:antenna three.

ATETXFREQOFFSET, set frequency offset, range 0~63

ATETXBW, set BandWidth, 0:20MHz, 1:40MHz.

ATETXLEN, set Frame length, range 24~1500

ATETXCNT, set how many frame going to transmit.

ATETXRATE, set rate, reference to rate table.

ATETXMCS, set MCS, reference to rate table.

ATETXMODE, set Mode 0:CCK, 1:OFDM, 2:HT-Mix, 3:GreenField, reference to rate table.

ATETXGI, set GI interval, 0:Long, 1:Short

ATERXFER, 0:disable Rx Frame error rate. 1:enable Rx Frame error rate.

ATESHOW, display all parameters of ATE.

ATEHELP, online help.

6.3.8 Display Rx Packet Count and RSSI

iwpriv ra0 set ATE=RXFRAME  Start Rx

iwpriv ra0 set ATERXANT=0  Enable All Three Rx Antennas

iwpriv ra0 set ATERXFER=1  Enable Rx Frame Error Rate: RxCnt/RxTotal

MlmePeriodicExec: Rx packet cnt = 2/4

MlmePeriodicExec: Rx AvgRssi0=-88, AvgRssi1=-80, AvgRssi2=-91

MlmePeriodicExec: Rx packet cnt = 2/6

MlmePeriodicExec: Rx AvgRssi0=-86, AvgRssi1=-77, AvgRssi2=-89…

iwpriv ra0 set ATE=RXFRAME  Start Rx

iwpriv ra0 set ATERXANT=1  Enable Three Rx Antenna-1

iwpriv ra0 set ATERXFER=1  Enable Rx Frame Error Rate: RxCnt/RxTotal

MlmePeriodicExec: Rx packet cnt = 0/7

MlmePeriodicExec: Rx AvgRssi=-87

55/94
RT2870 Linux Station Release Notes and User’s Guide

MlmePeriodicExec: Rx packet cnt = 7/14

MlmePeriodicExec: Rx AvgRssi=-90

6.4 iwpriv ra0 bbp [parameters]=[Value]

Read/Write BBP register by ID number.

6.4.1 BBPID

Read BBP register, BBPID only, no “=” symbol.

BBPID:

0 ~ xx ; decimal, 8-bit

6.4.2 BBPID=Value

Write BBP register.

BBPID:

0 ~ xx ; decimal, 8-bit

Value:

00 ~FF ; hexdecimal, 8-bit

6.5 iwpriv ra0 mac [parameters]=[val]

Read/Write MAC register by offset.

6.5.1 MAC_OFFSET

Read MAC register, MAC_OFFSET only, no “=” symbol.

MAC_OFFSET:

0000 ~ FFFF ; hexdecimal, 16-bit

6.5.2 MAC_OFFSET=Value

Write MAC register.

MAC_OFFSET:

0000 ~ FFFF ; hexdecimal, 16-bit

Value:

56/94
RT2870 Linux Station Release Notes and User’s Guide

0000 ~FFFF ; hexdecimal, 32-bit

6.6 iwpriv ra0 e2p [parameters]=[val]

Read/Write EEPROM content by address.

6.6.1 EEP_ADDR

Read EEPROM content, EEP_ADDR only, no “=” symbol.

EEP_ADDR:

00 ~ FF ; hexdecimal, 16-bit alignment (0, 2, 4, 6, 8, A, C, …)

6.6.2 EEP_ADDR=Value

Write EEPROM content.

EEP_ADDR:

00 ~ FF ; hexdecimal, 16-bit alignment (0, 2, 4, 6, 8, A, C, …)

Value:

0000 ~FFFF ; hexdecimal, 16-bit

6.7 Example

6.7.1 Hardware access

iwpriv ra0 bbp 0 # read BBP register 0

iwpriv ra0 bbp 0=12 # write BBP register 0 as 0x12

iwpriv ra0 mac 0 # read MAC register 0

iwpriv ra0 mac 0=1234abcd # write MAC register 0 as 0x1234abcd

iwpriv ra0 e2p 0 # read E2PROM 0

iwpriv ra0 e2p c=12ab # write E2PROM 0xc as 0x12ab

6.7.2 Statistic counter operation

iwpriv ra0 stat # read statistic counter

iwpriv ra0 set ResetCounter=0 # reset statistic counter

6.7.3 Suggestion:

1. To turn on ATE functionality, you have to add compile flag "RALINK_ATE" to Makefile

2. Before doing ATE testing, please stop AP function

57/94
RT2870 Linux Station Release Notes and User’s Guide

3. If you want to test another ATE action, prefer to stop AP & ATE function

4. All ATE function settings will lose efficacy after reboot.

5. Before hardware register access, please reference hardware spec.

Note.

In ATE mode, the channel must set via "ATECHANNEL"

6.8 ated

ated - user space ATE agent program for RT2070 Linux driver, Ralink Tech. Corp.

RT2070 ATE daemon - ated, which comes with RT2070 Linux driver.

The relationship between the Linux driver, Windows QA GUI and RT2070 ATE daemon is explained here.

In addition, this will teach you how to use this ATE daemon.

6.8.1 Introduction

The ated is an optional user space component for RT2070 Linux driver.

When ated starts, AP enters ATE mode (i.e.,ATESTART) immediately.

It behaves as a proxy between Windows QA GUI and RT2070 Linux driver when ATE process proceeds.

And ated will be killed automatically when Windows QA GUI is closed.

You can kill it manually, too(for example, type '$killall ated').

RT2070 Linux driver will leave ATE mode either ated is killed or QA GUI is closed.

6.8.2 Environment setup

1. Connect the platform you want to test directly with a Windows host by ether network line.

2. In the Windows host, run WinPcap_4_0.exe for the QA GUI.

6.8.3 How to use ated for ATE purpose

1. First you should set both "HAS_ATE=y" and "HAS_28xx_QA=y" in the file
~/Module/os/linux/config.mk and compile the driver.

2. Modify the Makefile according to our target "PLATFORM".

3. Change the path of "CROSS_COMPILE" if needed.

4. Remove "-I$(INCLUDE)" about in line 39 if your target "PLATFORM" is not "PC".

5. Then type 'make' command to compile the source code of the daemon.

6. After the driver interface "ra0" has started up, attach both of "ra0" and the ethernet
interface to the bridge interface "br0".

58/94
RT2870 Linux Station Release Notes and User’s Guide

7. Manually start ated, type '$ated -bbrX -iraX'.(For further usage of options, type $ated -h)

8. In the Windows host, run RT2870QA_ATE.exe.

9. Select the wired network adapter.

10. Choose 2870_ATE, then press OK.

Note :

The names of WLAN interface(default is "ra0") and Bridge interface(default is "br0") must be
specified manually (for example : '$ated –b br1 –ira2') if your WLAN interface or Bridge
interface is not "ra0" or "br0" respectively !

59/94
RT2870 Linux Station Release Notes and User’s Guide

7 IOCTL

7.1 Parameters for iwconfig

Access Description ID Parameters

Get BSSID, MAC Address SIOCGIFHWADDR wrq->u.name, (length = 6)

WLAN Name SIOCGIWNAME wrq->u.name = "RT2870 Wireless", length = strlen(wrq->u.name)

SSID SIOCGIWESSID erq = &wrq->u.essid;

if(OPSTATUS_TEST_FLAG(pAd,fOP_STATUS_MEDIA_STATE_CONNECTED))

erq->flags=1;

erq->length = pAd-> CommonCfg.SsidLen;

Status = copy_to_user(erq->pointer,

pAd-> CommonCfg.Ssid, erq->length);

else

erq->flags=0;

erq->length=0;

Channel / Frequency SIOCGIWFREQ wrq->u.freq.m = pAd-> CommonCfg.Channel;

(Hz) wrq->u.freq.e = 0;

wrq->u.freq.i = 0;

Node name/nickname SIOCGIWNICKN erq = &wrq->u.data;

erq->length = strlen(pAd->nickn);

Status = copy_to_user(erq->pointer, pAd->nickn, erq->length);

Bit Rate SIOCGIWRATE wrq->u.bitrate.value = RateIdTo500Kbps[pAd-> CommonCfg.TxRate] *


500000;
(bps)
wrq->u.bitrate.disabled = 0;

60/94
RT2870 Linux Station Release Notes and User’s Guide

RTS/CTS threshold SIOCGIWRTS wrq->u.rts.value = (INT) pAd-> CommonCfg.RtsThreshold;

wrq->u.rts.disabled = (wrq->u.rts.value == MAX_RTS_THRESHOLD);

wrq->u.rts.fixed = 1;

Fragmentation threshold SIOCGIWFRAG wrq->u.frag.value = (INT) pAd-> CommonCfg.FragmentThreshold;


(bytes)
wrq->u.frag.disabled = (wrq->u.frag.value >= MAX_FRAG_THRESHOLD);

wrq->u.frag.fixed = 1;

Encoding SIOCGIWENCODE index = (wrq->u.encoding.flags & IW_ENCODE_INDEX) - 1;

token & mode if ((index < 0) || (index >= NR_WEP_KEYS))

index = pAd-> CommonCfg.DefaultKeyId; // Default key for tx


(shared key)

if (pAd-> CommonCfg.AuthMode == Ndis802_11AuthModeOpen)

wrq->u.encoding.flags = IW_ENCODE_OPEN;

else if (pAd-> CommonCfg.AuthMode == Ndis802_11AuthModeShared)

wrq->u.encoding.flags = IW_ENCODE_RESTRICTED;

if (pAd-> CommonCfg.WepStatus == Ndis802_11WEPDisabled)

wrq->u.encoding.flags |= IW_ENCODE_DISABLED;

else

if(wrq->u.encoding.pointer)

wrq->u.encoding.length = pAd->SharedKey[index].KeyLen;

Status = copy_to_user(wrq->u.encoding.pointer,

pAd->SharedKey[index].Key,

pAd->SharedKey[index].KeyLen);

wrq->u.encoding.flags |= (index + 1);

AP’s MAC address SIOCGIWAP wrq->u.ap_addr.sa_family = ARPHRD_ETHER;

memcpy(wrq->u.ap_addr.sa_data, &pAd-> CommonCfg.Bssid,


ETH_ALEN);

Operation SIOCGIWMODE if (ADHOC_ON(pAd))

61/94
RT2870 Linux Station Release Notes and User’s Guide

Mode {

BssType = Ndis802_11IBSS;

wrq->u.mode = IW_MODE_ADHOC;

else if (INFRA_ON(pAd))

BssType = Ndis802_11Infrastructure;

wrq->u.mode = IW_MODE_INFRA;

else

BssType = Ndis802_11AutoUnknown;

wrq->u.mode = IW_MODE_AUTO;

Access Description ID Parameters

Set SSID SIOCSIWESSID erq = &wrq->u.essid;

memset(&Ssid, 0x00, sizeof(NDIS_802_11_SSID));

if (erq->flags)

if (erq->length > IW_ESSID_MAX_SIZE)

Status = -E2BIG;

break;

Status = copy_from_user(Ssid.Ssid, erq->pointer, (erq->length - 1));

Ssid.SsidLength = erq->length - 1; //minus null character.

else

62/94
RT2870 Linux Station Release Notes and User’s Guide

Ssid.SsidLength = 0; // ANY ssid

memcpy(pSsid->Ssid, "", 0);

pAd->CommonCfg.BssType = BSS_INFRA;

pAd->CommonCfg.AuthMode = Ndis802_11AuthModeOpen;

pAd->CommonCfg.WepStatus = Ndis802_11EncryptionDisabled;

pSsid = &Ssid;

if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE)

MlmeRestartStateMachine(pAd);

pAd->MlmeAux.CurrReqIsFromNdis = FALSE;

MlmeEnqueue(pAd,

MLME_CNTL_STATE_MACHINE,

OID_802_11_SSID,

sizeof(NDIS_802_11_SSID),

(VOID *)pSsid);

Status = NDIS_STATUS_SUCCESS;

StateMachineTouched = TRUE;

Channel / Frequency SIOCSIWFREQ frq = &wrq->u.freq;

(Hz) if((frq->e == 0) && (frq->m <= 1000))

chan = frq->m; // Setting by channel number

else

MAP_KHZ_TO_CHANNEL_ID( (frq->m /100) , chan);

pAd->CommonCfg.Channel = chan;

node name/nickname SIOCSIWNICKN erq = &wrq->u.data;

if (erq->flags)

if (erq->length <= IW_ESSID_MAX_SIZE)

63/94
RT2870 Linux Station Release Notes and User’s Guide

Status = copy_from_user(pAd->nickn, erq->pointer, erq->length);

else

Status = -E2BIG;

Bit Rate SIOCSIWRATE RTMPSetDesiredRates(pAd, wrq->u.bitrate.value);

(bps)

RTS/CTS threshold SIOCSIWRTS RtsThresh = wrq->u.rts.value;

if (wrq->u.rts.disabled)

RtsThresh = MAX_RTS_THRESHOLD;

if((RtsThresh > 0) && (RtsThresh <= MAX_RTS_THRESHOLD))

pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh;

else if (RtsThresh == 0)

pAd->CommonCfg.RtsThreshold = MAX_RTS_THRESHOLD;

Fragmentation threshold SIOCSIWFRAG FragThresh = wrq->u.frag.value;


(bytes)
if (wrq->u.rts.disabled)

FragThresh = MAX_FRAG_THRESHOLD;

if ( (FragThresh >= MIN_FRAG_THRESHOLD) &&

(FragThresh <= MAX_FRAG_THRESHOLD))

pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh;

else if (FragThresh == 0)

pAd->CommonCfg.FragmentThreshold = MAX_FRAG_THRESHOLD;

if (pAd->CommonCfg.FragmentThreshold == MAX_FRAG_THRESHOLD)

pAd->CommonCfg.bFragmentZeroDisable = TRUE;

else

pAd->CommonCfg.bFragmentZeroDisable = FALSE;

Encoding SIOCSIWENCODE index = (wrq->u.encoding.flags & IW_ENCODE_INDEX) - 1;

token & mode if((index < 0) || (index >= NR_WEP_KEYS))

index = pAd->CommonCfg.DefaultKeyId; // Default key for tx (shared


key)

64/94
RT2870 Linux Station Release Notes and User’s Guide

if(wrq->u.encoding.pointer)

len = wrq->u.encoding.length;

if(len > WEP_LARGE_KEY_LEN)

len = WEP_LARGE_KEY_LEN;

memset(pAd->SharedKey[index].Key, 0x00, MAX_LEN_OF_KEY);

Status = copy_from_user(pAd->SharedKey[index].Key,

wrq->u.encoding.pointer, len);

pAd->SharedKey[index].KeyLen = len <= WEP_SMALL_KEY_LEN ?


WEP_SMALL_KEY_LEN :
WEP_LARGE_KEY_LEN;

pAd->CommonCfg.DefaultKeyId = (UCHAR) index;

if (wrq->u.encoding.flags & IW_ENCODE_DISABLED)

pAd->CommonCfg.WepStatus = Ndis802_11WEPDisabled;

else

pAd->CommonCfg.WepStatus = Ndis802_11WEPEnabled;

if (wrq->u.encoding.flags & IW_ENCODE_RESTRICTED)

pAd->CommonCfg.AuthMode = Ndis802_11AuthModeShared;

else

pAd->CommonCfg.AuthMode = Ndis802_11AuthModeOpen;

if(pAd->CommonCfg.WepStatus == Ndis802_11WEPDisabled)

pAd->CommonCfg.AuthMode = Ndis802_11AuthModeOpen;

AP’s MAC address SIOCSIWAP Status = copy_from_user(&Bssid, &wrq->u.ap_addr.sa_data,


sizeof(NDIS_802_11_MAC_ADDRESS));

if (pAd->Mlme.CntlMachine.CurrState != CNTL_IDLE)

MlmeRestartStateMachine(pAd);

65/94
RT2870 Linux Station Release Notes and User’s Guide

pAd->MlmeAux.CurrReqIsFromNdis = FALSE;

MlmeEnqueue(pAd,

MLME_CNTL_STATE_MACHINE,

OID_802_11_BSSID,

sizeof(NDIS_802_11_MAC_ADDRESS),

(VOID *)&Bssid);

Status = NDIS_STATUS_SUCCESS;

StateMachineTouched = TRUE;

Operation SIOCSIWMODE if(wrq->u.mode == IW_MODE_ADHOC)

Mode {

if (pAd->CommonCfg.BssType != BSS_ADHOC)

pAd->bConfigChanged = TRUE;

pAd->CommonCfg.BssType = BSS_ADHOC;

else if (wrq->u.mode == IW_MODE_INFRA)

if (pAd->CommonCfg.BssType != BSS_INFRA)

pAd->bConfigChanged = TRUE;

pAd->CommonCfg.BssType = BSS_INFRA;

else

Status = -EINVAL;

pAd->CommonCfg.WpaState = SS_NOTUSE;

66/94
RT2870 Linux Station Release Notes and User’s Guide

7.2 Parameters for iwpriv

Please refer section 3 for iwpriv parameters and values.

Parameters:

int socket_id;

char name[25]; // interface name

char data[255]; // command string

struct iwreq wrq;

Default setting:

wrq.ifr_name = name = “ra0”; // interface name

wrq.u.data.pointer = data; // data buffer of command string

wrq.u.data.length = strlen(data); // length of command string

wrq.u.data.flags = 0;

Data Structure:

Please refer to “./include/oid.h” for updated and more detailed definition.

7.2.1 Set Data, Parameters is Same as iwpriv

Command and IOCTL Function

Set Data

Function Type Command IOCTL

RTPRIV_IOCTL_SET iwpriv ra0 set SSID=RT2870AP sprintf(name, "ra0");

strcpy(data, "SSID=RT2870AP”);

strcpy(wrq.ifr_name, name);

wrq.u.data.length = strlen(data);

wrq.u.data.pointer = data;

wrq.u.data.flags = 0;

ioctl(socket_id, RTPRIV_IOCTL_SET, &wrq);

67/94
RT2870 Linux Station Release Notes and User’s Guide

7.2.2 Get Data, Parameters is Same as iwpriv

Command and IOCTL Function

Get Data

Function Type Command IOCTL

RTPRIV_IOCTL_STATISTICS Iwpriv ra0 stat sprintf(name, "ra0");

strcpy(data, "stat”);

strcpy(wrq.ifr_name, name);

wrq.u.data.length = strlen(data);

wrq.u.data.pointer = data;

wrq.u.data.flags = 0;

ioctl(socket_id, RTPRIV_IOCTL_STATISTICS, &wrq);

RTPRIV_IOCTL_GSITESURVEY Iwpriv ra0 get_site_survey sprintf(name, "ra0");

strcpy(data, "get_site_survey”);

strcpy(wrq.ifr_name, name);

wrq.u.data.length = strlen(data);

wrq.u.data.pointer = data;

wrq.u.data.flags = 0;

ioctl(socket_id, RTPRIV_IOCTL_GSITESURVEY, &wrq);

7.2.3 Set Raw Data with Flags

IOCTL Function

Set Raw Data by I/O Control Interface with Flags

Function Type IOCTL

RT_OID_802_11_COUNTRY_REGION sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(UCHAR));

68/94
RT2870 Linux Station Release Notes and User’s Guide

wrq.u.data.length = sizeof(UCHAR);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_COUNTRY_REGION;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_BSSID_LIST_SCAN sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

wrq.u.data.length = 0;

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_BSSID_LIST_SCAN;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_SSID sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_SSID));

wrq.u.data.length = sizeof(NDIS_802_11_SSID);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_SSID;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_BSSID sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_MAC_ADDRESS));

wrq.u.data.length = sizeof(NDIS_802_11_MAC_ADDRESS);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_BSSID;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_RADIO sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(BOOLEAN));

wrq.u.data.length = sizeof(BOOLEAN);

wrq.u.data.pointer = data;

69/94
RT2870 Linux Station Release Notes and User’s Guide

wrq.u.data.flags = RT_OID_802_11_RADIO;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_PHY_MODE sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(RT_802_11_PHY_MODE));

wrq.u.data.length = sizeof(RT_802_11_PHY_MODE);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_PHY_MODE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_STA_CONFIG sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(RT_802_11_STA_CONFIG));

wrq.u.data.length = sizeof(RT_802_11_STA_CONFIG);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_STA_CONFIG;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_DESIRED_RATES sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_RATES));

wrq.u.data.length = sizeof(NDIS_802_11_RATES);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_DESIRED_RATES;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_PREAMBLE sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(RT_802_11_PREAMBLE));

wrq.u.data.length = sizeof(RT_802_11_PREAMBLE);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_PREAMBLE;

70/94
RT2870 Linux Station Release Notes and User’s Guide

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_WEP_STATUS printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_WEP_STATUS));

wrq.u.data.length = sizeof(NDIS_802_11_WEP_STATUS);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_WEP_STATUS;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_AUTHENTICATION_MODE printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_AUTHENTICATION_MODE));

wrq.u.data.length = sizeof(NDIS_802_11_AUTHENTICATION_MODE);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_AUTHENTICATION_MODE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_INFRASTRUCTURE_MODE printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE));

wrq.u.data.length =
sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_INFRASTRUCTURE_MODE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_REMOVE_WEP printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_KEY_INDEX));

wrq.u.data.length = sizeof(NDIS_802_11_KEY_INDEX);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_REMOVE_WEP;

71/94
RT2870 Linux Station Release Notes and User’s Guide

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_RESET_COUNTERS printf(name, "ra0");

strcpy(wrq.ifr_name, name);

wrq.u.data.length = 0;

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_RESET_COUNTERS;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_RTS_THRESHOLD printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_RTS_THRESHOLD));

wrq.u.data.length = sizeof(NDIS_802_11_RTS_THRESHOLD);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_RTS_THRESHOLD;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_FRAGMENTATION_THRESHOLD printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0,
sizeof(NDIS_802_11_FRAGMENTATION_THRESHOLD));

wrq.u.data.length =
sizeof(NDIS_802_11_FRAGMENTATION_THRESHOLD);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_FRAGMENTATION_THRESHOLD;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_POWER_MODE printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_POWER_MODE));

wrq.u.data.length = sizeof(NDIS_802_11_POWER_MODE);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_POWER_MODE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

72/94
RT2870 Linux Station Release Notes and User’s Guide

OID_802_11_TX_POWER_LEVEL printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_TX_POWER_LEVEL));

wrq.u.data.length = sizeof(NDIS_802_11_TX_POWER_LEVEL);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_TX_POWER_LEVEL;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_TX_POWER_LEVEL_1 printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ULONG));

wrq.u.data.length = sizeof(ULONG);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_TX_POWER_LEVEL_1;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_NETWORK_TYPE_IN_USE printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_NETWORK_TYPE));

wrq.u.data.length = / sizeof(NDIS_802_11_NETWORK_TYPE);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_NETWORK_TYPE_IN_USE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_RX_ANTENNA_SELECTED printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_ANTENNA));

wrq.u.data.length = sizeof(NDIS_802_11_ANTENNA);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_RX_ANTENNA_SELECTED;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_TX_ANTENNA_SELECTED printf(name, "ra0");

73/94
RT2870 Linux Station Release Notes and User’s Guide

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_ANTENNA));

wrq.u.data.length = sizeof(NDIS_802_11_ANTENNA);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_TX_ANTENNA_SELECTED;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_ADD_WPA printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, 32);

wrq.u.data.length = 32;

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_ADD_WPA;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_REMOVE_KEY printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_REMOVE_KEY));

wrq.u.data.length = sizeof(NDIS_802_11_REMOVE_KEY);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_REMOVE_KEY;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_ADD_KEY printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, keylength); //5,10,13,26

wrq.u.data.length = keylength L;

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_ADD_KEY;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_SET_IEEE8021X printf(name, "ra0");

strcpy(wrq.ifr_name, name);

74/94
RT2870 Linux Station Release Notes and User’s Guide

memset(data, 0, sizeof(BOOLEAN));

wrq.u.data.length = sizeof(BOOLEAN);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_SET_IEEE8021X;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_SET_IEEE8021X_REQUIRE_KEY printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(BOOLEAN));

wrq.u.data.length = sizeof(BOOLEAN);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_SET_IEEE8021X_REQUIRE_KEY;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_ADD_WEP printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, keylength); //5,10,13,26

wrq.u.data.length = keylength;

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_RADIO;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_CONFIGURATION printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_CONFIGURATION));

wrq.u.data.length = sizeof(NDIS_802_11_CONFIGURATION);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_CONFIGURATION;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_SET_COUNTERMEASURES printf(name, "ra0");

strcpy(wrq.ifr_name, name);

wrq.u.data.length = 0;

75/94
RT2870 Linux Station Release Notes and User’s Guide

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_SET_COUNTERMEASURES;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_DISASSOCIATE printf(name, "ra0");

strcpy(wrq.ifr_name, name);

wrq.u.data.length = 0;

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_DISASSOCIATE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_PMKID printf(name, "ra0");

strcpy(wrq.ifr_name, name);

wrq.u.data.length = keylength; //follow your setting

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_PMKID;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_WPA_SUPPLICANT_SUPPORT printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(BOOLEAN));

wrq.u.data.length = sizeof(BOOLEAN);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_WPA_SUPPLICANT_SUPPORT;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_WPA_SUPPLICANT_SUPPORT printf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ULONG));

wrq.u.data.length = sizeof(ULONG);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_WPA_SUPPLICANT_SUPPORT;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

76/94
RT2870 Linux Station Release Notes and User’s Guide

RT_SET_DEL_MAC_ENTRY sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0xdd, 6);

strcpy(wrq.ifr_name, name);

wrq.u.data.length = 6;

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_SET_DEL_MAC_ENTRY;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

7.2.4 Get Raw Data with Flags

IOCTL Function

Get Raw Data by I/O Control Interface with Flags

Function Type IOCTL

RT_OID_DEVICE_NAME sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, 255);

wrq.u.data.length = 255;

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_DEVICE_NAME;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_VERSION_INFO sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(RT_VERSION_INFO));

wrq.u.data.length = sizeof(RT_VERSION_INFO);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_VERSION_INFO;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

77/94
RT2870 Linux Station Release Notes and User’s Guide

OID_802_11_BSSID_LIST sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, BssLen);

wrq.u.data.length = BssLen;

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_BSSID_LIST;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_3_CURRENT_ADDRESS sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(CurrentAddress));

wrq.u.data.length = sizeof(CurrentAddress);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_3_CURRENT_ADDRESS;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_GEN_MEDIA_CONNECT_STATUS sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_MEDIA_STATE));

wrq.u.data.length = sizeof(NDIS_MEDIA_STATE);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_GEN_MEDIA_CONNECT_STATUS;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_BSSID sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_MAC_ADDRESS));

wrq.u.data.length = sizeof(NDIS_802_11_MAC_ADDRESS);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_BSSID;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_SSID sprintf(name, "ra0");

78/94
RT2870 Linux Station Release Notes and User’s Guide

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_SSID));

wrq.u.data.length = sizeof(NDIS_802_11_SSID);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_SSID;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_QUERY_LINK_STATUS sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(RT_802_11_LINK_STATUS));

wrq.u.data.length = sizeof(RT_802_11_LINK_STATUS);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_QUERY_LINK_STATUS;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_CONFIGURATION sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_CONFIGURATION));

wrq.u.data.length = sizeof(NDIS_802_11_CONFIGURATION);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_CONFIGURATION;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_RSSI_TRIGGER sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ulInfo));

wrq.u.data.length = sizeof(ulInfo);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_RSSI_TRIGGER;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_RSSI sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

79/94
RT2870 Linux Station Release Notes and User’s Guide

memset(data, 0, sizeof(ulInfo));

wrq.u.data.length = sizeof(ulInfo);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_RSSI;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_RSSI_1 sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ulInfo));

wrq.u.data.length = sizeof(ulInfo);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_RSSI_1;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_RSSI_2 sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ulInfo));

wrq.u.data.length = sizeof(ulInfo);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_RSSI_2;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_STATISTICS sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(NDIS_802_11_STATISTICS));

wrq.u.data.length = sizeof(NDIS_802_11_STATISTICS);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_STATISTICS;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_GEN_RCV_OK sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ulInfo));

80/94
RT2870 Linux Station Release Notes and User’s Guide

wrq.u.data.length = sizeof(ulInfo);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_GEN_RCV_OK;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_GEN_RCV_NO_BUFFER sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ulInfo));

wrq.u.data.length = sizeof(ulInfo);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_GEN_RCV_NO_BUFFER;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_PHY_MODE typedef enum _RT_802_11_PHY_MODE {

PHY_11BG_MIXED = 0,

PHY_11B,

PHY_11A,

PHY_11ABG_MIXED,

PHY_11G,

} RT_802_11_PHY_MODE

sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ulInfo));

wrq.u.data.length = sizeof(ulInfo);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_PHY_MODE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_STA_CONFIG sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(RT_802_11_STA_CONFIG));

81/94
RT2870 Linux Station Release Notes and User’s Guide

wrq.u.data.length = sizeof(RT_802_11_STA_CONFIG);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_STA_CONFIG;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_RTS_THRESHOLD sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(RtsThresh));

wrq.u.data.length = sizeof(RtsThresh);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_RTS_THRESHOLD;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_FRAGMENTATION_THRESHOLD sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(FragThresh));

wrq.u.data.length = sizeof(FragThresh);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_FRAGMENTATION_THRESHOLD;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_POWER_MODE sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(PowerMode));

wrq.u.data.length = sizeof(PowerMode);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_POWER_MODE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_RADIO sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(RadioState));

wrq.u.data.length = sizeof(RadioState);

82/94
RT2870 Linux Station Release Notes and User’s Guide

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_RADIO;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_INFRASTRUCTURE_MODE sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(BssType));

wrq.u.data.length = sizeof(BssType);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_INFRASTRUCTURE_MODE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_PREAMBLE sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(PreamType));

wrq.u.data.length = sizeof(PreamType);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_PREAMBLE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_AUTHENTICATION_MODE sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(AuthMode));

wrq.u.data.length = sizeof(AuthMode);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_AUTHENTICATION_MODE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_WEP_STATUS sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(WepStatus));

wrq.u.data.length = sizeof(WepStatus);

wrq.u.data.pointer = data;

83/94
RT2870 Linux Station Release Notes and User’s Guide

wrq.u.data.flags = OID_802_11_WEP_STATUS;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_TX_POWER_LEVEL sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ULONG));

wrq.u.data.length = sizeof(ULONG);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_TX_POWER_LEVEL;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_TX_POWER_LEVEL_1 sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ULONG));

wrq.u.data.length = sizeof(ULONG);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_TX_POWER_LEVEL_1;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_NETWORK_TYPES_SUPPORTED sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, 16);

wrq.u.data.length = 16;

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_NETWORK_TYPES_SUPPORTED;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

OID_802_11_NETWORK_TYPE_IN_USE sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ULONG));

wrq.u.data.length = sizeof(ULONG);

wrq.u.data.pointer = data;

wrq.u.data.flags = OID_802_11_NETWORK_TYPE_IN_USE;

84/94
RT2870 Linux Station Release Notes and User’s Guide

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_QUERY_EEPROM_VERSION sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ULONG));

wrq.u.data.length = sizeof(ULONG);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_QUERY_EEPROM_VERSION;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_QUERY_FIRMWARE_VERSION sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ULONG));

wrq.u.data.length = sizeof(ULONG);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_QUERY_FIRMWARE_VERSION;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_QUERY_NOISE_LEVEL sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(UCHAR));

wrq.u.data.length = sizeof(UCHAR);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_QUERY_NOISE_LEVEL;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_EXTRA_INFO sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ULONG));

wrq.u.data.length = sizeof(ULONG);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_EXTRA_INFO;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

85/94
RT2870 Linux Station Release Notes and User’s Guide

RT_OID_802_11_QUERY_PIDVID sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(ULONG));

wrq.u.data.length = sizeof(ULONG);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_802_11_QUERY_PIDVID;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_WE_VERSION_COMPILED sprintf(name, "ra0");

strcpy(wrq.ifr_name, name);

memset(data, 0, sizeof(UINT));

wrq.u.data.length = sizeof(UINT);

wrq.u.data.pointer = data;

wrq.u.data.flags = RT_OID_WE_VERSION_COMPILED;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_QUERY_LAST_TX_RATE HTTRANSMIT_SETTING tmpHT;

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & tmpHT;

wrq.u.data.flags = RT_OID_802_11_QUERY_LAST_TX_RATE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

RT_OID_802_11_QUERY_LAST_RX_RATE HTTRANSMIT_SETTING tmpHT;

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & tmpHT;

wrq.u.data.flags = RT_OID_802_11_QUERY_LAST_RX_RATE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

SHOW_CONN_STATUS u_char buffer[IW_PRIV_SIZE_MASK];

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) buffer;

wrq.u.data.flags = SHOW_CONN_STATUS;

86/94
RT2870 Linux Station Release Notes and User’s Guide

ioctl(socket_id, RTPRIV_IOCTL_SHOW, &wrq);

87/94
RT2870 Linux Station Release Notes and User’s Guide

8 IOCTL HOW TO

8.1 Get Data

8.1.1 GET station connection status:

Linux console command: iwpriv ra0 connStatus

sample code =>

u_char buffer[IW_PRIV_SIZE_MASK];

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) buffer;

wrq.u.data.flags = SHOW_CONN_STATUS;

ioctl(socket_id, RTPRIV_IOCTL_SHOW, &wrq);

8.1.2 GET station statistics information:

Linux console command: iwpriv ra0 stat

sample code =>

u_char buffer[IW_PRIV_SIZE_MASK];

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) buffer;

wrq.u.data.flags = 0;

ioctl(socket_id, RTPRIV_IOCTL_STATISTICS, &wrq);

8.1.3 GET AP list table:

Linux console command: iwpriv ra0 get_site_survey

sample code =>

u_char buffer[4096];

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) buffer;

wrq.u.data.flags = 0;

ioctl(socket_id, RTPRIV_IOCTL_GSITESURVEY, &wrq);

88/94
RT2870 Linux Station Release Notes and User’s Guide

8.1.4 GET scan table:

sample code =>

u_char buffer[4096];

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) buffer;

wrq.u.data.length = 4096;

wrq.u.data.flags = OID_802_11_BSSID_LIST;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

PNDIS_802_11_BSSID_LIST_EX pBssidList = (PNDIS_802_11_BSSID_LIST_EX) buffer ;

8.1.5 GET station’s MAC:

sample code =>

u_char buffer[6];

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) buffer;

wrq.u.data.flags = OID_802_3_CURRENT_ADDRESS;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.6 GET station connection status:

Sample code =>

#define NdisMediaStateConnected 1

#define NdisMediaStateDisconnected 0

NDIS_MEDIA_STATE MediaState;

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & MediaState;

wrq.u.data.flags = OID_GEN_MEDIA_CONNECT_STATUS;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.7 GET AP’s BSSID

Sample code =>

char BSSID[6];

sprintf(wrq.ifr_name, "ra0");

89/94
RT2870 Linux Station Release Notes and User’s Guide

wrq.u.data.pointer = (caddr_t) BSSID;

wrq.u.data.flags = OID_802_11_BSSID;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.8 GET SSID

Sample code =>

NDIS_802_11_SSID SSID;

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) &SSID;

wrq.u.data.flags = OID_802_11_SSID;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.9 GET station’s last TX related information:

Sample code =>

HTTRANSMIT_SETTING tmpHT;

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & tmpHT;

wrq.u.data.flags = RT_OID_802_11_QUERY_LAST_TX_RATE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.10 GET station’s last RX related information:

Sample code =>

HTTRANSMIT_SETTING tmpHT;

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & tmpHT;

wrq.u.data.flags = RT_OID_802_11_QUERY_LAST_RX_RATE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.11 GET station’s wireless mode:

Sample code =>

typedef enum _RT_802_11_PHY_MODE {

PHY_11BG_MIXED = 0,

PHY_11B,

90/94
RT2870 Linux Station Release Notes and User’s Guide

PHY_11A,

PHY_11ABG_MIXED,

PHY_11G,

} RT_802_11_PHY_MODE

unsigned long tmp_mode;

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & tmp_mode;

wrq.u.data.flags = RT_OID_802_11_PHY_MODE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.12 GET Bss type:

Sample code =>

typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE

Ndis802_11IBSS,

Ndis802_11Infrastructure,

Ndis802_11AutoUnknown,

Ndis802_11Monitor,

Ndis802_11InfrastructureMax // Not a real value, defined as upper bound

} NDIS_802_11_NETWORK_INFRASTRUCTURE

NDIS_802_11_NETWORK_INFRASTRUCTURE BssType;

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & BssType;

wrq.u.data.flags = OID_802_11_INFRASTRUCTURE_MODE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.13 GET Authentication Mode:

Sample code =>

typedef enum _NDIS_802_11_AUTHENTICATION_MODE

91/94
RT2870 Linux Station Release Notes and User’s Guide

Ndis802_11AuthModeOpen,

Ndis802_11AuthModeShared,

Ndis802_11AuthModeAutoSwitch,

Ndis802_11AuthModeWPA,

Ndis802_11AuthModeWPAPSK,

Ndis802_11AuthModeWPANone,

Ndis802_11AuthModeWPA2,

Ndis802_11AuthModeWPA2PSK,

Ndis802_11AuthModeWPA1WPA2,

Ndis802_11AuthModeWPA1PSKWPA2PSK,

Ndis802_11AuthModeMax // Not a real mode, defined as upper bound

} NDIS_802_11_AUTHENTICATION_MODE

NDIS_802_11_AUTHENTICATION_MODE AuthMode;

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & AuthMode;

wrq.u.data.flags = OID_802_11_AUTHENTICATION_MODE;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.14 GET Encryption Type:

Sample code =>

typedef enum _NDIS_802_11_WEP_STATUS

Ndis802_11WEPEnabled,

Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,

Ndis802_11WEPDisabled,

Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,

Ndis802_11WEPKeyAbsent,

Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,

Ndis802_11WEPNotSupported,

92/94
RT2870 Linux Station Release Notes and User’s Guide

Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,

Ndis802_11Encryption2Enabled,

Ndis802_11Encryption2KeyAbsent,

Ndis802_11Encryption3Enabled,

Ndis802_11Encryption3KeyAbsent,

Ndis802_11Encryption4Enabled, // TKIP or AES mix

Ndis802_11Encryption4KeyAbsent,

} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,

NDIS_802_11_WEP_STATUS WepStatus;

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & WepStatus;

wrq.u.data.flags = OID_802_11_WEP_STATUS;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.15 GET RSSI 0 (unit: db)

Sample code =>

long rssi_0

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & rssi_0;

wrq.u.data.flags = RT_OID_802_11_RSSI;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.16 GET RSSI 1 (unit: db)

Sample code =>

long rssi_1

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & rssi_1;

wrq.u.data.flags = RT_OID_802_11_RSSI_1;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.17 GET RSSI 2 (unit: db)

93/94
RT2870 Linux Station Release Notes and User’s Guide

Sample code =>

long rssi_2

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & rssi_2;

wrq.u.data.flags = RT_OID_802_11_RSSI_2;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

8.1.18 GET Driver wireless extension version

Sample code =>

Unsigned int wext_version;

sprintf(wrq.ifr_name, "ra0");

wrq.u.data.pointer = (caddr_t) & wext_version;

wrq.u.data.flags = RT_OID_WE_VERSION_COMPILED;

ioctl(socket_id, RT_PRIV_IOCTL, &wrq);

94/94

You might also like