I’m encountering a persistent issue with my Network Extension (specifically NEFilterDataProvider) and would really appreciate any insights.
The extension generally works as expected, but after some time — especially after sleep/wake cycles or network changes — a global network outage occurs. During this state, no network traffic works: pings fail, browsers can’t load pages, etc. As soon as I stop the extension (by disabling it in System Preferences), the network immediately recovers. If I re-enable it, the outage returns instantly.
I’ve also noticed that once this happens, the extension stops receiving callbacks like handleNewFlow(), and reinstalling the app or restarting the extension doesn’t help. The only thing that resolves the issue is rebooting the system. After reboot, the extension works fine again — until the problem reoccurs later.
I asked AI about this behavior, and it suggested the possibility that the kernel might have marked the extension as untrusted, causing the system to intentionally block all network traffic as a safety mechanism.
Has anyone experienced similar behavior with NEFilterDataProvider? Could there be a way to detect or prevent this state without rebooting? Is there any logging or diagnostic data I should collect when it happens again?
Any guidance or pointers would be greatly appreciated. Thanks in advance!
I’m presuming that this is on the Mac. If not, lemme know.
it suggested the possibility that the kernel might have marked the extension as untrusted
That’s nonsense.
As to the actual cause, it’s hard to say. I’ve definitely seen similar reports, but I don’t remember the resolution.
As soon as I stop the extension … the network immediately recovers
Does that terminate your sysex process?
If it does, then that’s a strong indicating of an OS-level bug, because something in the OS is holding on to the bad state that causes the problem to come back when your start your filter again.
OTOH, if it doesn’t then it’s possible that the bad state in being stored within your sysex process. In that case — and this is only as an experiment not as an actual workaround — try killing that process. Does that clear the bad state and allow your filter to function again?
Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"