summaryrefslogtreecommitdiff
path: root/doc/btsnoop.txt
blob: 975a53f6dd443ce9a6704ec0c860b778e13be524 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
BTSnoop/Monitor protocol formats
********************************

Opcode definitions
==================

New Index
---------

	Code:        0x0000
	Parameters:  Type (1 Octet
		     Bus (1 Octet)
		     BD_Addr (6 Octets)
		     Name (8 Octets)

	This opcode indicates that a new controller instance with a
	given index was added. With some protocols, like the TTY-based
	one there is only a single supported controller, meaning the
	index is implicitly 0.

Deleted Index
-------------

	Code:        0x0001

	This opcode indicates that the controller with a specific index
	was removed.

Command Packet
--------------

	Code:        0x0002

	HCI command packet.

Event Packet
------------

	Code:        0x0003

	HCI event packet.

ACL TX Packet
-------------

	Code:        0x0004

	Outgoing ACL packet.

ACL RX Packet
-------------

	Code:        0x0005

	Incoming ACL packet.

SCO TX Packet
--------------

	Code:        0x0006

	Outgoing SCO packet.

SCO RX Packet
-------------

	Code:        0x0007

	Incomnig SCO packet.

Open Index
----------

	Code:        0x0008

	The HCI transport for the specified controller has been opened.

Close Index
-----------

	Code:        0x0009

	The HCI transport for the specified controller has been closed.

Index Information
-----------------

	Code:        0x000a
	Parameters:  BD_Addr (6 Octets)
		     Manufacturer (2 Octets)

	Information about a specific controller.

Vendor Diagnostics
------------------

	Code:        0x000b

	Vendor diagnostic information.

System Note
-----------

	Code:        0x000c

	System note.

User Logging
------------

	Code:        0x000d
	Parameters:  Priority (1 Octet)
		     Ident_Length (1 Octet)
		     Ident (Ident_Length Octets)

	User logging information.


TTY-based protocol
==================

This section covers the protocol that can be parsed by btmon when
passing it the --tty parameter. The protocol is little endian, packet
based, and has the following header for each packet:

struct tty_hdr {
	uint16_t data_len;
	uint16_t opcode;
	uint8_t  flags;
	uint8_t  hdr_len;
	uint8_t  ext_hdr[0];
} __attribute__ ((packed));

The actual payload starts at ext_hdr + hdr_len and has the length of
data_len - 4 - hdr_len. Each field of the header is defined as follows:

data_len:
	This is the total length of the entire packet, excuding the
	data_len field itself.

opcode:
	The BTSnoop opcode

flags:
	Special flags for the packet. Currently no flags are defined.

hdr_len:
	Length of the extended header.

ext_hdr:
	This is a sequence of header extension fields formatted as:

	struct {
		uint8_t type;
		uint8_t value[length];
	}

	The length of the value is dependent on the type. Currently the
	following types are defined:

	Type                 Length    Meaning
	----------------------------------------------------------------
	1  Command drops     1 byte    Dropped HCI command packets
	2  Event drops       1 byte    Dropped HCI event packets
	3  ACL TX drops      1 byte    Dropped ACL TX packets
	4  ACL RX drops      1 byte    Dropped ACL RX packets
	5  SCO TX drops      1 byte    Dropped SCO TX packets
	6  SCO RX drops      1 byte    Dropped SCO RX packets
	7  Other drops       1 byte    Dropped other packets
	8  32-bit timestamp  4 bytes   Timestamp in 1/10th ms

	The drops fields indicate the number of packets that the
	implementation had to drop (e.g. due to lack of buffers) since
	the last reported drop count.

	The fields of the extended header must be sorted by increasing
	type. This is essential so that unknown types can be ignored and
	the parser can jump to processing the payload.