Commit 910d5852 (iphlpapi: Return ERROR_NO_DATA from GetIpNetTable() if no entries are found.) introduced a regression in Roon application. It looks like the app doesn't tolerate an error return from GetIpNetTable() if there are active interfaces found. The blamed patch still looks correct to me per se, that is, if number of entries ends up being zero Windows returns ERROR_NO_DATA. However, number of entries is never zero on Windows if there is any network adapter.
There are two things why Windows always has some arp entries and we do not:
- We currently parse /proc/net/arp line on Linux a bit wrong and end up getting no entries from there (patch 1 fixes that);
- With the patch patch 1 there Roon seems happy (at least as far as I could test it right at start), at least as long we have an entry in /proc/sys/net (which might not be necessarily the case if there is, e. g., no actual network connection). But that breaks SCP: Secret Laboratory again the same way as before 910d5852. It turns out the latter game depends on GetIpNetTable() returning at least 4 entries when returning success (for some reason, I am not sure why but I think I saw that quite clearly). And both apps can actually work reliably on Windows as there are always at least 4 static arp entries if there is any network adaptere configured at all.
There are "188.8.131.52" and "184.108.40.206" static arp multicast entries which are always there for any interface on Windows, including loopback (starting from Win10; earlier versions might be missing "220.127.116.11" but have "18.104.22.168"). So adding those like on Windows should hopefully fix all those cases.