OSDN Git Service

Add bluetooth::shim::legacy::Acl::ConfigureLePrivacy
authorChris Manton <cmanton@google.com>
Thu, 29 Oct 2020 16:19:01 +0000 (09:19 -0700)
committerChris Manton <cmanton@google.com>
Thu, 29 Oct 2020 17:21:44 +0000 (10:21 -0700)
Bug: 171568335
Tag: #refactor
Test: compile & verify basic functions working

Change-Id: Ie2adc7cff25f4e0784fee9abc52f42ddc0a815ab

main/shim/acl.cc
main/shim/acl.h
main/shim/acl_api.cc
main/shim/acl_api.h

index 6e313c4..9853d7e 100644 (file)
@@ -590,3 +590,28 @@ void bluetooth::shim::legacy::Acl::OnLeConnectFail(
   TRY_POSTING_ON_MAIN(acl_interface_.connection.le.on_failed,
                       legacy_address_with_type, handle, enhanced, status);
 }
+
+void bluetooth::shim::legacy::Acl::ConfigureLePrivacy(
+    bool is_le_privacy_enabled) {
+  LOG_INFO("Configuring Le privacy:%s",
+           (is_le_privacy_enabled) ? "true" : "false");
+  ASSERT_LOG(is_le_privacy_enabled,
+             "Gd shim does not support unsecure le privacy");
+
+  // TODO(b/161543441): read the privacy policy from device-specific
+  // configuration, and IRK from config file.
+  hci::LeAddressManager::AddressPolicy address_policy =
+      hci::LeAddressManager::AddressPolicy::USE_RESOLVABLE_ADDRESS;
+  hci::AddressWithType empty_address_with_type(
+      hci::Address{}, hci::AddressType::RANDOM_DEVICE_ADDRESS);
+  crypto_toolbox::Octet16 rotation_irk = {0x44, 0xfb, 0x4b, 0x8d, 0x6c, 0x58,
+                                          0x21, 0x0c, 0xf9, 0x3d, 0xda, 0xf1,
+                                          0x64, 0xa3, 0xbb, 0x7f};
+  /* 7 minutes minimum, 15 minutes maximum for random address refreshing */
+  auto minimum_rotation_time = std::chrono::minutes(7);
+  auto maximum_rotation_time = std::chrono::minutes(15);
+
+  GetAclManager()->SetPrivacyPolicyForInitiatorAddress(
+      address_policy, empty_address_with_type, rotation_irk,
+      minimum_rotation_time, maximum_rotation_time);
+}
index c0c2ed3..9912439 100644 (file)
@@ -57,6 +57,8 @@ class Acl : public hci::acl_manager::ConnectionCallbacks,
   void WriteData(uint16_t hci_handle,
                  std::unique_ptr<bluetooth::packet::RawBuilder> packet);
 
+  void ConfigureLePrivacy(bool is_le_privacy_enabled);
+
  protected:
   void on_incoming_acl_credits(uint16_t handle, uint16_t credits);
   void write_data_sync(uint16_t hci_handle,
index cf08587..b305f86 100644 (file)
@@ -46,3 +46,7 @@ void bluetooth::shim::ACL_WriteData(uint16_t handle, const BT_HDR* p_buf) {
                        p_buf->len - HCI_DATA_PREAMBLE_SIZE);
   Stack::GetInstance()->GetAcl()->WriteData(handle, std::move(packet));
 }
+
+void bluetooth::shim::ACL_ConfigureLePrivacy(bool is_le_privacy_enabled) {
+  Stack::GetInstance()->GetAcl()->ConfigureLePrivacy(is_le_privacy_enabled);
+}
index dd2ad78..53aaf49 100644 (file)
@@ -27,6 +27,7 @@ void ACL_CancelLeConnection(const tBLE_BD_ADDR& legacy_address_with_type);
 void ACL_CreateClassicConnection(const RawAddress& raw_address);
 void ACL_CreateLeConnection(const tBLE_BD_ADDR& legacy_address_with_type);
 void ACL_WriteData(uint16_t handle, const BT_HDR* p_buf);
+void ACL_ConfigureLePrivacy(bool is_le_privacy_enabled);
 
 }  // namespace shim
 }  // namespace bluetooth