This source file includes following definitions.
- l2cap_chan_lock
- l2cap_chan_unlock
- l2cap_set_timer
- l2cap_clear_timer
- __seq_offset
- __next_seq
- l2cap_chan_no_new_connection
- l2cap_chan_no_recv
- l2cap_chan_no_alloc_skb
- l2cap_chan_no_teardown
- l2cap_chan_no_close
- l2cap_chan_no_ready
- l2cap_chan_no_state_change
- l2cap_chan_no_defer
- l2cap_chan_no_suspend
- l2cap_chan_no_resume
- l2cap_chan_no_set_shutdown
- l2cap_chan_no_get_sndtimeo
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 #ifndef __L2CAP_H
28 #define __L2CAP_H
29
30 #include <asm/unaligned.h>
31 #include <linux/atomic.h>
32
33
34 #define L2CAP_DEFAULT_MTU 672
35 #define L2CAP_DEFAULT_MIN_MTU 48
36 #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF
37 #define L2CAP_EFS_DEFAULT_FLUSH_TO 0xFFFFFFFF
38 #define L2CAP_DEFAULT_TX_WINDOW 63
39 #define L2CAP_DEFAULT_EXT_WINDOW 0x3FFF
40 #define L2CAP_DEFAULT_MAX_TX 3
41 #define L2CAP_DEFAULT_RETRANS_TO 2000
42 #define L2CAP_DEFAULT_MONITOR_TO 12000
43 #define L2CAP_DEFAULT_MAX_PDU_SIZE 1492
44 #define L2CAP_DEFAULT_ACK_TO 200
45 #define L2CAP_DEFAULT_MAX_SDU_SIZE 0xFFFF
46 #define L2CAP_DEFAULT_SDU_ITIME 0xFFFFFFFF
47 #define L2CAP_DEFAULT_ACC_LAT 0xFFFFFFFF
48 #define L2CAP_BREDR_MAX_PAYLOAD 1019
49 #define L2CAP_LE_MIN_MTU 23
50
51 #define L2CAP_DISC_TIMEOUT msecs_to_jiffies(100)
52 #define L2CAP_DISC_REJ_TIMEOUT msecs_to_jiffies(5000)
53 #define L2CAP_ENC_TIMEOUT msecs_to_jiffies(5000)
54 #define L2CAP_CONN_TIMEOUT msecs_to_jiffies(40000)
55 #define L2CAP_INFO_TIMEOUT msecs_to_jiffies(4000)
56 #define L2CAP_MOVE_TIMEOUT msecs_to_jiffies(4000)
57 #define L2CAP_MOVE_ERTX_TIMEOUT msecs_to_jiffies(60000)
58 #define L2CAP_WAIT_ACK_POLL_PERIOD msecs_to_jiffies(200)
59 #define L2CAP_WAIT_ACK_TIMEOUT msecs_to_jiffies(10000)
60
61 #define L2CAP_A2MP_DEFAULT_MTU 670
62
63
64 struct sockaddr_l2 {
65 sa_family_t l2_family;
66 __le16 l2_psm;
67 bdaddr_t l2_bdaddr;
68 __le16 l2_cid;
69 __u8 l2_bdaddr_type;
70 };
71
72
73 #define L2CAP_OPTIONS 0x01
74 struct l2cap_options {
75 __u16 omtu;
76 __u16 imtu;
77 __u16 flush_to;
78 __u8 mode;
79 __u8 fcs;
80 __u8 max_tx;
81 __u16 txwin_size;
82 };
83
84 #define L2CAP_CONNINFO 0x02
85 struct l2cap_conninfo {
86 __u16 hci_handle;
87 __u8 dev_class[3];
88 };
89
90 #define L2CAP_LM 0x03
91 #define L2CAP_LM_MASTER 0x0001
92 #define L2CAP_LM_AUTH 0x0002
93 #define L2CAP_LM_ENCRYPT 0x0004
94 #define L2CAP_LM_TRUSTED 0x0008
95 #define L2CAP_LM_RELIABLE 0x0010
96 #define L2CAP_LM_SECURE 0x0020
97 #define L2CAP_LM_FIPS 0x0040
98
99
100 #define L2CAP_COMMAND_REJ 0x01
101 #define L2CAP_CONN_REQ 0x02
102 #define L2CAP_CONN_RSP 0x03
103 #define L2CAP_CONF_REQ 0x04
104 #define L2CAP_CONF_RSP 0x05
105 #define L2CAP_DISCONN_REQ 0x06
106 #define L2CAP_DISCONN_RSP 0x07
107 #define L2CAP_ECHO_REQ 0x08
108 #define L2CAP_ECHO_RSP 0x09
109 #define L2CAP_INFO_REQ 0x0a
110 #define L2CAP_INFO_RSP 0x0b
111 #define L2CAP_CREATE_CHAN_REQ 0x0c
112 #define L2CAP_CREATE_CHAN_RSP 0x0d
113 #define L2CAP_MOVE_CHAN_REQ 0x0e
114 #define L2CAP_MOVE_CHAN_RSP 0x0f
115 #define L2CAP_MOVE_CHAN_CFM 0x10
116 #define L2CAP_MOVE_CHAN_CFM_RSP 0x11
117 #define L2CAP_CONN_PARAM_UPDATE_REQ 0x12
118 #define L2CAP_CONN_PARAM_UPDATE_RSP 0x13
119 #define L2CAP_LE_CONN_REQ 0x14
120 #define L2CAP_LE_CONN_RSP 0x15
121 #define L2CAP_LE_CREDITS 0x16
122
123
124 #define L2CAP_FEAT_FLOWCTL 0x00000001
125 #define L2CAP_FEAT_RETRANS 0x00000002
126 #define L2CAP_FEAT_BIDIR_QOS 0x00000004
127 #define L2CAP_FEAT_ERTM 0x00000008
128 #define L2CAP_FEAT_STREAMING 0x00000010
129 #define L2CAP_FEAT_FCS 0x00000020
130 #define L2CAP_FEAT_EXT_FLOW 0x00000040
131 #define L2CAP_FEAT_FIXED_CHAN 0x00000080
132 #define L2CAP_FEAT_EXT_WINDOW 0x00000100
133 #define L2CAP_FEAT_UCD 0x00000200
134
135
136 #define L2CAP_FCS_NONE 0x00
137 #define L2CAP_FCS_CRC16 0x01
138
139
140 #define L2CAP_FC_SIG_BREDR 0x02
141 #define L2CAP_FC_CONNLESS 0x04
142 #define L2CAP_FC_A2MP 0x08
143 #define L2CAP_FC_ATT 0x10
144 #define L2CAP_FC_SIG_LE 0x20
145 #define L2CAP_FC_SMP_LE 0x40
146 #define L2CAP_FC_SMP_BREDR 0x80
147
148
149 #define L2CAP_CTRL_SAR 0xC000
150 #define L2CAP_CTRL_REQSEQ 0x3F00
151 #define L2CAP_CTRL_TXSEQ 0x007E
152 #define L2CAP_CTRL_SUPERVISE 0x000C
153
154 #define L2CAP_CTRL_RETRANS 0x0080
155 #define L2CAP_CTRL_FINAL 0x0080
156 #define L2CAP_CTRL_POLL 0x0010
157 #define L2CAP_CTRL_FRAME_TYPE 0x0001
158
159 #define L2CAP_CTRL_TXSEQ_SHIFT 1
160 #define L2CAP_CTRL_SUPER_SHIFT 2
161 #define L2CAP_CTRL_POLL_SHIFT 4
162 #define L2CAP_CTRL_FINAL_SHIFT 7
163 #define L2CAP_CTRL_REQSEQ_SHIFT 8
164 #define L2CAP_CTRL_SAR_SHIFT 14
165
166
167 #define L2CAP_EXT_CTRL_TXSEQ 0xFFFC0000
168 #define L2CAP_EXT_CTRL_SAR 0x00030000
169 #define L2CAP_EXT_CTRL_SUPERVISE 0x00030000
170 #define L2CAP_EXT_CTRL_REQSEQ 0x0000FFFC
171
172 #define L2CAP_EXT_CTRL_POLL 0x00040000
173 #define L2CAP_EXT_CTRL_FINAL 0x00000002
174 #define L2CAP_EXT_CTRL_FRAME_TYPE 0x00000001
175
176 #define L2CAP_EXT_CTRL_FINAL_SHIFT 1
177 #define L2CAP_EXT_CTRL_REQSEQ_SHIFT 2
178 #define L2CAP_EXT_CTRL_SAR_SHIFT 16
179 #define L2CAP_EXT_CTRL_SUPER_SHIFT 16
180 #define L2CAP_EXT_CTRL_POLL_SHIFT 18
181 #define L2CAP_EXT_CTRL_TXSEQ_SHIFT 18
182
183
184 #define L2CAP_SUPER_RR 0x00
185 #define L2CAP_SUPER_REJ 0x01
186 #define L2CAP_SUPER_RNR 0x02
187 #define L2CAP_SUPER_SREJ 0x03
188
189
190 #define L2CAP_SAR_UNSEGMENTED 0x00
191 #define L2CAP_SAR_START 0x01
192 #define L2CAP_SAR_END 0x02
193 #define L2CAP_SAR_CONTINUE 0x03
194
195
196 #define L2CAP_REJ_NOT_UNDERSTOOD 0x0000
197 #define L2CAP_REJ_MTU_EXCEEDED 0x0001
198 #define L2CAP_REJ_INVALID_CID 0x0002
199
200
201 struct l2cap_hdr {
202 __le16 len;
203 __le16 cid;
204 } __packed;
205 #define L2CAP_HDR_SIZE 4
206 #define L2CAP_ENH_HDR_SIZE 6
207 #define L2CAP_EXT_HDR_SIZE 8
208
209 #define L2CAP_FCS_SIZE 2
210 #define L2CAP_SDULEN_SIZE 2
211 #define L2CAP_PSMLEN_SIZE 2
212 #define L2CAP_ENH_CTRL_SIZE 2
213 #define L2CAP_EXT_CTRL_SIZE 4
214
215 struct l2cap_cmd_hdr {
216 __u8 code;
217 __u8 ident;
218 __le16 len;
219 } __packed;
220 #define L2CAP_CMD_HDR_SIZE 4
221
222 struct l2cap_cmd_rej_unk {
223 __le16 reason;
224 } __packed;
225
226 struct l2cap_cmd_rej_mtu {
227 __le16 reason;
228 __le16 max_mtu;
229 } __packed;
230
231 struct l2cap_cmd_rej_cid {
232 __le16 reason;
233 __le16 scid;
234 __le16 dcid;
235 } __packed;
236
237 struct l2cap_conn_req {
238 __le16 psm;
239 __le16 scid;
240 } __packed;
241
242 struct l2cap_conn_rsp {
243 __le16 dcid;
244 __le16 scid;
245 __le16 result;
246 __le16 status;
247 } __packed;
248
249
250 #define L2CAP_PSM_SDP 0x0001
251 #define L2CAP_PSM_RFCOMM 0x0003
252 #define L2CAP_PSM_3DSP 0x0021
253 #define L2CAP_PSM_IPSP 0x0023
254
255 #define L2CAP_PSM_DYN_START 0x1001
256 #define L2CAP_PSM_DYN_END 0xffff
257 #define L2CAP_PSM_AUTO_END 0x10ff
258 #define L2CAP_PSM_LE_DYN_START 0x0080
259 #define L2CAP_PSM_LE_DYN_END 0x00ff
260
261
262 #define L2CAP_CID_SIGNALING 0x0001
263 #define L2CAP_CID_CONN_LESS 0x0002
264 #define L2CAP_CID_A2MP 0x0003
265 #define L2CAP_CID_ATT 0x0004
266 #define L2CAP_CID_LE_SIGNALING 0x0005
267 #define L2CAP_CID_SMP 0x0006
268 #define L2CAP_CID_SMP_BREDR 0x0007
269 #define L2CAP_CID_DYN_START 0x0040
270 #define L2CAP_CID_DYN_END 0xffff
271 #define L2CAP_CID_LE_DYN_END 0x007f
272
273
274 #define L2CAP_CR_SUCCESS 0x0000
275 #define L2CAP_CR_PEND 0x0001
276 #define L2CAP_CR_BAD_PSM 0x0002
277 #define L2CAP_CR_SEC_BLOCK 0x0003
278 #define L2CAP_CR_NO_MEM 0x0004
279 #define L2CAP_CR_BAD_AMP 0x0005
280 #define L2CAP_CR_INVALID_SCID 0x0006
281 #define L2CAP_CR_SCID_IN_USE 0x0007
282
283
284 #define L2CAP_CR_LE_SUCCESS 0x0000
285 #define L2CAP_CR_LE_BAD_PSM 0x0002
286 #define L2CAP_CR_LE_NO_MEM 0x0004
287 #define L2CAP_CR_LE_AUTHENTICATION 0x0005
288 #define L2CAP_CR_LE_AUTHORIZATION 0x0006
289 #define L2CAP_CR_LE_BAD_KEY_SIZE 0x0007
290 #define L2CAP_CR_LE_ENCRYPTION 0x0008
291 #define L2CAP_CR_LE_INVALID_SCID 0x0009
292 #define L2CAP_CR_LE_SCID_IN_USE 0X000A
293
294
295 #define L2CAP_CS_NO_INFO 0x0000
296 #define L2CAP_CS_AUTHEN_PEND 0x0001
297 #define L2CAP_CS_AUTHOR_PEND 0x0002
298
299 struct l2cap_conf_req {
300 __le16 dcid;
301 __le16 flags;
302 __u8 data[0];
303 } __packed;
304
305 struct l2cap_conf_rsp {
306 __le16 scid;
307 __le16 flags;
308 __le16 result;
309 __u8 data[0];
310 } __packed;
311
312 #define L2CAP_CONF_SUCCESS 0x0000
313 #define L2CAP_CONF_UNACCEPT 0x0001
314 #define L2CAP_CONF_REJECT 0x0002
315 #define L2CAP_CONF_UNKNOWN 0x0003
316 #define L2CAP_CONF_PENDING 0x0004
317 #define L2CAP_CONF_EFS_REJECT 0x0005
318
319
320 #define L2CAP_CONF_FLAG_CONTINUATION 0x0001
321
322 struct l2cap_conf_opt {
323 __u8 type;
324 __u8 len;
325 __u8 val[0];
326 } __packed;
327 #define L2CAP_CONF_OPT_SIZE 2
328
329 #define L2CAP_CONF_HINT 0x80
330 #define L2CAP_CONF_MASK 0x7f
331
332 #define L2CAP_CONF_MTU 0x01
333 #define L2CAP_CONF_FLUSH_TO 0x02
334 #define L2CAP_CONF_QOS 0x03
335 #define L2CAP_CONF_RFC 0x04
336 #define L2CAP_CONF_FCS 0x05
337 #define L2CAP_CONF_EFS 0x06
338 #define L2CAP_CONF_EWS 0x07
339
340 #define L2CAP_CONF_MAX_SIZE 22
341
342 struct l2cap_conf_rfc {
343 __u8 mode;
344 __u8 txwin_size;
345 __u8 max_transmit;
346 __le16 retrans_timeout;
347 __le16 monitor_timeout;
348 __le16 max_pdu_size;
349 } __packed;
350
351 #define L2CAP_MODE_BASIC 0x00
352 #define L2CAP_MODE_RETRANS 0x01
353 #define L2CAP_MODE_FLOWCTL 0x02
354 #define L2CAP_MODE_ERTM 0x03
355 #define L2CAP_MODE_STREAMING 0x04
356
357
358
359
360
361 #define L2CAP_MODE_LE_FLOWCTL 0x80
362
363 struct l2cap_conf_efs {
364 __u8 id;
365 __u8 stype;
366 __le16 msdu;
367 __le32 sdu_itime;
368 __le32 acc_lat;
369 __le32 flush_to;
370 } __packed;
371
372 #define L2CAP_SERV_NOTRAFIC 0x00
373 #define L2CAP_SERV_BESTEFFORT 0x01
374 #define L2CAP_SERV_GUARANTEED 0x02
375
376 #define L2CAP_BESTEFFORT_ID 0x01
377
378 struct l2cap_disconn_req {
379 __le16 dcid;
380 __le16 scid;
381 } __packed;
382
383 struct l2cap_disconn_rsp {
384 __le16 dcid;
385 __le16 scid;
386 } __packed;
387
388 struct l2cap_info_req {
389 __le16 type;
390 } __packed;
391
392 struct l2cap_info_rsp {
393 __le16 type;
394 __le16 result;
395 __u8 data[0];
396 } __packed;
397
398 struct l2cap_create_chan_req {
399 __le16 psm;
400 __le16 scid;
401 __u8 amp_id;
402 } __packed;
403
404 struct l2cap_create_chan_rsp {
405 __le16 dcid;
406 __le16 scid;
407 __le16 result;
408 __le16 status;
409 } __packed;
410
411 struct l2cap_move_chan_req {
412 __le16 icid;
413 __u8 dest_amp_id;
414 } __packed;
415
416 struct l2cap_move_chan_rsp {
417 __le16 icid;
418 __le16 result;
419 } __packed;
420
421 #define L2CAP_MR_SUCCESS 0x0000
422 #define L2CAP_MR_PEND 0x0001
423 #define L2CAP_MR_BAD_ID 0x0002
424 #define L2CAP_MR_SAME_ID 0x0003
425 #define L2CAP_MR_NOT_SUPP 0x0004
426 #define L2CAP_MR_COLLISION 0x0005
427 #define L2CAP_MR_NOT_ALLOWED 0x0006
428
429 struct l2cap_move_chan_cfm {
430 __le16 icid;
431 __le16 result;
432 } __packed;
433
434 #define L2CAP_MC_CONFIRMED 0x0000
435 #define L2CAP_MC_UNCONFIRMED 0x0001
436
437 struct l2cap_move_chan_cfm_rsp {
438 __le16 icid;
439 } __packed;
440
441
442 #define L2CAP_IT_CL_MTU 0x0001
443 #define L2CAP_IT_FEAT_MASK 0x0002
444 #define L2CAP_IT_FIXED_CHAN 0x0003
445
446
447 #define L2CAP_IR_SUCCESS 0x0000
448 #define L2CAP_IR_NOTSUPP 0x0001
449
450 struct l2cap_conn_param_update_req {
451 __le16 min;
452 __le16 max;
453 __le16 latency;
454 __le16 to_multiplier;
455 } __packed;
456
457 struct l2cap_conn_param_update_rsp {
458 __le16 result;
459 } __packed;
460
461
462 #define L2CAP_CONN_PARAM_ACCEPTED 0x0000
463 #define L2CAP_CONN_PARAM_REJECTED 0x0001
464
465 struct l2cap_le_conn_req {
466 __le16 psm;
467 __le16 scid;
468 __le16 mtu;
469 __le16 mps;
470 __le16 credits;
471 } __packed;
472
473 struct l2cap_le_conn_rsp {
474 __le16 dcid;
475 __le16 mtu;
476 __le16 mps;
477 __le16 credits;
478 __le16 result;
479 } __packed;
480
481 struct l2cap_le_credits {
482 __le16 cid;
483 __le16 credits;
484 } __packed;
485
486
487 struct l2cap_seq_list {
488 __u16 head;
489 __u16 tail;
490 __u16 mask;
491 __u16 *list;
492 };
493
494 #define L2CAP_SEQ_LIST_CLEAR 0xFFFF
495 #define L2CAP_SEQ_LIST_TAIL 0x8000
496
497 struct l2cap_chan {
498 struct l2cap_conn *conn;
499 struct hci_conn *hs_hcon;
500 struct hci_chan *hs_hchan;
501 struct kref kref;
502 atomic_t nesting;
503
504 __u8 state;
505
506 bdaddr_t dst;
507 __u8 dst_type;
508 bdaddr_t src;
509 __u8 src_type;
510 __le16 psm;
511 __le16 sport;
512 __u16 dcid;
513 __u16 scid;
514
515 __u16 imtu;
516 __u16 omtu;
517 __u16 flush_to;
518 __u8 mode;
519 __u8 chan_type;
520 __u8 chan_policy;
521
522 __u8 sec_level;
523
524 __u8 ident;
525
526 __u8 conf_req[64];
527 __u8 conf_len;
528 __u8 num_conf_req;
529 __u8 num_conf_rsp;
530
531 __u8 fcs;
532
533 __u16 tx_win;
534 __u16 tx_win_max;
535 __u16 ack_win;
536 __u8 max_tx;
537 __u16 retrans_timeout;
538 __u16 monitor_timeout;
539 __u16 mps;
540
541 __u16 tx_credits;
542 __u16 rx_credits;
543
544 __u8 tx_state;
545 __u8 rx_state;
546
547 unsigned long conf_state;
548 unsigned long conn_state;
549 unsigned long flags;
550
551 __u8 remote_amp_id;
552 __u8 local_amp_id;
553 __u8 move_id;
554 __u8 move_state;
555 __u8 move_role;
556
557 __u16 next_tx_seq;
558 __u16 expected_ack_seq;
559 __u16 expected_tx_seq;
560 __u16 buffer_seq;
561 __u16 srej_save_reqseq;
562 __u16 last_acked_seq;
563 __u16 frames_sent;
564 __u16 unacked_frames;
565 __u8 retry_count;
566 __u16 sdu_len;
567 struct sk_buff *sdu;
568 struct sk_buff *sdu_last_frag;
569
570 __u16 remote_tx_win;
571 __u8 remote_max_tx;
572 __u16 remote_mps;
573
574 __u8 local_id;
575 __u8 local_stype;
576 __u16 local_msdu;
577 __u32 local_sdu_itime;
578 __u32 local_acc_lat;
579 __u32 local_flush_to;
580
581 __u8 remote_id;
582 __u8 remote_stype;
583 __u16 remote_msdu;
584 __u32 remote_sdu_itime;
585 __u32 remote_acc_lat;
586 __u32 remote_flush_to;
587
588 struct delayed_work chan_timer;
589 struct delayed_work retrans_timer;
590 struct delayed_work monitor_timer;
591 struct delayed_work ack_timer;
592
593 struct sk_buff *tx_send_head;
594 struct sk_buff_head tx_q;
595 struct sk_buff_head srej_q;
596 struct l2cap_seq_list srej_list;
597 struct l2cap_seq_list retrans_list;
598
599 struct list_head list;
600 struct list_head global_l;
601
602 void *data;
603 const struct l2cap_ops *ops;
604 struct mutex lock;
605 };
606
607 struct l2cap_ops {
608 char *name;
609
610 struct l2cap_chan *(*new_connection) (struct l2cap_chan *chan);
611 int (*recv) (struct l2cap_chan * chan,
612 struct sk_buff *skb);
613 void (*teardown) (struct l2cap_chan *chan, int err);
614 void (*close) (struct l2cap_chan *chan);
615 void (*state_change) (struct l2cap_chan *chan,
616 int state, int err);
617 void (*ready) (struct l2cap_chan *chan);
618 void (*defer) (struct l2cap_chan *chan);
619 void (*resume) (struct l2cap_chan *chan);
620 void (*suspend) (struct l2cap_chan *chan);
621 void (*set_shutdown) (struct l2cap_chan *chan);
622 long (*get_sndtimeo) (struct l2cap_chan *chan);
623 struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan,
624 unsigned long hdr_len,
625 unsigned long len, int nb);
626 };
627
628 struct l2cap_conn {
629 struct hci_conn *hcon;
630 struct hci_chan *hchan;
631
632 unsigned int mtu;
633
634 __u32 feat_mask;
635 __u8 remote_fixed_chan;
636 __u8 local_fixed_chan;
637
638 __u8 info_state;
639 __u8 info_ident;
640
641 struct delayed_work info_timer;
642
643 struct sk_buff *rx_skb;
644 __u32 rx_len;
645 __u8 tx_ident;
646 struct mutex ident_lock;
647
648 struct sk_buff_head pending_rx;
649 struct work_struct pending_rx_work;
650
651 struct work_struct id_addr_update_work;
652
653 __u8 disc_reason;
654
655 struct l2cap_chan *smp;
656
657 struct list_head chan_l;
658 struct mutex chan_lock;
659 struct kref ref;
660 struct list_head users;
661 };
662
663 struct l2cap_user {
664 struct list_head list;
665 int (*probe) (struct l2cap_conn *conn, struct l2cap_user *user);
666 void (*remove) (struct l2cap_conn *conn, struct l2cap_user *user);
667 };
668
669 #define L2CAP_INFO_CL_MTU_REQ_SENT 0x01
670 #define L2CAP_INFO_FEAT_MASK_REQ_SENT 0x04
671 #define L2CAP_INFO_FEAT_MASK_REQ_DONE 0x08
672
673 #define L2CAP_CHAN_RAW 1
674 #define L2CAP_CHAN_CONN_LESS 2
675 #define L2CAP_CHAN_CONN_ORIENTED 3
676 #define L2CAP_CHAN_FIXED 4
677
678
679 #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
680
681 struct l2cap_pinfo {
682 struct bt_sock bt;
683 struct l2cap_chan *chan;
684 struct sk_buff *rx_busy_skb;
685 };
686
687 enum {
688 CONF_REQ_SENT,
689 CONF_INPUT_DONE,
690 CONF_OUTPUT_DONE,
691 CONF_MTU_DONE,
692 CONF_MODE_DONE,
693 CONF_CONNECT_PEND,
694 CONF_RECV_NO_FCS,
695 CONF_STATE2_DEVICE,
696 CONF_EWS_RECV,
697 CONF_LOC_CONF_PEND,
698 CONF_REM_CONF_PEND,
699 CONF_NOT_COMPLETE,
700 };
701
702 #define L2CAP_CONF_MAX_CONF_REQ 2
703 #define L2CAP_CONF_MAX_CONF_RSP 2
704
705 enum {
706 CONN_SREJ_SENT,
707 CONN_WAIT_F,
708 CONN_SREJ_ACT,
709 CONN_SEND_PBIT,
710 CONN_REMOTE_BUSY,
711 CONN_LOCAL_BUSY,
712 CONN_REJ_ACT,
713 CONN_SEND_FBIT,
714 CONN_RNR_SENT,
715 };
716
717
718 enum {
719 FLAG_ROLE_SWITCH,
720 FLAG_FORCE_ACTIVE,
721 FLAG_FORCE_RELIABLE,
722 FLAG_FLUSHABLE,
723 FLAG_EXT_CTRL,
724 FLAG_EFS_ENABLE,
725 FLAG_DEFER_SETUP,
726 FLAG_LE_CONN_REQ_SENT,
727 FLAG_PENDING_SECURITY,
728 FLAG_HOLD_HCI_CONN,
729 };
730
731
732
733
734
735
736 enum {
737 L2CAP_NESTING_SMP,
738 L2CAP_NESTING_NORMAL,
739 L2CAP_NESTING_PARENT,
740 };
741
742 enum {
743 L2CAP_TX_STATE_XMIT,
744 L2CAP_TX_STATE_WAIT_F,
745 };
746
747 enum {
748 L2CAP_RX_STATE_RECV,
749 L2CAP_RX_STATE_SREJ_SENT,
750 L2CAP_RX_STATE_MOVE,
751 L2CAP_RX_STATE_WAIT_P,
752 L2CAP_RX_STATE_WAIT_F,
753 };
754
755 enum {
756 L2CAP_TXSEQ_EXPECTED,
757 L2CAP_TXSEQ_EXPECTED_SREJ,
758 L2CAP_TXSEQ_UNEXPECTED,
759 L2CAP_TXSEQ_UNEXPECTED_SREJ,
760 L2CAP_TXSEQ_DUPLICATE,
761 L2CAP_TXSEQ_DUPLICATE_SREJ,
762 L2CAP_TXSEQ_INVALID,
763 L2CAP_TXSEQ_INVALID_IGNORE,
764 };
765
766 enum {
767 L2CAP_EV_DATA_REQUEST,
768 L2CAP_EV_LOCAL_BUSY_DETECTED,
769 L2CAP_EV_LOCAL_BUSY_CLEAR,
770 L2CAP_EV_RECV_REQSEQ_AND_FBIT,
771 L2CAP_EV_RECV_FBIT,
772 L2CAP_EV_RETRANS_TO,
773 L2CAP_EV_MONITOR_TO,
774 L2CAP_EV_EXPLICIT_POLL,
775 L2CAP_EV_RECV_IFRAME,
776 L2CAP_EV_RECV_RR,
777 L2CAP_EV_RECV_REJ,
778 L2CAP_EV_RECV_RNR,
779 L2CAP_EV_RECV_SREJ,
780 L2CAP_EV_RECV_FRAME,
781 };
782
783 enum {
784 L2CAP_MOVE_ROLE_NONE,
785 L2CAP_MOVE_ROLE_INITIATOR,
786 L2CAP_MOVE_ROLE_RESPONDER,
787 };
788
789 enum {
790 L2CAP_MOVE_STABLE,
791 L2CAP_MOVE_WAIT_REQ,
792 L2CAP_MOVE_WAIT_RSP,
793 L2CAP_MOVE_WAIT_RSP_SUCCESS,
794 L2CAP_MOVE_WAIT_CONFIRM,
795 L2CAP_MOVE_WAIT_CONFIRM_RSP,
796 L2CAP_MOVE_WAIT_LOGICAL_COMP,
797 L2CAP_MOVE_WAIT_LOGICAL_CFM,
798 L2CAP_MOVE_WAIT_LOCAL_BUSY,
799 L2CAP_MOVE_WAIT_PREPARE,
800 };
801
802 void l2cap_chan_hold(struct l2cap_chan *c);
803 void l2cap_chan_put(struct l2cap_chan *c);
804
805 static inline void l2cap_chan_lock(struct l2cap_chan *chan)
806 {
807 mutex_lock_nested(&chan->lock, atomic_read(&chan->nesting));
808 }
809
810 static inline void l2cap_chan_unlock(struct l2cap_chan *chan)
811 {
812 mutex_unlock(&chan->lock);
813 }
814
815 static inline void l2cap_set_timer(struct l2cap_chan *chan,
816 struct delayed_work *work, long timeout)
817 {
818 BT_DBG("chan %p state %s timeout %ld", chan,
819 state_to_string(chan->state), timeout);
820
821
822
823 if (!cancel_delayed_work(work))
824 l2cap_chan_hold(chan);
825
826 schedule_delayed_work(work, timeout);
827 }
828
829 static inline bool l2cap_clear_timer(struct l2cap_chan *chan,
830 struct delayed_work *work)
831 {
832 bool ret;
833
834
835
836 ret = cancel_delayed_work(work);
837 if (ret)
838 l2cap_chan_put(chan);
839
840 return ret;
841 }
842
843 #define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t))
844 #define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer)
845 #define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer)
846 #define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer)
847 #define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \
848 msecs_to_jiffies(L2CAP_DEFAULT_ACK_TO));
849 #define __clear_ack_timer(c) l2cap_clear_timer(c, &c->ack_timer)
850
851 static inline int __seq_offset(struct l2cap_chan *chan, __u16 seq1, __u16 seq2)
852 {
853 if (seq1 >= seq2)
854 return seq1 - seq2;
855 else
856 return chan->tx_win_max + 1 - seq2 + seq1;
857 }
858
859 static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq)
860 {
861 return (seq + 1) % (chan->tx_win_max + 1);
862 }
863
864 static inline struct l2cap_chan *l2cap_chan_no_new_connection(struct l2cap_chan *chan)
865 {
866 return NULL;
867 }
868
869 static inline int l2cap_chan_no_recv(struct l2cap_chan *chan, struct sk_buff *skb)
870 {
871 return -ENOSYS;
872 }
873
874 static inline struct sk_buff *l2cap_chan_no_alloc_skb(struct l2cap_chan *chan,
875 unsigned long hdr_len,
876 unsigned long len, int nb)
877 {
878 return ERR_PTR(-ENOSYS);
879 }
880
881 static inline void l2cap_chan_no_teardown(struct l2cap_chan *chan, int err)
882 {
883 }
884
885 static inline void l2cap_chan_no_close(struct l2cap_chan *chan)
886 {
887 }
888
889 static inline void l2cap_chan_no_ready(struct l2cap_chan *chan)
890 {
891 }
892
893 static inline void l2cap_chan_no_state_change(struct l2cap_chan *chan,
894 int state, int err)
895 {
896 }
897
898 static inline void l2cap_chan_no_defer(struct l2cap_chan *chan)
899 {
900 }
901
902 static inline void l2cap_chan_no_suspend(struct l2cap_chan *chan)
903 {
904 }
905
906 static inline void l2cap_chan_no_resume(struct l2cap_chan *chan)
907 {
908 }
909
910 static inline void l2cap_chan_no_set_shutdown(struct l2cap_chan *chan)
911 {
912 }
913
914 static inline long l2cap_chan_no_get_sndtimeo(struct l2cap_chan *chan)
915 {
916 return 0;
917 }
918
919 extern bool disable_ertm;
920
921 int l2cap_init_sockets(void);
922 void l2cap_cleanup_sockets(void);
923 bool l2cap_is_socket(struct socket *sock);
924
925 void __l2cap_le_connect_rsp_defer(struct l2cap_chan *chan);
926 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan);
927
928 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm);
929 int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid);
930
931 struct l2cap_chan *l2cap_chan_create(void);
932 void l2cap_chan_close(struct l2cap_chan *chan, int reason);
933 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
934 bdaddr_t *dst, u8 dst_type);
935 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
936 void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
937 int l2cap_chan_check_security(struct l2cap_chan *chan, bool initiator);
938 void l2cap_chan_set_defaults(struct l2cap_chan *chan);
939 int l2cap_ertm_init(struct l2cap_chan *chan);
940 void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan);
941 void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan);
942 void l2cap_chan_del(struct l2cap_chan *chan, int err);
943 void l2cap_send_conn_req(struct l2cap_chan *chan);
944 void l2cap_move_start(struct l2cap_chan *chan);
945 void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
946 u8 status);
947 void __l2cap_physical_cfm(struct l2cap_chan *chan, int result);
948
949 struct l2cap_conn *l2cap_conn_get(struct l2cap_conn *conn);
950 void l2cap_conn_put(struct l2cap_conn *conn);
951
952 int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user);
953 void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user);
954
955 #endif