From: Wei Deng <wei.deng@oss.qualcomm.com>
To: openembedded-core@lists.openembedded.org
Cc: yoann.congal@smile.fr, cheng.jiang@oss.qualcomm.com,
shuai.zhang@oss.qualcomm.com, mengshi.wu@oss.qualcomm.com,
jinwang.li@oss.qualcomm.com, xiuzhuo.shang@oss.qualcomm.com
Subject: [PATCH 4/4] bluez5: set L2CAP IMTU for OBEX profile listeners
Date: Fri, 26 Jun 2026 12:12:33 +0530 [thread overview]
Message-ID: <20260626064233.704350-5-wei.deng@oss.qualcomm.com> (raw)
In-Reply-To: <20260626064233.704350-1-wei.deng@oss.qualcomm.com>
Backport upstream fix that adds an imtu field to default_settings for
OBEX profiles (OPP, FTP, PBAP, MAS, MNS) and applies it to the L2CAP
listening socket via bt_io_set(). Without this, the listening socket
advertises the L2CAP minimum of 672 bytes in L2CAP_CONFIGURATION_RSP,
limiting the peer's outgoing PDU size and degrading Rx throughput.
Upstream-Status: Backport [bluez/bluez@646014a]
Signed-off-by: Wei Deng <wei.deng@oss.qualcomm.com>
---
meta/recipes-connectivity/bluez5/bluez5.inc | 1 +
...2CAP-IMTU-for-OBEX-profile-listeners.patch | 118 ++++++++++++++++++
2 files changed, 119 insertions(+)
create mode 100644 meta/recipes-connectivity/bluez5/bluez5/0001-profile-Set-L2CAP-IMTU-for-OBEX-profile-listeners.patch
diff --git a/meta/recipes-connectivity/bluez5/bluez5.inc b/meta/recipes-connectivity/bluez5/bluez5.inc
index 4e51cc9a213..ad07e0d3c4f 100644
--- a/meta/recipes-connectivity/bluez5/bluez5.inc
+++ b/meta/recipes-connectivity/bluez5/bluez5.inc
@@ -74,6 +74,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/bluetooth/bluez-${PV}.tar.xz \
file://0001-transport-Fix-set-volume-failure-with-invalid-device.patch \
file://0001-advertising-Fix-sending-extra-bytes-with-MGMT_OP_ADD.patch \
file://0001-src-device-Fix-stored-gatt-cache-DB-Hash-value-no.patch \
+ file://0001-profile-Set-L2CAP-IMTU-for-OBEX-profile-listeners.patch \
"
S = "${UNPACKDIR}/bluez-${PV}"
diff --git a/meta/recipes-connectivity/bluez5/bluez5/0001-profile-Set-L2CAP-IMTU-for-OBEX-profile-listeners.patch b/meta/recipes-connectivity/bluez5/bluez5/0001-profile-Set-L2CAP-IMTU-for-OBEX-profile-listeners.patch
new file mode 100644
index 00000000000..332b11464eb
--- /dev/null
+++ b/meta/recipes-connectivity/bluez5/bluez5/0001-profile-Set-L2CAP-IMTU-for-OBEX-profile-listeners.patch
@@ -0,0 +1,118 @@
+From 646014a6a246fe99df27da12d2de7bcd2e04d0df Mon Sep 17 00:00:00 2001
+From: Wei Deng <wei.deng@oss.qualcomm.com>
+Date: Thu, 4 Jun 2026 15:00:24 +0530
+Subject: [PATCH] profile: Set L2CAP IMTU for OBEX profile listeners
+
+The default_settings entries for OBEX profiles (OPP, FTP, PBAP, MAS,
+MNS) have no imtu field, so ext_start_servers() creates the L2CAP
+listening socket without an explicit IMTU. This causes the socket to
+advertise the L2CAP minimum of 672 bytes in L2CAP_CONFIGURATION_RSP,
+limiting the peer's outgoing PDU size and degrading Rx throughput.
+
+Add an imtu field to default_settings and set it to 32767 for all
+OBEX profiles that use L2CAP. Copy the value in ext_set_defaults()
+and apply it to the listening socket via bt_io_set() after
+bt_io_listen() succeeds.
+
+Signed-off-by: Wei Deng <wei.deng@oss.qualcomm.com>
+Upstream-Status: Backport [https://github.com/bluez/bluez/commit/646014a6a246fe99df27da12d2de7bcd2e04d0df]
+---
+ src/profile.c | 19 +++++++++++++++++--
+ 1 file changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/src/profile.c b/src/profile.c
+index dfc5f7161..65df0f7a0 100644
+--- a/src/profile.c
++++ b/src/profile.c
+@@ -55,6 +55,8 @@
+ #define MAS_DEFAULT_CHANNEL 16
+ #define MNS_DEFAULT_CHANNEL 17
+
++#define BT_RX_MTU 32767
++
+ #define BTD_PROFILE_PSM_AUTO -1
+ #define BTD_PROFILE_CHAN_AUTO -1
+
+@@ -678,6 +680,7 @@ struct ext_profile {
+
+ uint16_t version;
+ uint16_t features;
++ uint16_t imtu;
+
+ GSList *records;
+ GSList *servers;
+@@ -1423,6 +1426,9 @@ static uint32_t ext_start_servers(struct ext_profile *ext,
+ if (psm == 0)
+ bt_io_get(io, NULL, BT_IO_OPT_PSM, &psm,
+ BT_IO_OPT_INVALID);
++ if (ext->imtu)
++ bt_io_set(io, NULL, BT_IO_OPT_IMTU, ext->imtu,
++ BT_IO_OPT_INVALID);
+ l2cap->io = io;
+ l2cap->proto = BTPROTO_L2CAP;
+ l2cap->psm = psm;
+@@ -2075,6 +2081,7 @@ static struct default_settings {
+ struct ext_io *rfcomm);
+ uint16_t version;
+ uint16_t features;
++ uint16_t imtu;
+ } defaults[] = {
+ {
+ .uuid = SPP_UUID,
+@@ -2142,6 +2149,7 @@ static struct default_settings {
+ .authorize = false,
+ .get_record = get_opp_record,
+ .version = 0x0102,
++ .imtu = BT_RX_MTU,
+ }, {
+ .uuid = OBEX_FTP_UUID,
+ .name = "File Transfer",
+@@ -2151,6 +2159,7 @@ static struct default_settings {
+ .authorize = true,
+ .get_record = get_ftp_record,
+ .version = 0x0103,
++ .imtu = BT_RX_MTU,
+ }, {
+ .uuid = OBEX_SYNC_UUID,
+ .name = "Synchronization",
+@@ -2167,6 +2176,7 @@ static struct default_settings {
+ .authorize = true,
+ .get_record = get_pse_record,
+ .version = 0x0101,
++ .imtu = BT_RX_MTU,
+ }, {
+ .uuid = OBEX_PCE_UUID,
+ .name = "Phone Book Access Client",
+@@ -2182,7 +2192,8 @@ static struct default_settings {
+ .mode = BT_IO_MODE_ERTM,
+ .authorize = true,
+ .get_record = get_mas_record,
+- .version = 0x0100
++ .version = 0x0100,
++ .imtu = BT_RX_MTU,
+ }, {
+ .uuid = OBEX_MNS_UUID,
+ .name = "Message Notification",
+@@ -2191,7 +2202,8 @@ static struct default_settings {
+ .mode = BT_IO_MODE_ERTM,
+ .authorize = true,
+ .get_record = get_mns_record,
+- .version = 0x0104
++ .version = 0x0104,
++ .imtu = BT_RX_MTU,
+ },
+ };
+
+@@ -2249,6 +2261,9 @@ static void ext_set_defaults(struct ext_profile *ext)
+ if (settings->features)
+ ext->features = settings->features;
+
++ if (settings->imtu)
++ ext->imtu = settings->imtu;
++
+ if (settings->name)
+ ext->name = g_strdup(settings->name);
+ }
+--
+2.34.1
+
--
2.34.1
next prev parent reply other threads:[~2026-06-26 6:42 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-26 6:42 [PATCH 0/4] bluez5: backport fixes from master to wrynose Wei Deng
2026-06-26 6:42 ` [PATCH 1/4] bluez5: fix set volume failure Wei Deng
2026-06-26 6:42 ` [PATCH 2/4] bluez5: Fix sending extra bytes with MGMT_OP_ADD_EXT_ADV_DATA Wei Deng
2026-06-26 6:42 ` [PATCH 3/4] bluez5: fix gatt cache sync issue Wei Deng
2026-06-26 6:42 ` Wei Deng [this message]
2026-06-26 8:18 ` [PATCH 0/4] bluez5: backport fixes from master to wrynose Yoann Congal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260626064233.704350-5-wei.deng@oss.qualcomm.com \
--to=wei.deng@oss.qualcomm.com \
--cc=cheng.jiang@oss.qualcomm.com \
--cc=jinwang.li@oss.qualcomm.com \
--cc=mengshi.wu@oss.qualcomm.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=shuai.zhang@oss.qualcomm.com \
--cc=xiuzhuo.shang@oss.qualcomm.com \
--cc=yoann.congal@smile.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox