All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] monitor: Add AVDTP support to btmon
@ 2015-03-20 13:36 Bharat Panda
  2015-03-23  9:34 ` Bharat Bhusan Panda
  0 siblings, 1 reply; 5+ messages in thread
From: Bharat Panda @ 2015-03-20 13:36 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: cpgs, Bharat Panda

Initial support for decoding AVDTP packets added to btmon.

e.g.

> ACL Data RX: Handle 70 flags 0x02 dlen 18
      Channel: 64 len 14 [PSM 25 mode 0] {chan 0}
      AVDTP: Command Get Config transaction 5 nsp 0x00

        50 03 04 04 01 00 07 06 00 00 11 15 02 fa
< ACL Data TX: Handle 70 flags 0x00 dlen 6
      Channel: 64 len 2 [PSM 25 mode 0] {chan 0}
      AVDTP: Response Set Config transaction 5 nsp 0x00

        52 03
---
 Makefile.tools  |   1 +
 monitor/avdtp.c | 172 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 monitor/avdtp.h |  25 ++++++++
 monitor/l2cap.c |   4 ++
 4 files changed, 202 insertions(+)
 create mode 100644 monitor/avdtp.c
 create mode 100644 monitor/avdtp.h

diff --git a/Makefile.tools b/Makefile.tools
index 1d2dc94..e663b46 100644
--- a/Makefile.tools
+++ b/Makefile.tools
@@ -27,6 +27,7 @@ monitor_btmon_SOURCES = monitor/main.c monitor/bt.h \
 				monitor/l2cap.h monitor/l2cap.c \
 				monitor/sdp.h monitor/sdp.c \
 				monitor/avctp.h monitor/avctp.c \
+				monitor/avdtp.h monitor/avdtp.c \
 				monitor/rfcomm.h monitor/rfcomm.c \
 				monitor/uuid.h monitor/uuid.c \
 				monitor/hwdb.h monitor/hwdb.c \
diff --git a/monitor/avdtp.c b/monitor/avdtp.c
new file mode 100644
index 0000000..fba5eec
--- /dev/null
+++ b/monitor/avdtp.c
@@ -0,0 +1,172 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2004-2011  Marcel Holtmann <marcel@holtmann.org>
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <inttypes.h>
+
+#include "lib/bluetooth.h"
+
+#include "src/shared/util.h"
+#include "bt.h"
+#include "packet.h"
+#include "display.h"
+#include "l2cap.h"
+#include "uuid.h"
+#include "keys.h"
+#include "sdp.h"
+#include "avdtp.h"
+
+/* AVDTP opcodes */
+#define AVDTP_DISCOVER_SEP				0x01
+#define AVDTP_GET_CAPABILITIES			0x02
+#define AVDTP_SET_CONFIG					0x03
+#define AVDTP_GET_CONFIG					0x04
+#define AVDTP_RECONFIG				0x05
+#define AVDTP_OPEN					0x06
+#define AVDTP_START					0x07
+#define AVDTP_CLOSE					0x08
+#define AVDTP_SUSPEND				0x09
+#define AVDTP_ABORT					0x0A
+#define AVDTP_SEC_CONTROL			0x0B
+#define AVDTP_GET_ALL_CAPABILITIES	0x0C
+#define AVDTP_DELAY_REPORT			0x0D
+
+struct avdtp_frame {
+	uint8_t hdr;
+	uint8_t nsp;
+	uint8_t tsid;
+	struct l2cap_frame l2cap_frame;
+};
+
+static const char *pt2str(uint8_t hdr)
+{
+	switch (hdr & 0x0c) {
+	case 0x00:
+		return "Single";
+	case 0x04:
+		return "Start";
+	case 0x08:
+		return "Cont";
+	case 0x0c:
+		return "End";
+	default:
+		return "Unknown";
+	}
+}
+
+static const char *mt2str(uint8_t hdr)
+{
+	switch (hdr & 0x03) {
+	case 0x00:
+		return "Command";
+	case 0x02:
+		return "Response";
+	case 0x03:
+		return "Reject";
+	default:
+		return "Unknown";
+	}
+}
+
+static const char *sig2str(uint8_t tsid)
+{
+	switch (tsid) {
+	case AVDTP_DISCOVER_SEP:
+		return "Discover";
+	case AVDTP_GET_CAPABILITIES:
+		return "Get Capabilities";
+	case AVDTP_SET_CONFIG:
+		return "Set Config";
+	case AVDTP_GET_CONFIG:
+		return "Get Config";
+	case AVDTP_RECONFIG:
+		return "Reconfig";
+	case AVDTP_OPEN:
+		return "Open";
+	case AVDTP_START:
+		return "Start";
+	case AVDTP_CLOSE:
+		return "Close";
+	case AVDTP_SUSPEND:
+		return "Suspend";
+	case AVDTP_ABORT:
+		return "Anort";
+	case AVDTP_SEC_CONTROL:
+		return "Security Control";
+	case AVDTP_GET_ALL_CAPABILITIES:
+		return "Get All Capabilities";
+	case AVDTP_DELAY_REPORT:
+		return "Delay report";
+	default:
+		return "Unknown Opcode";
+	}
+}
+
+void avdtp_packet(const struct l2cap_frame *frame)
+{
+	struct l2cap_frame *l2cap_frame;
+	struct avdtp_frame avdtp_frame;
+	const char *pdu_color;
+
+	l2cap_frame_pull(&avdtp_frame.l2cap_frame, frame, 0);
+
+	l2cap_frame = &avdtp_frame.l2cap_frame;
+
+	avdtp_frame.tsid = 0x00;
+	if (!l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.hdr) ||
+			!l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.tsid)) {
+		print_text(COLOR_ERROR, "frame too short");
+		packet_hexdump(frame->data, frame->size);
+		return;
+	}
+
+	avdtp_frame.nsp = 0x00;
+	if ((avdtp_frame.hdr & 0x0c) == 0x04)
+		if (!l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.nsp)) {
+			packet_hexdump(frame->data, frame->size);
+			return;
+	}
+
+	l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.tsid);
+
+	if (frame->in)
+		pdu_color = COLOR_MAGENTA;
+	else
+		pdu_color = COLOR_BLUE;
+
+	print_indent(6, pdu_color, "AVDTP: ", mt2str(avdtp_frame.hdr),
+				COLOR_OFF, " %s transaction %d nsp 0x%02x\n",
+				avdtp_frame.hdr & 0x08 ?
+				pt2str(avdtp_frame.hdr) :
+				sig2str(avdtp_frame.tsid),
+				avdtp_frame.hdr >> 4, avdtp_frame.nsp);
+
+	packet_hexdump(frame->data, frame->size);
+}
diff --git a/monitor/avdtp.h b/monitor/avdtp.h
new file mode 100644
index 0000000..0173c21
--- /dev/null
+++ b/monitor/avdtp.h
@@ -0,0 +1,25 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2011-2014  Intel Corporation
+ *  Copyright (C) 2002-2010  Marcel Holtmann <marcel@holtmann.org>
+ *
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 of the License, or (at your option) any later version.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+void avdtp_packet(const struct l2cap_frame *frame);
diff --git a/monitor/l2cap.c b/monitor/l2cap.c
index 5faa26f..f41ffd4 100644
--- a/monitor/l2cap.c
+++ b/monitor/l2cap.c
@@ -42,6 +42,7 @@
 #include "keys.h"
 #include "sdp.h"
 #include "avctp.h"
+#include "avdtp.h"
 #include "rfcomm.h"
 
 /* L2CAP Control Field bit masks */
@@ -2958,6 +2959,9 @@ static void l2cap_frame(uint16_t index, bool in, uint16_t handle,
 		case 0x001B:
 			avctp_packet(&frame);
 			break;
+		case 0x019:
+			avdtp_packet(&frame);
+			break;
 		default:
 			packet_hexdump(data, size);
 			break;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* RE: [PATCH v2] monitor: Add AVDTP support to btmon
  2015-03-20 13:36 [PATCH v2] monitor: Add AVDTP support to btmon Bharat Panda
@ 2015-03-23  9:34 ` Bharat Bhusan Panda
  2015-03-23 10:36   ` Luiz Augusto von Dentz
  0 siblings, 1 reply; 5+ messages in thread
From: Bharat Bhusan Panda @ 2015-03-23  9:34 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: cpgs

ping

> -----Original Message-----
> From: linux-bluetooth-owner@vger.kernel.org [mailto:linux-bluetooth-
> owner@vger.kernel.org] On Behalf Of Bharat Panda
> Sent: Friday, March 20, 2015 7:07 PM
> To: linux-bluetooth@vger.kernel.org
> Cc: cpgs@samsung.com; Bharat Panda
> Subject: [PATCH v2] monitor: Add AVDTP support to btmon
> 
> Initial support for decoding AVDTP packets added to btmon.
> 
> e.g.
> 
> > ACL Data RX: Handle 70 flags 0x02 dlen 18
>       Channel: 64 len 14 [PSM 25 mode 0] {chan 0}
>       AVDTP: Command Get Config transaction 5 nsp 0x00
> 
>         50 03 04 04 01 00 07 06 00 00 11 15 02 fa < ACL Data TX: Handle 70
flags
> 0x00 dlen 6
>       Channel: 64 len 2 [PSM 25 mode 0] {chan 0}
>       AVDTP: Response Set Config transaction 5 nsp 0x00
> 
>         52 03
> ---
>  Makefile.tools  |   1 +
>  monitor/avdtp.c | 172
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  monitor/avdtp.h |  25 ++++++++
>  monitor/l2cap.c |   4 ++
>  4 files changed, 202 insertions(+)
>  create mode 100644 monitor/avdtp.c
>  create mode 100644 monitor/avdtp.h
> 
> diff --git a/Makefile.tools b/Makefile.tools index 1d2dc94..e663b46 100644
> --- a/Makefile.tools
> +++ b/Makefile.tools
> @@ -27,6 +27,7 @@ monitor_btmon_SOURCES = monitor/main.c
> monitor/bt.h \
>  				monitor/l2cap.h monitor/l2cap.c \
>  				monitor/sdp.h monitor/sdp.c \
>  				monitor/avctp.h monitor/avctp.c \
> +				monitor/avdtp.h monitor/avdtp.c \
>  				monitor/rfcomm.h monitor/rfcomm.c \
>  				monitor/uuid.h monitor/uuid.c \
>  				monitor/hwdb.h monitor/hwdb.c \
> diff --git a/monitor/avdtp.c b/monitor/avdtp.c new file mode 100644 index
> 0000000..fba5eec
> --- /dev/null
> +++ b/monitor/avdtp.c
> @@ -0,0 +1,172 @@
> +/*
> + *
> + *  BlueZ - Bluetooth protocol stack for Linux
> + *
> + *  Copyright (C) 2004-2011  Marcel Holtmann <marcel@holtmann.org>
> + *
> + *
> + *  This program is free software; you can redistribute it and/or
> +modify
> + *  it under the terms of the GNU General Public License as published
> +by
> + *  the Free Software Foundation; either version 2 of the License, or
> + *  (at your option) any later version.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
> +02110-1301  USA
> + *
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include <config.h>
> +#endif
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include <ctype.h>
> +#include <inttypes.h>
> +
> +#include "lib/bluetooth.h"
> +
> +#include "src/shared/util.h"
> +#include "bt.h"
> +#include "packet.h"
> +#include "display.h"
> +#include "l2cap.h"
> +#include "uuid.h"
> +#include "keys.h"
> +#include "sdp.h"
> +#include "avdtp.h"
> +
> +/* AVDTP opcodes */
> +#define AVDTP_DISCOVER_SEP				0x01
> +#define AVDTP_GET_CAPABILITIES			0x02
> +#define AVDTP_SET_CONFIG					0x03
> +#define AVDTP_GET_CONFIG					0x04
> +#define AVDTP_RECONFIG				0x05
> +#define AVDTP_OPEN					0x06
> +#define AVDTP_START					0x07
> +#define AVDTP_CLOSE					0x08
> +#define AVDTP_SUSPEND				0x09
> +#define AVDTP_ABORT					0x0A
> +#define AVDTP_SEC_CONTROL			0x0B
> +#define AVDTP_GET_ALL_CAPABILITIES	0x0C
> +#define AVDTP_DELAY_REPORT			0x0D
> +
> +struct avdtp_frame {
> +	uint8_t hdr;
> +	uint8_t nsp;
> +	uint8_t tsid;
> +	struct l2cap_frame l2cap_frame;
> +};
> +
> +static const char *pt2str(uint8_t hdr)
> +{
> +	switch (hdr & 0x0c) {
> +	case 0x00:
> +		return "Single";
> +	case 0x04:
> +		return "Start";
> +	case 0x08:
> +		return "Cont";
> +	case 0x0c:
> +		return "End";
> +	default:
> +		return "Unknown";
> +	}
> +}
> +
> +static const char *mt2str(uint8_t hdr)
> +{
> +	switch (hdr & 0x03) {
> +	case 0x00:
> +		return "Command";
> +	case 0x02:
> +		return "Response";
> +	case 0x03:
> +		return "Reject";
> +	default:
> +		return "Unknown";
> +	}
> +}
> +
> +static const char *sig2str(uint8_t tsid) {
> +	switch (tsid) {
> +	case AVDTP_DISCOVER_SEP:
> +		return "Discover";
> +	case AVDTP_GET_CAPABILITIES:
> +		return "Get Capabilities";
> +	case AVDTP_SET_CONFIG:
> +		return "Set Config";
> +	case AVDTP_GET_CONFIG:
> +		return "Get Config";
> +	case AVDTP_RECONFIG:
> +		return "Reconfig";
> +	case AVDTP_OPEN:
> +		return "Open";
> +	case AVDTP_START:
> +		return "Start";
> +	case AVDTP_CLOSE:
> +		return "Close";
> +	case AVDTP_SUSPEND:
> +		return "Suspend";
> +	case AVDTP_ABORT:
> +		return "Anort";
> +	case AVDTP_SEC_CONTROL:
> +		return "Security Control";
> +	case AVDTP_GET_ALL_CAPABILITIES:
> +		return "Get All Capabilities";
> +	case AVDTP_DELAY_REPORT:
> +		return "Delay report";
> +	default:
> +		return "Unknown Opcode";
> +	}
> +}
> +
> +void avdtp_packet(const struct l2cap_frame *frame) {
> +	struct l2cap_frame *l2cap_frame;
> +	struct avdtp_frame avdtp_frame;
> +	const char *pdu_color;
> +
> +	l2cap_frame_pull(&avdtp_frame.l2cap_frame, frame, 0);
> +
> +	l2cap_frame = &avdtp_frame.l2cap_frame;
> +
> +	avdtp_frame.tsid = 0x00;
> +	if (!l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.hdr) ||
> +			!l2cap_frame_get_u8(l2cap_frame,
> &avdtp_frame.tsid)) {
> +		print_text(COLOR_ERROR, "frame too short");
> +		packet_hexdump(frame->data, frame->size);
> +		return;
> +	}
> +
> +	avdtp_frame.nsp = 0x00;
> +	if ((avdtp_frame.hdr & 0x0c) == 0x04)
> +		if (!l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.nsp)) {
> +			packet_hexdump(frame->data, frame->size);
> +			return;
> +	}
> +
> +	l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.tsid);
> +
> +	if (frame->in)
> +		pdu_color = COLOR_MAGENTA;
> +	else
> +		pdu_color = COLOR_BLUE;
> +
> +	print_indent(6, pdu_color, "AVDTP: ", mt2str(avdtp_frame.hdr),
> +				COLOR_OFF, " %s transaction %d nsp
> 0x%02x\n",
> +				avdtp_frame.hdr & 0x08 ?
> +				pt2str(avdtp_frame.hdr) :
> +				sig2str(avdtp_frame.tsid),
> +				avdtp_frame.hdr >> 4, avdtp_frame.nsp);
> +
> +	packet_hexdump(frame->data, frame->size); }
> diff --git a/monitor/avdtp.h b/monitor/avdtp.h new file mode 100644 index
> 0000000..0173c21
> --- /dev/null
> +++ b/monitor/avdtp.h
> @@ -0,0 +1,25 @@
> +/*
> + *
> + *  BlueZ - Bluetooth protocol stack for Linux
> + *
> + *  Copyright (C) 2011-2014  Intel Corporation
> + *  Copyright (C) 2002-2010  Marcel Holtmann <marcel@holtmann.org>
> + *
> + *
> + *  This library is free software; you can redistribute it and/or
> + *  modify it under the terms of the GNU Lesser General Public
> + *  License as published by the Free Software Foundation; either
> + *  version 2.1 of the License, or (at your option) any later version.
> + *
> + *  This library is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> GNU
> + *  Lesser General Public License for more details.
> + *
> + *  You should have received a copy of the GNU Lesser General Public
> + *  License along with this library; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
> +02110-1301  USA
> + *
> + */
> +
> +void avdtp_packet(const struct l2cap_frame *frame);
> diff --git a/monitor/l2cap.c b/monitor/l2cap.c index 5faa26f..f41ffd4
100644
> --- a/monitor/l2cap.c
> +++ b/monitor/l2cap.c
> @@ -42,6 +42,7 @@
>  #include "keys.h"
>  #include "sdp.h"
>  #include "avctp.h"
> +#include "avdtp.h"
>  #include "rfcomm.h"
> 
>  /* L2CAP Control Field bit masks */
> @@ -2958,6 +2959,9 @@ static void l2cap_frame(uint16_t index, bool in,
> uint16_t handle,
>  		case 0x001B:
>  			avctp_packet(&frame);
>  			break;
> +		case 0x019:
> +			avdtp_packet(&frame);
> +			break;
>  		default:
>  			packet_hexdump(data, size);
>  			break;
> --
> 1.9.1
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth"
in
> the body of a message to majordomo@vger.kernel.org More majordomo
> info at  http://vger.kernel.org/majordomo-info.html


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] monitor: Add AVDTP support to btmon
  2015-03-23  9:34 ` Bharat Bhusan Panda
@ 2015-03-23 10:36   ` Luiz Augusto von Dentz
  2015-03-23 14:56     ` Bharat Bhusan Panda
  0 siblings, 1 reply; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2015-03-23 10:36 UTC (permalink / raw)
  To: Bharat Bhusan Panda; +Cc: linux-bluetooth, cpgs

Hi Bharat,

On Mon, Mar 23, 2015 at 11:34 AM, Bharat Bhusan Panda
<bharat.panda@samsung.com> wrote:
> ping
>
>> -----Original Message-----
>> From: linux-bluetooth-owner@vger.kernel.org [mailto:linux-bluetooth-
>> owner@vger.kernel.org] On Behalf Of Bharat Panda
>> Sent: Friday, March 20, 2015 7:07 PM
>> To: linux-bluetooth@vger.kernel.org
>> Cc: cpgs@samsung.com; Bharat Panda
>> Subject: [PATCH v2] monitor: Add AVDTP support to btmon
>>
>> Initial support for decoding AVDTP packets added to btmon.
>>
>> e.g.
>>
>> > ACL Data RX: Handle 70 flags 0x02 dlen 18
>>       Channel: 64 len 14 [PSM 25 mode 0] {chan 0}
>>       AVDTP: Command Get Config transaction 5 nsp 0x00
>>
>>         50 03 04 04 01 00 07 06 00 00 11 15 02 fa < ACL Data TX: Handle 70
> flags
>> 0x00 dlen 6
>>       Channel: 64 len 2 [PSM 25 mode 0] {chan 0}
>>       AVDTP: Response Set Config transaction 5 nsp 0x00
>>
>>         52 03
>> ---
>>  Makefile.tools  |   1 +
>>  monitor/avdtp.c | 172
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>  monitor/avdtp.h |  25 ++++++++
>>  monitor/l2cap.c |   4 ++
>>  4 files changed, 202 insertions(+)
>>  create mode 100644 monitor/avdtp.c
>>  create mode 100644 monitor/avdtp.h
>>
>> diff --git a/Makefile.tools b/Makefile.tools index 1d2dc94..e663b46 100644
>> --- a/Makefile.tools
>> +++ b/Makefile.tools
>> @@ -27,6 +27,7 @@ monitor_btmon_SOURCES = monitor/main.c
>> monitor/bt.h \
>>                               monitor/l2cap.h monitor/l2cap.c \
>>                               monitor/sdp.h monitor/sdp.c \
>>                               monitor/avctp.h monitor/avctp.c \
>> +                             monitor/avdtp.h monitor/avdtp.c \
>>                               monitor/rfcomm.h monitor/rfcomm.c \
>>                               monitor/uuid.h monitor/uuid.c \
>>                               monitor/hwdb.h monitor/hwdb.c \
>> diff --git a/monitor/avdtp.c b/monitor/avdtp.c new file mode 100644 index
>> 0000000..fba5eec
>> --- /dev/null
>> +++ b/monitor/avdtp.c
>> @@ -0,0 +1,172 @@
>> +/*
>> + *
>> + *  BlueZ - Bluetooth protocol stack for Linux
>> + *
>> + *  Copyright (C) 2004-2011  Marcel Holtmann <marcel@holtmann.org>
>> + *
>> + *
>> + *  This program is free software; you can redistribute it and/or
>> +modify
>> + *  it under the terms of the GNU General Public License as published
>> +by
>> + *  the Free Software Foundation; either version 2 of the License, or
>> + *  (at your option) any later version.
>> + *
>> + *  This program is distributed in the hope that it will be useful,
>> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + *  GNU General Public License for more details.
>> + *
>> + *  You should have received a copy of the GNU General Public License
>> + *  along with this program; if not, write to the Free Software
>> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
>> +02110-1301  USA
>> + *
>> + */
>> +
>> +#ifdef HAVE_CONFIG_H
>> +#include <config.h>
>> +#endif
>> +
>> +#include <stdio.h>
>> +#include <stdlib.h>
>> +#include <string.h>
>> +#include <ctype.h>
>> +#include <inttypes.h>
>> +
>> +#include "lib/bluetooth.h"
>> +
>> +#include "src/shared/util.h"
>> +#include "bt.h"
>> +#include "packet.h"
>> +#include "display.h"
>> +#include "l2cap.h"
>> +#include "uuid.h"
>> +#include "keys.h"
>> +#include "sdp.h"
>> +#include "avdtp.h"
>> +
>> +/* AVDTP opcodes */
>> +#define AVDTP_DISCOVER_SEP                           0x01
>> +#define AVDTP_GET_CAPABILITIES                       0x02
>> +#define AVDTP_SET_CONFIG                                     0x03
>> +#define AVDTP_GET_CONFIG                                     0x04
>> +#define AVDTP_RECONFIG                               0x05
>> +#define AVDTP_OPEN                                   0x06
>> +#define AVDTP_START                                  0x07
>> +#define AVDTP_CLOSE                                  0x08
>> +#define AVDTP_SUSPEND                                0x09
>> +#define AVDTP_ABORT                                  0x0A
>> +#define AVDTP_SEC_CONTROL                    0x0B
>> +#define AVDTP_GET_ALL_CAPABILITIES   0x0C
>> +#define AVDTP_DELAY_REPORT                   0x0D
>> +
>> +struct avdtp_frame {
>> +     uint8_t hdr;
>> +     uint8_t nsp;
>> +     uint8_t tsid;
>> +     struct l2cap_frame l2cap_frame;
>> +};
>> +
>> +static const char *pt2str(uint8_t hdr)
>> +{
>> +     switch (hdr & 0x0c) {
>> +     case 0x00:
>> +             return "Single";
>> +     case 0x04:
>> +             return "Start";
>> +     case 0x08:
>> +             return "Cont";
>> +     case 0x0c:
>> +             return "End";
>> +     default:
>> +             return "Unknown";
>> +     }
>> +}
>> +
>> +static const char *mt2str(uint8_t hdr)
>> +{
>> +     switch (hdr & 0x03) {
>> +     case 0x00:
>> +             return "Command";
>> +     case 0x02:
>> +             return "Response";
>> +     case 0x03:
>> +             return "Reject";
>> +     default:
>> +             return "Unknown";
>> +     }
>> +}
>> +
>> +static const char *sig2str(uint8_t tsid) {
>> +     switch (tsid) {
>> +     case AVDTP_DISCOVER_SEP:
>> +             return "Discover";
>> +     case AVDTP_GET_CAPABILITIES:
>> +             return "Get Capabilities";
>> +     case AVDTP_SET_CONFIG:
>> +             return "Set Config";
>> +     case AVDTP_GET_CONFIG:
>> +             return "Get Config";
>> +     case AVDTP_RECONFIG:
>> +             return "Reconfig";
>> +     case AVDTP_OPEN:
>> +             return "Open";
>> +     case AVDTP_START:
>> +             return "Start";
>> +     case AVDTP_CLOSE:
>> +             return "Close";
>> +     case AVDTP_SUSPEND:
>> +             return "Suspend";
>> +     case AVDTP_ABORT:
>> +             return "Anort";
>> +     case AVDTP_SEC_CONTROL:
>> +             return "Security Control";
>> +     case AVDTP_GET_ALL_CAPABILITIES:
>> +             return "Get All Capabilities";
>> +     case AVDTP_DELAY_REPORT:
>> +             return "Delay report";
>> +     default:
>> +             return "Unknown Opcode";
>> +     }
>> +}
>> +
>> +void avdtp_packet(const struct l2cap_frame *frame) {
>> +     struct l2cap_frame *l2cap_frame;
>> +     struct avdtp_frame avdtp_frame;
>> +     const char *pdu_color;
>> +
>> +     l2cap_frame_pull(&avdtp_frame.l2cap_frame, frame, 0);
>> +
>> +     l2cap_frame = &avdtp_frame.l2cap_frame;
>> +
>> +     avdtp_frame.tsid = 0x00;
>> +     if (!l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.hdr) ||
>> +                     !l2cap_frame_get_u8(l2cap_frame,
>> &avdtp_frame.tsid)) {
>> +             print_text(COLOR_ERROR, "frame too short");
>> +             packet_hexdump(frame->data, frame->size);
>> +             return;
>> +     }

It looks like you are treating all frames as signalling but A2DP uses
the same PSM for streaming so I wonder if you have tried this with an
active stream?

>> +     avdtp_frame.nsp = 0x00;
>> +     if ((avdtp_frame.hdr & 0x0c) == 0x04)
>> +             if (!l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.nsp)) {
>> +                     packet_hexdump(frame->data, frame->size);
>> +                     return;
>> +     }
>> +
>> +     l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.tsid);
>> +
>> +     if (frame->in)
>> +             pdu_color = COLOR_MAGENTA;
>> +     else
>> +             pdu_color = COLOR_BLUE;
>> +
>> +     print_indent(6, pdu_color, "AVDTP: ", mt2str(avdtp_frame.hdr),
>> +                             COLOR_OFF, " %s transaction %d nsp
>> 0x%02x\n",
>> +                             avdtp_frame.hdr & 0x08 ?
>> +                             pt2str(avdtp_frame.hdr) :
>> +                             sig2str(avdtp_frame.tsid),
>> +                             avdtp_frame.hdr >> 4, avdtp_frame.nsp);
>> +
>> +     packet_hexdump(frame->data, frame->size); }
>> diff --git a/monitor/avdtp.h b/monitor/avdtp.h new file mode 100644 index
>> 0000000..0173c21
>> --- /dev/null
>> +++ b/monitor/avdtp.h
>> @@ -0,0 +1,25 @@
>> +/*
>> + *
>> + *  BlueZ - Bluetooth protocol stack for Linux
>> + *
>> + *  Copyright (C) 2011-2014  Intel Corporation
>> + *  Copyright (C) 2002-2010  Marcel Holtmann <marcel@holtmann.org>
>> + *
>> + *
>> + *  This library is free software; you can redistribute it and/or
>> + *  modify it under the terms of the GNU Lesser General Public
>> + *  License as published by the Free Software Foundation; either
>> + *  version 2.1 of the License, or (at your option) any later version.
>> + *
>> + *  This library is distributed in the hope that it will be useful,
>> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> GNU
>> + *  Lesser General Public License for more details.
>> + *
>> + *  You should have received a copy of the GNU Lesser General Public
>> + *  License along with this library; if not, write to the Free Software
>> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
>> +02110-1301  USA
>> + *
>> + */
>> +
>> +void avdtp_packet(const struct l2cap_frame *frame);
>> diff --git a/monitor/l2cap.c b/monitor/l2cap.c index 5faa26f..f41ffd4
> 100644
>> --- a/monitor/l2cap.c
>> +++ b/monitor/l2cap.c
>> @@ -42,6 +42,7 @@
>>  #include "keys.h"
>>  #include "sdp.h"
>>  #include "avctp.h"
>> +#include "avdtp.h"
>>  #include "rfcomm.h"
>>
>>  /* L2CAP Control Field bit masks */
>> @@ -2958,6 +2959,9 @@ static void l2cap_frame(uint16_t index, bool in,
>> uint16_t handle,
>>               case 0x001B:
>>                       avctp_packet(&frame);
>>                       break;
>> +             case 0x019:
>> +                     avdtp_packet(&frame);
>> +                     break;
>>               default:
>>                       packet_hexdump(data, size);
>>                       break;
>> --
>> 1.9.1
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth"
> in
>> the body of a message to majordomo@vger.kernel.org More majordomo
>> info at  http://vger.kernel.org/majordomo-info.html
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Luiz Augusto von Dentz

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH v2] monitor: Add AVDTP support to btmon
  2015-03-23 10:36   ` Luiz Augusto von Dentz
@ 2015-03-23 14:56     ` Bharat Bhusan Panda
  2015-03-27 10:50       ` Bharat Bhusan Panda
  0 siblings, 1 reply; 5+ messages in thread
From: Bharat Bhusan Panda @ 2015-03-23 14:56 UTC (permalink / raw)
  To: 'Luiz Augusto von Dentz'; +Cc: linux-bluetooth, cpgs

Hi Luiz,

> >> +
> >> +void avdtp_packet(const struct l2cap_frame *frame) {
> >> +     struct l2cap_frame *l2cap_frame;
> >> +     struct avdtp_frame avdtp_frame;
> >> +     const char *pdu_color;
> >> +
> >> +     l2cap_frame_pull(&avdtp_frame.l2cap_frame, frame, 0);
> >> +
> >> +     l2cap_frame = &avdtp_frame.l2cap_frame;
> >> +
> >> +     avdtp_frame.tsid = 0x00;
> >> +     if (!l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.hdr) ||
> >> +                     !l2cap_frame_get_u8(l2cap_frame,
> >> &avdtp_frame.tsid)) {
> >> +             print_text(COLOR_ERROR, "frame too short");
> >> +             packet_hexdump(frame->data, frame->size);
> >> +             return;
> >> +     }
> 
> It looks like you are treating all frames as signalling but A2DP uses the same
> PSM for streaming so I wonder if you have tried this with an active stream?
Yes, I was testing it through mecApp, so couldn't test the real media streaming of the same.
I agree, it is treating all frames as signaling frames, which is how it should not be. I will submit another version for this patch handling the same.
> 

Thanks
Best Regards,
Bharat


^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH v2] monitor: Add AVDTP support to btmon
  2015-03-23 14:56     ` Bharat Bhusan Panda
@ 2015-03-27 10:50       ` Bharat Bhusan Panda
  0 siblings, 0 replies; 5+ messages in thread
From: Bharat Bhusan Panda @ 2015-03-27 10:50 UTC (permalink / raw)
  To: 'Luiz Augusto von Dentz'; +Cc: linux-bluetooth, cpgs

Hi Luiz,

> -----Original Message-----
> From: linux-bluetooth-owner@vger.kernel.org [mailto:linux-bluetooth-
> owner@vger.kernel.org] On Behalf Of Bharat Bhusan Panda
> Sent: Monday, March 23, 2015 8:27 PM
> To: 'Luiz Augusto von Dentz'
> Cc: linux-bluetooth@vger.kernel.org; cpgs@samsung.com
> Subject: RE: [PATCH v2] monitor: Add AVDTP support to btmon
> 
> Hi Luiz,
> 
> > >> +
> > >> +void avdtp_packet(const struct l2cap_frame *frame) {
> > >> +     struct l2cap_frame *l2cap_frame;
> > >> +     struct avdtp_frame avdtp_frame;
> > >> +     const char *pdu_color;
> > >> +
> > >> +     l2cap_frame_pull(&avdtp_frame.l2cap_frame, frame, 0);
> > >> +
> > >> +     l2cap_frame = &avdtp_frame.l2cap_frame;
> > >> +
> > >> +     avdtp_frame.tsid = 0x00;
> > >> +     if (!l2cap_frame_get_u8(l2cap_frame, &avdtp_frame.hdr) ||
> > >> +                     !l2cap_frame_get_u8(l2cap_frame,
> > >> &avdtp_frame.tsid)) {
> > >> +             print_text(COLOR_ERROR, "frame too short");
> > >> +             packet_hexdump(frame->data, frame->size);
> > >> +             return;
> > >> +     }
> >
> > It looks like you are treating all frames as signalling but A2DP uses
> > the same PSM for streaming so I wonder if you have tried this with an
> active stream?
> Yes, I was testing it through mecApp, so couldn't test the real media
> streaming of the same.
> I agree, it is treating all frames as signaling frames, which is how it should not
> be. I will submit another version for this patch handling the same.
> >
> 
I have submitted new version of the patch, which treats signaling and media frames in different frame numbers (as it is done in hcidump).
As of now, this patch parses only AVDTP signaling frame and raw dump on media frames (which will be handled in my following set of patches.
Please review.

Thanks
Best Regards,
Bharat


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-03-27 10:50 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-20 13:36 [PATCH v2] monitor: Add AVDTP support to btmon Bharat Panda
2015-03-23  9:34 ` Bharat Bhusan Panda
2015-03-23 10:36   ` Luiz Augusto von Dentz
2015-03-23 14:56     ` Bharat Bhusan Panda
2015-03-27 10:50       ` Bharat Bhusan Panda

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.