There are (at least) four difference ways for me to disable my Wi-Fi on my Mac:
- Click on the Wi-Fi icon in the menu bar and select "Turn Wi-Fi Off"
- System Preferences->Network, select Wi-Fi, click Cog, select Make Service Inactive
sudo ifconfig en0 down
networksetup -setnetworkserviceenabled Wi-Fi off
The first two are equivalent, i.e. they change the same setting.
What I'd like to understand is, at a low level, what are the fundamental differences between 1, 3 and 4?
Best Answer
Turning the wifi off through the Menu Bar is equivalent to:
networksetup -setairportpower en0 off
... and so, the same as turning it off in network settings.
I cannot speak to the low levels, but
networksetup
is an Apple addition, whereasifconfig
is standard not just for BSD, but for Linux as well. (Though the two utilties are ultimately distinct, not just in their implementation but API)If I had to guess, and I will guess since Apple's internals aren't exactly transparent (please, someone correct me if you're able),
networksetup
is meant to control the actual hardware, the Wi-Fi device, whereasifconfig
is a purely OS-level utility. Much like you can quit your video-chat app, vs put a piece of tape over the camera.A few things I can verify:
en0
, must be UP (so,ifconfig en0 up
), as well asairportpower
being ON (so,networksetup -setairportpower en0 on
).down
ing aniface
, and turning airportpoweroff
, will render the Menu Bar symbol as a hollow outline.on
, ififconfig ... up
has not been run after runningifconfig ... down
, then the symbol will not be hollow, and macOS will scan frantically for networks, but be unable to: (1) connect to a network (2) bring UP theiface0
(3) change the routing tableSo, that wifi symbol seems to be the result of a state-change, not actual state. In that, the actual state of whether or not Wi-Fi is being shown as able to connect isn't connected to the visual indicator. But the interface, even when DOWN, does seem to somehow scan in a way, in that if you turn back
on
theairportpower
, the "status:" given byifconfig
will swap rapidly back & forth betweenactive
andinactive
, even if the actual interface is not UP.So, there is inconsistency. But it's that way because there would be no reason to turn the second one off after doing so the first. And because Apple's desires & ideal API differ from those of BSD.