3 * BlueZ - Bluetooth protocol stack for Linux
5 * Copyright (C) 2000-2001 Qualcomm Incorporated
6 * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com>
7 * Copyright (C) 2002-2010 Marcel Holtmann <marcel@holtmann.org>
8 * Copyright (c) 2012 Code Aurora Forum. All rights reserved.
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
34 #include <sys/socket.h>
37 #define L2CAP_DEFAULT_MTU 672
38 #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF
40 /* L2CAP socket address */
42 sa_family_t l2_family;
43 unsigned short l2_psm;
45 unsigned short l2_cid;
46 uint8_t l2_bdaddr_type;
49 /* L2CAP socket options */
50 #define L2CAP_OPTIONS 0x01
51 struct l2cap_options {
61 #define L2CAP_CONNINFO 0x02
62 struct l2cap_conninfo {
68 #define L2CAP_LM_MASTER 0x0001
69 #define L2CAP_LM_AUTH 0x0002
70 #define L2CAP_LM_ENCRYPT 0x0004
71 #define L2CAP_LM_TRUSTED 0x0008
72 #define L2CAP_LM_RELIABLE 0x0010
73 #define L2CAP_LM_SECURE 0x0020
75 /* L2CAP command codes */
76 #define L2CAP_COMMAND_REJ 0x01
77 #define L2CAP_CONN_REQ 0x02
78 #define L2CAP_CONN_RSP 0x03
79 #define L2CAP_CONF_REQ 0x04
80 #define L2CAP_CONF_RSP 0x05
81 #define L2CAP_DISCONN_REQ 0x06
82 #define L2CAP_DISCONN_RSP 0x07
83 #define L2CAP_ECHO_REQ 0x08
84 #define L2CAP_ECHO_RSP 0x09
85 #define L2CAP_INFO_REQ 0x0a
86 #define L2CAP_INFO_RSP 0x0b
87 #define L2CAP_CREATE_REQ 0x0c
88 #define L2CAP_CREATE_RSP 0x0d
89 #define L2CAP_MOVE_REQ 0x0e
90 #define L2CAP_MOVE_RSP 0x0f
91 #define L2CAP_MOVE_CFM 0x10
92 #define L2CAP_MOVE_CFM_RSP 0x11
94 /* L2CAP extended feature mask */
95 #define L2CAP_FEAT_FLOWCTL 0x00000001
96 #define L2CAP_FEAT_RETRANS 0x00000002
97 #define L2CAP_FEAT_BIDIR_QOS 0x00000004
98 #define L2CAP_FEAT_ERTM 0x00000008
99 #define L2CAP_FEAT_STREAMING 0x00000010
100 #define L2CAP_FEAT_FCS 0x00000020
101 #define L2CAP_FEAT_EXT_FLOW 0x00000040
102 #define L2CAP_FEAT_FIXED_CHAN 0x00000080
103 #define L2CAP_FEAT_EXT_WINDOW 0x00000100
104 #define L2CAP_FEAT_UCD 0x00000200
106 /* L2CAP fixed channels */
107 #define L2CAP_FC_L2CAP 0x02
108 #define L2CAP_FC_CONNLESS 0x04
109 #define L2CAP_FC_A2MP 0x08
111 /* L2CAP structures */
115 } __attribute__ ((packed)) l2cap_hdr;
116 #define L2CAP_HDR_SIZE 4
122 } __attribute__ ((packed)) l2cap_cmd_hdr;
123 #define L2CAP_CMD_HDR_SIZE 4
127 } __attribute__ ((packed)) l2cap_cmd_rej;
128 #define L2CAP_CMD_REJ_SIZE 2
133 } __attribute__ ((packed)) l2cap_conn_req;
134 #define L2CAP_CONN_REQ_SIZE 4
141 } __attribute__ ((packed)) l2cap_conn_rsp;
142 #define L2CAP_CONN_RSP_SIZE 8
145 #define L2CAP_CR_SUCCESS 0x0000
146 #define L2CAP_CR_PEND 0x0001
147 #define L2CAP_CR_BAD_PSM 0x0002
148 #define L2CAP_CR_SEC_BLOCK 0x0003
149 #define L2CAP_CR_NO_MEM 0x0004
152 #define L2CAP_CS_NO_INFO 0x0000
153 #define L2CAP_CS_AUTHEN_PEND 0x0001
154 #define L2CAP_CS_AUTHOR_PEND 0x0002
160 } __attribute__ ((packed)) l2cap_conf_req;
161 #define L2CAP_CONF_REQ_SIZE 4
168 } __attribute__ ((packed)) l2cap_conf_rsp;
169 #define L2CAP_CONF_RSP_SIZE 6
171 #define L2CAP_CONF_SUCCESS 0x0000
172 #define L2CAP_CONF_UNACCEPT 0x0001
173 #define L2CAP_CONF_REJECT 0x0002
174 #define L2CAP_CONF_UNKNOWN 0x0003
175 #define L2CAP_CONF_PENDING 0x0004
176 #define L2CAP_CONF_EFS_REJECT 0x0005
182 } __attribute__ ((packed)) l2cap_conf_opt;
183 #define L2CAP_CONF_OPT_SIZE 2
185 #define L2CAP_CONF_MTU 0x01
186 #define L2CAP_CONF_FLUSH_TO 0x02
187 #define L2CAP_CONF_QOS 0x03
188 #define L2CAP_CONF_RFC 0x04
189 #define L2CAP_CONF_FCS 0x05
190 #define L2CAP_CONF_EFS 0x06
191 #define L2CAP_CONF_EWS 0x07
193 #define L2CAP_CONF_MAX_SIZE 22
195 #define L2CAP_MODE_BASIC 0x00
196 #define L2CAP_MODE_RETRANS 0x01
197 #define L2CAP_MODE_FLOWCTL 0x02
198 #define L2CAP_MODE_ERTM 0x03
199 #define L2CAP_MODE_STREAMING 0x04
201 #define L2CAP_SERVTYPE_NOTRAFFIC 0x00
202 #define L2CAP_SERVTYPE_BESTEFFORT 0x01
203 #define L2CAP_SERVTYPE_GUARANTEED 0x02
208 } __attribute__ ((packed)) l2cap_disconn_req;
209 #define L2CAP_DISCONN_REQ_SIZE 4
214 } __attribute__ ((packed)) l2cap_disconn_rsp;
215 #define L2CAP_DISCONN_RSP_SIZE 4
219 } __attribute__ ((packed)) l2cap_info_req;
220 #define L2CAP_INFO_REQ_SIZE 2
226 } __attribute__ ((packed)) l2cap_info_rsp;
227 #define L2CAP_INFO_RSP_SIZE 4
230 #define L2CAP_IT_CL_MTU 0x0001
231 #define L2CAP_IT_FEAT_MASK 0x0002
234 #define L2CAP_IR_SUCCESS 0x0000
235 #define L2CAP_IR_NOTSUPP 0x0001
241 } __attribute__ ((packed)) l2cap_create_req;
242 #define L2CAP_CREATE_REQ_SIZE 5
249 } __attribute__ ((packed)) l2cap_create_rsp;
250 #define L2CAP_CREATE_RSP_SIZE 8
255 } __attribute__ ((packed)) l2cap_move_req;
256 #define L2CAP_MOVE_REQ_SIZE 3
261 } __attribute__ ((packed)) l2cap_move_rsp;
262 #define L2CAP_MOVE_RSP_SIZE 4
267 } __attribute__ ((packed)) l2cap_move_cfm;
268 #define L2CAP_MOVE_CFM_SIZE 4
272 } __attribute__ ((packed)) l2cap_move_cfm_rsp;
273 #define L2CAP_MOVE_CFM_RSP_SIZE 2
279 #endif /* __L2CAP_H */