On Tue, Apr 6, 2021 at 5:17 PM Jason A. Donenfeld <[email protected]> wrote: > It's pretty typical behavior on Windows for IP addresses to be > exclusive per interface. WireGuard for Windows does something similar: > https://git.zx2c4.com/wireguard-windows/tree/tunnel/addressconfig.go#n22
Thank you! That's very interesting. Following David's initial implementation, I wrote something for OpenConnect that's pretty much the same as yours: https://gitlab.com/openconnect/openconnect/-/compare/5e6e9b850756157164f83cd4fedafb747fbbd50f...0bca5b32ac478b5d03b6e88f96bf29c6556610a5 1. Uses GetAdaptersAddresses to list all the addresses 2. If/when it finds a clashing address, it uses GetUnicastIpAddressTable to determine the up/down state of the other interface 3. Only delete the address from the other interface if it's non-UP. I was also annoyed that the GetAdaptersAddresses return structure doesn't provide the adapter state, and that I had to go for this convoluted O(n^2) design. I guess this reassures me that there isn't an obviously-better way to do it. Dan
