System Incident Resolved

macOS Wi-Fi Subsystem Diagnostics & Resolution Report

Comprehensive root cause analysis and resolution of the userspace DriverKit scan lockup causing 0 Wi-Fi networks discovered on macOS.

Target Host macOS (Darwin 24.x)
Interface en1 (Apple Silicon / Broadcom)
Driver Type DriverKit-AppleBCMWLAN.dext
Status 100% Operational
Initial State Failed
0 SSIDs

Scan timed out after 30.0s with error EBUSY (16).

Resolved State Active
25 Networks

Discovered in 3.99s across 2.4 GHz and 5 GHz bands.

Current Link Connected
5 GHz / 11ax

Ch 36 (80 MHz), RSSI -56 dBm to -67 dBm, WPA3 Personal.

System Uptime Pre-Fix
32 Days

Wedged userspace Dext recovered without rebooting OS.

🔍 Incident Summary & Symptoms

The system Wi-Fi card was powered on and the interface (en1) was recognized by the OS kernel, but the Wi-Fi menu bar, Control Center, and CoreWLAN CLI probes showed zero wireless networks available.

Observed Behavior: Any manual network scan attempt in System Settings or third-party utilities hung indefinitely for 30 seconds before failing silently with 0 networks returned.

⚙️ Root Cause Analysis

A multi-layered diagnostic inspection of the macOS unified log stream and CoreWLAN subsystem revealed three interacting bottlenecks:

1

DriverKit WLAN Finite State Machine (FSM) Deadlock

In modern macOS releases, wireless hardware interactions are managed by the DriverKit userspace daemon (com.apple.DriverKit-AppleBCMWLAN.dext). After prolonged uptime (~32 days), the driver's internal scan manager became stuck in SCAN_MANAGER_STATE_IN_PROGRESS.

kernel: (com.apple.DriverKit-AppleBCMWLAN.dext) [wcl] handleAbortRequest@1241: Scan Timeout after 30.002472791 sec, processing state: 3
kernel: (com.apple.DriverKit-AppleBCMWLAN.dext) [wcl] cmdIouc@145: Fail to Set cmd=<APPLE80211_IOC_WCL_TRIGGER_CC, 439> res=0xe00002ec
kernel: (com.apple.DriverKit-AppleBCMWLAN.dext) [dk] handleEventScanComplete@2292: Infra Scan complete status 4 (Aborted)
2

Continuous EBUSY (16) Scan Rejections in airportd

Because the Dext was indefinitely waiting for firmware completion timers, every subsequent scan request dispatched by airportd or Control Center was rejected immediately with error code 16 (EBUSY):

airportd: (IO80211) Apple80211IOCTLSetWrapper: ifname['en1'] IOUC type 10/'APPLE80211_IOC_SCAN_REQ' return 16/0x00000010
airportd: (IO80211) Apple80211Scan: ifname['en1'], total time [0.001193], err[16], Apple80211Scan Failed
airportd: (IO80211) Info: Failed to perform Wi-Fi scan, returned error code 16, will try again in 200 ms
3

Regulatory Domain Channel Sanitization Collapse

While stuck in this hung FSM state, the 802.11 regulatory domain could not query local 802.11d beacon data or geocoding services, resetting the locale to fallback X0. The driver subsequently stripped all 35 channels from the scan list:

kernel: (com.apple.DriverKit-AppleBCMWLAN.dext) [dk] sanitizeScanData@350: 0 (35 - 35) unsupported channels removed

🛠️ Remediation Performed

Phase Action Target Component Result
1. Driver Reset Terminated hung Dext PID com.apple.DriverKit-AppleBCMWLAN Dext Respawned Cleanly
2. IPC Daemon Recovery Restarted AirPort daemon & user agent /usr/libexec/airportd & WiFiAgent Fresh XPC Channels Created
3. Regulatory Resync Country code updated from X0 to US CoreWLAN / IO80211 Family All 35 Channels Enabled
4. Auto-Association Reconnected preferred SSID LogicNet (WPA3-SAE, 5GHz) Active & DHCP Assigned

📡 Post-Fix Discovery Verification

A fresh live CoreWLAN sweep completed in 3.99 seconds, successfully discovering 25 nearby access points:

LogicNet Connected Channel 36 • 5 GHz (80 MHz) • 802.11ax
-56 dBm
DM Channel 149 • 5 GHz • 802.11ax
-65 dBm
ot-dev-net Channel 5 • 2.4 GHz
-58 dBm
Hash Channel 40 • 5 GHz
-75 dBm

💻 One-Liner Cheatsheet for Future Troubleshooting

If macOS Wi-Fi scanning locks up after weeks of continuous uptime, execute the following commands in Terminal:

# 1. Kill the hung DriverKit WLAN userspace process (will auto-respawn)
sudo pkill -9 -f "DriverKit-AppleBCMWLAN"

# 2. Restart airportd and the user-facing WiFiAgent
sudo killall -9 airportd WiFiAgent 2>/dev/null

# 3. Verify scan capabilities and visible SSIDs via CoreWLAN
swift -e '
import CoreWLAN
if let iface = CWWiFiClient.shared().interface() {
    if let nets = try? iface.scanForNetworks(withSSID: nil) {
        print("Discovered \(nets.count) networks:")
        for n in nets { print("  - \(n.ssid ?? ""): \(n.rssiValue) dBm (Ch \(n.wlanChannel?.channelNumber ?? 0))") }
    }
}
'