Public bug reported: [ Impact ]
When a Bluetooth device running BlueZ acts as an OBEX server (OPP/FTP/PBAP receiver), file transfer throughput is degraded by approximately 90% compared to the Tx direction. Root cause: bt_io_listen() in src/profile.c did not set BT_IO_OPT_IMTU for OBEX profile listeners. This causes L2CAP_CONFIGURATION_RSP to advertise the minimum MTU (672 bytes), limiting incoming OBEX packets to 669 bytes instead of the expected ~8 KB+. The fix adds an `imtu` field to profile default_settings and applies BT_IO_OPT_IMTU = BT_RX_MTU (32767) for OPP, FTP, PSE, MAS and MNS profiles, matching the value already used on the client (Tx) side. Upstream: https://github.com/bluez/bluez/commit/646014a6a Merged in BlueZ 5.86. [ Test Plan ] Prerequisites: - An Qualcomm IQ-X device running Ubuntu as receiver - A remote Bluetooth device (e.g. Android phone) as the sender Steps to reproduce (before fix): 1. On the IQ-X device, ensure bluetoothd and obexd are running 2. On the Android phone, initiate an OPP file transfer sending a large file (e.g. 10 MB) to the IQ-X device 3. Observe transfer speed Expected with fix: > 500 KB/s (comparable to Tx direction) Actual without fix: < 100 KB/s (limited by 669-byte OBEX packets) Verification after fix: - Repeat the OPP transfer: speed should be comparable to Tx (~500 KB/s+) - Optional: run obexd in debug mode and confirm recv_data() size ~8016 $ systemctl stop obex $ /usr/libexec/bluetooth/obexd -s -a -d Before fix: recv_data() size=669 After fix: recv_data() size=8016 depend on the remote device [ Where problems could occur ] The change increases the advertised L2CAP IMTU for OBEX server sockets from 672 to 32767. The remote peer still decides the actual packet size to send, so a well-implemented BT stack will simply use its own MPS/MTU without issue. Possible regression scenarios: - Remote BT stacks with bugs handling large-MTU L2CAP negotiation might fail to connect or transfer. However, this is the same IMTU already used on BlueZ's client (Tx) side and has worked reliably. - Only OBEX profiles (OPP, FTP, PSE, MAS, MNS) are affected; all other profiles using bt_io_listen() are unmodified. - Slightly larger kernel socket buffers, negligible on any modern platform. [ Other Info ] - Only src/profile.c is modified (19 lines changed). ** Affects: bluez (Ubuntu) Importance: Undecided Status: New ** Tags: fixed-upstream ** Tags added: fixed-upstream -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/2163625 Title: [SRU][Resolute] Set L2CAP IMTU for OBEX profile listeners to fix OPP Rx KPI To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/2163625/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
