gh-132429: Fix support of Bluetooth sockets on NetBSD and DragonFly BSD (GH-132431)

* Also add support for cid and bdaddr_type in the BTPROTO_L2CAP address on FreeBSD.
* Return cid in getsockname() for BTPROTO_L2CAP if it is not zero.
* Fix a compiler warning on FreeBSD.
This commit is contained in:
Serhiy Storchaka 2025-04-12 23:57:34 +03:00 committed by GitHub
parent 9634085af3
commit f2f86d3f45
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 125 additions and 84 deletions

View file

@ -122,6 +122,9 @@ typedef int socklen_t;
#endif
#ifdef HAVE_BLUETOOTH_H
#ifdef __FreeBSD__
#define L2CAP_SOCKET_CHECKED
#endif
#include <bluetooth.h>
#endif
@ -274,18 +277,22 @@ typedef union sock_addr {
struct sockaddr_in6 in6;
struct sockaddr_storage storage;
#endif
#if defined(HAVE_BLUETOOTH_H) && defined(__FreeBSD__)
struct sockaddr_l2cap bt_l2;
struct sockaddr_rfcomm bt_rc;
struct sockaddr_sco bt_sco;
struct sockaddr_hci bt_hci;
#elif defined(HAVE_BLUETOOTH_BLUETOOTH_H)
#if defined(MS_WINDOWS)
struct SOCKADDR_BTH_REDEF bt_rc;
#elif defined(HAVE_BLUETOOTH_BLUETOOTH_H) // Linux
struct sockaddr_l2 bt_l2;
struct sockaddr_rc bt_rc;
struct sockaddr_sco bt_sco;
struct sockaddr_hci bt_hci;
#elif defined(MS_WINDOWS)
struct SOCKADDR_BTH_REDEF bt_rc;
#elif defined(HAVE_BLUETOOTH_H)
# if defined(__FreeBSD__)
struct sockaddr_l2cap bt_l2;
struct sockaddr_rfcomm bt_rc;
struct sockaddr_sco bt_sco;
struct sockaddr_hci bt_hci;
# else // NetBSD, DragonFly BSD
struct sockaddr_bt bt;
# endif
#endif
#ifdef HAVE_NETPACKET_PACKET_H
struct sockaddr_ll ll;