The Basics
Despite its simplicity, Chrome OS, the Linux variant that Chromebooks run, does have some useful diagnostics tools that can help troubleshoot Wi-Fi problems. Most of these tools are included in the crosh shell, which you can open by typing Control-Alt-T. Here are some of my go-to crosh networking commands that don’t require an explanation.
ping
route
tracepath
crosh> connectivity show devices
/device/wlan0
Address: 485ab6######
BgscanMethod: simple
BgscanShortInterval: 30
BgscanSignalThreshold: -50
ForceWakeToScanTimer: false
IPConfigs/0: /ipconfig/wlan0_0_dhcp
Interface: wlan0
LinkMonitorResponseTime: 3
LinkStatistics/0/AverageReceiveSignalDbm: -61
LinkStatistics/1/InactiveTimeMilliseconds: 8002
LinkStatistics/2/LastReceiveSignalDbm: -62
LinkStatistics/3/PacketReceiveSuccesses: 63919
LinkStatistics/4/PacketTransmitFailures: 25
LinkStatistics/5/PacketTrasmitSuccesses: 34432
LinkStatistics/6/TransmitBitrate: 52.0 MBit/s MCS 11
LinkStatistics/7/TransmitRetries: 60969
Name: wlan0
NetDetectScanPeriodSeconds: 120
Powered: true
ReceiveByteCount: 1610461765
RoamThreshold: 18
ScanInterval: 60
Scanning: false
SelectedService: /service/5
TransmitByteCount: 133127986
Type: wifi
WakeOnWiFiFeaturesEnabled: not_supported
WakeToScanPeriodSeconds: 900
This command is very useful in troubleshooting 802.1X issues. It shows more layer 2 details on all the BSS’s that have been discovered. In this case, /service/12 is an 802.1X network that the Chromebook is associated with, and /service/15 an open network also in range.
crosh> connectivity show services
/service/12
AutoConnect: true
CheckPortal: auto
Connectable: true
ConnectionId: 2069398120
Country: US
DNSAutoFallback: false
Device: /device/wlan0
EAP.AnonymousIdentity: anonymous
EAP.CACert:
EAP.CACertID:
EAP.CACertNSS:
EAP.CertID:
EAP.ClientCert:
EAP.EAP: PEAP
EAP.Identity: <username>
EAP.InnerEAP: auth=MSCHAPV2
EAP.KeyID:
EAP.KeyMgmt: WPA-EAP
EAP.PIN:
EAP.PrivateKey:
EAP.RemoteCertification/0: /OU=Domain Control Validated/CN=<cn>
EAP.RemoteCertification/1: /C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
EAP.RemoteCertification/2: /C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
EAP.RemoteCertification/3: /C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
EAP.SubjectMatch:
EAP.UseProactiveKeyCaching: false
EAP.UseSystemCAs: true
Error: Unknown
ErrorDetails:
GUID: 5137BA48-0424-41B0-B5DE-29A427084925
HTTPProxyPort: 34599
IPConfig: /ipconfig/wlan0_1_dhcp
IsActive: true
LinkMonitorDisable: false
ManagedCredentials: false
Mode: managed
Name: <SSID name>
PassphraseRequired: false
PortalDetectionFailedPhase:
PortalDetectionFailedStatus:
PreviousError:
PreviousErrorSerialNumber: 0
Priority: 0
PriorityWithinTechnology: 0
Profile: /profile/chronos/shill
ProxyConfig:
SaveCredentials: true
SavedIP.Address: 192.168.1.20
SavedIP.Gateway: 192.168.1.1
SavedIP.Mtu: 0
SavedIP.NameServers: 192.168.1.1
SavedIP.PeerAddress:
SavedIP.Prefixlen: 26
SavedIPConfig/0/Address: 192.168.1.20
SavedIPConfig/1/Gateway: 192.168.1.1
SavedIPConfig/2/Mtu: 0
SavedIPConfig/3/NameServers/0: 192.168.1.1
SavedIPConfig/4/PeerAddress:
SavedIPConfig/5/Prefixlen: 26
Security: 802_1x
SecurityClass: 802_1x
State: online
Strength: 35
Tethering: NotDetected
Type: wifi
UIData:
Visible: true
WiFi.AuthMode:
WiFi.BSSID: 00:11:74:##:##:##
WiFi.Frequency: 5240
WiFi.FrequencyList/0: 2412
WiFi.FrequencyList/1: 2462
WiFi.FrequencyList/2: 5240
WiFi.FrequencyList/3: 5320
WiFi.HexSSID: ########
WiFi.HiddenSSID: false
WiFi.PhyMode: 7
WiFi.PreferredDevice:
WiFi.ProtectedManagementFrameRequired: false
WiFi.RoamThreshold: 0
WiFi.VendorInformation/0/OUIList: 00-03-7f
/service/15
AutoConnect: false
CheckPortal: auto
Connectable: true
ConnectionId: 0
Country: US
DNSAutoFallback: false
Device: /device/wlan0
EAP.AnonymousIdentity:
EAP.CACert:
EAP.CACertID:
EAP.CACertNSS:
EAP.CertID:
EAP.ClientCert:
EAP.EAP:
EAP.Identity:
EAP.InnerEAP:
EAP.KeyID:
EAP.KeyMgmt: NONE
EAP.PIN:
EAP.PrivateKey:
EAP.SubjectMatch:
EAP.UseProactiveKeyCaching: false
EAP.UseSystemCAs: true
Error: Unknown
ErrorDetails:
GUID:
HTTPProxyPort: 0
IsActive: false
LinkMonitorDisable: false
ManagedCredentials: false
Mode: managed
Name: <SSID name>
PassphraseRequired: false
PortalDetectionFailedPhase:
PortalDetectionFailedStatus:
PreviousError:
PreviousErrorSerialNumber: 0
Priority: 0
PriorityWithinTechnology: 0
Profile:
ProxyConfig:
SaveCredentials: true
Security: none
SecurityClass: none
State: idle
Strength: 44
Tethering: NotDetected
Type: wifi
UIData:
Visible: true
WiFi.AuthMode:
WiFi.BSSID: 7c:69:f6:##:##:##
WiFi.Frequency: 5320
WiFi.FrequencyList/0: 5240
WiFi.FrequencyList/1: 5320
WiFi.HexSSID: ##########
WiFi.HiddenSSID: false
WiFi.PhyMode: 7
WiFi.PreferredDevice:
WiFi.ProtectedManagementFrameRequired: false
WiFi.RoamThreshold: 0
WiFi.VendorInformation/0/OUIList: 00-10-18
This command brings up a lot of valuable information including a dump of the latest full channel scan and the Wi-Fi chipset’s capabilities, among other useful data.
crosh> network_diag --wifi
iw dev wlan0 survey dump:
Survey data from wlan0
frequency: 2412 MHz
noise: -92 dBm
channel active time: 63 ms
channel busy time: 49 ms
channel receive time: 45 ms
channel transmit time: 0 ms
Survey data from wlan0
frequency: 2417 MHz
noise: -93 dBm
channel active time: 62 ms
channel busy time: 47 ms
channel receive time: 41 ms
channel transmit time: 0 ms
Survey data from wlan0
frequency: 2422 MHz
noise: -92 dBm
channel active time: 63 ms
channel busy time: 4 ms
channel receive time: 0 ms
channel transmit time: 0 ms
[truncated]
Survey data from wlan0
frequency: 5220 MHz
noise: -94 dBm
channel active time: 124 ms
channel busy time: 0 ms
channel receive time: 0 ms
channel transmit time: 0 ms
Survey data from wlan0
frequency: 5240 MHz [in use]
noise: -94 dBm
channel active time: 15723 ms
channel busy time: 513 ms
channel receive time: 185 ms
channel transmit time: 3 ms
Survey data from wlan0
frequency: 5260 MHz
noise: -94 dBm
channel active time: 85031 ms
channel busy time: 84907 ms
channel receive time: 84907 ms
channel transmit time: 84907 ms
[truncated]
iw dev wlan0 station dump:
Station 00:11:74:##:##:## (on wlan0)
inactive time: 5444 ms
rx bytes: 11797197
rx packets: 38419
tx bytes: 1703260
tx packets: 9779
tx retries: 14295
tx failed: 43
signal: -58 dBm
signal avg: -60 dBm
tx bitrate: 24.0 MBit/s
rx bitrate: 300.0 MBit/s MCS 15 40MHz short GI
authorized: yes
authenticated: yes
preamble: long
WMM/WME: yes
MFP: no
TDLS peer: no
iw dev wlan0 scan dump:
BSS 00:11:74:##:##:##(on wlan0) -- associated
TSF: 61418055#### usec (7d, 02:36:20)
freq: 5240
beacon interval: 100 TUs
capability: ESS Privacy SpectrumMgmt ShortSlotTime (0x0511)
signal: -60.00 dBm
last seen: 847370 ms ago
Information elements from Probe Response frame:
Supported rates: 24.0* 36.0 48.0 54.0
DS Parameter set: channel 48
Country: US Environment: Indoor/Outdoor
Channels [36 - 36] @ 24 dBm
Channels [40 - 40] @ 24 dBm
Channels [44 - 44] @ 24 dBm
Channels [48 - 48] @ 24 dBm
Channels [52 - 52] @ 23 dBm
Channels [56 - 56] @ 23 dBm
Channels [60 - 60] @ 23 dBm
Channels [64 - 64] @ 23 dBm
Channels [100 - 100] @ 24 dBm
Channels [104 - 104] @ 24 dBm
Channels [108 - 108] @ 24 dBm
Channels [112 - 112] @ 24 dBm
Channels [116 - 116] @ 24 dBm
Channels [120 - 120] @ 24 dBm
Channels [124 - 124] @ 24 dBm
Channels [128 - 128] @ 24 dBm
Channels [132 - 132] @ 24 dBm
Channels [136 - 136] @ 24 dBm
Channels [140 - 140] @ 24 dBm
Channels [144 - 144] @ 24 dBm
Channels [149 - 149] @ 30 dBm
Channels [153 - 153] @ 30 dBm
Channels [157 - 157] @ 30 dBm
Channels [161 - 161] @ 30 dBm
Channels [165 - 165] @ 30 dBm
Power constraint: 3 dB
BSS Load:
* station count: 2
* channel utilisation: 4/255
* available admission capacity: 31250 [*32us]
HT capabilities:
Capabilities: 0x9ef
RX LDPC
HT20/HT40
SM Power Save disabled
RX HT20 SGI
RX HT40 SGI
TX STBC
RX STBC 1-stream
Max AMSDU length: 7935 bytes
No DSSS/CCK HT40
Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
Minimum RX AMPDU time spacing: 8 usec (0x06)
HT TX/RX MCS rate indexes supported: 0-15
HT operation:
* primary channel: 48
* secondary channel offset: below
* STA channel width: any
* RIFS: 1
* HT protection: no
* non-GF present: 1
* OBSS non-GF present: 0
* dual beacon: 0
* dual CTS protection: 0
* STBC beacon: 0
* L-SIG TXOP Prot: 0
* PCO active: 0
* PCO phase: 0
VHT capabilities:
VHT Capabilities (0x338001b2):
Max MPDU length: 11454
Supported Channel Width: neither 160 nor 80+80
RX LDPC
short GI (80 MHz)
TX STBC
RX antenna pattern consistency
TX antenna pattern consistency
VHT RX MCS set:
1 streams: MCS 0-9
2 streams: MCS 0-9
3 streams: not supported
4 streams: not supported
5 streams: not supported
6 streams: not supported
7 streams: not supported
8 streams: not supported
VHT RX highest supported: 0 Mbps
VHT TX MCS set:
1 streams: MCS 0-9
2 streams: MCS 0-9
3 streams: not supported
4 streams: not supported
5 streams: not supported
6 streams: not supported
7 streams: not supported
8 streams: not supported
VHT TX highest supported: 0 Mbps
VHT operation:
* channel width: 1 (80 MHz)
* center freq segment 1: 42
* center freq segment 2: 0
* VHT basic MCS set: 0xfffc
WMM: * Parameter version 1
* u-APSD
* BE: CW 15-1023, AIFSN 3
* BK: CW 15-1023, AIFSN 7
* VI: CW 7-15, AIFSN 2, TXOP 3008 usec
* VO: CW 3-7, AIFSN 2, TXOP 1504 usec
RSN: * Version: 1
* Group cipher: CCMP
* Pairwise ciphers: CCMP
* Authentication suites: IEEE 802.1X FT/IEEE 802.1X
* Capabilities: PreAuth 1-PTKSA-RC 1-GTKSA-RC MFP-capable (0x0081)
* 0 PMKIDs
* Group mgmt cipher suite: AES-128-CMAC
iw dev wlan0 link:
Connected to 00:11:74:##:##:## (on wlan0)
freq: 5240
RX: 11797197 bytes (38419 packets)
TX: 1703260 bytes (9779 packets)
signal: -58 dBm
tx bitrate: 24.0 MBit/s
bss flags: short-slot-time
dtim period: 1
beacon int: 100
That’s a lot more Wi-Fi data than most other platforms make natively accessible.
Additionally, to view most of this data without crosh, use this internal Chrome URL. Just enter it into the address bar and hit enter.
chrome://system/
Areas of interest for Wi-Fi data:
- network-devices – same output as the “connectivity show devices” crosh command
- network-services – same output as the “connectivity show services” crosh command
- wifi_status – same output as the “network_diag –wifi” crosh command
- lspci – you can see the Wi-Fi chipset hardware here (more on that later)
- network_event_log
- netlog
Viewing Logs
You can start logging Wi-Fi events using this crosh command.
crosh> network_logging wifi
Old flimflam tags: []
Current flimflam tags: [device+inet+manager+service+wifi]
method return sender=:1.1 -> dest=:1.146 reply_serial=2
Old wpa level: info
Current wpa level: msgdump
View the resulting device event logs at this internal Chrome URL: chrome://device-log/
Run this command to view the kernel log, which includes a lot of Wi-Fi events. I wish there was a –follow option, but currently there is not.
crosh> dmesg
A restart will return the Chromebook to normal logging levels.
And if you really want to bury yourself in logs, go to chrome://net-internals/#chromeos, click Wi-Fi to enable debugging on that interface, let the “capturing events” count creep up while you perform a task, then click “Store debug logs” to save a debug-logs_<date>.tgz archive in your Downloads folder. Be warned, the signal to noise ratio is very low with this approach. Google provides a log analyzer that you can upload these files to, but I’ve never had the need to go that far down the road. This is best used if you need to submit logs to the Google Apps Enterprise Support Team or a hardware manufacturer.
Advanced Wi-Fi Analysis with Developer Mode
But wait, there’s more! If you can put a Chromebook into Developer Mode, you can run packet captures and break into the Linux bash shell. Most enterprise-managed Chromebooks will have this mode disabled for obvious reasons, but it’s easy enough to move your test Chromebook into a test OU and disable this and other restrictions for testing purposes. (That’s IT testing, not high-stakes student testing! Make sure your OU’s clearly differentiate the two.)
Packet Capture
First, determine which channel’s frequency you’d like to run the capture, and also if channel bonding is in use. The internal URL from above will work for this as well as the “network_diag –wifi” crosh command. The frequency of the currently associated BSS is displayed at the end of that output here.
…
iw dev wlan0 link:
Connected to 00:11:74:##:##:## (on wlan0)
freq: 5240
RX: 11797197 bytes (38419 packets)
TX: 1703260 bytes (9779 packets)
signal: -58 dBm
tx bitrate: 24.0 MBit/s
bss flags: short-slot-time
dtim period: 1
beacon int: 100

Now turn off the Wi-Fi NIC in the GUI so it can be put into monitor mode.
You can now run the packet capture using the crosh command below.
Optionally, specify a secondary channel above or below the primary if you are doing a 40 MHz 802.11n capture by appending the “–ht-location <above|below>” flag.
crosh> packet_capture --frequency <frequency in MHz>
Capturing from phy0_mon. Press Ctrl-C to stop.
^CCapture stored in /home/chronos/user/Downloads/packet_capture_7K08.pcap
You’ll get a pcap file complete with Radiotap headers if the hardware supports it saved in the Downloads folder which you can send to another machine to do analysis. If the Chromebook is all you have available, you can upload the pcap to CloudShark for analysis.
Wi-Fi Troubleshooting in Bash
Once you’ve got Developer Mode enabled, you can use the bash shell and follow the network log (or any other log) as things happen. This is my preferred way to troubleshoot Chromebook Wi-Fi issues in real time.
crosh> shell
chronos@localhost / $ tail -f /var/log/net.log
Now go do something to the Wi-Fi connection and watch the log scroll by.
A few Linux networking commands you may already know are available here as well like ifconfig, arp, and netstat.
Wi-Fi Chipset and Driver Information
While you’re in the bash shell, you can also determine the Wi-Fi chipset hardware in use. The output of this lspci command will only show the Wi-Fi adapter and the driver it is using. The basic output of lspci is included in chrome://system, but this method allows you to get more data. Add a -v flag or two to see even more.
crosh> shell
chronos@localhost /sys $ sudo lspci -nnk | grep -A2 0280
01:00.0 Network controller [0280]: Qualcomm Atheros AR9462 Wireless Network Adapter [168c:0034] (rev 01)
Subsystem: Foxconn International, Inc. Device [105b:e058]
Kernel driver in use: ath9k
This Acer C720 Chromebook has a Qualcomm Atheros AR9462 and uses the ath9k driver.
Run this command to discover the Wi-Fi chipset driver version. This is helpful if you want to know if the Wi-Fi chipset drivers were updated during a system update.
crosh> shell
chronos@localhost / $ sudo ethtool -i wlan0
driver: ath9k
version:
firmware-version:
bus-info: 0000:01:00.0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
In this case no version number is reported, perhaps because the OS is using a generic Atheros driver that is packaged with the Linux kernel.
Below is the output of the same commands on an HP Chromebook 11 G4 running Chrome OS 41. This machine has an Intel Wireless-AC 7260 chipset and the driver and firmware-version are listed.
crosh> shell
chronos@localhost / $ sudo lspci -nnk | grep -A2 0280
01:00.0 Network controller [0280]: Intel Corporation Wireless 7260 [8086:08b1] (rev c3)
Subsystem: Intel Corporation Dual Band Wireless-AC 7260 [8086:c070]
Kernel driver in use: iwlwifi
crosh> shell
chronos@localhost / $ sudo ethtool -i wlan0
driver: iwlwifi
version: 3.10.18
firmware-version: 23.14.10.0
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
The driver version appears to just be the Linux kernel version. The firmware-version is the chipset driver version.
Interestingly, after updating this HP Chromebook to Chrome OS 50, the Wi-Fi chipset firmware-version changed… but went down.
crosh> shell
chronos@localhost / $ sudo ethtool -i wlan0
driver: iwlwifi
version: 3.10.18
firmware-version: 16.229726.0
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
An inspection of the iwlwifi version history shows that this driver is actually newer than the previous version. Before version 16 it was the third number in the version that indicated what major branch it came from, so version 23.14.10.0 was actually from the version 10 branch. Thankfully, that’s cleared up in newer versions of the driver so that the first number is the version branch.
It’s good to see that Google includes Wi-Fi chipset driver updates with Chrome OS updates. This is especially nice as system updates are downloaded and installed automatically to Chromebooks. Personally, I’ve seen system updates resolve odd Chromebook Wi-Fi problems and it’s possible the newer drivers are the solution.
Comments
Article is closed for comments.