On Thu, 25 Feb 2016, Patrick McManus wrote:

the remedies are backwards looking (flush caches, close connections etc).. so the phrasing about the hash was probably too lazy, but perhaps the basic idea has merit?

We can certainly use a hash to figure out that we're dealing with a "yo-yo interface", but what to do with that information is the tricky part.

I'm currently thinking of a few different routes of exploration:

1. check the routing table (updates) to better figure out when an adapter is removed but doesn't affect the routing as then it shouldn't need to cause a network change. Then it would also have to not signal a network change on a new adapter until it gets routing added to it. I don't really know what the Teredo adapters get in terms of routing by default - and especially not for these yo-yo setups.

2. check data counters for the particular adapter so an unused adapter can be ignored when removed. This will obvsiously not affect new adapters so it'll only address half the problem.

3. Use of a hash to store added and removed adapters and keep them around for N minutes (I'm thinking 300 seconds to start with). If an adapter is added/removed and its name is already in the hash, it's a yo-yo and we ignore it. It is a bit harsh and risky but... We could potentially work on a scheme where the N value changes over time to adapt.

4. Short-term and the most abrupt: disable (behind a pref) the use of NotifyIpInterfaceChange. It makes Firefox go back to the old NotifyAddrChange() method which doesn't have this problem - mostly because it doesn't support IPv6. Incidentally, Chrome only uses NotifyAddrChange to detect network changes.

--

 / daniel.haxx.se
_______________________________________________
dev-tech-network mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-network

Reply via email to