adapter: Fix advertising monitor on Linux 5.12-5.17
authorAndrew Drake <adrake@adrake.org>
Thu, 30 Jun 2022 07:39:58 +0000 (00:39 -0700)
committerAyush Garg <ayush.garg@samsung.com>
Mon, 15 May 2023 09:25:54 +0000 (14:55 +0530)
The existing code assumes that, if a device supports advertising monitor
offload, DEVICE_FOUND events can be ignored since the kernel will send
ADV_MONITOR_DEVICE_FOUND events instead. Unfortunately, these new events
were added in 5.18, but offload was added in 5.12. This patch adds a
check on the MGMT API version so we can process the older DEVICE_FOUND
events when the new events are not supported.

Fixes: https://github.com/bluez/bluez/issues/357
Signed-off-by: Manika Shrivastava <manika.sh@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
src/adapter.c

index 6ec6ce2..8d3933c 100644 (file)
@@ -12085,7 +12085,9 @@ void btd_adapter_update_found_device(struct btd_adapter *adapter,
 #ifndef TIZEN_FEATURE_BLUEZ_MODIFY
        struct queue *matched_monitors = NULL;
 
-       if (!btd_adv_monitor_offload_enabled(adapter->adv_monitor_manager)) {
+       if (!btd_adv_monitor_offload_enabled(adapter->adv_monitor_manager) ||
+                               (MGMT_VERSION(mgmt_version, mgmt_revision) <
+                                                       MGMT_VERSION(1, 22))) {
                if (bdaddr_type != BDADDR_BREDR)
                        ad = bt_ad_new_with_data(data_len, data);