aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2021-11-01 23:07:27 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-11-01 23:07:27 +0000
commit780d48f40c0b5d0da4248d0a03f1aa6786b4581f (patch)
tree34c50d240245fbe412c9b456085a8adc1e9d57cf
parentd7d50c190772c4f9a498b1b65f653e3425b64f31 (diff)
parentfba7baf2d4107efdf0c2cde17ecdd844f2294920 (diff)
downloadbt-780d48f40c0b5d0da4248d0a03f1aa6786b4581f.tar.gz
Merge "Add SupportsBlePrivacy for gd privacy policy"
-rw-r--r--gd/hci/acl_manager/le_impl.h7
-rw-r--r--gd/hci/le_address_manager.cc9
-rw-r--r--gd/hci/le_address_manager.h5
3 files changed, 19 insertions, 2 deletions
diff --git a/gd/hci/acl_manager/le_impl.h b/gd/hci/acl_manager/le_impl.h
index 6fb1de337..f251f7ce7 100644
--- a/gd/hci/acl_manager/le_impl.h
+++ b/gd/hci/acl_manager/le_impl.h
@@ -636,7 +636,12 @@ struct le_impl : public bluetooth::hci::LeAddressManagerCallback {
std::chrono::milliseconds minimum_rotation_time,
std::chrono::milliseconds maximum_rotation_time) {
le_address_manager_->SetPrivacyPolicyForInitiatorAddress(
- address_policy, fixed_address, rotation_irk, minimum_rotation_time, maximum_rotation_time);
+ address_policy,
+ fixed_address,
+ rotation_irk,
+ controller_->SupportsBlePrivacy(),
+ minimum_rotation_time,
+ maximum_rotation_time);
}
// TODO(jpawlowski): remove once we have config file abstraction in cert tests
diff --git a/gd/hci/le_address_manager.cc b/gd/hci/le_address_manager.cc
index c7600c511..c8b3ec655 100644
--- a/gd/hci/le_address_manager.cc
+++ b/gd/hci/le_address_manager.cc
@@ -48,12 +48,14 @@ void LeAddressManager::SetPrivacyPolicyForInitiatorAddress(
AddressPolicy address_policy,
AddressWithType fixed_address,
crypto_toolbox::Octet16 rotation_irk,
+ bool supports_ble_privacy,
std::chrono::milliseconds minimum_rotation_time,
std::chrono::milliseconds maximum_rotation_time) {
ASSERT(address_policy_ == AddressPolicy::POLICY_NOT_SET);
ASSERT(address_policy != AddressPolicy::POLICY_NOT_SET);
ASSERT_LOG(registered_clients_.empty(), "Policy must be set before clients are registered.");
address_policy_ = address_policy;
+ supports_ble_privacy_ = supports_ble_privacy;
LOG_INFO("SetPrivacyPolicyForInitiatorAddress with policy %d", address_policy);
switch (address_policy_) {
@@ -391,6 +393,13 @@ void LeAddressManager::AddDeviceToResolvingList(
Command command = {CommandType::ADD_DEVICE_TO_RESOLVING_LIST, std::move(packet_builder)};
cached_commands_.push(std::move(command));
+ if (supports_ble_privacy_) {
+ auto packet_builder =
+ hci::LeSetPrivacyModeBuilder::Create(peer_identity_address_type, peer_identity_address, PrivacyMode::DEVICE);
+ Command command = {CommandType::LE_SET_PRIVACY_MODE, std::move(packet_builder)};
+ cached_commands_.push(std::move(command));
+ }
+
// Enable Address resolution
auto enable_builder = hci::LeSetAddressResolutionEnableBuilder::Create(hci::Enable::ENABLED);
Command enable = {CommandType::SET_ADDRESS_RESOLUTION_ENABLE, std::move(enable_builder)};
diff --git a/gd/hci/le_address_manager.h b/gd/hci/le_address_manager.h
index 9b54f0ee8..8aaa11f1f 100644
--- a/gd/hci/le_address_manager.h
+++ b/gd/hci/le_address_manager.h
@@ -57,6 +57,7 @@ class LeAddressManager {
AddressPolicy address_policy,
AddressWithType fixed_address,
crypto_toolbox::Octet16 rotation_irk,
+ bool supports_ble_privacy,
std::chrono::milliseconds minimum_rotation_time,
std::chrono::milliseconds maximum_rotation_time);
// TODO(jpawlowski): remove once we have config file abstraction in cert tests
@@ -105,7 +106,8 @@ class LeAddressManager {
ADD_DEVICE_TO_RESOLVING_LIST,
REMOVE_DEVICE_FROM_RESOLVING_LIST,
CLEAR_RESOLVING_LIST,
- SET_ADDRESS_RESOLUTION_ENABLE
+ SET_ADDRESS_RESOLUTION_ENABLE,
+ LE_SET_PRIVACY_MODE
};
struct Command {
@@ -144,6 +146,7 @@ class LeAddressManager {
uint8_t connect_list_size_;
uint8_t resolving_list_size_;
std::queue<Command> cached_commands_;
+ bool supports_ble_privacy_{false};
};
} // namespace hci