This regression occurred in the commit 091c92521ee22558bbc2adcdd8b18b213d818180 (`iphlpapi: Implement GetAdaptersAddresses() on top of nsi.`) This affects some dotnet core applications which make use of NetworkInterface.Supports which returns false when an interface supports IPv4 or IPv6.
-- v2: iphlpapi: Set Ipv4Enabled and Ipv6Enabled flags accordignly. iphlpapi/tests: Test for Ipv4Enabled and Ipv6Enabled flags.
From: Santino Mazza smazza@codeweavers.com
--- dlls/iphlpapi/tests/iphlpapi.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c index 1a0cb76bcf5..8364bf6a228 100644 --- a/dlls/iphlpapi/tests/iphlpapi.c +++ b/dlls/iphlpapi/tests/iphlpapi.c @@ -2544,6 +2544,10 @@ static void test_GetUnicastIpAddressEntry(void) row.Address.Ipv6.sin6_scope_id, row.ScopeId.Value); ok(row.CreationTimeStamp.QuadPart, "CreationTimeStamp is 0\n"); } + if(ua->Address.lpSockaddr->sa_family == AF_INET) + todo_wine ok(aa->Ipv4Enabled == TRUE, "expected Ipv4Enabled flag to be set in interface %ls\n", aa->FriendlyName); + else if(ua->Address.lpSockaddr->sa_family == AF_INET6) + todo_wine ok(aa->Ipv6Enabled == TRUE, "expected Ipv6Enabled flag to be set in interface %ls\n", aa->FriendlyName); ua = ua->Next; } }
From: Santino Mazza smazza@codeweavers.com
--- dlls/iphlpapi/iphlpapi_main.c | 2 ++ dlls/iphlpapi/tests/iphlpapi.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c index f8fb5de3f0e..6286c168277 100644 --- a/dlls/iphlpapi/iphlpapi_main.c +++ b/dlls/iphlpapi/iphlpapi_main.c @@ -959,12 +959,14 @@ static DWORD unicast_addresses_alloc( IP_ADAPTER_ADDRESSES *aa, ULONG family, UL { SOCKADDR_IN *in = (SOCKADDR_IN *)addr->Address.lpSockaddr; in->sin_addr = key4->addr; + aa->Ipv4Enabled = TRUE; } else { SOCKADDR_IN6 *in6 = (SOCKADDR_IN6 *)addr->Address.lpSockaddr; in6->sin6_addr = key6->addr; in6->sin6_scope_id = dyn[i].scope_id; + aa->Ipv6Enabled = TRUE; } addr->PrefixOrigin = rw[i].prefix_origin; addr->SuffixOrigin = rw[i].suffix_origin; diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c index 8364bf6a228..865c12f94e5 100644 --- a/dlls/iphlpapi/tests/iphlpapi.c +++ b/dlls/iphlpapi/tests/iphlpapi.c @@ -2545,9 +2545,9 @@ static void test_GetUnicastIpAddressEntry(void) ok(row.CreationTimeStamp.QuadPart, "CreationTimeStamp is 0\n"); } if(ua->Address.lpSockaddr->sa_family == AF_INET) - todo_wine ok(aa->Ipv4Enabled == TRUE, "expected Ipv4Enabled flag to be set in interface %ls\n", aa->FriendlyName); + ok(aa->Ipv4Enabled == TRUE, "expected Ipv4Enabled flag to be set in interface %ls\n", aa->FriendlyName); else if(ua->Address.lpSockaddr->sa_family == AF_INET6) - todo_wine ok(aa->Ipv6Enabled == TRUE, "expected Ipv6Enabled flag to be set in interface %ls\n", aa->FriendlyName); + ok(aa->Ipv6Enabled == TRUE, "expected Ipv6Enabled flag to be set in interface %ls\n", aa->FriendlyName); ua = ua->Next; } }
Huw Davies (@huw) commented about dlls/iphlpapi/tests/iphlpapi.c:
row.Address.Ipv6.sin6_scope_id, row.ScopeId.Value); ok(row.CreationTimeStamp.QuadPart, "CreationTimeStamp is 0\n"); }
if(ua->Address.lpSockaddr->sa_family == AF_INET)
todo_wine ok(aa->Ipv4Enabled == TRUE, "expected Ipv4Enabled flag to be set in interface %ls\n", aa->FriendlyName);
else if(ua->Address.lpSockaddr->sa_family == AF_INET6)
todo_wine ok(aa->Ipv6Enabled == TRUE, "expected Ipv6Enabled flag to be set in interface %ls\n", aa->FriendlyName);
Could these test be moved to the `while (ua)` loop of `test_GetAdaptersAddresses()` since we're testing `GetAdaptersAddresses()` not `GetUnicastIpAddressEntry()`?