This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Wifi
This article describes the setup of a wifi (wireless) network device.
Wifi during installation
If a wifi connection is needed while installing Gentoo, note that the Gentoo minimal install CD has a limited number of drivers available, and provides only wpa_cli (and not wpa_gui) for configuring for WPA/WPA2/Enterprise connections.
If the minimal install CD does not contain the required drivers or the graphical frontend to wpa_supplicant is preferred, choose a different live CD such as the System Rescue CD. Be aware that some special steps may be required when using a non-Gentoo live CD.
Hardware detection
First detect the wifi controllers. lspci or lsusb are command-line tools that can be used for this task.
If a Linux (LiveCD/USB) is booted that makes a wifi connection:
root #
lspci -k
The driver will be identified on one of the lines starting with Kernel driver in use:
.
If the booted system does not make a wifi connection, then obtain a full list of hardware identifiers from the current system. This list can be used to identify the proper driver later:
root #
lspci -n
Copy the list of PCIID's that the command produces and paste it at http://kmuto.jp/debian/hcl/.
For USB devices, a similar approach can be taken. First obtain the list of detected USB devices on the system:
user $
lsusb
This command produces the PCI ID, manufacturer, make, model, and/or chipset of every USB device attached to the system. Of these, the chipset may be the most useful information. Searching the web for linuxwireless.org <chipset> is often the shortest way to find a USB NIC driver and firmware name.
Alternatively, lshw can be used to obtain the necessary information:
root #
lshw | grep -i driver | perl -pe 's/^.*driver=(\S+).*$/$1/g;' | sort -u
This command produces a list of all drivers, regardless of the device being PCI or USB based.
Kernel
With the drivers identified, it is time to configure the Linux kernel.
IEEE 802.11
Activate at least cfg80211 and mac80211. Some wireless drivers also require a rate control algorithm.
[*] Networking support ---> [*] Wireless ---> <*> cfg80211 - wireless configuration API [ ] nl80211 testmode command [ ] enable developer warnings [ ] cfg80211 regulatory debugging [ ] cfg80211 certification onus [*] enable powersave by default [ ] cfg80211 DebugFS entries [ ] use statically compiled regulatory rules database [ ] cfg80211 wireless extensions compatibility <*> Generic IEEE 802.11 Networking Stack (mac80211) [*] Minstrel [*] Minstrel 802.11n support [ ] Minstrel 802.11ac support Default rate control algorithm (Minstrel) ---> [ ] Enable mac80211 mesh networking (pre-802.11s) support -*- Enable LED triggers [ ] Export mac80211 internals in DebugFS [ ] Trace all mac80211 debug messages [ ] Select mac80211 debugging features ----
Minstrel and its 802.11n support is a rate control algorithm.
WEXT
The "cfg80211 wireless extensions compatibility" option aka WEXT will support old wireless-tools and iwconfig.
[*] Networking support ---> [*] Wireless ---> [*] cfg80211 wireless extensions compatibility
Device drivers
Next the right set of corresponding kernel options need to be enabled, based on the drivers and hardware detected previously. The recommendation is to build drivers as modules. Also be sure to enable AES cipher support in the kernel if the wireless network uses WPA or WPA2 encryption.
'"`UNIQ--pre-00000005-QINU`"'
In case the driver is built into the kernel (
<*>
) instead of as a module (<M>
), then the firmware needs to be built into the kernel as well.
Do not forget to rebuild the kernel after changing its configuration.
LED support
To enable LED triggers for different packet receive/transmit events, compile the kernel with the following options:
'"`UNIQ--pre-00000008-QINU`"'
Firmware
In addition to the kernel driver, some chipsets also require firmware. If required, locate it on the following list and install it:
root #
emerge --ask sys-kernel/linux-firmware
Wifi device | Driver | Firmware | Note |
---|---|---|---|
Atheros AR9271 & AR7010 | ath9k_htc | sys-kernel/linux-firmware | |
Broadcom 43xx wireless support | b43 / b43legacy | sys-firmware/b43-firmware | Aircrack-ng ready, most probably the best choice if your bcm43xx device is supported |
Broadcom PCIe and SDIO/USB devices | brcmsmac / brcmfmac | sys-kernel/linux-firmware | Lacks powersaving, LED support and other features |
Broadcom 43xx wireless support | wl | net-wireless/broadcom-sta | Proprietary, no AP or Monitor modes, Comparison of bcm43xx drivers |
Intel PRO/Wireless 2200BG | ipw2200 | sys-firmware/ipw2200-firmware | |
Intel PRO/Wireless 3945ABG/BG | iwlegacy | sys-kernel/linux-firmware | |
Intel Wireless WiFi 4965AGN | iwl4965 | sys-kernel/linux-firmware | |
All other Intel Wireless devices | iwlwifi | sys-kernel/linux-firmware | See the iwlwifi article for detailed instructions. |
Qualcomm Atheros QCA6174 | ath10k_pci | ath10k-firmware | See Qualcomm_Atheros_QCA6174#Firmware |
Ralink/MediaTek USB devices | e.g. rt2800usb | sys-kernel/linux-firmware | |
Realtek RTL8191SE & RTL8192SE | rtl8192se | sys-kernel/linux-firmware | |
Realtek 8723AU/8723BU/8191EU/8192EU/8188EU/8188RU | rtl8xxxu | sys-kernel/linux-firmware | May need the CONFIG_RTL8XXXU_UNTESTED kernel option to find all devices. Only those verified by kernel developers are enabled by default. |
If the driver requires firmware but does not appear on the list, it will be necessary to download it manually and place it in /lib/firmware.
Network device names
Network device names eth0
, wlan0
, etc. as provided by the kernel could be changed on boot (see dmesg) by the /lib/udev/rules.d/80-net-name-slot.rules udev rule.
To keep the classic naming this rule can be overwritten with an equally named empty file in the /etc/udev/rules.d directory:
root #
touch /etc/udev/rules.d/80-net-name-slot.rules
WPA supplicant
If the wireless network is set up with WPA or WPA2, then wpa_supplicant needs to be used. For more information on configuring wireless networking in Gentoo Linux, please read the Wireless networking chapter in the Gentoo Handbook.
Testing
After a reboot with the new kernel or after loading the modules, the device can be checked for availability by using following methods:
- Using the /sys file system
- Using the ip command
- Using the ifconfig command
- Using the iw command
/sys file system
Get the device name by listing the /sys/class/net directory contents using ls -al or the tree command (provided by the app-text/tree package):
user $
tree /sys/class/net
/sys/class/net/ ├── enp2s14 -> ../../devices/pci0000:00/0000:00:1e.0/0000:02:0e.0/net/enp2s14 ├── lo -> ../../devices/virtual/net/lo ├── sit0 -> ../../devices/virtual/net/sit0 └── wlp8s0 -> ../../devices/pci0000:00/0000:00:1c.0/0000:08:00.0/net/wlp8s0
ip command
To obtain the device name and verify that the wireless card is detected, execute the following ip command:
user $
ip addr
3: wlan0: ...
ifconfig command
The ifconfig command is provided through the sys-apps/net-tools package. Use ifconfig -a to list all detected network cards, even those that are not enabled/active yet:
user $
ifconfig -a
wlan0 ...
A network card can be activated as follows:
root #
ifconfig -v wlan0 up
SIOCSIFFLAGS: Operation not possible due to RF-kill WARNING: at least one error occurred. (-1)
In this example, enabling the wireless card failed as a radio frequency kill state is set (usually to keep power consumption at bay and not connect by accident to a wireless network).
iw command
If the wireless network card driver supports the nl80211 stack, then the iw command as offered by the net-wireless/iw package can show the detected wireless cards:
root #
iw dev
phy#0 Interface wlan0 ifindex 4 type managed
dmesg
Check the output of dmesg.
user $
dmesg | grep -i -E 'xx:xx.x|wlan|iwl|80211'
Be sure to replace
xx:xx.x
with the identifier (PCIID) from lspci,wlan
with the network interface name andiwl
with the name of theKernel driver in use
.
Troubleshooting
- Forum thread: wireless lan can't get ip from access point which explains about 169.254.x.x (link local address) being a wrong IP address
- Forum thread: iwlwifi fails to load after upgrade to 3.17.0
- Forum thread: Where is my network !?
See also
- Handbook:AMD64/Networking/Wireless
- AC1200 Wireless Adapters
- iproute2
- iwlwifi
- Qualcomm Atheros QCA6174
External resources
- Wireless network configuration at ArchLinux