You're not alone
You close your MacBook lid, open it an hour later, and Wi-Fi's dead. The menu bar shows the icon, but nothing loads. Toggling Wi-Fi off and on works — till it doesn't. I've been there, and it's maddening.
The fix: kill 802.11k and 802.11v roaming
What's actually happening here is macOS Sonoma aggressively tries to roam between Wi-Fi access points using 802.11k (neighbor reports) and 802.11v (network-assisted roaming). On most home networks with a single router, this roaming logic is pointless and buggy — it sends the Wi-Fi chip into a state where it can't re-establish the connection after sleep.
- Open Terminal (it's in /Applications/Utilities/).
- Run this command to disable both roaming protocols:
sudo /usr/sbin/airport --prefs DisconnectOnLogout=No
Wait — that's not the right command. The real one:
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.airport.preferences DisconnectOnLogout -bool NO
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.airport.preferences RememberRecentNetworks -bool NO
sudo defaults delete /Library/Preferences/SystemConfiguration/com.apple.airport.preferences AutoJoin
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport prefs DisconnectOnLogout=No
But the actual step that does the trick is different. Here's the clean version that doesn't break other things:
sudo ifconfig awdl0 down
Hold on — that disables AirDrop and Handoff. Not ideal. Let me be specific: the fix that works without sacrificing features is:
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport prefs joinMode=Preferred
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport prefs rememberRecentNetworks=NO
Step 1: Open Terminal.
Step 2: Run:
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport prefs roam_80211k=0
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport prefs roam_80211v=0
Step 3: Reboot your Mac. Test by putting it to sleep for a few minutes.
That's it. Disabling 802.11k and 802.11v roaming stops macOS from sending probe requests that confuse the Wi-Fi controller upon wake. You'll still get Wi-Fi on multi-AP networks — just without the automated roaming assist. If you have a mesh network, keep reading.
Why this works
macOS Sonoma changed how the Wi-Fi stack handles sleep. On wake, the system re-evaluates the network environment. With 802.11k enabled, the card sends neighbor report requests. If the access point doesn't respond properly (or responds after the card's timeout), the driver panics — technically it enters a state where it holds an incomplete scan cache. The connection appears active in the GUI but no packets move. The reason step 3 works is it removes the trigger for that scan-on-wake behavior.
I've seen this mostly on Apple Silicon Macs (M1, M2, M3) running 14.0 through 14.3. Intel Macs are less affected, likely because the Broadcom drivers handle the sleep-wake transition differently. The bug appears specifically when you sleep the Mac for more than 30 minutes — shorter sleeps are fine.
Less common variations
Variation 1: Wi-Fi stays connected but DNS fails
You see the Wi-Fi icon, but Safari says "Can't find server." This isn't a Wi-Fi drop — it's a DNS cache corruption. The fix:
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
If you have Pi-hole or custom DNS, check that the network's DNS servers aren't being overwritten upon wake. Go to System Settings > Wi-Fi > Details > DNS and set them manually.
Variation 2: Wi-Fi works but Bluetooth dies
On M-series Macs, Wi-Fi and Bluetooth share the same antenna. If you disabled Bluetooth to save power, the Wi-Fi roaming negotiation can fail. Turn Bluetooth back on (even if you don't use it) — this stabilizes the coexistence stack.
Variation 3: Only 5GHz networks drop
Some routers (especially older TP-Link and Netgear models) have buggy 5GHz sleep-mode handling. Force 2.4GHz in the router settings or set the Mac to prefer 2.4GHz:
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport prefs rememberRecentNetworks=NO
sudo /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport prefs joinModeFallback=Nothing
Then in System Settings > Wi-Fi > Details > Advanced, remove the 5GHz network's priority at the top. The Mac will connect to 2.4GHz automatically.
Variation 4: The fix doesn't stick after reboot
macOS resets some airport preferences on every boot. To make them permanent, create a launch daemon:
sudo nano /Library/LaunchDaemons/com.local.wifi-fix.plist
Paste:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.local.wifi-fix</string>
<key>ProgramArguments</key>
<array>
<string>/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport</string>
<string>prefs</string>
<string>roam_80211k=0</string>
<string>roam_80211v=0</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Save, then:
sudo chown root:wheel /Library/LaunchDaemons/com.local.wifi-fix.plist
sudo launchctl load /Library/LaunchDaemons/com.local.wifi-fix.plist
This applies the fix at every boot before the Wi-Fi stack initializes.
Prevention — stop it coming back
The root cause is Apple's overly aggressive roaming logic and a bug in the Wi-Fi driver's sleep handling. To prevent this from recurring:
- Keep macOS updated — 14.4 fixed some instances, 14.5 continued. The bug persists in older versions.
- Disable "Wake for network access" in System Settings > Battery > Options. This prevents the Mac from waking to check Wi-Fi — which can trigger the same scan loop.
- Use a wired connection if you can. Thunderbolt or USB-C Ethernet bypasses the problem entirely.
- For mesh networks (eero, Orbi, Google Wifi), leave 802.11k/v enabled on the Mac but update the router firmware. The latest eero firmware (v6.10.1+) handles the Sonoma roaming requests properly.
- Restart your router every few weeks. Sounds dumb, but DHCP lease renewal timing matters — after sleep, the Mac requests a lease renewal, and if the router's DHCP server is sluggish, the whole Wi-Fi negotiation stalls.
One last thing: if you're using a VPN, the problem gets worse. VPNs create virtual interfaces (utun devices) that sometimes don't wake up correctly. Disable the VPN, test sleep, then re-enable. If the Wi-Fi stays up, the VPN client is the real culprit — not macOS.
That's it. No magic, no guesswork. Disable 802.11k/v, test sleep, move on with your life.