xref: /linux/include/net/bluetooth/l2cap.h (revision 045ddc8991698a8e9c5668c6190faa8b5d516dc0)
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_MAX_TX		3
36 #define L2CAP_DEFAULT_RETRANS_TO	2000    /* 2 seconds */
37 #define L2CAP_DEFAULT_MONITOR_TO	12000   /* 12 seconds */
38 #define L2CAP_DEFAULT_MAX_PDU_SIZE	1009    /* Sized for 3-DH5 packet */
39 #define L2CAP_DEFAULT_ACK_TO		200
40 #define L2CAP_LE_DEFAULT_MTU		23
41 
42 #define L2CAP_DISC_TIMEOUT             (100)
43 #define L2CAP_DISC_REJ_TIMEOUT         (5000)  /*  5 seconds */
44 #define L2CAP_ENC_TIMEOUT              (5000)  /*  5 seconds */
45 #define L2CAP_CONN_TIMEOUT             (40000) /* 40 seconds */
46 #define L2CAP_INFO_TIMEOUT             (4000)  /*  4 seconds */
47 
48 /* L2CAP socket address */
49 struct sockaddr_l2 {
50 	sa_family_t	l2_family;
51 	__le16		l2_psm;
52 	bdaddr_t	l2_bdaddr;
53 	__le16		l2_cid;
54 };
55 
56 /* L2CAP socket options */
57 #define L2CAP_OPTIONS	0x01
58 struct l2cap_options {
59 	__u16 omtu;
60 	__u16 imtu;
61 	__u16 flush_to;
62 	__u8  mode;
63 	__u8  fcs;
64 	__u8  max_tx;
65 	__u16 txwin_size;
66 };
67 
68 #define L2CAP_CONNINFO	0x02
69 struct l2cap_conninfo {
70 	__u16 hci_handle;
71 	__u8  dev_class[3];
72 };
73 
74 #define L2CAP_LM	0x03
75 #define L2CAP_LM_MASTER		0x0001
76 #define L2CAP_LM_AUTH		0x0002
77 #define L2CAP_LM_ENCRYPT	0x0004
78 #define L2CAP_LM_TRUSTED	0x0008
79 #define L2CAP_LM_RELIABLE	0x0010
80 #define L2CAP_LM_SECURE		0x0020
81 
82 /* L2CAP command codes */
83 #define L2CAP_COMMAND_REJ	0x01
84 #define L2CAP_CONN_REQ		0x02
85 #define L2CAP_CONN_RSP		0x03
86 #define L2CAP_CONF_REQ		0x04
87 #define L2CAP_CONF_RSP		0x05
88 #define L2CAP_DISCONN_REQ	0x06
89 #define L2CAP_DISCONN_RSP	0x07
90 #define L2CAP_ECHO_REQ		0x08
91 #define L2CAP_ECHO_RSP		0x09
92 #define L2CAP_INFO_REQ		0x0a
93 #define L2CAP_INFO_RSP		0x0b
94 #define L2CAP_CONN_PARAM_UPDATE_REQ	0x12
95 #define L2CAP_CONN_PARAM_UPDATE_RSP	0x13
96 
97 /* L2CAP feature mask */
98 #define L2CAP_FEAT_FLOWCTL	0x00000001
99 #define L2CAP_FEAT_RETRANS	0x00000002
100 #define L2CAP_FEAT_ERTM		0x00000008
101 #define L2CAP_FEAT_STREAMING	0x00000010
102 #define L2CAP_FEAT_FCS		0x00000020
103 #define L2CAP_FEAT_FIXED_CHAN	0x00000080
104 
105 /* L2CAP checksum option */
106 #define L2CAP_FCS_NONE		0x00
107 #define L2CAP_FCS_CRC16		0x01
108 
109 /* L2CAP Control Field bit masks */
110 #define L2CAP_CTRL_SAR               0xC000
111 #define L2CAP_CTRL_REQSEQ            0x3F00
112 #define L2CAP_CTRL_TXSEQ             0x007E
113 #define L2CAP_CTRL_RETRANS           0x0080
114 #define L2CAP_CTRL_FINAL             0x0080
115 #define L2CAP_CTRL_POLL              0x0010
116 #define L2CAP_CTRL_SUPERVISE         0x000C
117 #define L2CAP_CTRL_FRAME_TYPE        0x0001 /* I- or S-Frame */
118 
119 #define L2CAP_CTRL_TXSEQ_SHIFT      1
120 #define L2CAP_CTRL_REQSEQ_SHIFT     8
121 #define L2CAP_CTRL_SAR_SHIFT       14
122 
123 /* L2CAP Supervisory Function */
124 #define L2CAP_SUPER_RCV_READY           0x0000
125 #define L2CAP_SUPER_REJECT              0x0004
126 #define L2CAP_SUPER_RCV_NOT_READY       0x0008
127 #define L2CAP_SUPER_SELECT_REJECT       0x000C
128 
129 /* L2CAP Segmentation and Reassembly */
130 #define L2CAP_SDU_UNSEGMENTED       0x0000
131 #define L2CAP_SDU_START             0x4000
132 #define L2CAP_SDU_END               0x8000
133 #define L2CAP_SDU_CONTINUE          0xC000
134 
135 /* L2CAP Command rej. reasons */
136 #define L2CAP_REJ_NOT_UNDERSTOOD      0x0000
137 #define L2CAP_REJ_MTU_EXCEEDED        0x0001
138 #define L2CAP_REJ_INVALID_CID         0x0002
139 
140 
141 /* L2CAP structures */
142 struct l2cap_hdr {
143 	__le16     len;
144 	__le16     cid;
145 } __packed;
146 #define L2CAP_HDR_SIZE		4
147 
148 struct l2cap_cmd_hdr {
149 	__u8       code;
150 	__u8       ident;
151 	__le16     len;
152 } __packed;
153 #define L2CAP_CMD_HDR_SIZE	4
154 
155 struct l2cap_cmd_rej_unk {
156 	__le16     reason;
157 } __packed;
158 
159 struct l2cap_cmd_rej_mtu {
160 	__le16     reason;
161 	__le16     max_mtu;
162 } __packed;
163 
164 struct l2cap_cmd_rej_cid {
165 	__le16     reason;
166 	__le16     scid;
167 	__le16     dcid;
168 } __packed;
169 
170 struct l2cap_conn_req {
171 	__le16     psm;
172 	__le16     scid;
173 } __packed;
174 
175 struct l2cap_conn_rsp {
176 	__le16     dcid;
177 	__le16     scid;
178 	__le16     result;
179 	__le16     status;
180 } __packed;
181 
182 /* channel indentifier */
183 #define L2CAP_CID_SIGNALING	0x0001
184 #define L2CAP_CID_CONN_LESS	0x0002
185 #define L2CAP_CID_LE_DATA	0x0004
186 #define L2CAP_CID_LE_SIGNALING	0x0005
187 #define L2CAP_CID_SMP		0x0006
188 #define L2CAP_CID_DYN_START	0x0040
189 #define L2CAP_CID_DYN_END	0xffff
190 
191 /* connect result */
192 #define L2CAP_CR_SUCCESS	0x0000
193 #define L2CAP_CR_PEND		0x0001
194 #define L2CAP_CR_BAD_PSM	0x0002
195 #define L2CAP_CR_SEC_BLOCK	0x0003
196 #define L2CAP_CR_NO_MEM		0x0004
197 
198 /* connect status */
199 #define L2CAP_CS_NO_INFO	0x0000
200 #define L2CAP_CS_AUTHEN_PEND	0x0001
201 #define L2CAP_CS_AUTHOR_PEND	0x0002
202 
203 struct l2cap_conf_req {
204 	__le16     dcid;
205 	__le16     flags;
206 	__u8       data[0];
207 } __packed;
208 
209 struct l2cap_conf_rsp {
210 	__le16     scid;
211 	__le16     flags;
212 	__le16     result;
213 	__u8       data[0];
214 } __packed;
215 
216 #define L2CAP_CONF_SUCCESS	0x0000
217 #define L2CAP_CONF_UNACCEPT	0x0001
218 #define L2CAP_CONF_REJECT	0x0002
219 #define L2CAP_CONF_UNKNOWN	0x0003
220 
221 struct l2cap_conf_opt {
222 	__u8       type;
223 	__u8       len;
224 	__u8       val[0];
225 } __packed;
226 #define L2CAP_CONF_OPT_SIZE	2
227 
228 #define L2CAP_CONF_HINT		0x80
229 #define L2CAP_CONF_MASK		0x7f
230 
231 #define L2CAP_CONF_MTU		0x01
232 #define L2CAP_CONF_FLUSH_TO	0x02
233 #define L2CAP_CONF_QOS		0x03
234 #define L2CAP_CONF_RFC		0x04
235 #define L2CAP_CONF_FCS		0x05
236 
237 #define L2CAP_CONF_MAX_SIZE	22
238 
239 struct l2cap_conf_rfc {
240 	__u8       mode;
241 	__u8       txwin_size;
242 	__u8       max_transmit;
243 	__le16     retrans_timeout;
244 	__le16     monitor_timeout;
245 	__le16     max_pdu_size;
246 } __packed;
247 
248 #define L2CAP_MODE_BASIC	0x00
249 #define L2CAP_MODE_RETRANS	0x01
250 #define L2CAP_MODE_FLOWCTL	0x02
251 #define L2CAP_MODE_ERTM		0x03
252 #define L2CAP_MODE_STREAMING	0x04
253 
254 struct l2cap_disconn_req {
255 	__le16     dcid;
256 	__le16     scid;
257 } __packed;
258 
259 struct l2cap_disconn_rsp {
260 	__le16     dcid;
261 	__le16     scid;
262 } __packed;
263 
264 struct l2cap_info_req {
265 	__le16      type;
266 } __packed;
267 
268 struct l2cap_info_rsp {
269 	__le16      type;
270 	__le16      result;
271 	__u8        data[0];
272 } __packed;
273 
274 /* info type */
275 #define L2CAP_IT_CL_MTU     0x0001
276 #define L2CAP_IT_FEAT_MASK  0x0002
277 #define L2CAP_IT_FIXED_CHAN 0x0003
278 
279 /* info result */
280 #define L2CAP_IR_SUCCESS    0x0000
281 #define L2CAP_IR_NOTSUPP    0x0001
282 
283 struct l2cap_conn_param_update_req {
284 	__le16      min;
285 	__le16      max;
286 	__le16      latency;
287 	__le16      to_multiplier;
288 } __packed;
289 
290 struct l2cap_conn_param_update_rsp {
291 	__le16      result;
292 } __packed;
293 
294 /* Connection Parameters result */
295 #define L2CAP_CONN_PARAM_ACCEPTED	0x0000
296 #define L2CAP_CONN_PARAM_REJECTED	0x0001
297 
298 /* ----- L2CAP channels and connections ----- */
299 struct srej_list {
300 	__u8	tx_seq;
301 	struct list_head list;
302 };
303 
304 struct l2cap_chan {
305 	struct sock *sk;
306 
307 	struct l2cap_conn	*conn;
308 
309 	__u8		state;
310 
311 	atomic_t	refcnt;
312 
313 	__le16		psm;
314 	__u16		dcid;
315 	__u16		scid;
316 
317 	__u16		imtu;
318 	__u16		omtu;
319 	__u16		flush_to;
320 	__u8		mode;
321 	__u8		chan_type;
322 
323 	__le16		sport;
324 
325 	__u8		sec_level;
326 	__u8		role_switch;
327 	__u8		force_reliable;
328 	__u8		flushable;
329 	__u8		force_active;
330 
331 	__u8		ident;
332 
333 	__u8		conf_req[64];
334 	__u8		conf_len;
335 	__u8		num_conf_req;
336 	__u8		num_conf_rsp;
337 
338 	__u8		fcs;
339 
340 	__u8		tx_win;
341 	__u8		max_tx;
342 	__u16		retrans_timeout;
343 	__u16		monitor_timeout;
344 	__u16		mps;
345 
346 	unsigned long	conf_state;
347 	unsigned long	conn_state;
348 
349 	__u8		next_tx_seq;
350 	__u8		expected_ack_seq;
351 	__u8		expected_tx_seq;
352 	__u8		buffer_seq;
353 	__u8		buffer_seq_srej;
354 	__u8		srej_save_reqseq;
355 	__u8		frames_sent;
356 	__u8		unacked_frames;
357 	__u8		retry_count;
358 	__u8		num_acked;
359 	__u16		sdu_len;
360 	struct sk_buff	*sdu;
361 	struct sk_buff	*sdu_last_frag;
362 
363 	__u8		remote_tx_win;
364 	__u8		remote_max_tx;
365 	__u16		remote_mps;
366 
367 	struct timer_list	chan_timer;
368 	struct timer_list	retrans_timer;
369 	struct timer_list	monitor_timer;
370 	struct timer_list	ack_timer;
371 	struct sk_buff		*tx_send_head;
372 	struct sk_buff_head	tx_q;
373 	struct sk_buff_head	srej_q;
374 	struct list_head	srej_l;
375 
376 	struct list_head list;
377 	struct list_head global_l;
378 
379 	void		*data;
380 	struct l2cap_ops *ops;
381 };
382 
383 struct l2cap_ops {
384 	char		*name;
385 
386 	struct l2cap_chan	*(*new_connection) (void *data);
387 	int			(*recv) (void *data, struct sk_buff *skb);
388 	void			(*close) (void *data);
389 	void			(*state_change) (void *data, int state);
390 };
391 
392 struct l2cap_conn {
393 	struct hci_conn	*hcon;
394 
395 	bdaddr_t	*dst;
396 	bdaddr_t	*src;
397 
398 	unsigned int	mtu;
399 
400 	__u32		feat_mask;
401 
402 	__u8		info_state;
403 	__u8		info_ident;
404 
405 	struct timer_list info_timer;
406 
407 	spinlock_t	lock;
408 
409 	struct sk_buff *rx_skb;
410 	__u32		rx_len;
411 	__u8		tx_ident;
412 
413 	__u8		disc_reason;
414 
415 	struct timer_list security_timer;
416 	struct smp_chan *smp_chan;
417 
418 	struct list_head chan_l;
419 	rwlock_t	chan_lock;
420 };
421 
422 #define L2CAP_INFO_CL_MTU_REQ_SENT	0x01
423 #define L2CAP_INFO_FEAT_MASK_REQ_SENT	0x04
424 #define L2CAP_INFO_FEAT_MASK_REQ_DONE	0x08
425 
426 #define L2CAP_CHAN_RAW			1
427 #define L2CAP_CHAN_CONN_LESS		2
428 #define L2CAP_CHAN_CONN_ORIENTED	3
429 
430 /* ----- L2CAP socket info ----- */
431 #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
432 
433 struct l2cap_pinfo {
434 	struct bt_sock	bt;
435 	struct l2cap_chan	*chan;
436 	struct sk_buff	*rx_busy_skb;
437 };
438 
439 enum {
440 	CONF_REQ_SENT,
441 	CONF_INPUT_DONE,
442 	CONF_OUTPUT_DONE,
443 	CONF_MTU_DONE,
444 	CONF_MODE_DONE,
445 	CONF_CONNECT_PEND,
446 	CONF_NO_FCS_RECV,
447 	CONF_STATE2_DEVICE,
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 #define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t))
466 #define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer)
467 #define __set_retrans_timer(c) l2cap_set_timer(c, &c->retrans_timer, \
468 		L2CAP_DEFAULT_RETRANS_TO);
469 #define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer)
470 #define __set_monitor_timer(c) l2cap_set_timer(c, &c->monitor_timer, \
471 		L2CAP_DEFAULT_MONITOR_TO);
472 #define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer)
473 #define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \
474 		L2CAP_DEFAULT_ACK_TO);
475 #define __clear_ack_timer(c) l2cap_clear_timer(c, &c->ack_timer)
476 
477 static inline int l2cap_tx_window_full(struct l2cap_chan *ch)
478 {
479 	int sub;
480 
481 	sub = (ch->next_tx_seq - ch->expected_ack_seq) % 64;
482 
483 	if (sub < 0)
484 		sub += 64;
485 
486 	return sub == ch->remote_tx_win;
487 }
488 
489 #define __get_txseq(ctrl)	(((ctrl) & L2CAP_CTRL_TXSEQ) >> 1)
490 #define __get_reqseq(ctrl)	(((ctrl) & L2CAP_CTRL_REQSEQ) >> 8)
491 #define __is_iframe(ctrl)	(!((ctrl) & L2CAP_CTRL_FRAME_TYPE))
492 #define __is_sframe(ctrl)	((ctrl) & L2CAP_CTRL_FRAME_TYPE)
493 #define __is_sar_start(ctrl)	(((ctrl) & L2CAP_CTRL_SAR) == L2CAP_SDU_START)
494 
495 extern int disable_ertm;
496 
497 int l2cap_init_sockets(void);
498 void l2cap_cleanup_sockets(void);
499 
500 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan);
501 int __l2cap_wait_ack(struct sock *sk);
502 
503 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm);
504 int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid);
505 
506 struct l2cap_chan *l2cap_chan_create(struct sock *sk);
507 void l2cap_chan_close(struct l2cap_chan *chan, int reason);
508 void l2cap_chan_destroy(struct l2cap_chan *chan);
509 int l2cap_chan_connect(struct l2cap_chan *chan);
510 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
511 void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
512 
513 #endif /* __L2CAP_H */
514