[RESEND PATCH] Dump details for Bluetooth socket operations
Dmitry V. Levin
ldv at altlinux.org
Sat Nov 1 00:44:23 UTC 2014
Hi,
On Fri, Oct 03, 2014 at 11:40:28AM +0200, Lubomir Rintel wrote:
> * net.c: Dump details for AF_BLUETOOTH sockets
>
> Signed-off-by: Lubomir Rintel <lkundrak at v3.sk>
> ---
> Hi,
>
> this is essentially an updated resend of a patch that I've been using for years
> and apparently has been in review since 2011 [1] :)
>
> [1] http://permalink.gmane.org/gmane.comp.sysutils.strace.devel/2367
>
> Please have a look.
>
> Thank you!
> Lubo
>
> configure.ac | 1 +
> net.c | 43 +++++++++++++++++++++++++++++++++++++++++++
> xlat/bt_protocols.h | 29 +++++++++++++++++++++++++++++
> xlat/bt_protocols.in | 8 ++++++++
> 4 files changed, 81 insertions(+)
> create mode 100644 xlat/bt_protocols.h
> create mode 100644 xlat/bt_protocols.in
>
> diff --git a/configure.ac b/configure.ac
> index 9caa835..83f16c8 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -250,6 +250,7 @@ AC_CHECK_HEADERS(m4_normalize([
> sys/reg.h
> sys/uio.h
> sys/vfs.h
> + bluetooth/bluetooth.h
> ]))
We keep this list of headers sorted.
> AC_CHECK_HEADERS([linux/icmp.h linux/in6.h linux/netlink.h linux/if_packet.h],
> [], [], [#include <stddef.h>
> diff --git a/net.c b/net.c
> index 46c491f..96c5f73 100644
> --- a/net.c
> +++ b/net.c
> @@ -90,6 +90,13 @@
> #if defined(HAVE_LINUX_ICMP_H)
> # include <linux/icmp.h>
> #endif
> +#if defined(HAVE_BLUETOOTH_BLUETOOTH_H)
> +# include <bluetooth/bluetooth.h>
> +# include <bluetooth/rfcomm.h>
> +# include <bluetooth/l2cap.h>
> +# include <bluetooth/sco.h>
> +# include <bluetooth/hci.h>
> +#endif
> #ifndef PF_UNSPEC
> # define PF_UNSPEC AF_UNSPEC
> #endif
> @@ -110,6 +117,8 @@
> #include "xlat/netlink_protocols.h"
> #endif
>
> +#include "xlat/bt_protocols.h"
All constants referenced by this new file are defined in
bluetooth/bluetooth.h, so a check for HAVE_BLUETOOTH_BLUETOOTH_H
is needed here and ...
> @@ -533,6 +573,9 @@ sys_socket(struct tcb *tcp)
> printxval(netlink_protocols, tcp->u_arg[2], "NETLINK_???");
> break;
> #endif
> + case PF_BLUETOOTH:
> + printxval(bt_protocols, tcp->u_arg[2], "IPPROTO_???");
> + break;
> default:
> tprintf("%lu", tcp->u_arg[2]);
> break;
... here. To be on the safe side, I'd also add a check for PF_BLUETOOTH.
Finally, "IPPROTO_???" is not quite appropriate here,
lets replace it with "BTPROTO_???".
> +
> #include "xlat/msg_flags.h"
> #include "xlat/sockoptions.h"
>
> @@ -177,6 +186,12 @@ printsock(struct tcb *tcp, long addr, int addrlen)
> #ifdef AF_NETLINK
> struct sockaddr_nl nl;
> #endif
> +#if defined(HAVE_BLUETOOTH_BLUETOOTH_H)
> + struct sockaddr_sco sco;
> + struct sockaddr_rc rc;
> + struct sockaddr_l2 l2;
> + struct sockaddr_hci hci;
> +#endif
> } addrbuf;
> char string_addr[100];
>
> @@ -291,6 +306,31 @@ printsock(struct tcb *tcp, long addr, int addrlen)
> /* AF_AX25 AF_APPLETALK AF_NETROM AF_BRIDGE AF_AAL5
> AF_X25 AF_ROSE etc. still need to be done */
>
> +#if defined(HAVE_BLUETOOTH_BLUETOOTH_H)
> + case AF_BLUETOOTH:
I'd also add a check for AF_BLUETOOTH here.
> +
> + tprintf("{sco_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X} or ",
> + 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]);
> +
> + tprintf("{rc_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X, rc_channel=%d} or ",
> + 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);
> +
> + tprintf("{l2_psm=htobs(%d), l2_bdaddr=%02X:%02X:%02X:%02X:%02X:%02X, l2_cid=htobs(%d)} or ",
> + 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));
> +
> + tprintf("{hci_dev=%d}", btohs(addrbuf.hci.hci_dev));
I'd probably merged these tprintf calls into a single call,
but it's a matter of taste.
> +
> + break;
> +#endif
> +
> default:
> tprints("sa_data=");
> printstr(tcp, (long) &((struct sockaddr *) addr)->sa_data,
> diff --git a/xlat/bt_protocols.h b/xlat/bt_protocols.h
> new file mode 100644
> index 0000000..0ad983d
> --- /dev/null
> +++ b/xlat/bt_protocols.h
> @@ -0,0 +1,29 @@
> +/* Generated by ./xlat/gen.sh from ./xlat/bt_protocols.in; do not edit. */
All xlat/*.h files are generated, we do not add them to the repository.
> diff --git a/xlat/bt_protocols.in b/xlat/bt_protocols.in
> new file mode 100644
> index 0000000..1f7f348
> --- /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
--
ldv
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20141101/2f38b7e2/attachment.bin>
More information about the Strace-devel
mailing list