From c400a1c70ebebde368481c01e85d68e7fd118be6 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Fri, 3 Oct 2014 11:40:28 +0200 Subject: [PATCH] Dump details for Bluetooth socket operations * 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 Signed-off-by: Dmitry V. Levin --- configure.ac | 1 + net.c | 42 ++++++++++++++++++++++++++++++++++++++++++ xlat/bt_protocols.in | 8 ++++++++ 3 files changed, 51 insertions(+) create mode 100644 xlat/bt_protocols.in diff --git a/configure.ac b/configure.ac index 54e9941d..98669fa3 100644 --- a/configure.ac +++ b/configure.ac @@ -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 a0e90a8f..c38b1101 100644 --- a/net.c +++ b/net.c @@ -90,6 +90,13 @@ #if defined(HAVE_LINUX_ICMP_H) # include #endif +#ifdef HAVE_BLUETOOTH_BLUETOOTH_H +# include +# include +# include +# include +# include +#endif #ifndef PF_UNSPEC # define PF_UNSPEC AF_UNSPEC #endif @@ -110,6 +117,10 @@ #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 index 00000000..1f7f3485 --- /dev/null +++ b/xlat/bt_protocols.in @@ -0,0 +1,8 @@ +BTPROTO_L2CAP +BTPROTO_HCI +BTPROTO_SCO +BTPROTO_RFCOMM +BTPROTO_BNEP +BTPROTO_CMTP +BTPROTO_HIDP +BTPROTO_AVDTP -- 2.40.0