Γενικός Οδηγός WiFi Troubleshooting

Με αφορμή ένα πρόσφατο troubleshooting, είπα να αποπειραθώ να γράψω ένα γρήγορο και όσο πιο γενικευμένο γίνεται, WIFI H/W Troubleshooting guide.
Ας αρχίσουμε με τα βασικά,
Τα εργαλεία που έχουμε στη διάθεσή μας για έλεγχο του wireless interface του laptop μας είναι τα κάτωθι:

  1. ip
  2. ifconfig (όχι διαθέσιμο σε όλες τις διανομές)
  3. rfkill
  4. iwconfig
  5. iw
  6. journalct
  7. lsmod/modprobe/modinfo
  8. lspci/lshw
  9. dmesg

Όποιο απ’αυτά μας λείπει το εγκαθιστούμε (συνήθως ένα apt install αρκεί)
Πριν προχωρήσουμε στο troubleshooting, θα εξηγήσω πολύ συνοπτικά τις λειτουργίες που εκτελλεί το καθένα από αυτά
ip
Με το ip μπορούμε να αναθέσουμε, να αλλάξουμε και να παραμετροποιήσουμε τα network interface μας, πχ να αναθέσουμε ή να αλλαξουμε την IP address και το gateway κλπ.
Πρέπει να τονιστεί ότι το ip ουσιαστικά αντικαθιστά το ifconfig
Για παράδειγμα, για να δούμε τα net interface και τις διευθύνσεις τους

void@msi:# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 54:e1:68:56:41:19 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 9c:b6:d0:66:66:66 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.12/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
valid_lft 1812108sec preferred_lft 1812108sec
inet6 2a02:587:290c:9200:68e6:d13e:797a:e37c/64 scope global dynamic noprefixroute
valid_lft 80716sec preferred_lft 80716sec
inet6 fe80::341b:9f2a:1bb9:7703/64 scope link noprefixroute
valid_lft forever preferred_lft forever

Ή να αλλάξουμε την IP μας με

void@msi:# ip add 192.168.0.2/24 dev eth0

ifconfig
Το ίδιο με το παραπάνω, σε παλιότερες διανομές

rfkill
To rfkill είναι απλά ένα εργαλείο με το οποίο ενεργοποιούμε/απενεργοποιούμε τις ασύρματες συσκευές του υπολογιστή μας

void@msi:# rfkill

ID TYPE DEVICE SOFT HARD
0 bluetooth tpacpi_bluetooth_sw unblocked unblocked
1 wlan phy0 unblocked unblocked
2 bluetooth hci0 unblocked unblocked

iwconfig
Το iwconfig είναι στην ουσία το ifconfig για wireless, με επιπλέον δυνατότητες που είναι αποκλειστικές στα wireless interfaces όπως συχνότητα/κανάλι/ESSID κλπ

void@msi:# iwconfig wlan0 channel 3

iw
Το iw και οι δυνατότητες που μας δίνει είναι πάρα πολλές και γενικά είναι ένα άρθρο από μόνο του. Ακριβώς γι’αυτό, όμως, θα είναι πολύτιμο εργαλείο για εμας.

Παράθεση 1

Εδώ θα πρέπει να γίνει μία παράθεση και να εξηγήσουμε πως βλέπει το iw,
Στην περίπτωση των ασύρματων συνδέσεων και συσκευών είναι σημαντικό να τονίσουμε ότι υπάρχει διαχωρισμός μεταξύ του WIFI Hardware (PHYsical layer) - τονίζω το PHY - και του WIFI Interface (wlan0 κλπ) που ανήκει στο MAC Layer. Αυτό που κάνουμε συνήθως είναι να θέτουμε τις παραμέτρους καναλιού και συχνότητας στο PHYsical layer και μετά κάνουμε associate με ένα Access Point στο MAC layer.

Το iw λειτουργεί (ορθώς) διαχωρίζοντας τα παραπάνω layers ως “phy” και “dev”.
Εύκολα φαίνεται αυτό γράφοντας το παρακάτω:

void@msi:# iw dev

phy#0
Interface wlan0
ifindex 3
type managed


journalctl
Το journalctl είναι το βασικό εργαλείο του systemd για να βλέπουμε σημαντικά logs εφαρμογών και συστήματος. Στην περίπτωσή μας θα δούμε το boot log με journalctl -xb

modprobe/lsmod/modinfo
Τα βασικά εργαλεία ελέγχου των kernel modules

lspci/lshw
Τα δύο βασικά εργαλεία για να βλέπουμε τις συνδεδεμένες συσκευές που βλέπει το σύστημά μας.

dmesg
Live kernel log

Μετά από αυτά μπορούμε να προχωρήσουμε στη διαδικασία troybleshooting.
1.

void@msi:# iwconfig

wlan0 IEEE 802.11 ESSID:“COSMOTE-666”
Mode:Managed Frequency:2.462 GHz Access Point: 28:FF:3E:05:5F:A6
Bit Rate=1 Mb/s Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
Link Quality=70/70 Signal level=-36 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:39 Missed beacon:0

Εδώ πρέπει να βλέπουμε το wireless interface μας (συνήθως wlan0 ή wlp0 klp)
Αν δεν το βλέπουμε καθόλου, ενώ ξέρουμε ότι λειτουργεί σαν hardware, ακολουθούμε τα παρακάτω βήματα:

void@msi:# lspci
00:00.0 Host bridge: Intel Corporation Broadwell-U Host Bridge -OPI (rev 09)
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 5500 (rev 09)
00:03.0 Audio device: Intel Corporation Broadwell-U Audio Controller (rev 09)
00:14.0 USB controller: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
00:16.0 Communication controller: Intel Corporation Wildcat Point-LP MEI Controller #1 (rev 03)
00:19.0 Ethernet controller: Intel Corporation Ethernet Connection (3) I218-LM (rev 03)
00:1b.0 Audio device: Intel Corporation Wildcat Point-LP High Definition Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #6 (rev e3)
00:1c.1 PCI bridge: Intel Corporation Wildcat Point-LP PCI Express Root Port #3 (rev e3)
00:1d.0 USB controller: Intel Corporation Wildcat Point-LP USB EHCI Controller (rev 03)
00:1f.0 ISA bridge: Intel Corporation Wildcat Point-LP LPC Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation Wildcat Point-LP SATA Controller [AHCI Mode] (rev 03)
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)
00:1f.6 Signal processing controller: Intel Corporation Wildcat Point-LP Thermal Management Controller (rev 03)
02:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5227 PCI Express Card Reader (rev 01)
03:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32)

Εδώ πρέπει να τονίσουμε την τελευταία γραμμή
– 03:00.0 Network controller: Qualcomm Atheros QCA6174 802.11ac Wireless Network Adapter (rev 32) –
όπου και φαίνεται το μοντέλο της κάρτας WIFI.
Σημειώνουμε το QCA6174 το οποίο και είναι το μοντέλο (φυσικά το output θα διαφέρει αρκετά από υπολογιστή σε υπολογιστή). Το βασικό που θέλουμε να δούμε είναι ότι είναι εγκατεστημένοι και φορτωμένοι οι drivers γι’αυτό το μοντέλο.
Εδώ τονίζω ότι λόγω πάρα πολλών μοντέλων δεν μπορώ να γράψω κάτι περισσότερο από γενικές κατευθύνσεις χρησιμοποιώντας το δικό μου μοντέλο σαν παράδειγμα.

Παράθεση 2

Σ’αυτό το σημείο θα κάνω μία ακόμα παράθεση:

  • ΔΕΝ υποστηρίζονται ολες οι κάρτες δικτύου από το linux, κυρίως λογω έλλειψης υποστήριξης
    απο τους κατασκευαστές, οπότε ένα google search θα είναι όπως πάντα το πρώτο πράγμα που πρέπει να κάνουμε.
    Επίσης κάποιες κάρτες δικτύου πρέπει για να λειτουργήσουν να φορτωθεί μικροκώδικας (microcode) σ’αυτές - κοινώς firmware.
  • Επί το πλείστον οι drivers και το firmware είναι διαθέσιμα στα repos του debian.
  • Ο precompiled kernel της διανομής μας περιλαμβάνει ήδη σαν loadable modules drivers τόσο για το PHY υποσύστημα όσο και για το DEV, για αρκετούς κατασκευαστές. Αυτό μπορούμε να το δούμε στο default configuration του kernel μας.
    (στο /boot/config-[kernel-name])

Για να δούμε λοιπόν αν έχουν φορτωθεί σωστά οι drivers θα χρησιμοποιήσουμε πρώτα το official site του debian https://wiki.debian.org/WiFi όπου και θα βρούμε το kernel module που χρειάζεται το wifi card μας για να δουλέψει. Αφού βρούμε το όνομα:

void@msi:# lsmod | grep ath10k

ath10k_pci 40960 0
ath10k_core 303104 1 ath10k_pci
ath 28672 1 ath10k_core
mac80211 409600 1 ath10k_core
cfg80211 286720 3 ath,mac80211,ath10k_core

Εδώ βλέπουμε ότι έχουν φορτωθεί και χρησιμοποιούνται (3η στήλη) τα απαραίτητα modules.
Το επόμενο βήμα είναι να δούμε πιο firmware version φορτώνεται στη συσκευή μας.
Μέχρι τώρα, από εμπειρία, συνήθως αυτό φαίνεται με την εντολή

void@msi:# lshw -c net

*-network
description: Wireless interface
product: QCA6174 802.11ac Wireless Network Adapter
vendor: Qualcomm Atheros
physical id: 0
bus info: pci@0000:03:00.0
logical name: wlan0
version: 32
serial: 9c:b6:d0:1b:89:6f
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless
configuration: broadcast=yes driver=ath10k_pci driverversion=5.1.0-rc1.void.LITE firmware=RM.4.4.1.c2-00057-QCARMSWP-1 ip=192.168.1.12 latency=0 link=yes multicast=yes wireless=IEEE 802.11
resources: irq:47 memory:e1000000-e11fffff

Εδώ βλέπουμε ότι το firmware firmware=RM.4.4.1.c2-00057-QCARMSWP-1 έχει φορτωθεί σωστά στην κάρτα μου.

ή με το

void@msi:# modinfo ath10k_pci

filename: /lib/modules/5.1.0-rc1.void.LITE/kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko
firmware: ath10k/QCA9377/hw1.0/board.bin
firmware: ath10k/QCA9377/hw1.0/firmware-5.bin
firmware: ath10k/QCA9377/hw1.0/firmware-6.bin
firmware: ath10k/QCA6174/hw3.0/board-2.bin
firmware: ath10k/QCA6174/hw3.0/board.bin
firmware: ath10k/QCA6174/hw3.0/firmware-6.bin
firmware: ath10k/QCA6174/hw3.0/firmware-5.bin
firmware: ath10k/QCA6174/hw3.0/firmware-4.bin
firmware: ath10k/QCA6174/hw2.1/board-2.bin
firmware: ath10k/QCA6174/hw2.1/board.bin
firmware: ath10k/QCA6174/hw2.1/firmware-5.bin
firmware: ath10k/QCA6174/hw2.1/firmware-4.bin
firmware: ath10k/QCA9887/hw1.0/board-2.bin
firmware: ath10k/QCA9887/hw1.0/board.bin
firmware: ath10k/QCA9887/hw1.0/firmware-5.bin
firmware: ath10k/QCA988X/hw2.0/board-2.bin
firmware: ath10k/QCA988X/hw2.0/board.bin
firmware: ath10k/QCA988X/hw2.0/firmware-5.bin
firmware: ath10k/QCA988X/hw2.0/firmware-4.bin
firmware: ath10k/QCA988X/hw2.0/firmware-3.bin
firmware: ath10k/QCA988X/hw2.0/firmware-2.bin
license: Dual BSD/GPL
description: Driver support for Qualcomm Atheros 802.11ac WLAN PCIe/AHB devices
author: Qualcomm Atheros
alias: pci:v0000168Cd00000050svsdbcsci*
alias: pci:v0000168Cd00000042svsdbcsci*
alias: pci:v0000168Cd00000046svsdbcsci*
alias: pci:v0000168Cd00000056svsdbcsci*
alias: pci:v0000168Cd00000040svsdbcsci*
alias: pci:v0000168Cd0000003Esvsdbcsci*
alias: pci:v0000168Cd00000041svsdbcsci*
alias: pci:v0000168Cd0000003Csvsdbcsci*
alias: pci:v00000777d000011ACsvsdbcsci*
depends: ath10k_core
retpoline: Y
intree: Y
name: ath10k_pci
vermagic: 5.1.0-rc1.void.LITE SMP mod_unload modversions
parm: irq_mode:0: auto, 1: legacy, 2: msi (default: 0) (uint)
parm: reset_mode:0: auto, 1: warm only (default: 0) (uint)

Όπου βλέπουμε τα αρχεία firmware

Πρέπει λοιπόν, στην περίπτωση που το firmware είναι πολύ παλίό ή λάθος για την κάρτα μας, να ψάξουμε το σωστό στο φίλο μας το google.
Δεν παραθέτω τη διαδικασία γι’αυτό γιατί διαφέρει προφανώς από κάρτα σε κάρτα.

Πέραν από την ανωτέρω διαδικασία καλό είναι να δούμε και το boot log γράφοντας την εντολή

void@msi:# journalctl -xb --no-pager |grep wifi

και να ψάξουμε για τυχόν errors στο output
Για παράδειγμα αν ο kernel δεν βρίσκει τον driver, το firmware file ή το regulatory database file, θα φανεί εκεί

Παράθεση 3

Παράλληλα με τους drivers για το PHY και το DEV, ο linux kernel φορτώνει κάποιους κανόνες λειτουργίας συσκευών, τα Regulatory Domains, στη μορφή regulatory.db για λόγους συμβατότητας με τους κανονισμού λειτουργίας της εκάστοτε Χώρας ή περιοχής (πχ Ευρωπαϊκή Ένωση), οι οποίοι περιέχουν στην περίπτωση του WiFi ανάμεσα σε άλλα τη μέγιστη ισχύ εκπομπής (20dbm στην περίπτωση της ΕΕ).
Οπότε μπορεί να δούμε σε κάποιες περιπτώσεις errors λόγω αυτού - στο 99% των περιπτώσεων δεν είναι fatal οπότε τα κάνουμε ignore.

  1. Όλα είναι φορτωμένα σωστά αλλά δεν βλέπω δίκτυα

void@msi:# rfkill

ID TYPE DEVICE SOFT HARD
0 bluetooth tpacpi_bluetooth_sw unblocked unblocked
1 wlan phy0 blocked unblocked
2 bluetooth hci0 blocked unblocked

Εδώ πρέπει να είναι όλα unblocked
Αν έχουμε blocked στην τρίτη στήλη (ΗΑRD) πατάμε απλά το κουμπί (ή συνδυασμό) που ανοίγει το wifi :smiley:
Αλλιώς

void@msi:# rfkill unblock all
void@msi:# ifconfig wlan0 up

  1. Η κάρτα δουλεύει, ο driver δουλεύει, αλλά δεν έχει καθόλου καλό σήμα

Ελέγχουμε ότι η κάρτα έχει επιλεγμένα όλα τα δυνατά κανάλια λειτουργίας

void@msi:# iwlist wlan0 channel

wlo1 13 channels in total; available frequencies :
Channel 01 : 2.412 GHz
Channel 02 : 2.417 GHz
Channel 03 : 2.422 GHz
Channel 04 : 2.427 GHz
Channel 05 : 2.432 GHz
Channel 06 : 2.437 GHz
Channel 07 : 2.442 GHz
Channel 08 : 2.447 GHz
Channel 09 : 2.452 GHz
Channel 10 : 2.457 GHz
Channel 11 : 2.462 GHz
Channel 12 : 2.467 GHz
Channel 13 : 2.472 GHz

Αν το output είναι αυτό είμαστε ΟΚ, αλλιώς

void@msi:# iwconfig wlan0 channel auto

Ύστερα κάνουμε τα παρακάτω:

void@msi:# iw

wlan0 IEEE 802.11 ESSID:“COSMOTE-666”
Mode:Managed Frequency:2.462 GHz Access Point: 28:FF:3E:05:5F:A6
Bit Rate=1 Mb/s Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=70/70 Signal level=-36 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:39 Missed beacon:0

Εδώ παρατηρούμε ΤΡΙΑ πράγματα,

  • Το Tx-Power ότι είναι πράγματι 20dbm
  • Το Power Management να είναι off
  • To RTS threshold να είναι off

Δεν είναι φυσικά απαραίτητα όλα αυτά να είναι ακριβώς έτσι, αλλά είναι οι maximum available ρυθμίσεις
Οπότε, με τη σειρά κάνουμε (παραλείπουμε ότι είναι ήδη σωστό) και αλλάζουμε το [wlan0] με το όνομα που έχει δωθεί στο wifi interface μας
–Εδώ θα φανεί και η δύναμη του iw

void@msi:# iwconfig wlan0 txpower 20
void@msi:# echo ‘HOOK_BLACKLIST=“wireless”’ >> /etc/pm/config.d/blacklist
void@msi:# iw phy phy0 rts off

Μετά ένα restart τη κάρτα μας

void@msi:# iwconfig wlan0 down && iwconfig wlan0 up

Βλέπουμε αν έχουμε βελτίωση
Αν όχι θα πάμε στο τελευταίο βήμα του οδηγού, που ήταν και η λύση που έδωσα στο φίλο HadesTouch.

Παράθεση 4

Όλες οι σύγχρονες κάρτες δικτύου των laptop έχουν connectors για δύο κεραίες. Μία main και μία aux.
Πολλές φορές, κάποια λαπτοπ έχουν μόνο μία physical κεραία συνδεδεμένη πάνω στην κάρτα.
Σε κάποιες περιπτώσεις μπορούμε να επιλέξουμε μεσω του kernel module config ποια θα χρησιμοποιείται.
Εξ’αιτίας αυτού μπορεί να είναι επιλεγμένη λάθος κεραία και να μην πιάνουμε τίποτα!!!

Στο παραπάνω βήμα (1) παρατηρούμε το output του modinfo
Στο κάτω μέρος έχει τα parm που είναι οι παράμετροι που μπορούμε να περάσουμε στο module.
Αν έχει την παράμετρο ant_sel τότε δοκιμάζουμε το παρακάτω

void@msi:# modprobe -rv ath10k_pci
void@msi:# modprobe -v ath10k_pci ant_sel=1

Αν μέχρι εδώ δεν έχετε βρει λύση, κάντε post τα αποτελέσματά σας παρακάτω…

Αν ο οδηγός σας βοήθησε και το WIFI σας δουλεύει, as always,
Απολαύστε ανεύθυνα

12 Likes