]> granicus.if.org Git - strace/commitdiff
Dump details for Bluetooth socket operations
authorLubomir Rintel <lkundrak@v3.sk>
Fri, 3 Oct 2014 09:40:28 +0000 (11:40 +0200)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 4 Nov 2014 15:38:39 +0000 (15:38 +0000)
* configure.ac (AC_CHECK_HEADERS): Add bluetooth/bluetooth.h.
* xlat/bt_protocols.in: New file.
* net.c [AF_BLUETOOTH && HAVE_BLUETOOTH_BLUETOOTH_H]: Include bluetooth
headers.
[PF_BLUETOOTH && HAVE_BLUETOOTH_BLUETOOTH_H]: Include "xlat/bt_protocols.h".
(printsock) [AF_BLUETOOTH && HAVE_BLUETOOTH_BLUETOOTH_H]: Dump details
for AF_BLUETOOTH sockets.
(sys_socket) [PF_BLUETOOTH && HAVE_BLUETOOTH_BLUETOOTH_H]: Decode
protocol for PF_BLUETOOTH sockets.

Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
configure.ac
net.c
xlat/bt_protocols.in [new file with mode: 0644]

index 54e9941d836405a2b3f1b3d65bd1a26733f984ea..98669fa34bba6a9f977712c5135f1492e46d6b7a 100644 (file)
@@ -227,6 +227,7 @@ AC_CHECK_FUNCS(m4_normalize([
 AC_CHECK_HEADERS(m4_normalize([
        asm/cachectl.h
        asm/sysmips.h
+       bluetooth/bluetooth.h
        elf.h
        inttypes.h
        ioctls.h
diff --git a/net.c b/net.c
index a0e90a8fae5f92d2dbf52ef5271f27e4b67dba4e..c38b1101e011d33c5f9406f64c6285ba937f55fd 100644 (file)
--- a/net.c
+++ b/net.c
 #if defined(HAVE_LINUX_ICMP_H)
 # include <linux/icmp.h>
 #endif
+#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
+# include <bluetooth/bluetooth.h>
+# include <bluetooth/hci.h>
+# include <bluetooth/l2cap.h>
+# include <bluetooth/rfcomm.h>
+# include <bluetooth/sco.h>
+#endif
 #ifndef PF_UNSPEC
 # define PF_UNSPEC AF_UNSPEC
 #endif
 #include "xlat/netlink_protocols.h"
 #endif
 
+#if defined(HAVE_BLUETOOTH_BLUETOOTH_H)
+# include "xlat/bt_protocols.h"
+#endif
+
 #include "xlat/msg_flags.h"
 #include "xlat/sockoptions.h"
 
@@ -176,6 +187,12 @@ printsock(struct tcb *tcp, long addr, int addrlen)
 #endif
 #ifdef AF_NETLINK
                struct sockaddr_nl nl;
+#endif
+#ifdef HAVE_BLUETOOTH_BLUETOOTH_H
+               struct sockaddr_hci hci;
+               struct sockaddr_l2 l2;
+               struct sockaddr_rc rc;
+               struct sockaddr_sco sco;
 #endif
        } addrbuf;
        char string_addr[100];
@@ -288,6 +305,26 @@ printsock(struct tcb *tcp, long addr, int addrlen)
                tprintf("pid=%d, groups=%08x", addrbuf.nl.nl_pid, addrbuf.nl.nl_groups);
                break;
 #endif /* AF_NETLINK */
+#if defined(AF_BLUETOOTH) && defined(HAVE_BLUETOOTH_BLUETOOTH_H)
+       case AF_BLUETOOTH:
+               tprintf("{sco_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X} or "
+                       "{rc_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X, rc_channel=%d} or "
+                       "{l2_psm=htobs(%d), l2_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X, l2_cid=htobs(%d)} or "
+                       "{hci_dev=htobs(%d)}",
+                       addrbuf.sco.sco_bdaddr.b[0], addrbuf.sco.sco_bdaddr.b[1],
+                       addrbuf.sco.sco_bdaddr.b[2], addrbuf.sco.sco_bdaddr.b[3],
+                       addrbuf.sco.sco_bdaddr.b[4], addrbuf.sco.sco_bdaddr.b[5],
+                       addrbuf.rc.rc_bdaddr.b[0], addrbuf.rc.rc_bdaddr.b[1],
+                       addrbuf.rc.rc_bdaddr.b[2], addrbuf.rc.rc_bdaddr.b[3],
+                       addrbuf.rc.rc_bdaddr.b[4], addrbuf.rc.rc_bdaddr.b[5],
+                       addrbuf.rc.rc_channel,
+                       btohs(addrbuf.l2.l2_psm), addrbuf.l2.l2_bdaddr.b[0],
+                       addrbuf.l2.l2_bdaddr.b[1], addrbuf.l2.l2_bdaddr.b[2],
+                       addrbuf.l2.l2_bdaddr.b[3], addrbuf.l2.l2_bdaddr.b[4],
+                       addrbuf.l2.l2_bdaddr.b[5], btohs(addrbuf.l2.l2_cid),
+                       btohs(addrbuf.hci.hci_dev));
+               break;
+#endif /* AF_BLUETOOTH && HAVE_BLUETOOTH_BLUETOOTH_H */
        /* AF_AX25 AF_APPLETALK AF_NETROM AF_BRIDGE AF_AAL5
        AF_X25 AF_ROSE etc. still need to be done */
 
@@ -546,6 +583,11 @@ sys_socket(struct tcb *tcp)
                case PF_NETLINK:
                        printxval(netlink_protocols, tcp->u_arg[2], "NETLINK_???");
                        break;
+#endif
+#if defined(PF_BLUETOOTH) && defined(HAVE_BLUETOOTH_BLUETOOTH_H)
+               case PF_BLUETOOTH:
+                       printxval(bt_protocols, tcp->u_arg[2], "BTPROTO_???");
+                       break;
 #endif
                default:
                        tprintf("%lu", tcp->u_arg[2]);
diff --git a/xlat/bt_protocols.in b/xlat/bt_protocols.in
new file mode 100644 (file)
index 0000000..1f7f348
--- /dev/null
@@ -0,0 +1,8 @@
+BTPROTO_L2CAP
+BTPROTO_HCI
+BTPROTO_SCO
+BTPROTO_RFCOMM
+BTPROTO_BNEP
+BTPROTO_CMTP
+BTPROTO_HIDP
+BTPROTO_AVDTP