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 <lkund...@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

Attachment: pgp393svOMH5m.pgp
Description: PGP signature

------------------------------------------------------------------------------
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to