Jonathan Nobels a714d402f2 net/netmon: add netmon hook for os-derived network change notifications
Update tailscale/corp#20677

While hunting down DNS issues, it was observed that
on apple platforms, w attempt to rebind to interfaces before they're
completely configured by the system.

The AF_ROUTE messages aren't lying, they're just not
taking into account other setup that has to happen,
notably the system setting the interface nameservers.
When we react based on the route updates, it's often
too quickly.  This happens frequently on wakes-from-sleep.

This replumbs netmon so that (optionally) rather than reacting to every
system message by checking for interesting changes, we
use that only to update our state, and recheck for interesting
network changes when we get a poke from the upper layers
indicating that a network change has 'completed'.  Notably on
Apple, NWPathMonitor seems to call us back at the correct
time(s) to check for potentially interesting interface changes
that have been observed via AF_ROUTE and to react to them.

This seems to reduce thrashing during network
transitions, and avoids some of the bad states we were
previously ending up in.

This is entirely opt in during the construction of the netmon
and will have no effect until/unless a specific client chooses
to use it.

Signed-off-by: Jonathan Nobels <jonathan@tailscale.com>
2024-08-21 17:56:30 -04:00
..
2024-04-16 15:32:38 -07:00
2024-04-16 15:32:38 -07:00
2024-07-08 19:10:44 -07:00
2024-08-03 11:38:00 -07:00
2024-06-05 15:24:04 -07:00
2024-08-05 09:25:24 -07:00
2024-04-16 15:32:38 -07:00