-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
326 lines (236 loc) · 13 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
MADWIFI: Multimode Atheros Driver for WiFi on Linux
===================================================
* Copyright (c) 2002-2005 Sam Leffler. All rights reserved.
Read the file COPYRIGHT for the complete copyright.
* Re-based and patched to compile with latest kernel versions (3.x)
by Pavel Roskin <https://github.com/proski/madwifi>
* Re-hosted to https://github.com/virnik0/madwifi by Vojtech Weiss
due to need to have a source I can modify in order to re-introduce
the driver back to OpenWRT - as opensource driver can't handle
Atheros frames properly, regdomain is locked by default in ath5k,
and is unable to operate in Turbo mode.
Introduction
------------
This software contains a Linux kernel driver for Atheros-based Wireless
LAN devices. The driver supports station, AP, ad-hoc, and monitor modes
of operation. The Atheros driver depends on a device-independent
implementation of the 802.11 protocols that originated in the BSD
community (NetBSD in particular).
The driver functions as a normal network device and uses the Wireless
Extensions API. As such normal Linux tools can and should be used with
it. Where the wireless extensions are lacking private ioctls have been
added.
There is only one driver included here; it supports PCI, MiniPCI and
Cardbus devices - USB devices are not supported by this driver!
The driver can be built as a module or linked directly into the
kernel. Note however that the net80211 layer is device-independent;
there is no reason it cannot be used with any 802.11 device (in fact
this is the case on BSD systems).
This software is broken into multiple modules. The Atheros-specific
device support is found in the ath_pci module; it should be loaded when
an Atheros wireless device is recognized. The ath_pci module requires
an additional device specific module, ath_hal, which is described more
below. In addition the driver requires the wlan module which contains
the 802.11 state machine, protocol support, and other device-independent
support needed by any 802.11 device. This code is derived from work
that first appeared in NetBSD and then FreeBSD. The wlan module may
also force the loading of additional modules for crypto support
(wlan_wep, wlan_tkip, wlan_ccmp, etc.), for MAC-based ACL support
(wlan_acl), and for 802.1x authenticator support (wlan_xauth). The
latter modules are only used when operating as an AP. The crypto
modules are loaded when keys of that type are created.
The ath_hal module contains the Atheros Hardware Access Layer (HAL).
This code manages much of the chip-specific operation of the driver.
The HAL is provided in a binary-only form in order to comply with FCC
regulations. In particular, a radio transmitter can only be operated at
power levels and on frequency channels for which it is approved. The
FCC requires that a software-defined radio cannot be configured by the
user to operate outside the approved power levels and frequency
channels. This makes it difficult to open-source code that enforces
limits on the power levels, frequency channels and other parameters of
the radio transmitter. See
http://ftp.fcc.gov/Bureaus/Engineering_Technology/Orders/2001/fcc01264.pdf
for the specific FCC regulation. Because the module is provided in a
binary-only form it is marked "Proprietary"; this means when you load it
you will see messages that your system is now "tainted".
If you wish to use this driver on a platform for which an ath_hal module
is not already provided please contact the author. Note that this is
only necessary for new _architectures_; the HAL is not tied to any
specific version of Linux - in fact the identical HAL binary code is
used unchanged with other operating systems.
Atheros Hardware
----------------
There are currently three "programming generations" of Atheros 802.11
wireless devices (some of these have multiple hardware implementations
but otherwise appear identical to users):
5210 supports 11a only
5211 supports both 11a and 11b
5212 supports 11a, 11b, and 11g
These parts have been incorporated in a variety of retail products
including Cardbus cards from D-Link, Linksys, Netgear, Orinoco, Proxim,
and 3Com; and mini-pci cards from some of these same vendors. In
addition, many laptop vendors use Atheros mini-pci cards for their
built-in wireless support.
In general, if a device is identified as ``11a only'', it is almost
certain to contain an Atheros 5210 part in it. Most retail a+b products
use the 5211. Many a+b+g combo products use the 5212 though other
vendors have started to offer dual-band support. When in doubt, check
the PCI vendor ID with a tool like lspci, the Atheros vendor ID is
0x168c; e.g.
00:13.0 Ethernet controller: Unknown device 168c:0012 (rev 01)
but beware that some vendors use alternate vendor IDs (e.g 3Com, IBM).
The file ath_hal/ah_devid.h has a list of known PCI IDs.
Building the driver
-------------------
The procedure to build the driver is described in the file INSTALL.
Using the driver
----------------
The driver should support any Atheros-based Cardbus or PCI device. This
version of the driver is managed and controlled by the usual Linux tools
(ifconfig, iwconfig, iwpriv) plus the wlanconfig tool, which is included
with the driver in the tools directory and gets installed on your system
with make install.
First, run "modprobe ath_pci" or the equivalent using "insmod". When
the driver is successfully loaded it creates two devices, named "wifi0"
and "ath0". The output from iwconfig should look like this:
lo no wireless extensions.
wifi0 no wireless extensions.
ath0 IEEE 802.11b ESSID:""
Mode:Managed Channel:0 Access Point: Not-Associated
Bit Rate:0 kb/s Tx-Power:50 dBm Sensitivity=0/3
Retry:off RTS thr:off Fragment thr:off
Power Management:off
Link Quality=0/94 Signal level=-95 dBm Noise level=-95 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
This driver uses wifi%d only as a placeholder for the physical device,
and will create one wifi device for each wireless NIC in the system.
These wifi devices will reject ifconfig and iwconfig commands. The wifi
interface indicates the existence of a physical MadWifi device, but it
is not of any functional interest other than as the starting point for
VAP creation via wlanconfig (see Virtual AP section below).
By default, an ath%d Managed mode interface is also created. This
device is a "virtual ap" (VAP) of the wifi%d physical device, and is
configurable by the standard networking tools - ifconfig, iwconfig,
iwpriv.
The autocreation function can be manipulated to create any one of the
other supported device types automatically by using the autocreate=mode
option when the ath_pci module is first loaded. The following example
will cause ath%d to be in Master mode:
modprobe ath_pci autocreate=ap
Autocreation can be disabled:
modprobe ath_pci autocreate=none
Please see the following link for more information:
http://madwifi-project.org/wiki/UserDocs/autocreate
Virtual APs (VAPs) and wlanconfig
---------------------------------
An interesting feature of MadWifi is Virtual AP (VAP) mode, which allows
the operation of multiple concurrent (virtual) access points, and
concurrent interfaces running in both AP and station mode. To
manipulate VAPs, MadWifi comes with a tool called wlanconfig which is
used to create and destroy VAPS with various different modes.
The following examples assume that the "autocreate=none" option has been
parsed to the module at load time. This allows fine control over
management of VAPs, as the creation of a Managed mode station should be
delayed until all other required VAPs are first created, as only one
sta mode VAP can exist per physical device.
To create an access point, use:
wlanconfig ath0 create wlandev wifi0 wlanmode ap
To create an access point and a station, use:
wlanconfig ath0 create wlandev wifi0 wlanmode ap
wlanconfig ath1 create wlandev wifi0 wlanmode sta
To create APs that share a single MAC address, just create the VAPs:
wlanconfig ath0 create wlandev wifi0 wlanmode ap
wlanconfig ath1 create wlandev wifi0 wlanmode ap
To create an VAP with a unique MAC address, use the bssid parameter:
wlanconfig ath0 create wlandev wifi0 wlanmode ap
wlanconfig ath1 create wlandev wifi0 wlanmode ap bssid
Finally, to destroy a VAP, issue the command:
wlanconfig ath0 destroy
For more information about Virtual APs, please refer to the users-guide
document distributed with the MadWifi source code.
For more information about wlanconfig, see its manpage, it is installed
when you run "make install".
Operating Mode
--------------
If you have a multi-mode card, use one of the following commands to lock
the operating mode to one of 11a, 11b, or 11g:
iwpriv ath0 mode 1 lock operation to 11a only
iwpriv ath0 mode 2 lock operation to 11b only
iwpriv ath0 mode 3 lock operation to 11g only
iwpriv ath0 mode 0 autoselect from 11a/b/g (default)
Debugging
---------
There are some debugging mechanisms for the curious/masochistic:
sysctl -w dev.ath.debug=0xXXX enable console msgs from the driver
sysctl -w net.wlan0.debug=0xYYY enable console msgs from the wlan module
The values specified for 0XXX and 0xYYY are bit masks that enable
debugging in various parts of each module. For the wlan module these
values are found in the file net80211/ieee80211_var.h (search for MSG_).
For the ath driver look in ath/if_ath.c (search for ATH_DEBUG). Beware
that enabling some debugging msgs can affect the operation of the
software by slowing it down too much.
A more comfortable way to manipulate the debug settings is to make use
of athdebug and 80211debug tools. Call them with the parameter "-h" to
learn how they are used, or refer to the appropriate man pages.
In addition the programs tools/athstats and tools/80211stats can be very
useful in understanding what is going on. In particular, something like
athstats 1
will give a running display of the most interesting statistics sampled
every 1 second. Running athstats without any options will display a
summary of all non-zero statistics from the time the driver was loaded.
By default the ath0 device is used; to override this use the -i option.
Security/Crypto Support
-----------------------
All Atheros devices implement fixed/shared key WEP in hardware. Newer
Atheros hardware is capable of much more (e.g. AES, TKIP and Michael).
When hardware support is not available for a cipher the net80211 layer
will automatically do the work in software.
WPA/802.11i station operation (aka supplicant) is supported using Jouni
Malinen's wpa_supplicant program. This can be obtained from:
http://hostap.epitest.fi/wpa_supplicant/
wpa_supplicant also supports a wide range of 802.1x EAP methods, either
together with WPA/WPA2 or without; consult the wpa_supplicant
documentation for an up to date list.
MadWifi supports the use of the Wireless Extensions ioctls equal to or
greater than WE18 (Linux 2.6.13). When using wpa_supplicant with a
recent linux kernel, it is preferred to use the 'wext' driver backend,
rather than the private MadWifi ioctls. This means that '-D wext'
option should be used with wpa_supplicant.
NOTE: the in-kernel authenticator is being replaced; to use it you need
to follow the directions in net80211/Makefile.
When operating as an AP, you can use fixed/shared key ciphers and/or
802.1x authentication. The authentication mode is specified using
iwpriv:
iwpriv ath0 authmode 1 # open authentication
iwpriv ath0 authmode 2 # shared key authentication
iwpriv ath0 authmode 3 # 802.1x authentication
To use the 802.1x authenticator you must install and configure the
hostapd program from the same place you got wpa_supplicant from.
Consult the hostapd documentation for further information.
Live Monitoring and Writing Raw 802.11 Packets
----------------------------------------------
The driver can be used in a live "monitor" mode, by creating a monitor
VAP and sending packets to it. All packets sent to a monitor mode VAP
will bypass any state machine.
To create a monitor VAP, use:
wlanconfig ath1 create wlandev wifi0 wlanmode monitor
ifconfig ath1 up
Finally, you can choose to receive packets on ath1 in several different
packet formats:
echo '801' > /proc/sys/net/ath1/dev_type # only 802.11 headers
echo '802' > /proc/sys/net/ath1/dev_type # prism2 headers
echo '803' > /proc/sys/net/ath1/dev_type # radiotap headers
echo '804' > /proc/sys/net/ath1/dev_type # atheros descriptors
Known Problems
--------------
[All these problems are to be fixed in future revisions.]
1. Ad-hoc mode is broken; symptoms are intermittent operation.
Other issues might be mentioned in our ticket tracker:
http://madwifi-project.org/report/1
Getting Support
---------------
No support available. This reference driver is no longer maintained.
Pavel Roskin did the re-base and necessary patching so the driver
can be compiled against recent kernel (3.x), and he will do minimum
maintenance of the same kind in the future (I hope so).