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