Merge "Add SupportsBlePrivacy for gd privacy policy"
diff --git a/gd/hci/acl_manager/le_impl.h b/gd/hci/acl_manager/le_impl.h
index 6fb1de3..f251f7c 100644
--- a/gd/hci/acl_manager/le_impl.h
+++ b/gd/hci/acl_manager/le_impl.h
@@ -636,7 +636,12 @@
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 c7600c5..c8b3ec6 100644
--- a/gd/hci/le_address_manager.cc
+++ b/gd/hci/le_address_manager.cc
@@ -48,12 +48,14 @@
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 @@
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 9b54f0e..8aaa11f 100644
--- a/gd/hci/le_address_manager.h
+++ b/gd/hci/le_address_manager.h
@@ -57,6 +57,7 @@
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 @@
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 @@
uint8_t connect_list_size_;
uint8_t resolving_list_size_;
std::queue<Command> cached_commands_;
+ bool supports_ble_privacy_{false};
};
} // namespace hci