
Fix MacBook Air M2 WiFi Disconnection Issue (AWDL)
Your MacBook Air M2 WiFi issues are caused by AWDL — a hidden Apple protocol. Here's the permanent Terminal fix.

Your MacBook Air M2 WiFi issues are caused by AWDL — a hidden Apple protocol. Here's the permanent Terminal fix.
| Property | Value |
|---|---|
| Model | MacBook Air 15-inch (2023) |
| Model ID | Mac14,15 |
| Chip | Apple M2 |
| RAM | 24 GB unified memory |
| macOS Version | Ventura / Sonoma |
| Region / Keyboard | USA (LL variant) |
AWDL (Apple Wireless Direct Link) is a low-latency, high-speed WiFi protocol built into macOS. It powers peer-to-peer Apple features such as:
Whenever AWDL is active, it locks the WiFi radio for small intervals — approximately 50–100ms once per second for Bonjour discovery alone. This creates latency spikes and causes the router to perceive the Mac as repeatedly disconnecting and reconnecting. On M1/M2 Macs, AWDL runs more aggressively in the background due to features like Universal Clipboard and Continuity Camera, making the issue more pronounced.
First, confirm your Mac model using the terminal:
system_profiler SPHardwareDataType
Sample output:
Model Name: MacBook Air
Model Identifier: Mac14,15
Chip: Apple M2
Memory: 24 GB
Mac14,15 = 15-inch MacBook Air M2 (2023)Mac14,2 = 13-inch MacBook Air M2 (2022)Temporarily disable AWDL and observe if WiFi stabilizes immediately:
sudo ifconfig awdl0 down
Then verify it's disabled:
ifconfig awdl0 | grep status
Expected output:
status: inactive
If WiFi connects and stabilizes immediately after running this command, AWDL is confirmed as the cause.
To re-enable AWDL temporarily (if needed for AirDrop etc.):
sudo ifconfig awdl0 up
⚠️ Note: This fix is temporary and resets on every reboot. Follow the steps below to make it permanent.
Since sudo ifconfig awdl0 down resets after every reboot, we need to create a LaunchDaemon that runs the command automatically at startup.
A naive LaunchDaemon that directly calls ifconfig awdl0 down will fail at boot because:
ifconfig: interface awdl0 does not exist
The daemon runs too early — before macOS has created the awdl0 interface. The solution is to use a shell script that waits for the interface to appear before disabling it.
sudo nano /usr/local/bin/disable-awdl.sh
Paste the following:
#!/bin/bash
# Wait for awdl0 interface to appear
while ! /sbin/ifconfig awdl0 > /dev/null 2>&1; do
sleep 1
done
# Disable it
/sbin/ifconfig awdl0 down
# Keep watching and re-disable if macOS re-enables it
while true; do
STATUS=$(/sbin/ifconfig awdl0 | grep "status: active")
if [ -n "$STATUS" ]; then
/sbin/ifconfig awdl0 down
fi
sleep 5
done
Why the loop? macOS services like mDNSResponder can re-enable awdl0 after boot. The while true loop watches every 5 seconds and re-disables AWDL if macOS turns it back on.
Save with Ctrl+O, then exit with Ctrl+X.
Make the script executable:
sudo chmod +x /usr/local/bin/disable-awdl.sh
sudo nano /Library/LaunchDaemons/disable-awdl.plist
Paste the following:
<?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>disable-awdl</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/usr/local/bin/disable-awdl.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/disable-awdl.err</string>
<key>StandardOutPath</key>
<string>/tmp/disable-awdl.out</string>
</dict>
</plist>
sudo chown root:wheel /Library/LaunchDaemons/disable-awdl.plist
sudo launchctl unload /Library/LaunchDaemons/disable-awdl.plist
sudo launchctl load /Library/LaunchDaemons/disable-awdl.plist
ifconfig awdl0 | grep status
sudo launchctl list | grep awdl
Expected output:
status: inactive
- 0 disable-awdl
status: inactive → AWDL is disabled0 → daemon ran successfully (exit code 0)sudo reboot
After reboot, verify:
ifconfig awdl0 | grep status
Expected:
status: inactive
If you see status: inactive after a fresh reboot — the fix is permanent.
1Check the error log:
cat /tmp/disable-awdl.err
Common error:
ifconfig: interface awdl0 does not exist
Fix: Make sure your shell script includes the while loop that waits for awdl0 to appear (see Step 3.1).
sudo launchctl list | grep awdlcat /usr/local/bin/disable-awdl.shls -la /usr/local/bin/disable-awdl.sh (should be executable)Disabling AWDL affects the following Apple features:
| Feature | Status |
|---|---|
| Regular WiFi/Internet | ✅ Works fine |
| Bluetooth | ✅ Works fine |
| AirDrop | ❌ Disabled |
| AirPlay | ❌ Disabled |
| Handoff / Continuity | ❌ Disabled |
| Sidecar | ❌ Disabled |
If you occasionally need AirDrop or AirPlay, you can temporarily re-enable AWDL:
sudo ifconfig awdl0 up
And disable it again when done:
sudo ifconfig awdl0 down
If you ever want to revert this fix completely:
sudo launchctl unload /Library/LaunchDaemons/disable-awdl.plist
sudo rm /Library/LaunchDaemons/disable-awdl.plist
sudo rm /usr/local/bin/disable-awdl.sh
sudo ifconfig awdl0 up
| Step | Command / Action | Purpose / Verification |
|---|---|---|
| 1 | sudo ifconfig awdl0 down | Immediately disable the awdl0 interface |
| 2 | ifconfig awdl0 | grep status | Verify it shows status: inactive |
| 3 | sudo nano /usr/local/bin/disable-awdl.sh | Create the disable script |
| 4 | sudo nano /Library/LaunchDaemons/disable-awdl.plist | Create the LaunchDaemon property list file |
| 5 | sudo launchctl load /Library/LaunchDaemons/disable-awdl.plist | Load the daemon (runs at boot) |
| 6 |
# Disable now
sudo ifconfig awdl0 down
# Create script + daemon → reboot or load manually
# Verify: sudo launchctl list | grep awdl
# Undo
sudo launchctl unload /Library/LaunchDaemons/disable-awdl.plist
sudo rm /Library/LaunchDaemons/disable-awdl.plist
sudo rm /usr/local/bin/disable-awdl.sh
sudo ifconfig awdl0 up
Recent Apple updates leading to Wi-Fi issues & an interim solution
M2/M1 MacBook Having Wi-Fi Issues? This Workaround Helps
Some M1/M2 Mac users facing Wi-Fi connectivity and speed issues
Quick Note: These references are from 2022 — most users report the problem was largely resolved in later macOS Ventura/Sonoma updates. If you're still seeing issues, check for the latest system update first.
sudo launchctl list | grep awdl| Confirm the daemon is loaded |
| 7 | cat /tmp/disable-awdl.err | Check for any script errors (if logging enabled) |
| — | Undo / Revert | — |
sudo launchctl unload /Library/LaunchDaemons/disable-awdl.plist | Unload the daemon |
sudo rm /Library/LaunchDaemons/disable-awdl.plist | Remove the plist file |
sudo rm /usr/local/bin/disable-awdl.sh | Remove the script |
sudo ifconfig awdl0 up | Re-enable the interface manually |