From c92aa85a6efe9ac46fa239a621c6b7882ff38992 Mon Sep 17 00:00:00 2001 From: lesl Date: Mon, 16 Nov 2020 15:20:33 +0800 Subject: [PATCH] wiif: Add AP bridge operations support (AP+AP Part 2) AP+AP Part 2 includes: 1. Support bridge in libwifi_system_iface 2. WifiHal a. createApIface_1_5 (Support create bridge mode AP) b. removeApIface_1_5 (Support remove one of the instance in bridge) 3. Framework: Create bridge AP when multi-bands configured. Bug: 162686273 Test: Manual Test (SAP enable normally) Change-Id: I518417add566ce4780a7e2e83af14460e6e8a217 --- wifi/1.5/default/wifi_iface_util.cpp | 30 ++++++++++++++++++++++++++++ wifi/1.5/default/wifi_iface_util.h | 10 ++++++++++ 2 files changed, 40 insertions(+) diff --git a/wifi/1.5/default/wifi_iface_util.cpp b/wifi/1.5/default/wifi_iface_util.cpp index 07175e489f..2a0aef8906 100644 --- a/wifi/1.5/default/wifi_iface_util.cpp +++ b/wifi/1.5/default/wifi_iface_util.cpp @@ -127,6 +127,36 @@ bool WifiIfaceUtil::setUpState(const std::string& iface_name, bool request_up) { unsigned WifiIfaceUtil::ifNameToIndex(const std::string& iface_name) { return if_nametoindex(iface_name.c_str()); } + +bool WifiIfaceUtil::createBridge(const std::string& br_name) { + if (!iface_tool_.lock()->createBridge(br_name)) { + return false; + } + + if (!iface_tool_.lock()->SetUpState(br_name.c_str(), true)) { + LOG(ERROR) << "bridge SetUpState(true) failed."; + } + return true; +} + +bool WifiIfaceUtil::deleteBridge(const std::string& br_name) { + if (!iface_tool_.lock()->SetUpState(br_name.c_str(), false)) { + LOG(INFO) << "SetUpState(false) failed for bridge=" << br_name.c_str(); + } + + return iface_tool_.lock()->deleteBridge(br_name); +} + +bool WifiIfaceUtil::addIfaceToBridge(const std::string& br_name, + const std::string& if_name) { + return iface_tool_.lock()->addIfaceToBridge(br_name, if_name); +} + +bool WifiIfaceUtil::removeIfaceFromBridge(const std::string& br_name, + const std::string& if_name) { + return iface_tool_.lock()->removeIfaceFromBridge(br_name, if_name); +} + } // namespace iface_util } // namespace implementation } // namespace V1_5 diff --git a/wifi/1.5/default/wifi_iface_util.h b/wifi/1.5/default/wifi_iface_util.h index 7b812fa7d6..296d1821d0 100644 --- a/wifi/1.5/default/wifi_iface_util.h +++ b/wifi/1.5/default/wifi_iface_util.h @@ -59,6 +59,16 @@ class WifiIfaceUtil { virtual bool setUpState(const std::string& iface_name, bool request_up); virtual unsigned ifNameToIndex(const std::string& iface_name); + virtual bool createBridge(const std::string& br_name); + + virtual bool deleteBridge(const std::string& br_name); + + virtual bool addIfaceToBridge(const std::string& br_name, + const std::string& if_name); + + virtual bool removeIfaceFromBridge(const std::string& br_name, + const std::string& if_name); + private: std::array createRandomMacAddress();