Fix GetAdapterAddresses flags bug

Retrieve adapters by skipping multicast and IPv6 unicast addresses.

Change-Id: I09d6e3593111c200a15f5713d6f4f676a3bcbb6a
This commit is contained in:
Cosmin Poieana 2015-04-06 18:47:59 +03:00
parent b56f0d2aa7
commit 1b28f141dc
3 changed files with 11 additions and 6 deletions

View File

@ -171,9 +171,12 @@ class WindowsNetworkUtilsTests(unittest.TestCase):
(mock_socket_addr_to_str.return_value,
unicast_addr.Address.lpSockaddr.contents.sa_family)]
filter_flags = (self.network.iphlpapi.GAA_FLAG_SKIP_ANYCAST |
self.network.iphlpapi.GAA_FLAG_SKIP_MULTICAST)
compare_GetAdaptersAddresses = [mock.call(
self.network.ws2_32.AF_UNSPEC,
self.network.iphlpapi.GAA_FLAG_SKIP_ANYCAST,
filter_flags,
None, None, mock_byref.return_value)]
if not p:
@ -187,7 +190,7 @@ class WindowsNetworkUtilsTests(unittest.TestCase):
compare_GetAdaptersAddresses.append(mock.call(
self.network.ws2_32.AF_UNSPEC,
self.network.iphlpapi.GAA_FLAG_SKIP_ANYCAST, None,
filter_flags, None,
p_curr_addr, mock_byref.return_value))
else:
@ -208,7 +211,7 @@ class WindowsNetworkUtilsTests(unittest.TestCase):
compare_GetAdaptersAddresses.append(mock.call(
self.network.ws2_32.AF_UNSPEC,
self.network.iphlpapi.GAA_FLAG_SKIP_ANYCAST, None,
filter_flags, None,
p_curr_addr, mock_byref.return_value))
if ret_val2 == self.network.kernel32.ERROR_NO_DATA:

View File

@ -25,7 +25,7 @@ MAX_ADAPTER_DESCRIPTION_LENGTH = 128
MAX_ADAPTER_ADDRESS_LENGTH = 8
GAA_FLAG_SKIP_ANYCAST = 2
GAA_FLAG_SKIP_ANYCAST = 4
GAA_FLAG_SKIP_MULTICAST = 4
IP_ADAPTER_DHCP_ENABLED = 4
IP_ADAPTER_IPV4_ENABLED = 0x80

View File

@ -67,11 +67,13 @@ def _get_registry_dhcp_server(adapter_name):
def get_adapter_addresses():
net_adapters = []
filter_flags = (iphlpapi.GAA_FLAG_SKIP_ANYCAST |
iphlpapi.GAA_FLAG_SKIP_MULTICAST)
size = wintypes.ULONG()
ret_val = iphlpapi.GetAdaptersAddresses(
ws2_32.AF_UNSPEC,
iphlpapi.GAA_FLAG_SKIP_ANYCAST,
filter_flags,
None, None, ctypes.byref(size))
if ret_val == kernel32.ERROR_NO_DATA:
@ -91,7 +93,7 @@ def get_adapter_addresses():
ret_val = iphlpapi.GetAdaptersAddresses(
ws2_32.AF_UNSPEC,
iphlpapi.GAA_FLAG_SKIP_ANYCAST,
filter_flags,
None, p_addr, ctypes.byref(size))
if ret_val == kernel32.ERROR_NO_DATA: