I think the combo cable modem/wifi gadget here in my hut is in need of replacement.
Having been using unix for thirty eight years, installing networks for the last thirty six years, and completing the Cisco Network & Design Professional ratings twenty four years ago, I kinda know some things about this general area.
But my knowledge does not extend to interpreting the dumpster fire response macOS gives to a simple “ifconfig” command. On a Linux system there will be a lo(opback), something en* that’s ethernet, and something WiFi related called wlan0. Here’s an example from a brand new Proxmox system that does not yet have an VMs on it. The loopback is seen, eno1 is physical ethernet, and vmbr0 is the bridge interface that Proxmox uses to connect VMs directly to eno1. The next thing that will happen is vmbr1 will appear, a private segment, then there will be a plethora of fwln, fwpr, and tap interfaces. That list is long, but the uniform names that include each VM’s three digit numeric ID make it obvious which is which.
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
vmbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
Now look at this dumpster fire. Loopback is present, gif0 I recognize as some sort of tunnel, and I’m going to guess vmnet* have something to do with Parallels VMs, since I have three of them. There’s also TailScale running, that’ll add some sort of WireGuard tunnel.
But 28 interfaces total? WTH IS all this?
And you know what chaps my butt the most? This system has one ethernet dongle and one wifi interface. Why do I see …
Eight en[0-9] interfaces, the name that is used for both ethernet and wifi?
Eight interfaces listed in this order: 4,5,6,1,2,3,0,9?
What nefarious force made off with en7 & en8?
Why do I have to remove the dongle in order to find out its device?
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
anpi0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
anpi2: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
anpi1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en4: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en5: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en6: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
ena: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
en3: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
ap1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
awdl0: flags=8822<BROADCAST,SMART,SIMPLEX,MULTICAST> mtu 1500
llw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
utun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
utun3: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1000
utun4: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
en9: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
bridge100: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
vmeneta: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
vmenet0: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
vmenet1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
bridge101: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
Being cranky about having to diagnose stuff before I’ve had coffee, I decided to ask ChatGPT for an assist. That took one minute, as opposed to hours of reading posts by confused people on Stack Exchange in order to figure out what each one does.
So I’m slightly less mystified, and genuinely curious about why Apple Neural Processing Units need network interfaces. But here is a critique for which I doubt anyone can provide a good answer:
Why in the world are these not presented in alphabetic order? Why are the numeric extensions ascending for utun interfaces, but almost random for other interface types? Why are we not shown the active interfaces first, then the rest? Why are we not shown physical interfaces first, then virtual? Why are there so many ethernet devices, when this should logically correspond to the count of physical interfaces?
Addressing any one of those questions would make it easier to interpret the output.
Out of an abundant sense of curiosity, I booted my mobile only MacAir and found this mess. It’s objectively harder to sight read the output from this single physical interface no virtualization machine than my much busier desktop.
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
anpi1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
anpi0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en3: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en4: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ap1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
awdl0: flags=8822<BROADCAST,SMART,SIMPLEX,MULTICAST> mtu 1500
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
llw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
utun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
utun3: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1000