From 63f34eda73f1a431f2207d8a6ca33d182e1bb4a1 Mon Sep 17 00:00:00 2001 From: Nate Jiang Date: Wed, 20 May 2020 23:22:51 -0700 Subject: [PATCH] Fix NAN validate interface existence Bug: 156879576 Test: atest android.hardware.wifi@1.0-service-tests Change-Id: I8505e343f5b2ea5ea522cbb2ea344ff8914aea3d --- wifi/1.4/default/tests/mock_wifi_iface_util.h | 1 + wifi/1.4/default/tests/wifi_chip_unit_tests.cpp | 2 ++ wifi/1.4/default/wifi_chip.cpp | 3 +-- wifi/1.4/default/wifi_iface_util.cpp | 5 +++++ wifi/1.4/default/wifi_iface_util.h | 1 + 5 files changed, 10 insertions(+), 2 deletions(-) diff --git a/wifi/1.4/default/tests/mock_wifi_iface_util.h b/wifi/1.4/default/tests/mock_wifi_iface_util.h index 3b36f13b37..8d77a7d9d0 100644 --- a/wifi/1.4/default/tests/mock_wifi_iface_util.h +++ b/wifi/1.4/default/tests/mock_wifi_iface_util.h @@ -41,6 +41,7 @@ class MockWifiIfaceUtil : public WifiIfaceUtil { void(const std::string&, IfaceEventHandlers)); MOCK_METHOD1(unregisterIfaceEventHandlers, void(const std::string&)); MOCK_METHOD2(setUpState, bool(const std::string&, bool)); + MOCK_METHOD1(ifNameToIndex, unsigned(const std::string&)); }; } // namespace iface_util } // namespace implementation diff --git a/wifi/1.4/default/tests/wifi_chip_unit_tests.cpp b/wifi/1.4/default/tests/wifi_chip_unit_tests.cpp index d5b1a50ca6..323d2ffa81 100644 --- a/wifi/1.4/default/tests/wifi_chip_unit_tests.cpp +++ b/wifi/1.4/default/tests/wifi_chip_unit_tests.cpp @@ -787,6 +787,8 @@ TEST_F(WifiChipV2_AwareIfaceCombinationTest, CreateNanWithDedicatedNanIface) { property_set("wifi.aware.interface", "aware0"); findModeAndConfigureForIfaceType(IfaceType::STA); ASSERT_EQ(createIface(IfaceType::STA), "wlan0"); + EXPECT_CALL(*iface_util_, ifNameToIndex("aware0")) + .WillOnce(testing::Return(4)); EXPECT_CALL(*iface_util_, setUpState("aware0", true)) .WillOnce(testing::Return(true)); ASSERT_EQ(createIface(IfaceType::NAN), "aware0"); diff --git a/wifi/1.4/default/wifi_chip.cpp b/wifi/1.4/default/wifi_chip.cpp index fa4f354e62..8747e61992 100644 --- a/wifi/1.4/default/wifi_chip.cpp +++ b/wifi/1.4/default/wifi_chip.cpp @@ -19,7 +19,6 @@ #include #include #include -#include #include #include @@ -886,7 +885,7 @@ std::pair> WifiChip::createNanIfaceInternal() { } bool is_dedicated_iface = true; std::string ifname = getNanIfaceName(); - if (ifname.empty() || if_nametoindex(ifname.c_str())) { + if (ifname.empty() || !iface_util_.lock()->ifNameToIndex(ifname)) { // Use the first shared STA iface (wlan0) if a dedicated aware iface is // not defined. ifname = getFirstActiveWlanIfaceName(); diff --git a/wifi/1.4/default/wifi_iface_util.cpp b/wifi/1.4/default/wifi_iface_util.cpp index 13ba0225d1..49b76747d6 100644 --- a/wifi/1.4/default/wifi_iface_util.cpp +++ b/wifi/1.4/default/wifi_iface_util.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#include #include #include #include @@ -122,6 +123,10 @@ bool WifiIfaceUtil::setUpState(const std::string& iface_name, bool request_up) { } return true; } + +unsigned WifiIfaceUtil::ifNameToIndex(const std::string& iface_name) { + return if_nametoindex(iface_name.c_str()); +} } // namespace iface_util } // namespace implementation } // namespace V1_4 diff --git a/wifi/1.4/default/wifi_iface_util.h b/wifi/1.4/default/wifi_iface_util.h index f83d717bf6..126b6ca599 100644 --- a/wifi/1.4/default/wifi_iface_util.h +++ b/wifi/1.4/default/wifi_iface_util.h @@ -57,6 +57,7 @@ class WifiIfaceUtil { IfaceEventHandlers handlers); virtual void unregisterIfaceEventHandlers(const std::string& iface_name); virtual bool setUpState(const std::string& iface_name, bool request_up); + virtual unsigned ifNameToIndex(const std::string& iface_name); private: std::array createRandomMacAddress();