xref: /openbmc/linux/include/net/bluetooth/l2cap.h (revision 6327eb980d2ff0c96363b81cb0ce580165cb81b8)
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4    Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5    Copyright (C) 2010 Google Inc.
6 
7    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
8 
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License version 2 as
11    published by the Free Software Foundation;
12 
13    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
16    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
17    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
18    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 
22    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
23    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
24    SOFTWARE IS DISCLAIMED.
25 */
26 
27 #ifndef __L2CAP_H
28 #define __L2CAP_H
29 
30 /* L2CAP defaults */
31 #define L2CAP_DEFAULT_MTU		672
32 #define L2CAP_DEFAULT_MIN_MTU		48
33 #define L2CAP_DEFAULT_FLUSH_TO		0xffff
34 #define L2CAP_DEFAULT_TX_WINDOW		63
35 #define L2CAP_DEFAULT_EXT_WINDOW	0x3FFF
36 #define L2CAP_DEFAULT_MAX_TX		3
37 #define L2CAP_DEFAULT_RETRANS_TO	2000    /* 2 seconds */
38 #define L2CAP_DEFAULT_MONITOR_TO	12000   /* 12 seconds */
39 #define L2CAP_DEFAULT_MAX_PDU_SIZE	1009    /* Sized for 3-DH5 packet */
40 #define L2CAP_DEFAULT_ACK_TO		200
41 #define L2CAP_LE_DEFAULT_MTU		23
42 
43 #define L2CAP_CONN_TIMEOUT	(40000) /* 40 seconds */
44 #define L2CAP_INFO_TIMEOUT	(4000)  /*  4 seconds */
45 
46 /* L2CAP socket address */
47 struct sockaddr_l2 {
48 	sa_family_t	l2_family;
49 	__le16		l2_psm;
50 	bdaddr_t	l2_bdaddr;
51 	__le16		l2_cid;
52 };
53 
54 /* L2CAP socket options */
55 #define L2CAP_OPTIONS	0x01
56 struct l2cap_options {
57 	__u16 omtu;
58 	__u16 imtu;
59 	__u16 flush_to;
60 	__u8  mode;
61 	__u8  fcs;
62 	__u8  max_tx;
63 	__u16 txwin_size;
64 };
65 
66 #define L2CAP_CONNINFO	0x02
67 struct l2cap_conninfo {
68 	__u16 hci_handle;
69 	__u8  dev_class[3];
70 };
71 
72 #define L2CAP_LM	0x03
73 #define L2CAP_LM_MASTER		0x0001
74 #define L2CAP_LM_AUTH		0x0002
75 #define L2CAP_LM_ENCRYPT	0x0004
76 #define L2CAP_LM_TRUSTED	0x0008
77 #define L2CAP_LM_RELIABLE	0x0010
78 #define L2CAP_LM_SECURE		0x0020
79 
80 /* L2CAP command codes */
81 #define L2CAP_COMMAND_REJ	0x01
82 #define L2CAP_CONN_REQ		0x02
83 #define L2CAP_CONN_RSP		0x03
84 #define L2CAP_CONF_REQ		0x04
85 #define L2CAP_CONF_RSP		0x05
86 #define L2CAP_DISCONN_REQ	0x06
87 #define L2CAP_DISCONN_RSP	0x07
88 #define L2CAP_ECHO_REQ		0x08
89 #define L2CAP_ECHO_RSP		0x09
90 #define L2CAP_INFO_REQ		0x0a
91 #define L2CAP_INFO_RSP		0x0b
92 #define L2CAP_CONN_PARAM_UPDATE_REQ	0x12
93 #define L2CAP_CONN_PARAM_UPDATE_RSP	0x13
94 
95 /* L2CAP extended feature mask */
96 #define L2CAP_FEAT_FLOWCTL	0x00000001
97 #define L2CAP_FEAT_RETRANS	0x00000002
98 #define L2CAP_FEAT_BIDIR_QOS	0x00000004
99 #define L2CAP_FEAT_ERTM		0x00000008
100 #define L2CAP_FEAT_STREAMING	0x00000010
101 #define L2CAP_FEAT_FCS		0x00000020
102 #define L2CAP_FEAT_EXT_FLOW	0x00000040
103 #define L2CAP_FEAT_FIXED_CHAN	0x00000080
104 #define L2CAP_FEAT_EXT_WINDOW	0x00000100
105 #define L2CAP_FEAT_UCD		0x00000200
106 
107 /* L2CAP checksum option */
108 #define L2CAP_FCS_NONE		0x00
109 #define L2CAP_FCS_CRC16		0x01
110 
111 /* L2CAP Control Field bit masks */
112 #define L2CAP_CTRL_SAR               0xC000
113 #define L2CAP_CTRL_REQSEQ            0x3F00
114 #define L2CAP_CTRL_TXSEQ             0x007E
115 #define L2CAP_CTRL_RETRANS           0x0080
116 #define L2CAP_CTRL_FINAL             0x0080
117 #define L2CAP_CTRL_POLL              0x0010
118 #define L2CAP_CTRL_SUPERVISE         0x000C
119 #define L2CAP_CTRL_FRAME_TYPE        0x0001 /* I- or S-Frame */
120 
121 #define L2CAP_CTRL_TXSEQ_SHIFT      1
122 #define L2CAP_CTRL_REQSEQ_SHIFT     8
123 #define L2CAP_CTRL_SAR_SHIFT       14
124 
125 /* L2CAP Supervisory Function */
126 #define L2CAP_SUPER_RCV_READY           0x0000
127 #define L2CAP_SUPER_REJECT              0x0004
128 #define L2CAP_SUPER_RCV_NOT_READY       0x0008
129 #define L2CAP_SUPER_SELECT_REJECT       0x000C
130 
131 /* L2CAP Segmentation and Reassembly */
132 #define L2CAP_SDU_UNSEGMENTED       0x0000
133 #define L2CAP_SDU_START             0x4000
134 #define L2CAP_SDU_END               0x8000
135 #define L2CAP_SDU_CONTINUE          0xC000
136 
137 /* L2CAP Command rej. reasons */
138 #define L2CAP_REJ_NOT_UNDERSTOOD	0x0000
139 #define L2CAP_REJ_MTU_EXCEEDED		0x0001
140 #define L2CAP_REJ_INVALID_CID		0x0002
141 
142 /* L2CAP structures */
143 struct l2cap_hdr {
144 	__le16     len;
145 	__le16     cid;
146 } __packed;
147 #define L2CAP_HDR_SIZE		4
148 
149 struct l2cap_cmd_hdr {
150 	__u8       code;
151 	__u8       ident;
152 	__le16     len;
153 } __packed;
154 #define L2CAP_CMD_HDR_SIZE	4
155 
156 struct l2cap_cmd_rej_unk {
157 	__le16     reason;
158 } __packed;
159 
160 struct l2cap_cmd_rej_mtu {
161 	__le16     reason;
162 	__le16     max_mtu;
163 } __packed;
164 
165 struct l2cap_cmd_rej_cid {
166 	__le16     reason;
167 	__le16     scid;
168 	__le16     dcid;
169 } __packed;
170 
171 struct l2cap_conn_req {
172 	__le16     psm;
173 	__le16     scid;
174 } __packed;
175 
176 struct l2cap_conn_rsp {
177 	__le16     dcid;
178 	__le16     scid;
179 	__le16     result;
180 	__le16     status;
181 } __packed;
182 
183 /* channel indentifier */
184 #define L2CAP_CID_SIGNALING	0x0001
185 #define L2CAP_CID_CONN_LESS	0x0002
186 #define L2CAP_CID_LE_DATA	0x0004
187 #define L2CAP_CID_LE_SIGNALING	0x0005
188 #define L2CAP_CID_SMP		0x0006
189 #define L2CAP_CID_DYN_START	0x0040
190 #define L2CAP_CID_DYN_END	0xffff
191 
192 /* connect result */
193 #define L2CAP_CR_SUCCESS	0x0000
194 #define L2CAP_CR_PEND		0x0001
195 #define L2CAP_CR_BAD_PSM	0x0002
196 #define L2CAP_CR_SEC_BLOCK	0x0003
197 #define L2CAP_CR_NO_MEM		0x0004
198 
199 /* connect status */
200 #define L2CAP_CS_NO_INFO	0x0000
201 #define L2CAP_CS_AUTHEN_PEND	0x0001
202 #define L2CAP_CS_AUTHOR_PEND	0x0002
203 
204 struct l2cap_conf_req {
205 	__le16     dcid;
206 	__le16     flags;
207 	__u8       data[0];
208 } __packed;
209 
210 struct l2cap_conf_rsp {
211 	__le16     scid;
212 	__le16     flags;
213 	__le16     result;
214 	__u8       data[0];
215 } __packed;
216 
217 #define L2CAP_CONF_SUCCESS	0x0000
218 #define L2CAP_CONF_UNACCEPT	0x0001
219 #define L2CAP_CONF_REJECT	0x0002
220 #define L2CAP_CONF_UNKNOWN	0x0003
221 
222 struct l2cap_conf_opt {
223 	__u8       type;
224 	__u8       len;
225 	__u8       val[0];
226 } __packed;
227 #define L2CAP_CONF_OPT_SIZE	2
228 
229 #define L2CAP_CONF_HINT		0x80
230 #define L2CAP_CONF_MASK		0x7f
231 
232 #define L2CAP_CONF_MTU		0x01
233 #define L2CAP_CONF_FLUSH_TO	0x02
234 #define L2CAP_CONF_QOS		0x03
235 #define L2CAP_CONF_RFC		0x04
236 #define L2CAP_CONF_FCS		0x05
237 #define L2CAP_CONF_EWS		0x07
238 
239 #define L2CAP_CONF_MAX_SIZE	22
240 
241 struct l2cap_conf_rfc {
242 	__u8       mode;
243 	__u8       txwin_size;
244 	__u8       max_transmit;
245 	__le16     retrans_timeout;
246 	__le16     monitor_timeout;
247 	__le16     max_pdu_size;
248 } __packed;
249 
250 #define L2CAP_MODE_BASIC	0x00
251 #define L2CAP_MODE_RETRANS	0x01
252 #define L2CAP_MODE_FLOWCTL	0x02
253 #define L2CAP_MODE_ERTM		0x03
254 #define L2CAP_MODE_STREAMING	0x04
255 
256 struct l2cap_disconn_req {
257 	__le16     dcid;
258 	__le16     scid;
259 } __packed;
260 
261 struct l2cap_disconn_rsp {
262 	__le16     dcid;
263 	__le16     scid;
264 } __packed;
265 
266 struct l2cap_info_req {
267 	__le16      type;
268 } __packed;
269 
270 struct l2cap_info_rsp {
271 	__le16      type;
272 	__le16      result;
273 	__u8        data[0];
274 } __packed;
275 
276 /* info type */
277 #define L2CAP_IT_CL_MTU		0x0001
278 #define L2CAP_IT_FEAT_MASK	0x0002
279 #define L2CAP_IT_FIXED_CHAN	0x0003
280 
281 /* info result */
282 #define L2CAP_IR_SUCCESS	0x0000
283 #define L2CAP_IR_NOTSUPP	0x0001
284 
285 struct l2cap_conn_param_update_req {
286 	__le16      min;
287 	__le16      max;
288 	__le16      latency;
289 	__le16      to_multiplier;
290 } __packed;
291 
292 struct l2cap_conn_param_update_rsp {
293 	__le16      result;
294 } __packed;
295 
296 /* Connection Parameters result */
297 #define L2CAP_CONN_PARAM_ACCEPTED	0x0000
298 #define L2CAP_CONN_PARAM_REJECTED	0x0001
299 
300 /* ----- L2CAP channels and connections ----- */
301 struct srej_list {
302 	__u8	tx_seq;
303 	struct list_head list;
304 };
305 
306 struct l2cap_chan {
307 	struct sock *sk;
308 
309 	struct l2cap_conn	*conn;
310 
311 	__u8		state;
312 
313 	atomic_t	refcnt;
314 
315 	__le16		psm;
316 	__u16		dcid;
317 	__u16		scid;
318 
319 	__u16		imtu;
320 	__u16		omtu;
321 	__u16		flush_to;
322 	__u8		mode;
323 	__u8		chan_type;
324 
325 	__le16		sport;
326 
327 	__u8		sec_level;
328 
329 	__u8		ident;
330 
331 	__u8		conf_req[64];
332 	__u8		conf_len;
333 	__u8		num_conf_req;
334 	__u8		num_conf_rsp;
335 
336 	__u8		fcs;
337 
338 	__u16		tx_win;
339 	__u8		max_tx;
340 	__u16		retrans_timeout;
341 	__u16		monitor_timeout;
342 	__u16		mps;
343 
344 	unsigned long	conf_state;
345 	unsigned long	conn_state;
346 	unsigned long	flags;
347 
348 	__u8		next_tx_seq;
349 	__u8		expected_ack_seq;
350 	__u8		expected_tx_seq;
351 	__u8		buffer_seq;
352 	__u8		buffer_seq_srej;
353 	__u8		srej_save_reqseq;
354 	__u8		frames_sent;
355 	__u8		unacked_frames;
356 	__u8		retry_count;
357 	__u8		num_acked;
358 	__u16		sdu_len;
359 	struct sk_buff	*sdu;
360 	struct sk_buff	*sdu_last_frag;
361 
362 	__u16		remote_tx_win;
363 	__u8		remote_max_tx;
364 	__u16		remote_mps;
365 
366 	struct timer_list	chan_timer;
367 	struct timer_list	retrans_timer;
368 	struct timer_list	monitor_timer;
369 	struct timer_list	ack_timer;
370 	struct sk_buff		*tx_send_head;
371 	struct sk_buff_head	tx_q;
372 	struct sk_buff_head	srej_q;
373 	struct list_head	srej_l;
374 
375 	struct list_head list;
376 	struct list_head global_l;
377 
378 	void		*data;
379 	struct l2cap_ops *ops;
380 };
381 
382 struct l2cap_ops {
383 	char		*name;
384 
385 	struct l2cap_chan	*(*new_connection) (void *data);
386 	int			(*recv) (void *data, struct sk_buff *skb);
387 	void			(*close) (void *data);
388 	void			(*state_change) (void *data, int state);
389 };
390 
391 struct l2cap_conn {
392 	struct hci_conn	*hcon;
393 
394 	bdaddr_t	*dst;
395 	bdaddr_t	*src;
396 
397 	unsigned int	mtu;
398 
399 	__u32		feat_mask;
400 
401 	__u8		info_state;
402 	__u8		info_ident;
403 
404 	struct timer_list info_timer;
405 
406 	spinlock_t	lock;
407 
408 	struct sk_buff *rx_skb;
409 	__u32		rx_len;
410 	__u8		tx_ident;
411 
412 	__u8		disc_reason;
413 
414 	struct timer_list security_timer;
415 	struct smp_chan *smp_chan;
416 
417 	struct list_head chan_l;
418 	rwlock_t	chan_lock;
419 };
420 
421 #define L2CAP_INFO_CL_MTU_REQ_SENT	0x01
422 #define L2CAP_INFO_FEAT_MASK_REQ_SENT	0x04
423 #define L2CAP_INFO_FEAT_MASK_REQ_DONE	0x08
424 
425 #define L2CAP_CHAN_RAW			1
426 #define L2CAP_CHAN_CONN_LESS		2
427 #define L2CAP_CHAN_CONN_ORIENTED	3
428 
429 /* ----- L2CAP socket info ----- */
430 #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
431 
432 struct l2cap_pinfo {
433 	struct bt_sock	bt;
434 	struct l2cap_chan	*chan;
435 	struct sk_buff	*rx_busy_skb;
436 };
437 
438 enum {
439 	CONF_REQ_SENT,
440 	CONF_INPUT_DONE,
441 	CONF_OUTPUT_DONE,
442 	CONF_MTU_DONE,
443 	CONF_MODE_DONE,
444 	CONF_CONNECT_PEND,
445 	CONF_NO_FCS_RECV,
446 	CONF_STATE2_DEVICE,
447 	CONF_EWS_RECV,
448 };
449 
450 #define L2CAP_CONF_MAX_CONF_REQ 2
451 #define L2CAP_CONF_MAX_CONF_RSP 2
452 
453 enum {
454 	CONN_SREJ_SENT,
455 	CONN_WAIT_F,
456 	CONN_SREJ_ACT,
457 	CONN_SEND_PBIT,
458 	CONN_REMOTE_BUSY,
459 	CONN_LOCAL_BUSY,
460 	CONN_REJ_ACT,
461 	CONN_SEND_FBIT,
462 	CONN_RNR_SENT,
463 };
464 
465 /* Definitions for flags in l2cap_chan */
466 enum {
467 	FLAG_ROLE_SWITCH,
468 	FLAG_FORCE_ACTIVE,
469 	FLAG_FORCE_RELIABLE,
470 	FLAG_FLUSHABLE,
471 	FLAG_EXT_CTRL,
472 };
473 
474 #define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t))
475 #define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer)
476 #define __set_retrans_timer(c) l2cap_set_timer(c, &c->retrans_timer, \
477 		L2CAP_DEFAULT_RETRANS_TO);
478 #define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer)
479 #define __set_monitor_timer(c) l2cap_set_timer(c, &c->monitor_timer, \
480 		L2CAP_DEFAULT_MONITOR_TO);
481 #define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer)
482 #define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \
483 		L2CAP_DEFAULT_ACK_TO);
484 #define __clear_ack_timer(c) l2cap_clear_timer(c, &c->ack_timer)
485 
486 static inline int l2cap_tx_window_full(struct l2cap_chan *ch)
487 {
488 	int sub;
489 
490 	sub = (ch->next_tx_seq - ch->expected_ack_seq) % 64;
491 
492 	if (sub < 0)
493 		sub += 64;
494 
495 	return sub == ch->remote_tx_win;
496 }
497 
498 #define __get_txseq(ctrl)	(((ctrl) & L2CAP_CTRL_TXSEQ) >> 1)
499 #define __get_reqseq(ctrl)	(((ctrl) & L2CAP_CTRL_REQSEQ) >> 8)
500 #define __is_iframe(ctrl)	(!((ctrl) & L2CAP_CTRL_FRAME_TYPE))
501 #define __is_sframe(ctrl)	((ctrl) & L2CAP_CTRL_FRAME_TYPE)
502 #define __is_sar_start(ctrl)	(((ctrl) & L2CAP_CTRL_SAR) == L2CAP_SDU_START)
503 
504 extern int disable_ertm;
505 
506 int l2cap_init_sockets(void);
507 void l2cap_cleanup_sockets(void);
508 
509 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan);
510 int __l2cap_wait_ack(struct sock *sk);
511 
512 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm);
513 int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid);
514 
515 struct l2cap_chan *l2cap_chan_create(struct sock *sk);
516 void l2cap_chan_close(struct l2cap_chan *chan, int reason);
517 void l2cap_chan_destroy(struct l2cap_chan *chan);
518 int l2cap_chan_connect(struct l2cap_chan *chan);
519 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
520 void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
521 
522 #endif /* __L2CAP_H */
523