Wireless overview
This article deals with 802.11 wireless. OpenWrt supports other wireless devices too, see Bluetooth, 802.15.4 (r45348) or RTL-SDR (RTL-SDR on TL-WR703n)
Introduction
Linux Wireless is the source for documentation regarding the entire Linux Kernel IEEE 802.11 (“wireless”) subsystem. It is a wiki like this one, so feel free to contribute there as well! Everything not OpenWrt specific belongs there. This page is an exception, as I believe I can provide a better introduction.
- IEEE 802.3 is a family of communication protocols comprising Layer 1 and Layer 2 Sublayer MAC
- IEEE 802.3 has an official name: Ethernet
- IEEE 802.11 is a family of communication protocols also comprising Layer 1 and Layer 2 Sublayer MAC
- IEEE 802.11 has no official name, so most people simply call it “wireless” or “wavelan” or
wifi
(note that Wi-Fi is a brand name) - The support for IEEE 802.11 in the Linux kernel is fragmented. This means there are two frames (WEXT=deprecated, cfg80211 + nl80211=current) and multiple drivers, e.g.
- For some Broadcom WNICs, there are also three drivers available: Broadcom proprietary drivers (
broadcom-wl
), broadcom mac80211-based drivers (theb43
) and the brcmSmac- and brcmFmac drivers- To set up and configure, wireless utilities are available, however on OpenWrt, UCI is preferred:
/etc/config/wireless
and/etc/config/network
.
- There are two different types of WNICs to distinguish: SoftMAC and FullMAC devices; also see About mac80211.
- Many drivers might require firmware blobs. Most firmware code is closed source. (Exception carl9170, ath9k_htc)
- Atheros ath9k does not require firmware.
- In contrast to Ethernet drivers, wireless drivers work in a Wireless Mode of Operation.
Wireless Modes of Operation
Driver support for wireless modes of operation
See what the Linux 802.11 driver for your hardware can and cannot do. Some drivers support only one mode: STA (also called station, client or managed mode) other drivers support multiple modes, some even simultaneously (interface combination):
Limitations when combining multiple wireless modes of operation at the same time do exist.
Firmware Limitations do exist
Regulation in law
Available frequencies, bands and channels are subject to regulation in each state. Please see: https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git/tree/db.txt
Wireless Drivers in OpenWrt
Wireless drivers are pulled on a more or less regular basis from wireless-testing and the OpenWrt patches which are not mainlined yet are adjusted, see e.g. r36939. OpenWrt does not use kernel drivers. The package is called mac80211.
Similar work (brand new drivers for older kernel) is done by the backports project April 2013 announcement, previously called compat-wireless or compat-driver. OpenWrt does not use this, despite referencing it by name.
Wireless Utilities in OpenWrt
Wireless Tools and Applications available in the OpenWrt repository
- kismet – An IEEE 802.11 network detector, sniffer and intrusion detection system.
- aircrack-ng – Aircrack-ng is the next generation of aircrack with new features
- horst – A scanning and analysis tool for IEEE 802.11 networks and especially IBSS (ad-hoc) mode and mesh networks (OLSR).
Captive portal software available in the OpenWrt repository
nodogsplash | Layer 3 | https://github.com/nodogsplash/nodogsplash |
NoDogSplash offers a simple way to open a free hotspot providing restricted access to an internet connection. It is another alternative from NoCat which aims to offer captive portal solutions local to the router/gateway and a simplistic setup, user bandwidth control and basic auth/splash page. Nodogsplash is small, well tested, tailored for OpenWrt by its author and can be set up with only one or two config file changes. By contrast, Chilli is more complete but complex to set up. |
||
coova-chilli | Layer 2 / Layer 3 | http://www.coova.org/ |
CoovaChilli is an open source access controller for wireless LAN access points and is based on ChilliSpot. It is used for authenticating users of a wireless (or wired) LAN. It supports web based login (UAM) which is today's standard for public HotSpots and it supports Wireless Protected Access (WPA) encryption. Authentication, authorization and accounting (AAA) is handled by your favorite RADIUS server. Built on top of Chillispot with several improvements and additions. Includes WISPr support, and much more. Main captive portal solution used in CoovaAP. |
Wireless packages available in the OpenWrt repository
This shall be, but is not, an exhaustive list of all packages in the OpenWrt repository regarding wireless stuff to play with. The installation is always the same opkg install <package>
. For documentation regarding the configuration and utilization, search for Howtos in this wiki or in the Internet.
Name | Size | Description |
---|---|---|
airpwn | 23618 | Airpwn is a framework for 802.11 (wireless) packet injection. Airpwn listens to incoming wireless packets, and if the data matches a pattern specified in the config files, custom content is injected “spoofed” from the wireless access point. From the perspective of the wireless client, airpwn becomes the server. |
collectd-mod-wireless | 7321 | wireless status input plugin |
freifunk-watchdog | 9546 | A watchdog daemon that monitors wireless interfaces to ensure the correct BSSID and channel. The process will initiate a wireless restart as soon as it detects a BSSID or channel mismatch. |
karma | 8605 | KARMA is a set of tools for assessing the security of wireless clients at multiple layers. Wireless sniffing tools discover clients and their preferred/trusted networks by passively listening for 802.11 Probe Request frames. |
kmod-wprobe | 9408 | A module that exports measurement data from wireless driver to user space |
mdk3 | 49495 | Tool to exploit wireless vulnerabilities |
wavemon | 32209 | wavemon is an ncurses-based monitoring application for wireless network devices. Based on WEXT-API |
wireless-tools | 30236 | This package contains a collection of tools for configuring wireless adapters implementing WEXT-API |
Wireless drivers available in the OpenWrt repository
E.g.:
Package | Dependencies | |||||
---|---|---|---|---|---|---|
kmod-ath9k | ||||||
kmod-ath9k-common | ||||||
kmod-ath | ||||||
kmod-mac80211 | ||||||
kmod-crypto-core | ||||||
kmod-crypto-arc 4 | kmod-crypto-core | |||||
kmod-crypto-aes | ||||||
kmod-cfg80211 | wireless-tools | |||||
iw | libnl-tiny | |||||
crda | ||||||
Overall size = 486.450 Bytes | ||||||
kmod-ath5k | ||||||
kmod-ath | ||||||
kmod-mac80211 | ||||||
kmod-crypto-core | ||||||
kmod-crypto-arc 4 | kmod-crypto-core | |||||
kmod-crypto-aes | ||||||
kmod-cfg80211 | wireless-tools | |||||
iw | libnl-tiny | |||||
crda | ||||||
Overall size = 308.902 Bytes | ||||||
kmod-b43 | ||||||
kmod-ssb | ||||||
kmod-bcma | ||||||
kmod-mac80211 | ||||||
kmod-crypto-core | ||||||
kmod-crypto-arc 4 | kmod-crypto-core | |||||
kmod-crypto-aes | ||||||
kmod-cfg80211 | wireless-tools | |||||
iw | libnl-tiny | |||||
crda | ||||||
Overall size = 561.201 Bytes |
Name | Size | Description |
---|---|---|
kmod-ath9k | 155.684 | This module adds support for wireless adapters based on Atheros IEEE 802.11n AR5008 and AR9001 family of chipsets. |
kmod-ath9k-htc | 113.441 | This module adds support for wireless adapters based on Atheros USB AR9271 and AR7010 family of chipsets. |
kmod-ath9k-common | 104.136 | Atheros 802.11n wireless devices (common code for ath9k and ath9k_htc) |
kmod-ath5k | 82.272 | This module adds support for wireless adapters based on Atheros 5xxx chipset. |
kmod-ath | 10.059 | This module contains some common parts needed by Atheros Wireless drivers. |
kmod-b43 | 210.860 | Kernel module for Broadcom 43xx wireless support (mac80211 stack) |
kmod-brcm-wl | 1847.448 | Proprietary kernel module for Broadcom SSB/B43xx, it replaces kmod-b43. It requires also the packages nas and wlc |
kmod-brcmsmac | 550.416 | Kernel module for Broadcom BCMA/IEEE802.11n PCIe Wireless cards |
kmod-mac80211 | 139.372 | Generic IEEE 802.11 Networking Stack (mac80211) |
kmod-cfg80211 | 93.696 | cfg80211 is the Linux wireless LAN (802.11) configuration API. |
iw | 32.100 | cfg80211 interface configuration utility |
wireless-tools | 23.153 | Contains iwconfig , iwlist and iwpriv ; tools for configuring wireless adapters implementing the WExt. |
crda | 9.627 | The Central Regulatory Domain Agent serves one purpose: tell Linux kernel what to enforce. In essence it is a udev helper for communication between the kernel and userspace. You only need to run this manually for debugging purposes. For manual changing of regulatory domains use iw (iw reg set ) or wpa-supplicant (feature yet to be added). |
libnl-tiny | 13.529 | This package contains a stripped down version of libnl |
Due to r31954 tweaking the regulatory.bin to enable channel 13 and 14 is no longer an option. |
Wireless Configuration HowTo and Recipes
You can find a couple of probed scenarios under → wifi section.
Troubleshooting
Notes
- r37483 ath9k: add initial tx queueing rework patches This forces all packets (even for un-aggregated traffic) through software queues to improve fairness and stability