Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/base/network_interfaces.h" | 5 #include "net/base/network_interfaces.h" |
| 6 | 6 |
| 7 #include <ostream> | 7 #include <ostream> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <unordered_set> | 9 #include <unordered_set> |
| 10 | 10 |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 29 #include <netinet/in_var.h> | 29 #include <netinet/in_var.h> |
| 30 #endif // !OS_IOS | 30 #endif // !OS_IOS |
| 31 #endif // OS_MACOSX | 31 #endif // OS_MACOSX |
| 32 #endif // !OS_NACL && !OS_WIN | 32 #endif // !OS_NACL && !OS_WIN |
| 33 #include "testing/gtest/include/gtest/gtest.h" | 33 #include "testing/gtest/include/gtest/gtest.h" |
| 34 #include "url/gurl.h" | 34 #include "url/gurl.h" |
| 35 | 35 |
| 36 #if defined(OS_WIN) | 36 #if defined(OS_WIN) |
| 37 #include <iphlpapi.h> | 37 #include <iphlpapi.h> |
| 38 #include <objbase.h> | 38 #include <objbase.h> |
| 39 #include "base/win/windows_version.h" | |
| 40 #endif // OS_WIN | 39 #endif // OS_WIN |
| 41 | 40 |
| 42 #if !defined(OS_MACOSX) && !defined(OS_NACL) && !defined(OS_WIN) | 41 #if !defined(OS_MACOSX) && !defined(OS_NACL) && !defined(OS_WIN) |
| 43 #include "net/base/address_tracker_linux.h" | 42 #include "net/base/address_tracker_linux.h" |
| 44 #endif // !OS_MACOSX && !OS_NACL && !OS_WIN | 43 #endif // !OS_MACOSX && !OS_NACL && !OS_WIN |
| 45 | 44 |
| 46 #if defined(OS_WIN) | 45 #if defined(OS_WIN) |
| 47 #include "net/base/network_interfaces_win.h" | 46 #include "net/base/network_interfaces_win.h" |
| 48 #else // OS_WIN | 47 #else // OS_WIN |
| 49 #include "net/base/network_interfaces_posix.h" | 48 #include "net/base/network_interfaces_posix.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 131 | 130 |
| 132 // Verify that the address is correct. | 131 // Verify that the address is correct. |
| 133 EXPECT_TRUE(it->address.IsValid()) << "Invalid address of size " | 132 EXPECT_TRUE(it->address.IsValid()) << "Invalid address of size " |
| 134 << it->address.size(); | 133 << it->address.size(); |
| 135 EXPECT_FALSE(it->address.IsZero()); | 134 EXPECT_FALSE(it->address.IsZero()); |
| 136 EXPECT_GT(it->prefix_length, 1u); | 135 EXPECT_GT(it->prefix_length, 1u); |
| 137 EXPECT_LE(it->prefix_length, it->address.size() * 8); | 136 EXPECT_LE(it->prefix_length, it->address.size() * 8); |
| 138 | 137 |
| 139 #if defined(OS_WIN) | 138 #if defined(OS_WIN) |
| 140 // On Windows |name| is NET_LUID. | 139 // On Windows |name| is NET_LUID. |
| 141 base::ScopedNativeLibrary phlpapi_lib( | 140 NET_LUID luid; |
| 142 base::FilePath(FILE_PATH_LITERAL("iphlpapi.dll"))); | 141 EXPECT_EQ(static_cast<DWORD>(NO_ERROR), |
| 143 ASSERT_TRUE(phlpapi_lib.is_valid()); | 142 ConvertInterfaceIndexToLuid(it->interface_index, &luid)); |
| 144 typedef NETIO_STATUS (WINAPI* ConvertInterfaceIndexToLuid)(NET_IFINDEX, | 143 GUID guid; |
| 145 PNET_LUID); | 144 EXPECT_EQ(static_cast<DWORD>(NO_ERROR), |
| 146 ConvertInterfaceIndexToLuid interface_to_luid = | 145 ConvertInterfaceLuidToGuid(&luid, &guid)); |
| 147 reinterpret_cast<ConvertInterfaceIndexToLuid>( | 146 LPOLESTR name; |
| 148 phlpapi_lib.GetFunctionPointer("ConvertInterfaceIndexToLuid")); | 147 StringFromCLSID(guid, &name); |
| 148 EXPECT_STREQ(base::UTF8ToWide(it->name).c_str(), name); | |
| 149 CoTaskMemFree(name); | |
| 149 | 150 |
| 150 typedef NETIO_STATUS (WINAPI* ConvertInterfaceLuidToGuid)(NET_LUID*, | |
| 151 GUID*); | |
| 152 ConvertInterfaceLuidToGuid luid_to_guid = | |
| 153 reinterpret_cast<ConvertInterfaceLuidToGuid>( | |
| 154 phlpapi_lib.GetFunctionPointer("ConvertInterfaceLuidToGuid")); | |
| 155 | |
| 156 if (interface_to_luid && luid_to_guid) { | |
| 157 NET_LUID luid; | |
| 158 EXPECT_EQ(static_cast<DWORD>(NO_ERROR), | |
| 159 interface_to_luid(it->interface_index, &luid)); | |
| 160 GUID guid; | |
| 161 EXPECT_EQ(static_cast<DWORD>(NO_ERROR), luid_to_guid(&luid, &guid)); | |
| 162 LPOLESTR name; | |
| 163 StringFromCLSID(guid, &name); | |
| 164 EXPECT_STREQ(base::UTF8ToWide(it->name).c_str(), name); | |
| 165 CoTaskMemFree(name); | |
| 166 continue; | |
| 167 } else { | |
| 168 EXPECT_LT(base::win::GetVersion(), base::win::VERSION_VISTA); | |
| 169 EXPECT_LT(it->interface_index, 1u << 24u); // Must fit 0.x.x.x. | |
| 170 EXPECT_NE(it->interface_index, 0u); // 0 means to use default. | |
| 171 } | |
| 172 if (it->type == NetworkChangeNotifier::CONNECTION_WIFI) { | 151 if (it->type == NetworkChangeNotifier::CONNECTION_WIFI) { |
| 173 EXPECT_NE(WIFI_PHY_LAYER_PROTOCOL_NONE, GetWifiPHYLayerProtocol()); | 152 EXPECT_NE(WIFI_PHY_LAYER_PROTOCOL_NONE, GetWifiPHYLayerProtocol()); |
| 174 } | 153 } |
|
mmenke
2016/05/19 15:02:37
Hrm...This code wasn't being run on non-XP systems
| |
| 175 #elif !defined(OS_ANDROID) | 154 #elif !defined(OS_ANDROID) |
| 176 char name[IF_NAMESIZE]; | 155 char name[IF_NAMESIZE]; |
| 177 EXPECT_TRUE(if_indextoname(it->interface_index, name)); | 156 EXPECT_TRUE(if_indextoname(it->interface_index, name)); |
| 178 EXPECT_STREQ(it->name.c_str(), name); | 157 EXPECT_STREQ(it->name.c_str(), name); |
| 179 #endif | 158 #endif |
| 180 } | 159 } |
| 181 } | 160 } |
| 182 | 161 |
| 183 static const char ifname_em1[] = "em1"; | 162 static const char ifname_em1[] = "em1"; |
| 184 #if defined(OS_WIN) | 163 #if defined(OS_WIN) |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 483 adapter_address.FirstPrefix = &adapter_prefix; | 462 adapter_address.FirstPrefix = &adapter_prefix; |
| 484 | 463 |
| 485 // Address of offline links should be ignored. | 464 // Address of offline links should be ignored. |
| 486 ASSERT_TRUE(FillAdapterAddress( | 465 ASSERT_TRUE(FillAdapterAddress( |
| 487 &adapter_address /* adapter_address */, ifname_em1 /* ifname */, | 466 &adapter_address /* adapter_address */, ifname_em1 /* ifname */, |
| 488 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, | 467 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, |
| 489 addresses /* sock_addrs */)); | 468 addresses /* sock_addrs */)); |
| 490 adapter_address.OperStatus = IfOperStatusDown; | 469 adapter_address.OperStatus = IfOperStatusDown; |
| 491 | 470 |
| 492 EXPECT_TRUE(internal::GetNetworkListImpl( | 471 EXPECT_TRUE(internal::GetNetworkListImpl( |
| 493 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, true, &adapter_address)); | 472 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &adapter_address)); |
| 494 | 473 |
| 495 EXPECT_EQ(results.size(), 0ul); | 474 EXPECT_EQ(results.size(), 0ul); |
| 496 | 475 |
| 497 // Address on loopback interface should be trimmed out. | 476 // Address on loopback interface should be trimmed out. |
| 498 ASSERT_TRUE(FillAdapterAddress( | 477 ASSERT_TRUE(FillAdapterAddress( |
| 499 &adapter_address /* adapter_address */, ifname_em1 /* ifname */, | 478 &adapter_address /* adapter_address */, ifname_em1 /* ifname */, |
| 500 ipv6_local_address /* ip_address */, ipv6_prefix /* ip_netmask */, | 479 ipv6_local_address /* ip_address */, ipv6_prefix /* ip_netmask */, |
| 501 addresses /* sock_addrs */)); | 480 addresses /* sock_addrs */)); |
| 502 adapter_address.IfType = IF_TYPE_SOFTWARE_LOOPBACK; | 481 adapter_address.IfType = IF_TYPE_SOFTWARE_LOOPBACK; |
| 503 | 482 |
| 504 EXPECT_TRUE(internal::GetNetworkListImpl( | 483 EXPECT_TRUE(internal::GetNetworkListImpl( |
| 505 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, true, &adapter_address)); | 484 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &adapter_address)); |
| 506 EXPECT_EQ(results.size(), 0ul); | 485 EXPECT_EQ(results.size(), 0ul); |
| 507 | 486 |
| 508 // vmware address should return by default. | 487 // vmware address should return by default. |
| 509 ASSERT_TRUE(FillAdapterAddress( | 488 ASSERT_TRUE(FillAdapterAddress( |
| 510 &adapter_address /* adapter_address */, ifname_vm /* ifname */, | 489 &adapter_address /* adapter_address */, ifname_vm /* ifname */, |
| 511 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, | 490 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, |
| 512 addresses /* sock_addrs */)); | 491 addresses /* sock_addrs */)); |
| 513 EXPECT_TRUE(internal::GetNetworkListImpl( | 492 EXPECT_TRUE(internal::GetNetworkListImpl( |
| 514 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, true, &adapter_address)); | 493 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &adapter_address)); |
| 515 EXPECT_EQ(results.size(), 1ul); | 494 EXPECT_EQ(results.size(), 1ul); |
| 516 EXPECT_EQ(results[0].name, ifname_vm); | 495 EXPECT_EQ(results[0].name, ifname_vm); |
| 517 EXPECT_EQ(results[0].prefix_length, 1ul); | 496 EXPECT_EQ(results[0].prefix_length, 1ul); |
| 518 EXPECT_EQ(results[0].address, ipv6_address); | 497 EXPECT_EQ(results[0].address, ipv6_address); |
| 519 EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_NONE); | 498 EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_NONE); |
| 520 results.clear(); | 499 results.clear(); |
| 521 | 500 |
| 522 // vmware address should be trimmed out if policy specified so. | 501 // vmware address should be trimmed out if policy specified so. |
| 523 ASSERT_TRUE(FillAdapterAddress( | 502 ASSERT_TRUE(FillAdapterAddress( |
| 524 &adapter_address /* adapter_address */, ifname_vm /* ifname */, | 503 &adapter_address /* adapter_address */, ifname_vm /* ifname */, |
| 525 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, | 504 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, |
| 526 addresses /* sock_addrs */)); | 505 addresses /* sock_addrs */)); |
| 527 EXPECT_TRUE(internal::GetNetworkListImpl( | 506 EXPECT_TRUE(internal::GetNetworkListImpl( |
| 528 &results, EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, true, &adapter_address)); | 507 &results, EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &adapter_address)); |
| 529 EXPECT_EQ(results.size(), 0ul); | 508 EXPECT_EQ(results.size(), 0ul); |
| 530 results.clear(); | 509 results.clear(); |
| 531 | 510 |
| 532 // Addresses with incompleted DAD should be ignored. | 511 // Addresses with incompleted DAD should be ignored. |
| 533 ASSERT_TRUE(FillAdapterAddress( | 512 ASSERT_TRUE(FillAdapterAddress( |
| 534 &adapter_address /* adapter_address */, ifname_em1 /* ifname */, | 513 &adapter_address /* adapter_address */, ifname_em1 /* ifname */, |
| 535 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, | 514 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, |
| 536 addresses /* sock_addrs */)); | 515 addresses /* sock_addrs */)); |
| 537 adapter_address.FirstUnicastAddress->DadState = IpDadStateTentative; | 516 adapter_address.FirstUnicastAddress->DadState = IpDadStateTentative; |
| 538 | 517 |
| 539 EXPECT_TRUE(internal::GetNetworkListImpl( | 518 EXPECT_TRUE(internal::GetNetworkListImpl( |
| 540 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, true, &adapter_address)); | 519 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &adapter_address)); |
| 541 EXPECT_EQ(results.size(), 0ul); | 520 EXPECT_EQ(results.size(), 0ul); |
| 542 results.clear(); | 521 results.clear(); |
| 543 | 522 |
| 544 // Addresses with allowed attribute IpSuffixOriginRandom should be returned | 523 // Addresses with allowed attribute IpSuffixOriginRandom should be returned |
| 545 // and attributes should be translated correctly to | 524 // and attributes should be translated correctly to |
| 546 // IP_ADDRESS_ATTRIBUTE_TEMPORARY. | 525 // IP_ADDRESS_ATTRIBUTE_TEMPORARY. |
| 547 ASSERT_TRUE(FillAdapterAddress( | 526 ASSERT_TRUE(FillAdapterAddress( |
| 548 &adapter_address /* adapter_address */, ifname_em1 /* ifname */, | 527 &adapter_address /* adapter_address */, ifname_em1 /* ifname */, |
| 549 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, | 528 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, |
| 550 addresses /* sock_addrs */)); | 529 addresses /* sock_addrs */)); |
| 551 adapter_address.FirstUnicastAddress->PrefixOrigin = | 530 adapter_address.FirstUnicastAddress->PrefixOrigin = |
| 552 IpPrefixOriginRouterAdvertisement; | 531 IpPrefixOriginRouterAdvertisement; |
| 553 adapter_address.FirstUnicastAddress->SuffixOrigin = IpSuffixOriginRandom; | 532 adapter_address.FirstUnicastAddress->SuffixOrigin = IpSuffixOriginRandom; |
| 554 | 533 |
| 555 EXPECT_TRUE(internal::GetNetworkListImpl( | 534 EXPECT_TRUE(internal::GetNetworkListImpl( |
| 556 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, true, &adapter_address)); | 535 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &adapter_address)); |
| 557 EXPECT_EQ(results.size(), 1ul); | 536 EXPECT_EQ(results.size(), 1ul); |
| 558 EXPECT_EQ(results[0].name, ifname_em1); | 537 EXPECT_EQ(results[0].name, ifname_em1); |
| 559 EXPECT_EQ(results[0].prefix_length, 1ul); | 538 EXPECT_EQ(results[0].prefix_length, 1ul); |
| 560 EXPECT_EQ(results[0].address, ipv6_address); | 539 EXPECT_EQ(results[0].address, ipv6_address); |
| 561 EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_TEMPORARY); | 540 EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_TEMPORARY); |
| 562 results.clear(); | 541 results.clear(); |
| 563 | 542 |
| 564 // Addresses with preferred lifetime 0 should be returned and | 543 // Addresses with preferred lifetime 0 should be returned and |
| 565 // attributes should be translated correctly to | 544 // attributes should be translated correctly to |
| 566 // IP_ADDRESS_ATTRIBUTE_DEPRECATED. | 545 // IP_ADDRESS_ATTRIBUTE_DEPRECATED. |
| 567 ASSERT_TRUE(FillAdapterAddress( | 546 ASSERT_TRUE(FillAdapterAddress( |
| 568 &adapter_address /* adapter_address */, ifname_em1 /* ifname */, | 547 &adapter_address /* adapter_address */, ifname_em1 /* ifname */, |
| 569 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, | 548 ipv6_address /* ip_address */, ipv6_prefix /* ip_netmask */, |
| 570 addresses /* sock_addrs */)); | 549 addresses /* sock_addrs */)); |
| 571 adapter_address.FirstUnicastAddress->PreferredLifetime = 0; | 550 adapter_address.FirstUnicastAddress->PreferredLifetime = 0; |
| 572 adapter_address.FriendlyName = const_cast<PWCHAR>(L"FriendlyInterfaceName"); | 551 adapter_address.FriendlyName = const_cast<PWCHAR>(L"FriendlyInterfaceName"); |
| 573 EXPECT_TRUE(internal::GetNetworkListImpl( | 552 EXPECT_TRUE(internal::GetNetworkListImpl( |
| 574 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, true, &adapter_address)); | 553 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &adapter_address)); |
| 575 EXPECT_EQ(results.size(), 1ul); | 554 EXPECT_EQ(results.size(), 1ul); |
| 576 EXPECT_EQ(results[0].friendly_name, "FriendlyInterfaceName"); | 555 EXPECT_EQ(results[0].friendly_name, "FriendlyInterfaceName"); |
| 577 EXPECT_EQ(results[0].name, ifname_em1); | 556 EXPECT_EQ(results[0].name, ifname_em1); |
| 578 EXPECT_EQ(results[0].prefix_length, 1ul); | 557 EXPECT_EQ(results[0].prefix_length, 1ul); |
| 579 EXPECT_EQ(results[0].address, ipv6_address); | 558 EXPECT_EQ(results[0].address, ipv6_address); |
| 580 EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_DEPRECATED); | 559 EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_DEPRECATED); |
| 581 results.clear(); | 560 results.clear(); |
| 582 } | 561 } |
| 583 | 562 |
| 584 #endif // !OS_MACOSX && !OS_WIN && !OS_NACL | 563 #endif // !OS_MACOSX && !OS_WIN && !OS_NACL |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 742 // We can't check the result of GetHostName() directly, since the result | 721 // We can't check the result of GetHostName() directly, since the result |
| 743 // will differ across machines. Our goal here is to simply exercise the | 722 // will differ across machines. Our goal here is to simply exercise the |
| 744 // code path, and check that things "look about right". | 723 // code path, and check that things "look about right". |
| 745 std::string hostname = GetHostName(); | 724 std::string hostname = GetHostName(); |
| 746 EXPECT_FALSE(hostname.empty()); | 725 EXPECT_FALSE(hostname.empty()); |
| 747 } | 726 } |
| 748 | 727 |
| 749 } // namespace | 728 } // namespace |
| 750 | 729 |
| 751 } // namespace net | 730 } // namespace net |
| OLD | NEW |