Kablosuz Yığını
TEKNİK REHBER KABLOSUZ YIĞINI NL80211 ARAYÜZÜ 2026

iw
nl80211 wireless arayüzü.

iwconfig'in modern halefi. Tarama, sinyal, kanal, monitor mode, mesh ve regulatory domain — kernel CFG80211 üzerinden tam kontrol.

00 iw vs iwconfig — nl80211 mimarisi

iwconfig, artık bakımı yapılmayan eski wireless-tools paketine aittir. Modern kernel'lerde yerini nl80211 tabanlı iw almıştır.

  Kullanıcı alanı         Kernel
  ──────────────          ────────────────────────────
  iw         →  Netlink (GENL_ID_CTRL) →  cfg80211
  iwconfig   →  WEXT (ioctl, deprecated) → wext compat layermac80211  →  SoftMAC sürücüler
                                           sürücü     →  FullMAC sürücüler
    

cfg80211 (Wireless Configuration API), kernel'in kablosuz alt sistemi yapılandırma katmanıdır. nl80211, bu katmanla konuşmak için kullanılan netlink ailesidir. mac80211 ise yazılım tabanlı (SoftMAC) sürücüler için IEEE 802.11 yığınını uygular — bağlantı yönetimi, güç tasarrufu, QoS.

Kurulum

bash
# Debian / Ubuntu
apt-get install iw

# Alpine
apk add iw

# Versiyon
iw --version
# iw version 5.19

# iwconfig (eski) hâlâ yüklüyse — karşılaştırma
iwconfig wlan0
# "wlan0: no wireless extensions" → WEXT sürücü desteği yok demektir

# iw, nl80211 üzerinden çalışır — her zaman tercih et
iw dev wlan0 info
EMBEDDED KERNEL CONFIG

Özel kernel derliyorsan: CONFIG_CFG80211=y, CONFIG_MAC80211=y ve hedef sürücünü (ör. CONFIG_ATH9K=y, CONFIG_BRCMFMAC=y) etkinleştir. nl80211 bu config'lere bağlıdır.

01 iw dev ve phy bilgileri

Sistemdeki WiFi donanımını ve arayüzleri listele, yeteneklerini sorgula.

Tüm wireless interface'leri listele

bash
# Kısa liste
iw dev
# phy#0
#     Interface wlan0
#         ifindex 3
#         wdev 0x1
#         addr dc:a6:32:xx:xx:xx
#         type managed
#         channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz

# Belirli interface'in ayrıntısı
iw dev wlan0 info
# Interface wlan0
#     ifindex 3
#     wdev 0x1
#     addr dc:a6:32:xx:xx:xx
#     ssid EvAgi_2.4G
#     type managed
#     wiphy 0
#     channel 6 (2437 MHz), width: 20 MHz (no HT), center1: 2437 MHz
#     txpower 31.00 dBm

Physical device (phy) bilgileri

bash
# Donanım yeteneklerini göster
iw phy phy0 info

# Desteklenen frekanslar
iw phy phy0 info | grep -A 5 "Frequencies"
# * 2412 MHz [1] (20.0 dBm)
# * 2417 MHz [2] (20.0 dBm)
# ...
# * 5180 MHz [36] (23.0 dBm)

# Desteklenen interface modları
iw phy phy0 info | grep -A 15 "Supported interface modes"
# * IBSS
# * managed
# * AP
# * AP/VLAN
# * monitor
# * mesh point

# Desteklenen band ve MCS bilgileri
iw phy phy0 info | grep -A 20 "Band 1"

Interface oluşturma ve silme

bash
# Yeni sanal interface ekle
iw phy phy0 interface add wlan1 type managed

# Monitor interface ekle
iw phy phy0 interface add mon0 type monitor

# Interface sil
iw dev mon0 del

02 WiFi tarama — iw dev wlan0 scan

Çevredeki ağları tara, SSID, BSSID, frekans, sinyal ve güvenlik bilgisini al.

bash
# Temel tarama (root gerekir)
iw dev wlan0 scan

# Özet çıktı — sadece SSID ve sinyal
iw dev wlan0 scan | grep -E "SSID:|signal:"
# signal: -45.00 dBm
# SSID: EvAgi_2.4G
# signal: -62.00 dBm
# SSID: Ofis_WiFi

# Belirli kanalda tara
iw dev wlan0 scan freq 2412 2437 2462

# Flush: önbelleği temizle, yeni tarama yap
iw dev wlan0 scan flush

Tarama çıktısını parse etme

bash — parse örneği
# SSID + BSSID + sinyal + kanal tablo formatı
iw dev wlan0 scan 2>/dev/null | \
    awk '/^BSS/{bssid=$2} /signal:/{sig=$2} /SSID:/{ssid=$2} /freq:/{freq=$2; printf "%-20s %-18s %s dBm  %s MHz\n", ssid, bssid, sig, freq}'

# Örnek çıktı:
# EvAgi_2.4G           aa:bb:cc:dd:ee:01    -45.00 dBm  2437 MHz
# Ofis_WiFi            aa:bb:cc:dd:ee:02    -62.00 dBm  5180 MHz

Tarama çıktısındaki alanlar

iw scan — örnek çıktı bloğu
BSS aa:bb:cc:dd:ee:01(on wlan0) -- associated
    last seen: 120 ms ago
    TSF: 1234567890 usec (0d, 00:20:34)
    freq: 2437
    beacon interval: 100 TUs
    capability: ESS ShortSlotTime (0x0431)
    signal: -45.00 dBm
    last seen: 120 ms ago
    Information elements from Probe Response frame:
    SSID: EvAgi_2.4G
    Supported rates: 1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0
    DS Parameter set: channel 6
    RSN:     * Version: 1
             * Group cipher: CCMP
             * Pairwise ciphers: CCMP
             * Authentication suites: PSK
             * Capabilities: 1-PTKSA-RC 1-GTKSA-RC (0x0000)
    HT capabilities: HT20
    HT operation:    * primary channel: 6

03 Link kalitesi ve sinyal gücü

Bağlı AP'den anlık sinyal, bitrate ve istatistikleri al.

bash
# Bağlantı bilgisi
iw dev wlan0 link
# Connected to aa:bb:cc:dd:ee:01 (on wlan0)
# SSID: EvAgi_2.4G
# freq: 2437
# RX: 12345678 bytes (98765 packets)
# TX: 1234567 bytes (12345 packets)
# signal: -52 dBm
# rx bitrate: 54.0 MBit/s
# tx bitrate: 72.2 MBit/s MCS 7

# Sinyal gücünü sürekli izle
watch -n 1 "iw dev wlan0 link | grep signal"

# Station istatistikleri (paket hataları, retry, vb.)
iw dev wlan0 station dump
# Station aa:bb:cc:dd:ee:01 (on wlan0)
#     inactive time:  100 ms
#     rx bytes:   12345678
#     rx packets: 98765
#     tx bytes:   1234567
#     tx packets: 12345
#     tx retries: 234
#     tx failed:  5
#     signal:      -52 [-55, -54] dBm
#     signal avg: -51 [-54, -53] dBm
#     Toffset:    12345678 usec
#     tx bitrate: 72.2 MBit/s MCS 7 short GI
#     rx bitrate: 54.0 MBit/s

dBm yorumlama tablosu

-30 dBm
Mükemmel — AP yanı başında.
-50 dBm
Çok iyi — tam bant genişliği mümkün.
-60 dBm
İyi — normal kullanım için yeterli.
-70 dBm
Orta — streaming güçleşebilir.
-80 dBm
Zayıf — bağlantı kararsız.
-90 dBm
Çok zayıf — bağlantı kesilebilir.
bash — /proc/net/wireless alternatif
# /proc/net/wireless — link quality, signal, noise
cat /proc/net/wireless
# Inter-| sta-|   Quality        |   Discarded packets               | Missed | WE
# face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon | 22
# wlan0: 0000   55.  -55.  -92.       0      0      0      4     25        0

# link: 0-70 (kalite), level: dBm (sinyal), noise: dBm (gürültü)

04 Kanal ve txpower ayarı

WiFi kanalını, frekansını ve iletim gücünü manuel ayarla.

Kanal değiştirme

bash
# Önce bağlantıyı kes (managed modda kanal değiştirmek AP bağlantısını keser)
ip link set wlan0 down

# Kanal ayarla (kanal numarasıyla)
iw dev wlan0 set channel 11

# Frekansla ayarla
iw dev wlan0 set freq 2462        # 2.4 GHz kanal 11
iw dev wlan0 set freq 5180        # 5 GHz kanal 36

# 40 MHz kanal bonding
iw dev wlan0 set freq 2437 HT40+  # 2.4 GHz kanal 6, yukarı bonding
iw dev wlan0 set freq 5180 HT40+  # 5 GHz kanal 36

ip link set wlan0 up

Transmit Power (txpower)

bash
# Mevcut txpower'ı gör
iw dev wlan0 info | grep txpower
# txpower 20.00 dBm

# Sabit güç ayarla (mBm = dBm × 100)
iw dev wlan0 set txpower fixed 2000   # 20 dBm
iw dev wlan0 set txpower fixed 1500   # 15 dBm

# Otomatik (regulatory maksimum)
iw dev wlan0 set txpower auto

# Sınırla (bu değeri aşma)
iw dev wlan0 set txpower limit 1000  # max 10 dBm
REGULATORY SINIRI

txpower, regulatory domain tarafından sınırlandırılır. Türkiye (TR) için 2.4 GHz'de tipik sınır 20 dBm'dir. iw reg get ile mevcut sınırları kontrol et. Sınırı aşan değerler otomatik olarak düşürülür.

05 Monitor mode

Monitor mode, WiFi kartının tüm 802.11 çerçevelerini (kendi ağında olmasa bile) yakalamasını sağlar. Paket analizi ve RF izleme için gereklidir.

Monitor interface oluşturma

bash — monitor mode
# Yöntem 1: Mevcut interface'i monitor'a çevir
ip link set wlan0 down
iw dev wlan0 set type monitor
ip link set wlan0 up

# Yöntem 2: Sanal monitor interface ekle (wlan0 managed olarak kalır)
iw phy phy0 interface add mon0 type monitor
ip link set mon0 up

# Monitor modunu doğrula
iw dev mon0 info
# type monitor

# Belirli kanalda dinle
iw dev mon0 set channel 6

# tcpdump ile 802.11 çerçevelerini yakala
tcpdump -i mon0 -w /tmp/wifi_capture.pcap

# Monitor modundan çık
ip link set mon0 down
iw dev mon0 del

Monitor flag'leri

bash — monitor seçenekleri
# Sadece kontrol çerçeveleri (beacon, probe, auth)
iw dev mon0 set monitor control

# Diğer flag seçenekleri
# fcsfail: FCS hatası olan çerçeveleri de göster
# plcpfail: PLCP hatalı çerçeveleri göster
# cook: "cooked" mode — radiotap header'sız
# active: aktif probe gönder

# aircrack-ng ile kullanım (radiotap header gerekir)
airodump-ng mon0
aireplay-ng --test mon0
EMBEDDED KULLANIM

Endüstriyel IoT sistemlerinde monitor mode, RF ortamını analiz etmek için kullanılır. Raspberry Pi Zero W ile taşınabilir RF izleme cihazı yapılabilir. Ath9k sürücüsü monitor mode'u en iyi destekleyen sürücülerden biridir.

06 Station mode ve mesh mode

Normal WiFi istemci modu (managed/station) ve 802.11s mesh ağı yapılandırması.

Station (managed) modu

bash
# Monitor'dan managed moda dön
ip link set wlan0 down
iw dev wlan0 set type managed
ip link set wlan0 up

# Managed modda manuel bağlantı (şifresiz ağ için)
iw dev wlan0 connect "AcikAg"

# Belirli BSSID'ye bağlan
iw dev wlan0 connect "EvAgi_2.4G" aa:bb:cc:dd:ee:01

# Bağlantıyı kes
iw dev wlan0 disconnect

IBSS (Ad-Hoc) modu

bash — IBSS / Ad-Hoc
# Ad-hoc ağ oluştur (iki cihaz arası doğrudan bağlantı)
ip link set wlan0 down
iw dev wlan0 set type ibss
ip link set wlan0 up
iw dev wlan0 ibss join "AdHocAg" 2437

Mesh mode (802.11s)

bash — 802.11s mesh
# Mesh interface oluştur
iw phy phy0 interface add mesh0 type mp

# Mesh ağına katıl
ip link set mesh0 up
iw dev mesh0 mesh join "IoTMeshAg"

# Mesh ayarları
iw dev mesh0 set mesh_param mesh_max_peer_links 10
iw dev mesh0 set mesh_param mesh_hwmp_rootmode 4

# Mesh komşularını gör
iw dev mesh0 mpath dump
# DEST ADDR         NEXT HOP          IFACE  SN  METRIC  QLEN  EXPTIME  DTIM  DRET  FLAGS
# aa:bb:cc:dd:ee:02  aa:bb:cc:dd:ee:02  mesh0  12  1024    0     1234     100   3     0x4

# Mesh station bilgileri
iw dev mesh0 station dump
MESH IOT

802.11s mesh, birden fazla Raspberry Pi veya OpenWRT router'ın kablolama gerektirmeden ağ oluşturması için idealdir. batman-adv ile kombinlenebilir (Layer 2 mesh). Örnek: fabrika sensör ağı — her cihaz hem veri göndericisi hem yönlendirici.

07 rfkill ve regulatory domain

rfkill ile WiFi/Bluetooth donanımsal ve yazılımsal anahtarlarını yönet; regulatory domain ile kanal ve güç sınırlarını ayarla.

rfkill — kablosuz blokları yönet

bash — rfkill
# Tüm rfkill cihazlarını listele
rfkill list
# 0: phy0: Wireless LAN
#    Soft blocked: no
#    Hard blocked: no
# 1: hci0: Bluetooth
#    Soft blocked: yes
#    Hard blocked: no

# WiFi'ı yazılımsal blokla
rfkill block wifi

# WiFi'ı aç (unblock)
rfkill unblock wifi

# Bluetooth'u blokla
rfkill block bluetooth

# Tümünü blokla / aç
rfkill block all
rfkill unblock all

# Hard block (fiziksel kill switch): yazılımla açılamaz
# Laptop'larda Fn+F2 gibi fiziksel tuş ile tetiklenir

Regulatory Domain

bash — regulatory domain
# Mevcut regulatory domain'i göster
iw reg get
# global
# country TR: DFS-ETSI
#     (2402 - 2482 @ 40), (N/A, 20), (N/A)
#     (5170 - 5250 @ 80), (N/A, 23), (N/A), AUTO-BW
#     (5250 - 5330 @ 80), (N/A, 23), (0 ms), DFS, AUTO-BW
#     (5490 - 5710 @ 160), (N/A, 27), (0 ms), DFS

# Ülke kodunu ayarla
iw reg set TR

# Kalıcı regulatory domain (CRDA ile)
# /etc/default/crda → REGDOMAIN=TR

# Tüm ülkelerin kural listesi
iw reg get 2>/dev/null | grep country

Kernel config — embedded için

Linux kernel .config
# Zorunlu konfigürasyonlar
CONFIG_CFG80211=y               # Wireless config framework
CONFIG_MAC80211=y               # SoftMAC IEEE 802.11 yığını
CONFIG_RFKILL=y                 # RF Kill switch desteği

# Regulatory database
CONFIG_CFG80211_CRDA_SUPPORT=y

# Yaygın sürücüler
CONFIG_ATH9K=y                  # Atheros AR9xxx (yaygın USB dongle)
CONFIG_BRCMFMAC=y               # Broadcom (Raspberry Pi WiFi)
CONFIG_MT76=y                   # MediaTek mt7612u vb.
CONFIG_RTL8XXXU=y               # Realtek RTL8188 USB

# Mesh desteği
CONFIG_MAC80211_MESH=y

# Monitor mode için gereken seçenek
# CONFIG_MAC80211_DEBUGFS=y (opsiyonel, debug için)
BUILDROOT / YOCTO

Buildroot'ta kernel fragment ile bu config'leri ekle: board/custom/linux.config dosyasına yaz. Yocto'da linux-%.bbappend içinde KERNEL_EXTRA_FEATURES += "cfg80211 mac80211" kullan.