diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-09 04:23:03 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-09 04:23:03 +0000 |
commit | 7a0de263afa9bbb6b6d940e55d66429d1ce73dc4 (patch) | |
tree | 9488c9c6693fa6166b2321e23aeba10a756fa698 | |
parent | ef9ca7fc576c7c610ca66bb3fac0b80677c80f7d (diff) | |
parent | 17423481a0ca14cfe54db89c64472a8abda3418d (diff) | |
download | wificond-android14-qpr2-s1-release.tar.gz |
Snap for 11200327 from 17423481a0ca14cfe54db89c64472a8abda3418d to 24Q1-releaseandroid-14.0.0_r33android-14.0.0_r32android-14.0.0_r31android-14.0.0_r30android-14.0.0_r29android14-qpr2-s3-releaseandroid14-qpr2-s2-releaseandroid14-qpr2-s1-releaseandroid14-qpr2-release
Change-Id: I9bd46edc67115d8a43daa0b05f8d7df15a212a78
-rw-r--r-- | net/netlink_utils.cpp | 5 | ||||
-rw-r--r-- | net/netlink_utils.h | 3 | ||||
-rw-r--r-- | server.cpp | 24 | ||||
-rw-r--r-- | tests/netlink_utils_unittest.cpp | 4 |
4 files changed, 26 insertions, 10 deletions
diff --git a/net/netlink_utils.cpp b/net/netlink_utils.cpp index fc705d6..5ee595c 100644 --- a/net/netlink_utils.cpp +++ b/net/netlink_utils.cpp @@ -847,12 +847,15 @@ bool NetlinkUtils::MergePacketsForSplitWiphyDump( return true; } -bool NetlinkUtils::GetCountryCode(string* out_country_code) { +bool NetlinkUtils::GetCountryCode(uint32_t wiphy_index, + string* out_country_code) { NL80211Packet get_country_code( netlink_manager_->GetFamilyId(), NL80211_CMD_GET_REG, netlink_manager_->GetSequenceNumber(), getpid()); + get_country_code.AddAttribute(NL80211Attr<uint32_t>(NL80211_ATTR_WIPHY, + wiphy_index)); unique_ptr<const NL80211Packet> response; if (!netlink_manager_->SendMessageAndGetSingleResponse(get_country_code, &response)) { diff --git a/net/netlink_utils.h b/net/netlink_utils.h index 3b334d9..c8f6756 100644 --- a/net/netlink_utils.h +++ b/net/netlink_utils.h @@ -241,7 +241,8 @@ class NetlinkUtils { // Get current alpha2 country code from kernel. // Returns true on success. - virtual bool GetCountryCode(std::string* out_country_code); + virtual bool GetCountryCode(uint32_t wiphy_index, + std::string* out_country_code); // Sign up to be notified when there is MLME event. // Only one handler can be registered per interface index. @@ -78,10 +78,6 @@ Status Server::registerWificondEventCallback(const sp<IWificondEventCallback>& c LOG(INFO) << "New wificond event callback registered"; wificond_event_callbacks_.push_back(callback); - if (current_country_code_.empty() && - !netlink_utils_->GetCountryCode(¤t_country_code_)) { - LOG(ERROR) << "Fail to get country code"; - } // Inform immediately about current country code if (!current_country_code_.empty()) callback->OnRegDomainChanged(current_country_code_); @@ -306,7 +302,9 @@ status_t Server::dump(int fd, const Vector<String16>& /*args*/) { } string country_code; - if (netlink_utils_->GetCountryCode(&country_code)) { + uint32_t wiphy_index; + if (netlink_utils_->GetWiphyIndex(&wiphy_index) && + netlink_utils_->GetCountryCode(wiphy_index, &country_code)) { ss << "Current country code from kernel: " << country_code << endl; } else { ss << "Failed to get country code from kernel." << endl; @@ -472,6 +470,20 @@ bool Server::SetupInterface(const std::string& iface_name, LOG(ERROR) << "Failed to get wiphy index"; return false; } + + std::string country_code; + if (!netlink_utils_->GetCountryCode(*wiphy_index, &country_code) || + country_code.empty()) { + LOG(ERROR) << "Fail to get country code"; + } else { + LOG(INFO) << "Current driver country code " << country_code; + if (current_country_code_.empty() || + current_country_code_.compare(country_code) != 0) { + current_country_code_ = country_code; + BroadcastRegDomainChanged(); + } + } + // TODO: It may need to handle multi-chips case to get multi-wiphy index and // register corresponding callback. netlink_utils_->SubscribeRegDomainChange( @@ -525,7 +537,7 @@ void Server::handleCountryCodeChanged() { void Server::OnRegDomainChanged(uint32_t wiphy_index, std::string& country_code) { if (country_code.empty()) { LOG(DEBUG) << "Regulatory domain changed with empty country code (world mode?)"; - if (!netlink_utils_->GetCountryCode(¤t_country_code_)) { + if (!netlink_utils_->GetCountryCode(wiphy_index, ¤t_country_code_)) { LOG(ERROR) << "Fail to get country code on wiphy_index:" << wiphy_index; } } else { diff --git a/tests/netlink_utils_unittest.cpp b/tests/netlink_utils_unittest.cpp index 1b27cc8..26cd0d3 100644 --- a/tests/netlink_utils_unittest.cpp +++ b/tests/netlink_utils_unittest.cpp @@ -918,7 +918,7 @@ TEST_F(NetlinkUtilsTest, CanGetCountryCode) { WillOnce(DoAll(MakeupResponse(response), Return(true))); string country_code; - EXPECT_TRUE(netlink_utils_->GetCountryCode(&country_code)); + EXPECT_TRUE(netlink_utils_->GetCountryCode(0, &country_code)); EXPECT_EQ(kFakeCountryCode, country_code); } @@ -930,7 +930,7 @@ TEST_F(NetlinkUtilsTest, CanHandleGetCountryCodeError) { WillOnce(DoAll(MakeupResponse(response), Return(true))); string country_code_ignored; - EXPECT_FALSE(netlink_utils_->GetCountryCode(&country_code_ignored)); + EXPECT_FALSE(netlink_utils_->GetCountryCode(0, &country_code_ignored)); } TEST_F(NetlinkUtilsTest, CanSendMgmtFrame) { |