5.68
This commit is contained in:
parent
a34182cd22
commit
fe897284c1
@ -1,124 +0,0 @@
|
|||||||
From de8e7cfce25b8d717f5ee60ee3b79d426fdcc681 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hans de Goede <hdegoede@redhat.com>
|
|
||||||
Date: Fri, 31 Mar 2023 22:03:29 +0200
|
|
||||||
Subject: [PATCH] adapter: Use regular discovery for filters which only have
|
|
||||||
discoverable set
|
|
||||||
|
|
||||||
discovery_filter_to_mgmt_cp() does not add discovery_filter.discoverable
|
|
||||||
to the created mgmt_cp_start_service_discovery struct.
|
|
||||||
|
|
||||||
Instead update_discovery_filter() separately checks
|
|
||||||
client->discovery_filter->discoverable for all clients.
|
|
||||||
|
|
||||||
This means that for discovery-filters which only have the discoverable
|
|
||||||
flag set, to put the adapter in discoverable mode while discovering,
|
|
||||||
the created mgmt_cp_start_service_discovery struct is empty.
|
|
||||||
|
|
||||||
This empty mgmt_cp_start_service_discovery struct then gets sent
|
|
||||||
to the kernel as part of a MGMT_OP_START_SERVICE_DISCOVERY msg
|
|
||||||
by start_discovery_timeout().
|
|
||||||
|
|
||||||
This use of an empty filter with MGMT_OP_START_SERVICE_DISCOVERY
|
|
||||||
causes some bluetooth devices to not get seen with some (most?)
|
|
||||||
Broadcom bluetooth adapters. This problem has been observed with
|
|
||||||
the following Broadcom models: BCM4343A0, BCM43430A1, BCM43341B0 .
|
|
||||||
|
|
||||||
On these models the following 2 devices were not being discovered
|
|
||||||
when starting a scan with a filter with just discoverable set
|
|
||||||
in the filter (as gnome-bluetooth does):
|
|
||||||
|
|
||||||
Device 09:02:01:03:0F:87 (public)
|
|
||||||
Name: Bluetooth 3.0 Keyboard
|
|
||||||
Alias: Bluetooth 3.0 Keyboard
|
|
||||||
Class: 0x00000540
|
|
||||||
Icon: input-keyboard
|
|
||||||
Paired: yes
|
|
||||||
Bonded: yes
|
|
||||||
Trusted: yes
|
|
||||||
Blocked: no
|
|
||||||
Connected: yes
|
|
||||||
WakeAllowed: yes
|
|
||||||
LegacyPairing: yes
|
|
||||||
UUID: Service Discovery Serve.. (00001000-0000-1000-8000-00805f9b34fb)
|
|
||||||
UUID: Human Interface Device... (00001124-0000-1000-8000-00805f9b34fb)
|
|
||||||
UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)
|
|
||||||
Modalias: bluetooth:v05ACp022Cd011B
|
|
||||||
|
|
||||||
Device 00:60:D1:00:00:34 (public)
|
|
||||||
Name: Bluetooth Mouse
|
|
||||||
Alias: Bluetooth Mouse
|
|
||||||
Class: 0x00002580
|
|
||||||
Icon: input-mouse
|
|
||||||
Paired: yes
|
|
||||||
Bonded: yes
|
|
||||||
Trusted: yes
|
|
||||||
Blocked: no
|
|
||||||
Connected: yes
|
|
||||||
WakeAllowed: yes
|
|
||||||
LegacyPairing: no
|
|
||||||
UUID: Human Interface Device... (00001124-0000-1000-8000-00805f9b34fb)
|
|
||||||
UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)
|
|
||||||
Modalias: usb:v0103p0204d001E
|
|
||||||
|
|
||||||
Since setting the discoverable flag on a filter only is a way to
|
|
||||||
automatically put the adapter in discoverable mode itself while
|
|
||||||
it is discovering; and since this does not any device filtering
|
|
||||||
at all; modify merge_discovery_filters() to treat discovery with
|
|
||||||
such filters as regular unfiltered discovery.
|
|
||||||
|
|
||||||
This results in start_discovery_timeout() starting regular
|
|
||||||
discovery through a MGMT_OP_START_DISCOVERY message and this
|
|
||||||
fixes these 2 example devices not getting discovered by the
|
|
||||||
mentioned Broadcom BT adapter models.
|
|
||||||
|
|
||||||
Link: https://gitlab.gnome.org/GNOME/gnome-bluetooth/-/merge_requests/163
|
|
||||||
Reviewed-by: Bastien Nocera <hadess@hadess.net>
|
|
||||||
---
|
|
||||||
src/adapter.c | 17 ++++++++++++++++-
|
|
||||||
1 file changed, 16 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/adapter.c b/src/adapter.c
|
|
||||||
index 7947160a6c5c..cc7f891d96d9 100644
|
|
||||||
--- a/src/adapter.c
|
|
||||||
+++ b/src/adapter.c
|
|
||||||
@@ -2192,6 +2192,7 @@ static int merge_discovery_filters(struct btd_adapter *adapter, int *rssi,
|
|
||||||
bool empty_uuid = false;
|
|
||||||
bool has_regular_discovery = false;
|
|
||||||
bool has_filtered_discovery = false;
|
|
||||||
+ uint8_t adapter_scan_type = get_scan_type(adapter);
|
|
||||||
|
|
||||||
for (l = adapter->discovery_list; l != NULL; l = g_slist_next(l)) {
|
|
||||||
struct discovery_client *client = l->data;
|
|
||||||
@@ -2202,6 +2203,20 @@ static int merge_discovery_filters(struct btd_adapter *adapter, int *rssi,
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * Detect empty filter with only discoverable
|
|
||||||
+ * (which does not require a kernel filter) set.
|
|
||||||
+ */
|
|
||||||
+ if (item->uuids == NULL &&
|
|
||||||
+ item->pathloss == DISTANCE_VAL_INVALID &&
|
|
||||||
+ item->rssi == DISTANCE_VAL_INVALID &&
|
|
||||||
+ item->type == adapter_scan_type &&
|
|
||||||
+ item->duplicate == false &&
|
|
||||||
+ item->pattern == NULL) {
|
|
||||||
+ has_regular_discovery = true;
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
has_filtered_discovery = true;
|
|
||||||
|
|
||||||
*transport |= item->type;
|
|
||||||
@@ -2251,7 +2266,7 @@ static int merge_discovery_filters(struct btd_adapter *adapter, int *rssi,
|
|
||||||
* It there is both regular and filtered scan running, then
|
|
||||||
* clear whole fitler to report all devices.
|
|
||||||
*/
|
|
||||||
- *transport = get_scan_type(adapter);
|
|
||||||
+ *transport = adapter_scan_type;
|
|
||||||
*rssi = HCI_RSSI_INVALID;
|
|
||||||
g_slist_free(*uuids);
|
|
||||||
*uuids = NULL;
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
18
bluez.spec
18
bluez.spec
@ -5,8 +5,8 @@
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
Name: bluez
|
Name: bluez
|
||||||
Version: 5.66
|
Version: 5.68
|
||||||
Release: 6%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Bluetooth utilities
|
Summary: Bluetooth utilities
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
URL: http://www.bluez.org/
|
URL: http://www.bluez.org/
|
||||||
@ -15,12 +15,10 @@ Source0: http://www.kernel.org/pub/linux/bluetooth/%{name}-%{version}.tar.xz
|
|||||||
Source1: bluez.gitignore
|
Source1: bluez.gitignore
|
||||||
|
|
||||||
# https://github.com/hadess/bluez/commits/obex-5.46
|
# https://github.com/hadess/bluez/commits/obex-5.46
|
||||||
Patch1: 0001-obex-Use-GLib-helper-function-to-manipulate-paths.patch
|
# Upstream's logic has changed so needs a rebase
|
||||||
|
#Patch1: 0001-obex-Use-GLib-helper-function-to-manipulate-paths.patch
|
||||||
# https://lore.kernel.org/linux-bluetooth/20220901110719.176944-1-hadess@hadess.net/T/#m9c08d004cd5422783ee1d93154f42303bba9169f
|
# https://lore.kernel.org/linux-bluetooth/20220901110719.176944-1-hadess@hadess.net/T/#m9c08d004cd5422783ee1d93154f42303bba9169f
|
||||||
Patch2: power-state-adapter-property.patch
|
Patch2: power-state-adapter-property.patch
|
||||||
# Upstreamed patches
|
|
||||||
Patch3: transient-hostname-fix.patch
|
|
||||||
Patch4: 0001-adapter-Use-regular-discovery-for-filters-which-only.patch
|
|
||||||
|
|
||||||
BuildRequires: dbus-devel >= 1.6
|
BuildRequires: dbus-devel >= 1.6
|
||||||
BuildRequires: glib2-devel
|
BuildRequires: glib2-devel
|
||||||
@ -235,7 +233,7 @@ install emulator/btvirt ${RPM_BUILD_ROOT}/%{_libexecdir}/bluetooth/
|
|||||||
%license COPYING
|
%license COPYING
|
||||||
%doc AUTHORS ChangeLog
|
%doc AUTHORS ChangeLog
|
||||||
%dir %{_sysconfdir}/bluetooth
|
%dir %{_sysconfdir}/bluetooth
|
||||||
%config %{_sysconfdir}/bluetooth/main.conf
|
%config(noreplace) %{_sysconfdir}/bluetooth/main.conf
|
||||||
%config %{_sysconfdir}/dbus-1/system.d/bluetooth.conf
|
%config %{_sysconfdir}/dbus-1/system.d/bluetooth.conf
|
||||||
%{_bindir}/avinfo
|
%{_bindir}/avinfo
|
||||||
%{_bindir}/bluemoon
|
%{_bindir}/bluemoon
|
||||||
@ -306,7 +304,7 @@ install emulator/btvirt ${RPM_BUILD_ROOT}/%{_libexecdir}/bluetooth/
|
|||||||
|
|
||||||
%files mesh
|
%files mesh
|
||||||
#%doc tools/mesh-gatt/*.json
|
#%doc tools/mesh-gatt/*.json
|
||||||
%config %{_sysconfdir}/bluetooth/mesh-main.conf
|
%config(noreplace) %{_sysconfdir}/bluetooth/mesh-main.conf
|
||||||
%config %{_sysconfdir}/dbus-1/system.d/bluetooth-mesh.conf
|
%config %{_sysconfdir}/dbus-1/system.d/bluetooth-mesh.conf
|
||||||
%{_bindir}/mesh-cfgclient
|
%{_bindir}/mesh-cfgclient
|
||||||
%{_bindir}/mesh-cfgtest
|
%{_bindir}/mesh-cfgtest
|
||||||
@ -322,6 +320,10 @@ install emulator/btvirt ${RPM_BUILD_ROOT}/%{_libexecdir}/bluetooth/
|
|||||||
%{_userunitdir}/obex.service
|
%{_userunitdir}/obex.service
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Jul 01 2023 Peter Robinson <pbrobinson@fedoraproject.org> - 5.68-1
|
||||||
|
- Update to 5.68
|
||||||
|
- Don't replace modified configs on upgrade (rhbz#2173029)
|
||||||
|
|
||||||
* Sun Jun 25 2023 Bastien Nocera <bnocera@redhat.com> - 5.66-6
|
* Sun Jun 25 2023 Bastien Nocera <bnocera@redhat.com> - 5.66-6
|
||||||
- Add patch that fixes some devices not being discoverable in
|
- Add patch that fixes some devices not being discoverable in
|
||||||
GNOME's Bluetooth Settings
|
GNOME's Bluetooth Settings
|
||||||
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (bluez-5.66.tar.xz) = ed0994932687eacf27207867366671b323671f5d5199daf36ea5eff8f254f2bc99ef989ef7df9883b35c06f2af60452be8bad0a06109428a4717cf2b247b4865
|
SHA512 (bluez-5.68.tar.xz) = 1805fb68923a5e098777b69835d7593396f8f2bbf52e1cfe58e7447621497a700b23389c79e96b2d663c611335f6ea9df11efe8aa75a8842f6b73105f66e799c
|
||||||
|
@ -1,185 +0,0 @@
|
|||||||
From e515f4b6e25c971c47ab79e9cbdfa17119bbde23 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bastien Nocera <hadess@hadess.net>
|
|
||||||
Date: Wed, 9 Nov 2022 16:17:55 +0100
|
|
||||||
Subject: [PATCH 1/2] hostname: Add '' around printed strings
|
|
||||||
|
|
||||||
Otherwise we can't see whether the string is nul, or empty.
|
|
||||||
---
|
|
||||||
plugins/hostname.c | 6 +++---
|
|
||||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/hostname.c b/plugins/hostname.c
|
|
||||||
index 1a9513adb..14b6450b5 100644
|
|
||||||
--- a/plugins/hostname.c
|
|
||||||
+++ b/plugins/hostname.c
|
|
||||||
@@ -128,7 +128,7 @@ static void property_changed(GDBusProxy *proxy, const char *name,
|
|
||||||
|
|
||||||
dbus_message_iter_get_basic(iter, &str);
|
|
||||||
|
|
||||||
- DBG("pretty hostname: %s", str);
|
|
||||||
+ DBG("pretty hostname: '%s'", str);
|
|
||||||
|
|
||||||
g_free(pretty_hostname);
|
|
||||||
pretty_hostname = g_strdup(str);
|
|
||||||
@@ -146,7 +146,7 @@ static void property_changed(GDBusProxy *proxy, const char *name,
|
|
||||||
|
|
||||||
dbus_message_iter_get_basic(iter, &str);
|
|
||||||
|
|
||||||
- DBG("static hostname: %s", str);
|
|
||||||
+ DBG("static hostname: '%s'", str);
|
|
||||||
|
|
||||||
g_free(static_hostname);
|
|
||||||
static_hostname = g_strdup(str);
|
|
||||||
@@ -165,7 +165,7 @@ static void property_changed(GDBusProxy *proxy, const char *name,
|
|
||||||
|
|
||||||
dbus_message_iter_get_basic(iter, &str);
|
|
||||||
|
|
||||||
- DBG("chassis: %s", str);
|
|
||||||
+ DBG("chassis: '%s'", str);
|
|
||||||
|
|
||||||
for (i = 0; chassis_table[i].chassis; i++) {
|
|
||||||
if (strcmp(chassis_table[i].chassis, str))
|
|
||||||
--
|
|
||||||
2.37.3
|
|
||||||
|
|
||||||
|
|
||||||
From e2b2b1675f310023862319ea10ffd205a75cc0cb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bastien Nocera <hadess@hadess.net>
|
|
||||||
Date: Wed, 9 Nov 2022 16:17:56 +0100
|
|
||||||
Subject: [PATCH 2/2] hostname: Fallback to transient hostname
|
|
||||||
|
|
||||||
After pretty hostname, and static hostname, also support transient
|
|
||||||
hostname as a last resort before 'BlueZ X.XX'.
|
|
||||||
|
|
||||||
This happens on Fedora's Workstation installation as it calls
|
|
||||||
"hostnamectl set-hostname" on startup. In Fedora Silverblue, the default
|
|
||||||
hostname is set as fedora in /etc/os-release.
|
|
||||||
|
|
||||||
In both cases, we should fall back to that transient hostname, as bad as
|
|
||||||
it could be.
|
|
||||||
|
|
||||||
Note that the transient hostname needs to be monitored through the
|
|
||||||
kernel directly, as explained in:
|
|
||||||
https://www.freedesktop.org/software/systemd/man/org.freedesktop.hostname1.html
|
|
||||||
---
|
|
||||||
plugins/hostname.c | 57 ++++++++++++++++++++++++++++++++++++++++++++--
|
|
||||||
1 file changed, 55 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/plugins/hostname.c b/plugins/hostname.c
|
|
||||||
index 14b6450b5..51707f07d 100644
|
|
||||||
--- a/plugins/hostname.c
|
|
||||||
+++ b/plugins/hostname.c
|
|
||||||
@@ -16,6 +16,8 @@
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
+#include <fcntl.h>
|
|
||||||
+#include <sys/utsname.h>
|
|
||||||
|
|
||||||
#include "lib/bluetooth.h"
|
|
||||||
#include "lib/sdp.h"
|
|
||||||
@@ -44,8 +46,10 @@
|
|
||||||
static uint8_t major_class = MAJOR_CLASS_MISCELLANEOUS;
|
|
||||||
static uint8_t minor_class = MINOR_CLASS_UNCATEGORIZED;
|
|
||||||
|
|
||||||
-static char *pretty_hostname = NULL;
|
|
||||||
-static char *static_hostname = NULL;
|
|
||||||
+static char *pretty_hostname = NULL;
|
|
||||||
+static char *static_hostname = NULL;
|
|
||||||
+static char *transient_hostname = NULL;
|
|
||||||
+static guint hostname_id = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Fallback to static hostname only if empty pretty hostname was already
|
|
||||||
@@ -60,6 +64,10 @@ static const char *get_hostname(void)
|
|
||||||
if (static_hostname &&
|
|
||||||
g_str_equal(static_hostname, "") == FALSE)
|
|
||||||
return static_hostname;
|
|
||||||
+
|
|
||||||
+ if (transient_hostname &&
|
|
||||||
+ g_str_equal(transient_hostname, "") == FALSE)
|
|
||||||
+ return transient_hostname;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
@@ -181,6 +189,32 @@ static void property_changed(GDBusProxy *proxy, const char *name,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void read_transient_hostname(void)
|
|
||||||
+{
|
|
||||||
+ struct utsname u;
|
|
||||||
+
|
|
||||||
+ if (uname(&u) != 0) {
|
|
||||||
+ g_free(transient_hostname);
|
|
||||||
+ transient_hostname = NULL;
|
|
||||||
+ DBG("failed to read transient hostname");
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ g_free(transient_hostname);
|
|
||||||
+ transient_hostname = g_strdup(u.nodename);
|
|
||||||
+
|
|
||||||
+ DBG("read transient hostname: '%s'", transient_hostname);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static gboolean hostname_cb(GIOChannel *io, GIOCondition cond,
|
|
||||||
+ gpointer user_data)
|
|
||||||
+{
|
|
||||||
+ DBG("transient hostname changed");
|
|
||||||
+ read_transient_hostname();
|
|
||||||
+ adapter_foreach(update_class, NULL);
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int hostname_probe(struct btd_adapter *adapter)
|
|
||||||
{
|
|
||||||
DBG("");
|
|
||||||
@@ -261,9 +295,11 @@ static GDBusProxy *hostname_proxy = NULL;
|
|
||||||
static int hostname_init(void)
|
|
||||||
{
|
|
||||||
DBusConnection *conn = btd_get_dbus_connection();
|
|
||||||
+ int fd;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
read_dmi_fallback();
|
|
||||||
+ read_transient_hostname();
|
|
||||||
|
|
||||||
hostname_client = g_dbus_client_new(conn, "org.freedesktop.hostname1",
|
|
||||||
"/org/freedesktop/hostname1");
|
|
||||||
@@ -289,6 +325,17 @@ static int hostname_init(void)
|
|
||||||
hostname_client = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ fd = open("/proc/sys/kernel/hostname", O_RDONLY);
|
|
||||||
+ if (fd < 0) {
|
|
||||||
+ error("open(/proc/sys/kernel/hostname): %s (%d)",
|
|
||||||
+ strerror(errno), errno);
|
|
||||||
+ } else {
|
|
||||||
+ GIOChannel *io = g_io_channel_unix_new(fd);
|
|
||||||
+
|
|
||||||
+ hostname_id = g_io_add_watch(io, G_IO_ERR, hostname_cb, NULL);
|
|
||||||
+ g_io_channel_unref(io);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -306,8 +353,14 @@ static void hostname_exit(void)
|
|
||||||
hostname_client = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (hostname_id != 0) {
|
|
||||||
+ g_source_remove(hostname_id);
|
|
||||||
+ hostname_id = 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
g_free(pretty_hostname);
|
|
||||||
g_free(static_hostname);
|
|
||||||
+ g_free(transient_hostname);
|
|
||||||
}
|
|
||||||
|
|
||||||
BLUETOOTH_PLUGIN_DEFINE(hostname, VERSION, BLUETOOTH_PLUGIN_PRIORITY_DEFAULT,
|
|
||||||
--
|
|
||||||
2.37.3
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user