Commit 8c3a4f004e706fd7e681c68c6de4946c8c76b976

Authored by Andre Guedes
Committed by Johan Hedberg
1 parent 682877c31f

Bluetooth: Rename L2CAP_LE_DEFAULT_MTU

This patch renames L2CAP_LE_DEFAULT_MTU macro to L2CAP_LE_MIN_MTU
since it represents the minimum MTU value, not the default MTU
value for LE.

Signed-off-by: Andre Guedes <andre.guedes@openbossa.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>

Showing 2 changed files with 2 additions and 2 deletions Inline Diff

include/net/bluetooth/l2cap.h
1 /* 1 /*
2 BlueZ - Bluetooth protocol stack for Linux 2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated 3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org> 4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5 Copyright (C) 2010 Google Inc. 5 Copyright (C) 2010 Google Inc.
6 6
7 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 7 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
8 8
9 This program is free software; you can redistribute it and/or modify 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 10 it under the terms of the GNU General Public License version 2 as
11 published by the Free Software Foundation; 11 published by the Free Software Foundation;
12 12
13 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 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, 14 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 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 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 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 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 19 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 20 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 21
22 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 22 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
23 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 23 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
24 SOFTWARE IS DISCLAIMED. 24 SOFTWARE IS DISCLAIMED.
25 */ 25 */
26 26
27 #ifndef __L2CAP_H 27 #ifndef __L2CAP_H
28 #define __L2CAP_H 28 #define __L2CAP_H
29 29
30 #include <asm/unaligned.h> 30 #include <asm/unaligned.h>
31 31
32 /* L2CAP defaults */ 32 /* L2CAP defaults */
33 #define L2CAP_DEFAULT_MTU 672 33 #define L2CAP_DEFAULT_MTU 672
34 #define L2CAP_DEFAULT_MIN_MTU 48 34 #define L2CAP_DEFAULT_MIN_MTU 48
35 #define L2CAP_DEFAULT_FLUSH_TO 0xffff 35 #define L2CAP_DEFAULT_FLUSH_TO 0xffff
36 #define L2CAP_DEFAULT_TX_WINDOW 63 36 #define L2CAP_DEFAULT_TX_WINDOW 63
37 #define L2CAP_DEFAULT_EXT_WINDOW 0x3FFF 37 #define L2CAP_DEFAULT_EXT_WINDOW 0x3FFF
38 #define L2CAP_DEFAULT_MAX_TX 3 38 #define L2CAP_DEFAULT_MAX_TX 3
39 #define L2CAP_DEFAULT_RETRANS_TO 2000 /* 2 seconds */ 39 #define L2CAP_DEFAULT_RETRANS_TO 2000 /* 2 seconds */
40 #define L2CAP_DEFAULT_MONITOR_TO 12000 /* 12 seconds */ 40 #define L2CAP_DEFAULT_MONITOR_TO 12000 /* 12 seconds */
41 #define L2CAP_DEFAULT_MAX_PDU_SIZE 1009 /* Sized for 3-DH5 packet */ 41 #define L2CAP_DEFAULT_MAX_PDU_SIZE 1009 /* Sized for 3-DH5 packet */
42 #define L2CAP_DEFAULT_ACK_TO 200 42 #define L2CAP_DEFAULT_ACK_TO 200
43 #define L2CAP_LE_DEFAULT_MTU 23
44 #define L2CAP_DEFAULT_MAX_SDU_SIZE 0xFFFF 43 #define L2CAP_DEFAULT_MAX_SDU_SIZE 0xFFFF
45 #define L2CAP_DEFAULT_SDU_ITIME 0xFFFFFFFF 44 #define L2CAP_DEFAULT_SDU_ITIME 0xFFFFFFFF
46 #define L2CAP_DEFAULT_ACC_LAT 0xFFFFFFFF 45 #define L2CAP_DEFAULT_ACC_LAT 0xFFFFFFFF
47 #define L2CAP_BREDR_MAX_PAYLOAD 1019 /* 3-DH5 packet */ 46 #define L2CAP_BREDR_MAX_PAYLOAD 1019 /* 3-DH5 packet */
47 #define L2CAP_LE_MIN_MTU 23
48 48
49 #define L2CAP_DISC_TIMEOUT msecs_to_jiffies(100) 49 #define L2CAP_DISC_TIMEOUT msecs_to_jiffies(100)
50 #define L2CAP_DISC_REJ_TIMEOUT msecs_to_jiffies(5000) 50 #define L2CAP_DISC_REJ_TIMEOUT msecs_to_jiffies(5000)
51 #define L2CAP_ENC_TIMEOUT msecs_to_jiffies(5000) 51 #define L2CAP_ENC_TIMEOUT msecs_to_jiffies(5000)
52 #define L2CAP_CONN_TIMEOUT msecs_to_jiffies(40000) 52 #define L2CAP_CONN_TIMEOUT msecs_to_jiffies(40000)
53 #define L2CAP_INFO_TIMEOUT msecs_to_jiffies(4000) 53 #define L2CAP_INFO_TIMEOUT msecs_to_jiffies(4000)
54 54
55 #define L2CAP_A2MP_DEFAULT_MTU 670 55 #define L2CAP_A2MP_DEFAULT_MTU 670
56 56
57 /* L2CAP socket address */ 57 /* L2CAP socket address */
58 struct sockaddr_l2 { 58 struct sockaddr_l2 {
59 sa_family_t l2_family; 59 sa_family_t l2_family;
60 __le16 l2_psm; 60 __le16 l2_psm;
61 bdaddr_t l2_bdaddr; 61 bdaddr_t l2_bdaddr;
62 __le16 l2_cid; 62 __le16 l2_cid;
63 __u8 l2_bdaddr_type; 63 __u8 l2_bdaddr_type;
64 }; 64 };
65 65
66 /* L2CAP socket options */ 66 /* L2CAP socket options */
67 #define L2CAP_OPTIONS 0x01 67 #define L2CAP_OPTIONS 0x01
68 struct l2cap_options { 68 struct l2cap_options {
69 __u16 omtu; 69 __u16 omtu;
70 __u16 imtu; 70 __u16 imtu;
71 __u16 flush_to; 71 __u16 flush_to;
72 __u8 mode; 72 __u8 mode;
73 __u8 fcs; 73 __u8 fcs;
74 __u8 max_tx; 74 __u8 max_tx;
75 __u16 txwin_size; 75 __u16 txwin_size;
76 }; 76 };
77 77
78 #define L2CAP_CONNINFO 0x02 78 #define L2CAP_CONNINFO 0x02
79 struct l2cap_conninfo { 79 struct l2cap_conninfo {
80 __u16 hci_handle; 80 __u16 hci_handle;
81 __u8 dev_class[3]; 81 __u8 dev_class[3];
82 }; 82 };
83 83
84 #define L2CAP_LM 0x03 84 #define L2CAP_LM 0x03
85 #define L2CAP_LM_MASTER 0x0001 85 #define L2CAP_LM_MASTER 0x0001
86 #define L2CAP_LM_AUTH 0x0002 86 #define L2CAP_LM_AUTH 0x0002
87 #define L2CAP_LM_ENCRYPT 0x0004 87 #define L2CAP_LM_ENCRYPT 0x0004
88 #define L2CAP_LM_TRUSTED 0x0008 88 #define L2CAP_LM_TRUSTED 0x0008
89 #define L2CAP_LM_RELIABLE 0x0010 89 #define L2CAP_LM_RELIABLE 0x0010
90 #define L2CAP_LM_SECURE 0x0020 90 #define L2CAP_LM_SECURE 0x0020
91 91
92 /* L2CAP command codes */ 92 /* L2CAP command codes */
93 #define L2CAP_COMMAND_REJ 0x01 93 #define L2CAP_COMMAND_REJ 0x01
94 #define L2CAP_CONN_REQ 0x02 94 #define L2CAP_CONN_REQ 0x02
95 #define L2CAP_CONN_RSP 0x03 95 #define L2CAP_CONN_RSP 0x03
96 #define L2CAP_CONF_REQ 0x04 96 #define L2CAP_CONF_REQ 0x04
97 #define L2CAP_CONF_RSP 0x05 97 #define L2CAP_CONF_RSP 0x05
98 #define L2CAP_DISCONN_REQ 0x06 98 #define L2CAP_DISCONN_REQ 0x06
99 #define L2CAP_DISCONN_RSP 0x07 99 #define L2CAP_DISCONN_RSP 0x07
100 #define L2CAP_ECHO_REQ 0x08 100 #define L2CAP_ECHO_REQ 0x08
101 #define L2CAP_ECHO_RSP 0x09 101 #define L2CAP_ECHO_RSP 0x09
102 #define L2CAP_INFO_REQ 0x0a 102 #define L2CAP_INFO_REQ 0x0a
103 #define L2CAP_INFO_RSP 0x0b 103 #define L2CAP_INFO_RSP 0x0b
104 #define L2CAP_CREATE_CHAN_REQ 0x0c 104 #define L2CAP_CREATE_CHAN_REQ 0x0c
105 #define L2CAP_CREATE_CHAN_RSP 0x0d 105 #define L2CAP_CREATE_CHAN_RSP 0x0d
106 #define L2CAP_MOVE_CHAN_REQ 0x0e 106 #define L2CAP_MOVE_CHAN_REQ 0x0e
107 #define L2CAP_MOVE_CHAN_RSP 0x0f 107 #define L2CAP_MOVE_CHAN_RSP 0x0f
108 #define L2CAP_MOVE_CHAN_CFM 0x10 108 #define L2CAP_MOVE_CHAN_CFM 0x10
109 #define L2CAP_MOVE_CHAN_CFM_RSP 0x11 109 #define L2CAP_MOVE_CHAN_CFM_RSP 0x11
110 #define L2CAP_CONN_PARAM_UPDATE_REQ 0x12 110 #define L2CAP_CONN_PARAM_UPDATE_REQ 0x12
111 #define L2CAP_CONN_PARAM_UPDATE_RSP 0x13 111 #define L2CAP_CONN_PARAM_UPDATE_RSP 0x13
112 112
113 /* L2CAP extended feature mask */ 113 /* L2CAP extended feature mask */
114 #define L2CAP_FEAT_FLOWCTL 0x00000001 114 #define L2CAP_FEAT_FLOWCTL 0x00000001
115 #define L2CAP_FEAT_RETRANS 0x00000002 115 #define L2CAP_FEAT_RETRANS 0x00000002
116 #define L2CAP_FEAT_BIDIR_QOS 0x00000004 116 #define L2CAP_FEAT_BIDIR_QOS 0x00000004
117 #define L2CAP_FEAT_ERTM 0x00000008 117 #define L2CAP_FEAT_ERTM 0x00000008
118 #define L2CAP_FEAT_STREAMING 0x00000010 118 #define L2CAP_FEAT_STREAMING 0x00000010
119 #define L2CAP_FEAT_FCS 0x00000020 119 #define L2CAP_FEAT_FCS 0x00000020
120 #define L2CAP_FEAT_EXT_FLOW 0x00000040 120 #define L2CAP_FEAT_EXT_FLOW 0x00000040
121 #define L2CAP_FEAT_FIXED_CHAN 0x00000080 121 #define L2CAP_FEAT_FIXED_CHAN 0x00000080
122 #define L2CAP_FEAT_EXT_WINDOW 0x00000100 122 #define L2CAP_FEAT_EXT_WINDOW 0x00000100
123 #define L2CAP_FEAT_UCD 0x00000200 123 #define L2CAP_FEAT_UCD 0x00000200
124 124
125 /* L2CAP checksum option */ 125 /* L2CAP checksum option */
126 #define L2CAP_FCS_NONE 0x00 126 #define L2CAP_FCS_NONE 0x00
127 #define L2CAP_FCS_CRC16 0x01 127 #define L2CAP_FCS_CRC16 0x01
128 128
129 /* L2CAP fixed channels */ 129 /* L2CAP fixed channels */
130 #define L2CAP_FC_L2CAP 0x02 130 #define L2CAP_FC_L2CAP 0x02
131 #define L2CAP_FC_A2MP 0x08 131 #define L2CAP_FC_A2MP 0x08
132 132
133 /* L2CAP Control Field bit masks */ 133 /* L2CAP Control Field bit masks */
134 #define L2CAP_CTRL_SAR 0xC000 134 #define L2CAP_CTRL_SAR 0xC000
135 #define L2CAP_CTRL_REQSEQ 0x3F00 135 #define L2CAP_CTRL_REQSEQ 0x3F00
136 #define L2CAP_CTRL_TXSEQ 0x007E 136 #define L2CAP_CTRL_TXSEQ 0x007E
137 #define L2CAP_CTRL_SUPERVISE 0x000C 137 #define L2CAP_CTRL_SUPERVISE 0x000C
138 138
139 #define L2CAP_CTRL_RETRANS 0x0080 139 #define L2CAP_CTRL_RETRANS 0x0080
140 #define L2CAP_CTRL_FINAL 0x0080 140 #define L2CAP_CTRL_FINAL 0x0080
141 #define L2CAP_CTRL_POLL 0x0010 141 #define L2CAP_CTRL_POLL 0x0010
142 #define L2CAP_CTRL_FRAME_TYPE 0x0001 /* I- or S-Frame */ 142 #define L2CAP_CTRL_FRAME_TYPE 0x0001 /* I- or S-Frame */
143 143
144 #define L2CAP_CTRL_TXSEQ_SHIFT 1 144 #define L2CAP_CTRL_TXSEQ_SHIFT 1
145 #define L2CAP_CTRL_SUPER_SHIFT 2 145 #define L2CAP_CTRL_SUPER_SHIFT 2
146 #define L2CAP_CTRL_POLL_SHIFT 4 146 #define L2CAP_CTRL_POLL_SHIFT 4
147 #define L2CAP_CTRL_FINAL_SHIFT 7 147 #define L2CAP_CTRL_FINAL_SHIFT 7
148 #define L2CAP_CTRL_REQSEQ_SHIFT 8 148 #define L2CAP_CTRL_REQSEQ_SHIFT 8
149 #define L2CAP_CTRL_SAR_SHIFT 14 149 #define L2CAP_CTRL_SAR_SHIFT 14
150 150
151 /* L2CAP Extended Control Field bit mask */ 151 /* L2CAP Extended Control Field bit mask */
152 #define L2CAP_EXT_CTRL_TXSEQ 0xFFFC0000 152 #define L2CAP_EXT_CTRL_TXSEQ 0xFFFC0000
153 #define L2CAP_EXT_CTRL_SAR 0x00030000 153 #define L2CAP_EXT_CTRL_SAR 0x00030000
154 #define L2CAP_EXT_CTRL_SUPERVISE 0x00030000 154 #define L2CAP_EXT_CTRL_SUPERVISE 0x00030000
155 #define L2CAP_EXT_CTRL_REQSEQ 0x0000FFFC 155 #define L2CAP_EXT_CTRL_REQSEQ 0x0000FFFC
156 156
157 #define L2CAP_EXT_CTRL_POLL 0x00040000 157 #define L2CAP_EXT_CTRL_POLL 0x00040000
158 #define L2CAP_EXT_CTRL_FINAL 0x00000002 158 #define L2CAP_EXT_CTRL_FINAL 0x00000002
159 #define L2CAP_EXT_CTRL_FRAME_TYPE 0x00000001 /* I- or S-Frame */ 159 #define L2CAP_EXT_CTRL_FRAME_TYPE 0x00000001 /* I- or S-Frame */
160 160
161 #define L2CAP_EXT_CTRL_FINAL_SHIFT 1 161 #define L2CAP_EXT_CTRL_FINAL_SHIFT 1
162 #define L2CAP_EXT_CTRL_REQSEQ_SHIFT 2 162 #define L2CAP_EXT_CTRL_REQSEQ_SHIFT 2
163 #define L2CAP_EXT_CTRL_SAR_SHIFT 16 163 #define L2CAP_EXT_CTRL_SAR_SHIFT 16
164 #define L2CAP_EXT_CTRL_SUPER_SHIFT 16 164 #define L2CAP_EXT_CTRL_SUPER_SHIFT 16
165 #define L2CAP_EXT_CTRL_POLL_SHIFT 18 165 #define L2CAP_EXT_CTRL_POLL_SHIFT 18
166 #define L2CAP_EXT_CTRL_TXSEQ_SHIFT 18 166 #define L2CAP_EXT_CTRL_TXSEQ_SHIFT 18
167 167
168 /* L2CAP Supervisory Function */ 168 /* L2CAP Supervisory Function */
169 #define L2CAP_SUPER_RR 0x00 169 #define L2CAP_SUPER_RR 0x00
170 #define L2CAP_SUPER_REJ 0x01 170 #define L2CAP_SUPER_REJ 0x01
171 #define L2CAP_SUPER_RNR 0x02 171 #define L2CAP_SUPER_RNR 0x02
172 #define L2CAP_SUPER_SREJ 0x03 172 #define L2CAP_SUPER_SREJ 0x03
173 173
174 /* L2CAP Segmentation and Reassembly */ 174 /* L2CAP Segmentation and Reassembly */
175 #define L2CAP_SAR_UNSEGMENTED 0x00 175 #define L2CAP_SAR_UNSEGMENTED 0x00
176 #define L2CAP_SAR_START 0x01 176 #define L2CAP_SAR_START 0x01
177 #define L2CAP_SAR_END 0x02 177 #define L2CAP_SAR_END 0x02
178 #define L2CAP_SAR_CONTINUE 0x03 178 #define L2CAP_SAR_CONTINUE 0x03
179 179
180 /* L2CAP Command rej. reasons */ 180 /* L2CAP Command rej. reasons */
181 #define L2CAP_REJ_NOT_UNDERSTOOD 0x0000 181 #define L2CAP_REJ_NOT_UNDERSTOOD 0x0000
182 #define L2CAP_REJ_MTU_EXCEEDED 0x0001 182 #define L2CAP_REJ_MTU_EXCEEDED 0x0001
183 #define L2CAP_REJ_INVALID_CID 0x0002 183 #define L2CAP_REJ_INVALID_CID 0x0002
184 184
185 /* L2CAP structures */ 185 /* L2CAP structures */
186 struct l2cap_hdr { 186 struct l2cap_hdr {
187 __le16 len; 187 __le16 len;
188 __le16 cid; 188 __le16 cid;
189 } __packed; 189 } __packed;
190 #define L2CAP_HDR_SIZE 4 190 #define L2CAP_HDR_SIZE 4
191 #define L2CAP_ENH_HDR_SIZE 6 191 #define L2CAP_ENH_HDR_SIZE 6
192 #define L2CAP_EXT_HDR_SIZE 8 192 #define L2CAP_EXT_HDR_SIZE 8
193 193
194 #define L2CAP_FCS_SIZE 2 194 #define L2CAP_FCS_SIZE 2
195 #define L2CAP_SDULEN_SIZE 2 195 #define L2CAP_SDULEN_SIZE 2
196 #define L2CAP_PSMLEN_SIZE 2 196 #define L2CAP_PSMLEN_SIZE 2
197 #define L2CAP_ENH_CTRL_SIZE 2 197 #define L2CAP_ENH_CTRL_SIZE 2
198 #define L2CAP_EXT_CTRL_SIZE 4 198 #define L2CAP_EXT_CTRL_SIZE 4
199 199
200 struct l2cap_cmd_hdr { 200 struct l2cap_cmd_hdr {
201 __u8 code; 201 __u8 code;
202 __u8 ident; 202 __u8 ident;
203 __le16 len; 203 __le16 len;
204 } __packed; 204 } __packed;
205 #define L2CAP_CMD_HDR_SIZE 4 205 #define L2CAP_CMD_HDR_SIZE 4
206 206
207 struct l2cap_cmd_rej_unk { 207 struct l2cap_cmd_rej_unk {
208 __le16 reason; 208 __le16 reason;
209 } __packed; 209 } __packed;
210 210
211 struct l2cap_cmd_rej_mtu { 211 struct l2cap_cmd_rej_mtu {
212 __le16 reason; 212 __le16 reason;
213 __le16 max_mtu; 213 __le16 max_mtu;
214 } __packed; 214 } __packed;
215 215
216 struct l2cap_cmd_rej_cid { 216 struct l2cap_cmd_rej_cid {
217 __le16 reason; 217 __le16 reason;
218 __le16 scid; 218 __le16 scid;
219 __le16 dcid; 219 __le16 dcid;
220 } __packed; 220 } __packed;
221 221
222 struct l2cap_conn_req { 222 struct l2cap_conn_req {
223 __le16 psm; 223 __le16 psm;
224 __le16 scid; 224 __le16 scid;
225 } __packed; 225 } __packed;
226 226
227 struct l2cap_conn_rsp { 227 struct l2cap_conn_rsp {
228 __le16 dcid; 228 __le16 dcid;
229 __le16 scid; 229 __le16 scid;
230 __le16 result; 230 __le16 result;
231 __le16 status; 231 __le16 status;
232 } __packed; 232 } __packed;
233 233
234 /* protocol/service multiplexer (PSM) */ 234 /* protocol/service multiplexer (PSM) */
235 #define L2CAP_PSM_SDP 0x0001 235 #define L2CAP_PSM_SDP 0x0001
236 #define L2CAP_PSM_RFCOMM 0x0003 236 #define L2CAP_PSM_RFCOMM 0x0003
237 237
238 /* channel indentifier */ 238 /* channel indentifier */
239 #define L2CAP_CID_SIGNALING 0x0001 239 #define L2CAP_CID_SIGNALING 0x0001
240 #define L2CAP_CID_CONN_LESS 0x0002 240 #define L2CAP_CID_CONN_LESS 0x0002
241 #define L2CAP_CID_A2MP 0x0003 241 #define L2CAP_CID_A2MP 0x0003
242 #define L2CAP_CID_LE_DATA 0x0004 242 #define L2CAP_CID_LE_DATA 0x0004
243 #define L2CAP_CID_LE_SIGNALING 0x0005 243 #define L2CAP_CID_LE_SIGNALING 0x0005
244 #define L2CAP_CID_SMP 0x0006 244 #define L2CAP_CID_SMP 0x0006
245 #define L2CAP_CID_DYN_START 0x0040 245 #define L2CAP_CID_DYN_START 0x0040
246 #define L2CAP_CID_DYN_END 0xffff 246 #define L2CAP_CID_DYN_END 0xffff
247 247
248 /* connect/create channel results */ 248 /* connect/create channel results */
249 #define L2CAP_CR_SUCCESS 0x0000 249 #define L2CAP_CR_SUCCESS 0x0000
250 #define L2CAP_CR_PEND 0x0001 250 #define L2CAP_CR_PEND 0x0001
251 #define L2CAP_CR_BAD_PSM 0x0002 251 #define L2CAP_CR_BAD_PSM 0x0002
252 #define L2CAP_CR_SEC_BLOCK 0x0003 252 #define L2CAP_CR_SEC_BLOCK 0x0003
253 #define L2CAP_CR_NO_MEM 0x0004 253 #define L2CAP_CR_NO_MEM 0x0004
254 #define L2CAP_CR_BAD_AMP 0x0005 254 #define L2CAP_CR_BAD_AMP 0x0005
255 255
256 /* connect/create channel status */ 256 /* connect/create channel status */
257 #define L2CAP_CS_NO_INFO 0x0000 257 #define L2CAP_CS_NO_INFO 0x0000
258 #define L2CAP_CS_AUTHEN_PEND 0x0001 258 #define L2CAP_CS_AUTHEN_PEND 0x0001
259 #define L2CAP_CS_AUTHOR_PEND 0x0002 259 #define L2CAP_CS_AUTHOR_PEND 0x0002
260 260
261 struct l2cap_conf_req { 261 struct l2cap_conf_req {
262 __le16 dcid; 262 __le16 dcid;
263 __le16 flags; 263 __le16 flags;
264 __u8 data[0]; 264 __u8 data[0];
265 } __packed; 265 } __packed;
266 266
267 struct l2cap_conf_rsp { 267 struct l2cap_conf_rsp {
268 __le16 scid; 268 __le16 scid;
269 __le16 flags; 269 __le16 flags;
270 __le16 result; 270 __le16 result;
271 __u8 data[0]; 271 __u8 data[0];
272 } __packed; 272 } __packed;
273 273
274 #define L2CAP_CONF_SUCCESS 0x0000 274 #define L2CAP_CONF_SUCCESS 0x0000
275 #define L2CAP_CONF_UNACCEPT 0x0001 275 #define L2CAP_CONF_UNACCEPT 0x0001
276 #define L2CAP_CONF_REJECT 0x0002 276 #define L2CAP_CONF_REJECT 0x0002
277 #define L2CAP_CONF_UNKNOWN 0x0003 277 #define L2CAP_CONF_UNKNOWN 0x0003
278 #define L2CAP_CONF_PENDING 0x0004 278 #define L2CAP_CONF_PENDING 0x0004
279 #define L2CAP_CONF_EFS_REJECT 0x0005 279 #define L2CAP_CONF_EFS_REJECT 0x0005
280 280
281 /* configuration req/rsp continuation flag */ 281 /* configuration req/rsp continuation flag */
282 #define L2CAP_CONF_FLAG_CONTINUATION 0x0001 282 #define L2CAP_CONF_FLAG_CONTINUATION 0x0001
283 283
284 struct l2cap_conf_opt { 284 struct l2cap_conf_opt {
285 __u8 type; 285 __u8 type;
286 __u8 len; 286 __u8 len;
287 __u8 val[0]; 287 __u8 val[0];
288 } __packed; 288 } __packed;
289 #define L2CAP_CONF_OPT_SIZE 2 289 #define L2CAP_CONF_OPT_SIZE 2
290 290
291 #define L2CAP_CONF_HINT 0x80 291 #define L2CAP_CONF_HINT 0x80
292 #define L2CAP_CONF_MASK 0x7f 292 #define L2CAP_CONF_MASK 0x7f
293 293
294 #define L2CAP_CONF_MTU 0x01 294 #define L2CAP_CONF_MTU 0x01
295 #define L2CAP_CONF_FLUSH_TO 0x02 295 #define L2CAP_CONF_FLUSH_TO 0x02
296 #define L2CAP_CONF_QOS 0x03 296 #define L2CAP_CONF_QOS 0x03
297 #define L2CAP_CONF_RFC 0x04 297 #define L2CAP_CONF_RFC 0x04
298 #define L2CAP_CONF_FCS 0x05 298 #define L2CAP_CONF_FCS 0x05
299 #define L2CAP_CONF_EFS 0x06 299 #define L2CAP_CONF_EFS 0x06
300 #define L2CAP_CONF_EWS 0x07 300 #define L2CAP_CONF_EWS 0x07
301 301
302 #define L2CAP_CONF_MAX_SIZE 22 302 #define L2CAP_CONF_MAX_SIZE 22
303 303
304 struct l2cap_conf_rfc { 304 struct l2cap_conf_rfc {
305 __u8 mode; 305 __u8 mode;
306 __u8 txwin_size; 306 __u8 txwin_size;
307 __u8 max_transmit; 307 __u8 max_transmit;
308 __le16 retrans_timeout; 308 __le16 retrans_timeout;
309 __le16 monitor_timeout; 309 __le16 monitor_timeout;
310 __le16 max_pdu_size; 310 __le16 max_pdu_size;
311 } __packed; 311 } __packed;
312 312
313 #define L2CAP_MODE_BASIC 0x00 313 #define L2CAP_MODE_BASIC 0x00
314 #define L2CAP_MODE_RETRANS 0x01 314 #define L2CAP_MODE_RETRANS 0x01
315 #define L2CAP_MODE_FLOWCTL 0x02 315 #define L2CAP_MODE_FLOWCTL 0x02
316 #define L2CAP_MODE_ERTM 0x03 316 #define L2CAP_MODE_ERTM 0x03
317 #define L2CAP_MODE_STREAMING 0x04 317 #define L2CAP_MODE_STREAMING 0x04
318 318
319 struct l2cap_conf_efs { 319 struct l2cap_conf_efs {
320 __u8 id; 320 __u8 id;
321 __u8 stype; 321 __u8 stype;
322 __le16 msdu; 322 __le16 msdu;
323 __le32 sdu_itime; 323 __le32 sdu_itime;
324 __le32 acc_lat; 324 __le32 acc_lat;
325 __le32 flush_to; 325 __le32 flush_to;
326 } __packed; 326 } __packed;
327 327
328 #define L2CAP_SERV_NOTRAFIC 0x00 328 #define L2CAP_SERV_NOTRAFIC 0x00
329 #define L2CAP_SERV_BESTEFFORT 0x01 329 #define L2CAP_SERV_BESTEFFORT 0x01
330 #define L2CAP_SERV_GUARANTEED 0x02 330 #define L2CAP_SERV_GUARANTEED 0x02
331 331
332 #define L2CAP_BESTEFFORT_ID 0x01 332 #define L2CAP_BESTEFFORT_ID 0x01
333 333
334 struct l2cap_disconn_req { 334 struct l2cap_disconn_req {
335 __le16 dcid; 335 __le16 dcid;
336 __le16 scid; 336 __le16 scid;
337 } __packed; 337 } __packed;
338 338
339 struct l2cap_disconn_rsp { 339 struct l2cap_disconn_rsp {
340 __le16 dcid; 340 __le16 dcid;
341 __le16 scid; 341 __le16 scid;
342 } __packed; 342 } __packed;
343 343
344 struct l2cap_info_req { 344 struct l2cap_info_req {
345 __le16 type; 345 __le16 type;
346 } __packed; 346 } __packed;
347 347
348 struct l2cap_info_rsp { 348 struct l2cap_info_rsp {
349 __le16 type; 349 __le16 type;
350 __le16 result; 350 __le16 result;
351 __u8 data[0]; 351 __u8 data[0];
352 } __packed; 352 } __packed;
353 353
354 struct l2cap_create_chan_req { 354 struct l2cap_create_chan_req {
355 __le16 psm; 355 __le16 psm;
356 __le16 scid; 356 __le16 scid;
357 __u8 amp_id; 357 __u8 amp_id;
358 } __packed; 358 } __packed;
359 359
360 struct l2cap_create_chan_rsp { 360 struct l2cap_create_chan_rsp {
361 __le16 dcid; 361 __le16 dcid;
362 __le16 scid; 362 __le16 scid;
363 __le16 result; 363 __le16 result;
364 __le16 status; 364 __le16 status;
365 } __packed; 365 } __packed;
366 366
367 struct l2cap_move_chan_req { 367 struct l2cap_move_chan_req {
368 __le16 icid; 368 __le16 icid;
369 __u8 dest_amp_id; 369 __u8 dest_amp_id;
370 } __packed; 370 } __packed;
371 371
372 struct l2cap_move_chan_rsp { 372 struct l2cap_move_chan_rsp {
373 __le16 icid; 373 __le16 icid;
374 __le16 result; 374 __le16 result;
375 } __packed; 375 } __packed;
376 376
377 #define L2CAP_MR_SUCCESS 0x0000 377 #define L2CAP_MR_SUCCESS 0x0000
378 #define L2CAP_MR_PEND 0x0001 378 #define L2CAP_MR_PEND 0x0001
379 #define L2CAP_MR_BAD_ID 0x0002 379 #define L2CAP_MR_BAD_ID 0x0002
380 #define L2CAP_MR_SAME_ID 0x0003 380 #define L2CAP_MR_SAME_ID 0x0003
381 #define L2CAP_MR_NOT_SUPP 0x0004 381 #define L2CAP_MR_NOT_SUPP 0x0004
382 #define L2CAP_MR_COLLISION 0x0005 382 #define L2CAP_MR_COLLISION 0x0005
383 #define L2CAP_MR_NOT_ALLOWED 0x0006 383 #define L2CAP_MR_NOT_ALLOWED 0x0006
384 384
385 struct l2cap_move_chan_cfm { 385 struct l2cap_move_chan_cfm {
386 __le16 icid; 386 __le16 icid;
387 __le16 result; 387 __le16 result;
388 } __packed; 388 } __packed;
389 389
390 #define L2CAP_MC_CONFIRMED 0x0000 390 #define L2CAP_MC_CONFIRMED 0x0000
391 #define L2CAP_MC_UNCONFIRMED 0x0001 391 #define L2CAP_MC_UNCONFIRMED 0x0001
392 392
393 struct l2cap_move_chan_cfm_rsp { 393 struct l2cap_move_chan_cfm_rsp {
394 __le16 icid; 394 __le16 icid;
395 } __packed; 395 } __packed;
396 396
397 /* info type */ 397 /* info type */
398 #define L2CAP_IT_CL_MTU 0x0001 398 #define L2CAP_IT_CL_MTU 0x0001
399 #define L2CAP_IT_FEAT_MASK 0x0002 399 #define L2CAP_IT_FEAT_MASK 0x0002
400 #define L2CAP_IT_FIXED_CHAN 0x0003 400 #define L2CAP_IT_FIXED_CHAN 0x0003
401 401
402 /* info result */ 402 /* info result */
403 #define L2CAP_IR_SUCCESS 0x0000 403 #define L2CAP_IR_SUCCESS 0x0000
404 #define L2CAP_IR_NOTSUPP 0x0001 404 #define L2CAP_IR_NOTSUPP 0x0001
405 405
406 struct l2cap_conn_param_update_req { 406 struct l2cap_conn_param_update_req {
407 __le16 min; 407 __le16 min;
408 __le16 max; 408 __le16 max;
409 __le16 latency; 409 __le16 latency;
410 __le16 to_multiplier; 410 __le16 to_multiplier;
411 } __packed; 411 } __packed;
412 412
413 struct l2cap_conn_param_update_rsp { 413 struct l2cap_conn_param_update_rsp {
414 __le16 result; 414 __le16 result;
415 } __packed; 415 } __packed;
416 416
417 /* Connection Parameters result */ 417 /* Connection Parameters result */
418 #define L2CAP_CONN_PARAM_ACCEPTED 0x0000 418 #define L2CAP_CONN_PARAM_ACCEPTED 0x0000
419 #define L2CAP_CONN_PARAM_REJECTED 0x0001 419 #define L2CAP_CONN_PARAM_REJECTED 0x0001
420 420
421 /* ----- L2CAP channels and connections ----- */ 421 /* ----- L2CAP channels and connections ----- */
422 struct l2cap_seq_list { 422 struct l2cap_seq_list {
423 __u16 head; 423 __u16 head;
424 __u16 tail; 424 __u16 tail;
425 __u16 mask; 425 __u16 mask;
426 __u16 *list; 426 __u16 *list;
427 }; 427 };
428 428
429 #define L2CAP_SEQ_LIST_CLEAR 0xFFFF 429 #define L2CAP_SEQ_LIST_CLEAR 0xFFFF
430 #define L2CAP_SEQ_LIST_TAIL 0x8000 430 #define L2CAP_SEQ_LIST_TAIL 0x8000
431 431
432 struct l2cap_chan { 432 struct l2cap_chan {
433 struct sock *sk; 433 struct sock *sk;
434 434
435 struct l2cap_conn *conn; 435 struct l2cap_conn *conn;
436 436
437 __u8 state; 437 __u8 state;
438 438
439 atomic_t refcnt; 439 atomic_t refcnt;
440 440
441 __le16 psm; 441 __le16 psm;
442 __u16 dcid; 442 __u16 dcid;
443 __u16 scid; 443 __u16 scid;
444 444
445 __u16 imtu; 445 __u16 imtu;
446 __u16 omtu; 446 __u16 omtu;
447 __u16 flush_to; 447 __u16 flush_to;
448 __u8 mode; 448 __u8 mode;
449 __u8 chan_type; 449 __u8 chan_type;
450 __u8 chan_policy; 450 __u8 chan_policy;
451 451
452 __le16 sport; 452 __le16 sport;
453 453
454 __u8 sec_level; 454 __u8 sec_level;
455 455
456 __u8 ident; 456 __u8 ident;
457 457
458 __u8 conf_req[64]; 458 __u8 conf_req[64];
459 __u8 conf_len; 459 __u8 conf_len;
460 __u8 num_conf_req; 460 __u8 num_conf_req;
461 __u8 num_conf_rsp; 461 __u8 num_conf_rsp;
462 462
463 __u8 fcs; 463 __u8 fcs;
464 464
465 __u16 tx_win; 465 __u16 tx_win;
466 __u16 tx_win_max; 466 __u16 tx_win_max;
467 __u8 max_tx; 467 __u8 max_tx;
468 __u16 retrans_timeout; 468 __u16 retrans_timeout;
469 __u16 monitor_timeout; 469 __u16 monitor_timeout;
470 __u16 mps; 470 __u16 mps;
471 471
472 __u8 tx_state; 472 __u8 tx_state;
473 __u8 rx_state; 473 __u8 rx_state;
474 474
475 unsigned long conf_state; 475 unsigned long conf_state;
476 unsigned long conn_state; 476 unsigned long conn_state;
477 unsigned long flags; 477 unsigned long flags;
478 478
479 __u16 next_tx_seq; 479 __u16 next_tx_seq;
480 __u16 expected_ack_seq; 480 __u16 expected_ack_seq;
481 __u16 expected_tx_seq; 481 __u16 expected_tx_seq;
482 __u16 buffer_seq; 482 __u16 buffer_seq;
483 __u16 srej_save_reqseq; 483 __u16 srej_save_reqseq;
484 __u16 last_acked_seq; 484 __u16 last_acked_seq;
485 __u16 frames_sent; 485 __u16 frames_sent;
486 __u16 unacked_frames; 486 __u16 unacked_frames;
487 __u8 retry_count; 487 __u8 retry_count;
488 __u16 srej_queue_next; 488 __u16 srej_queue_next;
489 __u16 sdu_len; 489 __u16 sdu_len;
490 struct sk_buff *sdu; 490 struct sk_buff *sdu;
491 struct sk_buff *sdu_last_frag; 491 struct sk_buff *sdu_last_frag;
492 492
493 __u16 remote_tx_win; 493 __u16 remote_tx_win;
494 __u8 remote_max_tx; 494 __u8 remote_max_tx;
495 __u16 remote_mps; 495 __u16 remote_mps;
496 496
497 __u8 local_id; 497 __u8 local_id;
498 __u8 local_stype; 498 __u8 local_stype;
499 __u16 local_msdu; 499 __u16 local_msdu;
500 __u32 local_sdu_itime; 500 __u32 local_sdu_itime;
501 __u32 local_acc_lat; 501 __u32 local_acc_lat;
502 __u32 local_flush_to; 502 __u32 local_flush_to;
503 503
504 __u8 remote_id; 504 __u8 remote_id;
505 __u8 remote_stype; 505 __u8 remote_stype;
506 __u16 remote_msdu; 506 __u16 remote_msdu;
507 __u32 remote_sdu_itime; 507 __u32 remote_sdu_itime;
508 __u32 remote_acc_lat; 508 __u32 remote_acc_lat;
509 __u32 remote_flush_to; 509 __u32 remote_flush_to;
510 510
511 struct delayed_work chan_timer; 511 struct delayed_work chan_timer;
512 struct delayed_work retrans_timer; 512 struct delayed_work retrans_timer;
513 struct delayed_work monitor_timer; 513 struct delayed_work monitor_timer;
514 struct delayed_work ack_timer; 514 struct delayed_work ack_timer;
515 515
516 struct sk_buff *tx_send_head; 516 struct sk_buff *tx_send_head;
517 struct sk_buff_head tx_q; 517 struct sk_buff_head tx_q;
518 struct sk_buff_head srej_q; 518 struct sk_buff_head srej_q;
519 struct l2cap_seq_list srej_list; 519 struct l2cap_seq_list srej_list;
520 struct l2cap_seq_list retrans_list; 520 struct l2cap_seq_list retrans_list;
521 521
522 struct list_head list; 522 struct list_head list;
523 struct list_head global_l; 523 struct list_head global_l;
524 524
525 void *data; 525 void *data;
526 struct l2cap_ops *ops; 526 struct l2cap_ops *ops;
527 struct mutex lock; 527 struct mutex lock;
528 }; 528 };
529 529
530 struct l2cap_ops { 530 struct l2cap_ops {
531 char *name; 531 char *name;
532 532
533 struct l2cap_chan *(*new_connection) (struct l2cap_chan *chan); 533 struct l2cap_chan *(*new_connection) (struct l2cap_chan *chan);
534 int (*recv) (struct l2cap_chan * chan, 534 int (*recv) (struct l2cap_chan * chan,
535 struct sk_buff *skb); 535 struct sk_buff *skb);
536 void (*teardown) (struct l2cap_chan *chan, int err); 536 void (*teardown) (struct l2cap_chan *chan, int err);
537 void (*close) (struct l2cap_chan *chan); 537 void (*close) (struct l2cap_chan *chan);
538 void (*state_change) (struct l2cap_chan *chan, 538 void (*state_change) (struct l2cap_chan *chan,
539 int state); 539 int state);
540 void (*ready) (struct l2cap_chan *chan); 540 void (*ready) (struct l2cap_chan *chan);
541 struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan, 541 struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan,
542 unsigned long len, int nb); 542 unsigned long len, int nb);
543 }; 543 };
544 544
545 struct l2cap_conn { 545 struct l2cap_conn {
546 struct hci_conn *hcon; 546 struct hci_conn *hcon;
547 struct hci_chan *hchan; 547 struct hci_chan *hchan;
548 548
549 bdaddr_t *dst; 549 bdaddr_t *dst;
550 bdaddr_t *src; 550 bdaddr_t *src;
551 551
552 unsigned int mtu; 552 unsigned int mtu;
553 553
554 __u32 feat_mask; 554 __u32 feat_mask;
555 __u8 fixed_chan_mask; 555 __u8 fixed_chan_mask;
556 556
557 __u8 info_state; 557 __u8 info_state;
558 __u8 info_ident; 558 __u8 info_ident;
559 559
560 struct delayed_work info_timer; 560 struct delayed_work info_timer;
561 561
562 spinlock_t lock; 562 spinlock_t lock;
563 563
564 struct sk_buff *rx_skb; 564 struct sk_buff *rx_skb;
565 __u32 rx_len; 565 __u32 rx_len;
566 __u8 tx_ident; 566 __u8 tx_ident;
567 567
568 __u8 disc_reason; 568 __u8 disc_reason;
569 569
570 struct delayed_work security_timer; 570 struct delayed_work security_timer;
571 struct smp_chan *smp_chan; 571 struct smp_chan *smp_chan;
572 572
573 struct list_head chan_l; 573 struct list_head chan_l;
574 struct mutex chan_lock; 574 struct mutex chan_lock;
575 }; 575 };
576 576
577 #define L2CAP_INFO_CL_MTU_REQ_SENT 0x01 577 #define L2CAP_INFO_CL_MTU_REQ_SENT 0x01
578 #define L2CAP_INFO_FEAT_MASK_REQ_SENT 0x04 578 #define L2CAP_INFO_FEAT_MASK_REQ_SENT 0x04
579 #define L2CAP_INFO_FEAT_MASK_REQ_DONE 0x08 579 #define L2CAP_INFO_FEAT_MASK_REQ_DONE 0x08
580 580
581 #define L2CAP_CHAN_RAW 1 581 #define L2CAP_CHAN_RAW 1
582 #define L2CAP_CHAN_CONN_LESS 2 582 #define L2CAP_CHAN_CONN_LESS 2
583 #define L2CAP_CHAN_CONN_ORIENTED 3 583 #define L2CAP_CHAN_CONN_ORIENTED 3
584 #define L2CAP_CHAN_CONN_FIX_A2MP 4 584 #define L2CAP_CHAN_CONN_FIX_A2MP 4
585 585
586 /* ----- L2CAP socket info ----- */ 586 /* ----- L2CAP socket info ----- */
587 #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk) 587 #define l2cap_pi(sk) ((struct l2cap_pinfo *) sk)
588 588
589 struct l2cap_pinfo { 589 struct l2cap_pinfo {
590 struct bt_sock bt; 590 struct bt_sock bt;
591 struct l2cap_chan *chan; 591 struct l2cap_chan *chan;
592 struct sk_buff *rx_busy_skb; 592 struct sk_buff *rx_busy_skb;
593 }; 593 };
594 594
595 enum { 595 enum {
596 CONF_REQ_SENT, 596 CONF_REQ_SENT,
597 CONF_INPUT_DONE, 597 CONF_INPUT_DONE,
598 CONF_OUTPUT_DONE, 598 CONF_OUTPUT_DONE,
599 CONF_MTU_DONE, 599 CONF_MTU_DONE,
600 CONF_MODE_DONE, 600 CONF_MODE_DONE,
601 CONF_CONNECT_PEND, 601 CONF_CONNECT_PEND,
602 CONF_NO_FCS_RECV, 602 CONF_NO_FCS_RECV,
603 CONF_STATE2_DEVICE, 603 CONF_STATE2_DEVICE,
604 CONF_EWS_RECV, 604 CONF_EWS_RECV,
605 CONF_LOC_CONF_PEND, 605 CONF_LOC_CONF_PEND,
606 CONF_REM_CONF_PEND, 606 CONF_REM_CONF_PEND,
607 CONF_NOT_COMPLETE, 607 CONF_NOT_COMPLETE,
608 }; 608 };
609 609
610 #define L2CAP_CONF_MAX_CONF_REQ 2 610 #define L2CAP_CONF_MAX_CONF_REQ 2
611 #define L2CAP_CONF_MAX_CONF_RSP 2 611 #define L2CAP_CONF_MAX_CONF_RSP 2
612 612
613 enum { 613 enum {
614 CONN_SREJ_SENT, 614 CONN_SREJ_SENT,
615 CONN_WAIT_F, 615 CONN_WAIT_F,
616 CONN_SREJ_ACT, 616 CONN_SREJ_ACT,
617 CONN_SEND_PBIT, 617 CONN_SEND_PBIT,
618 CONN_REMOTE_BUSY, 618 CONN_REMOTE_BUSY,
619 CONN_LOCAL_BUSY, 619 CONN_LOCAL_BUSY,
620 CONN_REJ_ACT, 620 CONN_REJ_ACT,
621 CONN_SEND_FBIT, 621 CONN_SEND_FBIT,
622 CONN_RNR_SENT, 622 CONN_RNR_SENT,
623 }; 623 };
624 624
625 /* Definitions for flags in l2cap_chan */ 625 /* Definitions for flags in l2cap_chan */
626 enum { 626 enum {
627 FLAG_ROLE_SWITCH, 627 FLAG_ROLE_SWITCH,
628 FLAG_FORCE_ACTIVE, 628 FLAG_FORCE_ACTIVE,
629 FLAG_FORCE_RELIABLE, 629 FLAG_FORCE_RELIABLE,
630 FLAG_FLUSHABLE, 630 FLAG_FLUSHABLE,
631 FLAG_EXT_CTRL, 631 FLAG_EXT_CTRL,
632 FLAG_EFS_ENABLE, 632 FLAG_EFS_ENABLE,
633 }; 633 };
634 634
635 enum { 635 enum {
636 L2CAP_TX_STATE_XMIT, 636 L2CAP_TX_STATE_XMIT,
637 L2CAP_TX_STATE_WAIT_F, 637 L2CAP_TX_STATE_WAIT_F,
638 }; 638 };
639 639
640 enum { 640 enum {
641 L2CAP_RX_STATE_RECV, 641 L2CAP_RX_STATE_RECV,
642 L2CAP_RX_STATE_SREJ_SENT, 642 L2CAP_RX_STATE_SREJ_SENT,
643 }; 643 };
644 644
645 enum { 645 enum {
646 L2CAP_TXSEQ_EXPECTED, 646 L2CAP_TXSEQ_EXPECTED,
647 L2CAP_TXSEQ_EXPECTED_SREJ, 647 L2CAP_TXSEQ_EXPECTED_SREJ,
648 L2CAP_TXSEQ_UNEXPECTED, 648 L2CAP_TXSEQ_UNEXPECTED,
649 L2CAP_TXSEQ_UNEXPECTED_SREJ, 649 L2CAP_TXSEQ_UNEXPECTED_SREJ,
650 L2CAP_TXSEQ_DUPLICATE, 650 L2CAP_TXSEQ_DUPLICATE,
651 L2CAP_TXSEQ_DUPLICATE_SREJ, 651 L2CAP_TXSEQ_DUPLICATE_SREJ,
652 L2CAP_TXSEQ_INVALID, 652 L2CAP_TXSEQ_INVALID,
653 L2CAP_TXSEQ_INVALID_IGNORE, 653 L2CAP_TXSEQ_INVALID_IGNORE,
654 }; 654 };
655 655
656 enum { 656 enum {
657 L2CAP_EV_DATA_REQUEST, 657 L2CAP_EV_DATA_REQUEST,
658 L2CAP_EV_LOCAL_BUSY_DETECTED, 658 L2CAP_EV_LOCAL_BUSY_DETECTED,
659 L2CAP_EV_LOCAL_BUSY_CLEAR, 659 L2CAP_EV_LOCAL_BUSY_CLEAR,
660 L2CAP_EV_RECV_REQSEQ_AND_FBIT, 660 L2CAP_EV_RECV_REQSEQ_AND_FBIT,
661 L2CAP_EV_RECV_FBIT, 661 L2CAP_EV_RECV_FBIT,
662 L2CAP_EV_RETRANS_TO, 662 L2CAP_EV_RETRANS_TO,
663 L2CAP_EV_MONITOR_TO, 663 L2CAP_EV_MONITOR_TO,
664 L2CAP_EV_EXPLICIT_POLL, 664 L2CAP_EV_EXPLICIT_POLL,
665 L2CAP_EV_RECV_IFRAME, 665 L2CAP_EV_RECV_IFRAME,
666 L2CAP_EV_RECV_RR, 666 L2CAP_EV_RECV_RR,
667 L2CAP_EV_RECV_REJ, 667 L2CAP_EV_RECV_REJ,
668 L2CAP_EV_RECV_RNR, 668 L2CAP_EV_RECV_RNR,
669 L2CAP_EV_RECV_SREJ, 669 L2CAP_EV_RECV_SREJ,
670 L2CAP_EV_RECV_FRAME, 670 L2CAP_EV_RECV_FRAME,
671 }; 671 };
672 672
673 static inline void l2cap_chan_hold(struct l2cap_chan *c) 673 static inline void l2cap_chan_hold(struct l2cap_chan *c)
674 { 674 {
675 atomic_inc(&c->refcnt); 675 atomic_inc(&c->refcnt);
676 } 676 }
677 677
678 static inline void l2cap_chan_put(struct l2cap_chan *c) 678 static inline void l2cap_chan_put(struct l2cap_chan *c)
679 { 679 {
680 if (atomic_dec_and_test(&c->refcnt)) 680 if (atomic_dec_and_test(&c->refcnt))
681 kfree(c); 681 kfree(c);
682 } 682 }
683 683
684 static inline void l2cap_chan_lock(struct l2cap_chan *chan) 684 static inline void l2cap_chan_lock(struct l2cap_chan *chan)
685 { 685 {
686 mutex_lock(&chan->lock); 686 mutex_lock(&chan->lock);
687 } 687 }
688 688
689 static inline void l2cap_chan_unlock(struct l2cap_chan *chan) 689 static inline void l2cap_chan_unlock(struct l2cap_chan *chan)
690 { 690 {
691 mutex_unlock(&chan->lock); 691 mutex_unlock(&chan->lock);
692 } 692 }
693 693
694 static inline void l2cap_set_timer(struct l2cap_chan *chan, 694 static inline void l2cap_set_timer(struct l2cap_chan *chan,
695 struct delayed_work *work, long timeout) 695 struct delayed_work *work, long timeout)
696 { 696 {
697 BT_DBG("chan %p state %s timeout %ld", chan, 697 BT_DBG("chan %p state %s timeout %ld", chan,
698 state_to_string(chan->state), timeout); 698 state_to_string(chan->state), timeout);
699 699
700 /* If delayed work cancelled do not hold(chan) 700 /* If delayed work cancelled do not hold(chan)
701 since it is already done with previous set_timer */ 701 since it is already done with previous set_timer */
702 if (!cancel_delayed_work(work)) 702 if (!cancel_delayed_work(work))
703 l2cap_chan_hold(chan); 703 l2cap_chan_hold(chan);
704 704
705 schedule_delayed_work(work, timeout); 705 schedule_delayed_work(work, timeout);
706 } 706 }
707 707
708 static inline bool l2cap_clear_timer(struct l2cap_chan *chan, 708 static inline bool l2cap_clear_timer(struct l2cap_chan *chan,
709 struct delayed_work *work) 709 struct delayed_work *work)
710 { 710 {
711 bool ret; 711 bool ret;
712 712
713 /* put(chan) if delayed work cancelled otherwise it 713 /* put(chan) if delayed work cancelled otherwise it
714 is done in delayed work function */ 714 is done in delayed work function */
715 ret = cancel_delayed_work(work); 715 ret = cancel_delayed_work(work);
716 if (ret) 716 if (ret)
717 l2cap_chan_put(chan); 717 l2cap_chan_put(chan);
718 718
719 return ret; 719 return ret;
720 } 720 }
721 721
722 #define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t)) 722 #define __set_chan_timer(c, t) l2cap_set_timer(c, &c->chan_timer, (t))
723 #define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer) 723 #define __clear_chan_timer(c) l2cap_clear_timer(c, &c->chan_timer)
724 #define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer) 724 #define __clear_retrans_timer(c) l2cap_clear_timer(c, &c->retrans_timer)
725 #define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer) 725 #define __clear_monitor_timer(c) l2cap_clear_timer(c, &c->monitor_timer)
726 #define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \ 726 #define __set_ack_timer(c) l2cap_set_timer(c, &chan->ack_timer, \
727 msecs_to_jiffies(L2CAP_DEFAULT_ACK_TO)); 727 msecs_to_jiffies(L2CAP_DEFAULT_ACK_TO));
728 #define __clear_ack_timer(c) l2cap_clear_timer(c, &c->ack_timer) 728 #define __clear_ack_timer(c) l2cap_clear_timer(c, &c->ack_timer)
729 729
730 static inline int __seq_offset(struct l2cap_chan *chan, __u16 seq1, __u16 seq2) 730 static inline int __seq_offset(struct l2cap_chan *chan, __u16 seq1, __u16 seq2)
731 { 731 {
732 if (seq1 >= seq2) 732 if (seq1 >= seq2)
733 return seq1 - seq2; 733 return seq1 - seq2;
734 else 734 else
735 return chan->tx_win_max + 1 - seq2 + seq1; 735 return chan->tx_win_max + 1 - seq2 + seq1;
736 } 736 }
737 737
738 static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq) 738 static inline __u16 __next_seq(struct l2cap_chan *chan, __u16 seq)
739 { 739 {
740 return (seq + 1) % (chan->tx_win_max + 1); 740 return (seq + 1) % (chan->tx_win_max + 1);
741 } 741 }
742 742
743 743
744 extern bool disable_ertm; 744 extern bool disable_ertm;
745 745
746 int l2cap_init_sockets(void); 746 int l2cap_init_sockets(void);
747 void l2cap_cleanup_sockets(void); 747 void l2cap_cleanup_sockets(void);
748 748
749 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan); 749 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan);
750 int __l2cap_wait_ack(struct sock *sk); 750 int __l2cap_wait_ack(struct sock *sk);
751 751
752 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm); 752 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm);
753 int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid); 753 int l2cap_add_scid(struct l2cap_chan *chan, __u16 scid);
754 754
755 struct l2cap_chan *l2cap_chan_create(void); 755 struct l2cap_chan *l2cap_chan_create(void);
756 void l2cap_chan_close(struct l2cap_chan *chan, int reason); 756 void l2cap_chan_close(struct l2cap_chan *chan, int reason);
757 void l2cap_chan_destroy(struct l2cap_chan *chan); 757 void l2cap_chan_destroy(struct l2cap_chan *chan);
758 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, 758 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
759 bdaddr_t *dst, u8 dst_type); 759 bdaddr_t *dst, u8 dst_type);
760 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len, 760 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
761 u32 priority); 761 u32 priority);
762 void l2cap_chan_busy(struct l2cap_chan *chan, int busy); 762 void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
763 int l2cap_chan_check_security(struct l2cap_chan *chan); 763 int l2cap_chan_check_security(struct l2cap_chan *chan);
764 void l2cap_chan_set_defaults(struct l2cap_chan *chan); 764 void l2cap_chan_set_defaults(struct l2cap_chan *chan);
765 int l2cap_ertm_init(struct l2cap_chan *chan); 765 int l2cap_ertm_init(struct l2cap_chan *chan);
766 void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan); 766 void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan);
767 void l2cap_chan_del(struct l2cap_chan *chan, int err); 767 void l2cap_chan_del(struct l2cap_chan *chan, int err);
768 768
769 #endif /* __L2CAP_H */ 769 #endif /* __L2CAP_H */
net/bluetooth/l2cap_sock.c
1 /* 1 /*
2 BlueZ - Bluetooth protocol stack for Linux 2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated 3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org> 4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5 Copyright (C) 2010 Google Inc. 5 Copyright (C) 2010 Google Inc.
6 Copyright (C) 2011 ProFUSION Embedded Systems 6 Copyright (C) 2011 ProFUSION Embedded Systems
7 7
8 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 8 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
9 9
10 This program is free software; you can redistribute it and/or modify 10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License version 2 as 11 it under the terms of the GNU General Public License version 2 as
12 published by the Free Software Foundation; 12 published by the Free Software Foundation;
13 13
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
17 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 17 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
18 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 18 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22 22
23 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 23 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
24 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 24 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
25 SOFTWARE IS DISCLAIMED. 25 SOFTWARE IS DISCLAIMED.
26 */ 26 */
27 27
28 /* Bluetooth L2CAP sockets. */ 28 /* Bluetooth L2CAP sockets. */
29 29
30 #include <linux/export.h> 30 #include <linux/export.h>
31 31
32 #include <net/bluetooth/bluetooth.h> 32 #include <net/bluetooth/bluetooth.h>
33 #include <net/bluetooth/hci_core.h> 33 #include <net/bluetooth/hci_core.h>
34 #include <net/bluetooth/l2cap.h> 34 #include <net/bluetooth/l2cap.h>
35 #include <net/bluetooth/smp.h> 35 #include <net/bluetooth/smp.h>
36 36
37 static const struct proto_ops l2cap_sock_ops; 37 static const struct proto_ops l2cap_sock_ops;
38 static void l2cap_sock_init(struct sock *sk, struct sock *parent); 38 static void l2cap_sock_init(struct sock *sk, struct sock *parent);
39 static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio); 39 static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio);
40 40
41 static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) 41 static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
42 { 42 {
43 struct sock *sk = sock->sk; 43 struct sock *sk = sock->sk;
44 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 44 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
45 struct sockaddr_l2 la; 45 struct sockaddr_l2 la;
46 int len, err = 0; 46 int len, err = 0;
47 47
48 BT_DBG("sk %p", sk); 48 BT_DBG("sk %p", sk);
49 49
50 if (!addr || addr->sa_family != AF_BLUETOOTH) 50 if (!addr || addr->sa_family != AF_BLUETOOTH)
51 return -EINVAL; 51 return -EINVAL;
52 52
53 memset(&la, 0, sizeof(la)); 53 memset(&la, 0, sizeof(la));
54 len = min_t(unsigned int, sizeof(la), alen); 54 len = min_t(unsigned int, sizeof(la), alen);
55 memcpy(&la, addr, len); 55 memcpy(&la, addr, len);
56 56
57 if (la.l2_cid && la.l2_psm) 57 if (la.l2_cid && la.l2_psm)
58 return -EINVAL; 58 return -EINVAL;
59 59
60 lock_sock(sk); 60 lock_sock(sk);
61 61
62 if (sk->sk_state != BT_OPEN) { 62 if (sk->sk_state != BT_OPEN) {
63 err = -EBADFD; 63 err = -EBADFD;
64 goto done; 64 goto done;
65 } 65 }
66 66
67 if (la.l2_psm) { 67 if (la.l2_psm) {
68 __u16 psm = __le16_to_cpu(la.l2_psm); 68 __u16 psm = __le16_to_cpu(la.l2_psm);
69 69
70 /* PSM must be odd and lsb of upper byte must be 0 */ 70 /* PSM must be odd and lsb of upper byte must be 0 */
71 if ((psm & 0x0101) != 0x0001) { 71 if ((psm & 0x0101) != 0x0001) {
72 err = -EINVAL; 72 err = -EINVAL;
73 goto done; 73 goto done;
74 } 74 }
75 75
76 /* Restrict usage of well-known PSMs */ 76 /* Restrict usage of well-known PSMs */
77 if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) { 77 if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) {
78 err = -EACCES; 78 err = -EACCES;
79 goto done; 79 goto done;
80 } 80 }
81 } 81 }
82 82
83 if (la.l2_cid) 83 if (la.l2_cid)
84 err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid)); 84 err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid));
85 else 85 else
86 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm); 86 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
87 87
88 if (err < 0) 88 if (err < 0)
89 goto done; 89 goto done;
90 90
91 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_SDP || 91 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_SDP ||
92 __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM) 92 __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM)
93 chan->sec_level = BT_SECURITY_SDP; 93 chan->sec_level = BT_SECURITY_SDP;
94 94
95 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr); 95 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
96 96
97 chan->state = BT_BOUND; 97 chan->state = BT_BOUND;
98 sk->sk_state = BT_BOUND; 98 sk->sk_state = BT_BOUND;
99 99
100 done: 100 done:
101 release_sock(sk); 101 release_sock(sk);
102 return err; 102 return err;
103 } 103 }
104 104
105 static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags) 105 static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
106 { 106 {
107 struct sock *sk = sock->sk; 107 struct sock *sk = sock->sk;
108 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 108 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
109 struct sockaddr_l2 la; 109 struct sockaddr_l2 la;
110 int len, err = 0; 110 int len, err = 0;
111 111
112 BT_DBG("sk %p", sk); 112 BT_DBG("sk %p", sk);
113 113
114 if (!addr || alen < sizeof(addr->sa_family) || 114 if (!addr || alen < sizeof(addr->sa_family) ||
115 addr->sa_family != AF_BLUETOOTH) 115 addr->sa_family != AF_BLUETOOTH)
116 return -EINVAL; 116 return -EINVAL;
117 117
118 memset(&la, 0, sizeof(la)); 118 memset(&la, 0, sizeof(la));
119 len = min_t(unsigned int, sizeof(la), alen); 119 len = min_t(unsigned int, sizeof(la), alen);
120 memcpy(&la, addr, len); 120 memcpy(&la, addr, len);
121 121
122 if (la.l2_cid && la.l2_psm) 122 if (la.l2_cid && la.l2_psm)
123 return -EINVAL; 123 return -EINVAL;
124 124
125 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid), 125 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
126 &la.l2_bdaddr, la.l2_bdaddr_type); 126 &la.l2_bdaddr, la.l2_bdaddr_type);
127 if (err) 127 if (err)
128 return err; 128 return err;
129 129
130 lock_sock(sk); 130 lock_sock(sk);
131 131
132 err = bt_sock_wait_state(sk, BT_CONNECTED, 132 err = bt_sock_wait_state(sk, BT_CONNECTED,
133 sock_sndtimeo(sk, flags & O_NONBLOCK)); 133 sock_sndtimeo(sk, flags & O_NONBLOCK));
134 134
135 release_sock(sk); 135 release_sock(sk);
136 136
137 return err; 137 return err;
138 } 138 }
139 139
140 static int l2cap_sock_listen(struct socket *sock, int backlog) 140 static int l2cap_sock_listen(struct socket *sock, int backlog)
141 { 141 {
142 struct sock *sk = sock->sk; 142 struct sock *sk = sock->sk;
143 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 143 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
144 int err = 0; 144 int err = 0;
145 145
146 BT_DBG("sk %p backlog %d", sk, backlog); 146 BT_DBG("sk %p backlog %d", sk, backlog);
147 147
148 lock_sock(sk); 148 lock_sock(sk);
149 149
150 if (sk->sk_state != BT_BOUND) { 150 if (sk->sk_state != BT_BOUND) {
151 err = -EBADFD; 151 err = -EBADFD;
152 goto done; 152 goto done;
153 } 153 }
154 154
155 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) { 155 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
156 err = -EINVAL; 156 err = -EINVAL;
157 goto done; 157 goto done;
158 } 158 }
159 159
160 switch (chan->mode) { 160 switch (chan->mode) {
161 case L2CAP_MODE_BASIC: 161 case L2CAP_MODE_BASIC:
162 break; 162 break;
163 case L2CAP_MODE_ERTM: 163 case L2CAP_MODE_ERTM:
164 case L2CAP_MODE_STREAMING: 164 case L2CAP_MODE_STREAMING:
165 if (!disable_ertm) 165 if (!disable_ertm)
166 break; 166 break;
167 /* fall through */ 167 /* fall through */
168 default: 168 default:
169 err = -ENOTSUPP; 169 err = -ENOTSUPP;
170 goto done; 170 goto done;
171 } 171 }
172 172
173 sk->sk_max_ack_backlog = backlog; 173 sk->sk_max_ack_backlog = backlog;
174 sk->sk_ack_backlog = 0; 174 sk->sk_ack_backlog = 0;
175 175
176 chan->state = BT_LISTEN; 176 chan->state = BT_LISTEN;
177 sk->sk_state = BT_LISTEN; 177 sk->sk_state = BT_LISTEN;
178 178
179 done: 179 done:
180 release_sock(sk); 180 release_sock(sk);
181 return err; 181 return err;
182 } 182 }
183 183
184 static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags) 184 static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
185 { 185 {
186 DECLARE_WAITQUEUE(wait, current); 186 DECLARE_WAITQUEUE(wait, current);
187 struct sock *sk = sock->sk, *nsk; 187 struct sock *sk = sock->sk, *nsk;
188 long timeo; 188 long timeo;
189 int err = 0; 189 int err = 0;
190 190
191 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); 191 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
192 192
193 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); 193 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
194 194
195 BT_DBG("sk %p timeo %ld", sk, timeo); 195 BT_DBG("sk %p timeo %ld", sk, timeo);
196 196
197 /* Wait for an incoming connection. (wake-one). */ 197 /* Wait for an incoming connection. (wake-one). */
198 add_wait_queue_exclusive(sk_sleep(sk), &wait); 198 add_wait_queue_exclusive(sk_sleep(sk), &wait);
199 while (1) { 199 while (1) {
200 set_current_state(TASK_INTERRUPTIBLE); 200 set_current_state(TASK_INTERRUPTIBLE);
201 201
202 if (sk->sk_state != BT_LISTEN) { 202 if (sk->sk_state != BT_LISTEN) {
203 err = -EBADFD; 203 err = -EBADFD;
204 break; 204 break;
205 } 205 }
206 206
207 nsk = bt_accept_dequeue(sk, newsock); 207 nsk = bt_accept_dequeue(sk, newsock);
208 if (nsk) 208 if (nsk)
209 break; 209 break;
210 210
211 if (!timeo) { 211 if (!timeo) {
212 err = -EAGAIN; 212 err = -EAGAIN;
213 break; 213 break;
214 } 214 }
215 215
216 if (signal_pending(current)) { 216 if (signal_pending(current)) {
217 err = sock_intr_errno(timeo); 217 err = sock_intr_errno(timeo);
218 break; 218 break;
219 } 219 }
220 220
221 release_sock(sk); 221 release_sock(sk);
222 timeo = schedule_timeout(timeo); 222 timeo = schedule_timeout(timeo);
223 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); 223 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
224 } 224 }
225 __set_current_state(TASK_RUNNING); 225 __set_current_state(TASK_RUNNING);
226 remove_wait_queue(sk_sleep(sk), &wait); 226 remove_wait_queue(sk_sleep(sk), &wait);
227 227
228 if (err) 228 if (err)
229 goto done; 229 goto done;
230 230
231 newsock->state = SS_CONNECTED; 231 newsock->state = SS_CONNECTED;
232 232
233 BT_DBG("new socket %p", nsk); 233 BT_DBG("new socket %p", nsk);
234 234
235 done: 235 done:
236 release_sock(sk); 236 release_sock(sk);
237 return err; 237 return err;
238 } 238 }
239 239
240 static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer) 240 static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
241 { 241 {
242 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr; 242 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
243 struct sock *sk = sock->sk; 243 struct sock *sk = sock->sk;
244 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 244 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
245 245
246 BT_DBG("sock %p, sk %p", sock, sk); 246 BT_DBG("sock %p, sk %p", sock, sk);
247 247
248 addr->sa_family = AF_BLUETOOTH; 248 addr->sa_family = AF_BLUETOOTH;
249 *len = sizeof(struct sockaddr_l2); 249 *len = sizeof(struct sockaddr_l2);
250 250
251 if (peer) { 251 if (peer) {
252 la->l2_psm = chan->psm; 252 la->l2_psm = chan->psm;
253 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst); 253 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst);
254 la->l2_cid = cpu_to_le16(chan->dcid); 254 la->l2_cid = cpu_to_le16(chan->dcid);
255 } else { 255 } else {
256 la->l2_psm = chan->sport; 256 la->l2_psm = chan->sport;
257 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src); 257 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src);
258 la->l2_cid = cpu_to_le16(chan->scid); 258 la->l2_cid = cpu_to_le16(chan->scid);
259 } 259 }
260 260
261 return 0; 261 return 0;
262 } 262 }
263 263
264 static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen) 264 static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
265 { 265 {
266 struct sock *sk = sock->sk; 266 struct sock *sk = sock->sk;
267 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 267 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
268 struct l2cap_options opts; 268 struct l2cap_options opts;
269 struct l2cap_conninfo cinfo; 269 struct l2cap_conninfo cinfo;
270 int len, err = 0; 270 int len, err = 0;
271 u32 opt; 271 u32 opt;
272 272
273 BT_DBG("sk %p", sk); 273 BT_DBG("sk %p", sk);
274 274
275 if (get_user(len, optlen)) 275 if (get_user(len, optlen))
276 return -EFAULT; 276 return -EFAULT;
277 277
278 lock_sock(sk); 278 lock_sock(sk);
279 279
280 switch (optname) { 280 switch (optname) {
281 case L2CAP_OPTIONS: 281 case L2CAP_OPTIONS:
282 memset(&opts, 0, sizeof(opts)); 282 memset(&opts, 0, sizeof(opts));
283 opts.imtu = chan->imtu; 283 opts.imtu = chan->imtu;
284 opts.omtu = chan->omtu; 284 opts.omtu = chan->omtu;
285 opts.flush_to = chan->flush_to; 285 opts.flush_to = chan->flush_to;
286 opts.mode = chan->mode; 286 opts.mode = chan->mode;
287 opts.fcs = chan->fcs; 287 opts.fcs = chan->fcs;
288 opts.max_tx = chan->max_tx; 288 opts.max_tx = chan->max_tx;
289 opts.txwin_size = chan->tx_win; 289 opts.txwin_size = chan->tx_win;
290 290
291 len = min_t(unsigned int, len, sizeof(opts)); 291 len = min_t(unsigned int, len, sizeof(opts));
292 if (copy_to_user(optval, (char *) &opts, len)) 292 if (copy_to_user(optval, (char *) &opts, len))
293 err = -EFAULT; 293 err = -EFAULT;
294 294
295 break; 295 break;
296 296
297 case L2CAP_LM: 297 case L2CAP_LM:
298 switch (chan->sec_level) { 298 switch (chan->sec_level) {
299 case BT_SECURITY_LOW: 299 case BT_SECURITY_LOW:
300 opt = L2CAP_LM_AUTH; 300 opt = L2CAP_LM_AUTH;
301 break; 301 break;
302 case BT_SECURITY_MEDIUM: 302 case BT_SECURITY_MEDIUM:
303 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT; 303 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
304 break; 304 break;
305 case BT_SECURITY_HIGH: 305 case BT_SECURITY_HIGH:
306 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT | 306 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
307 L2CAP_LM_SECURE; 307 L2CAP_LM_SECURE;
308 break; 308 break;
309 default: 309 default:
310 opt = 0; 310 opt = 0;
311 break; 311 break;
312 } 312 }
313 313
314 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags)) 314 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
315 opt |= L2CAP_LM_MASTER; 315 opt |= L2CAP_LM_MASTER;
316 316
317 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags)) 317 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
318 opt |= L2CAP_LM_RELIABLE; 318 opt |= L2CAP_LM_RELIABLE;
319 319
320 if (put_user(opt, (u32 __user *) optval)) 320 if (put_user(opt, (u32 __user *) optval))
321 err = -EFAULT; 321 err = -EFAULT;
322 break; 322 break;
323 323
324 case L2CAP_CONNINFO: 324 case L2CAP_CONNINFO:
325 if (sk->sk_state != BT_CONNECTED && 325 if (sk->sk_state != BT_CONNECTED &&
326 !(sk->sk_state == BT_CONNECT2 && 326 !(sk->sk_state == BT_CONNECT2 &&
327 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) { 327 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
328 err = -ENOTCONN; 328 err = -ENOTCONN;
329 break; 329 break;
330 } 330 }
331 331
332 memset(&cinfo, 0, sizeof(cinfo)); 332 memset(&cinfo, 0, sizeof(cinfo));
333 cinfo.hci_handle = chan->conn->hcon->handle; 333 cinfo.hci_handle = chan->conn->hcon->handle;
334 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3); 334 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
335 335
336 len = min_t(unsigned int, len, sizeof(cinfo)); 336 len = min_t(unsigned int, len, sizeof(cinfo));
337 if (copy_to_user(optval, (char *) &cinfo, len)) 337 if (copy_to_user(optval, (char *) &cinfo, len))
338 err = -EFAULT; 338 err = -EFAULT;
339 339
340 break; 340 break;
341 341
342 default: 342 default:
343 err = -ENOPROTOOPT; 343 err = -ENOPROTOOPT;
344 break; 344 break;
345 } 345 }
346 346
347 release_sock(sk); 347 release_sock(sk);
348 return err; 348 return err;
349 } 349 }
350 350
351 static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen) 351 static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
352 { 352 {
353 struct sock *sk = sock->sk; 353 struct sock *sk = sock->sk;
354 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 354 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
355 struct bt_security sec; 355 struct bt_security sec;
356 struct bt_power pwr; 356 struct bt_power pwr;
357 int len, err = 0; 357 int len, err = 0;
358 358
359 BT_DBG("sk %p", sk); 359 BT_DBG("sk %p", sk);
360 360
361 if (level == SOL_L2CAP) 361 if (level == SOL_L2CAP)
362 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen); 362 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);
363 363
364 if (level != SOL_BLUETOOTH) 364 if (level != SOL_BLUETOOTH)
365 return -ENOPROTOOPT; 365 return -ENOPROTOOPT;
366 366
367 if (get_user(len, optlen)) 367 if (get_user(len, optlen))
368 return -EFAULT; 368 return -EFAULT;
369 369
370 lock_sock(sk); 370 lock_sock(sk);
371 371
372 switch (optname) { 372 switch (optname) {
373 case BT_SECURITY: 373 case BT_SECURITY:
374 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 374 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
375 chan->chan_type != L2CAP_CHAN_RAW) { 375 chan->chan_type != L2CAP_CHAN_RAW) {
376 err = -EINVAL; 376 err = -EINVAL;
377 break; 377 break;
378 } 378 }
379 379
380 memset(&sec, 0, sizeof(sec)); 380 memset(&sec, 0, sizeof(sec));
381 if (chan->conn) 381 if (chan->conn)
382 sec.level = chan->conn->hcon->sec_level; 382 sec.level = chan->conn->hcon->sec_level;
383 else 383 else
384 sec.level = chan->sec_level; 384 sec.level = chan->sec_level;
385 385
386 if (sk->sk_state == BT_CONNECTED) 386 if (sk->sk_state == BT_CONNECTED)
387 sec.key_size = chan->conn->hcon->enc_key_size; 387 sec.key_size = chan->conn->hcon->enc_key_size;
388 388
389 len = min_t(unsigned int, len, sizeof(sec)); 389 len = min_t(unsigned int, len, sizeof(sec));
390 if (copy_to_user(optval, (char *) &sec, len)) 390 if (copy_to_user(optval, (char *) &sec, len))
391 err = -EFAULT; 391 err = -EFAULT;
392 392
393 break; 393 break;
394 394
395 case BT_DEFER_SETUP: 395 case BT_DEFER_SETUP:
396 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { 396 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
397 err = -EINVAL; 397 err = -EINVAL;
398 break; 398 break;
399 } 399 }
400 400
401 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), 401 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
402 (u32 __user *) optval)) 402 (u32 __user *) optval))
403 err = -EFAULT; 403 err = -EFAULT;
404 404
405 break; 405 break;
406 406
407 case BT_FLUSHABLE: 407 case BT_FLUSHABLE:
408 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags), 408 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
409 (u32 __user *) optval)) 409 (u32 __user *) optval))
410 err = -EFAULT; 410 err = -EFAULT;
411 411
412 break; 412 break;
413 413
414 case BT_POWER: 414 case BT_POWER:
415 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM 415 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
416 && sk->sk_type != SOCK_RAW) { 416 && sk->sk_type != SOCK_RAW) {
417 err = -EINVAL; 417 err = -EINVAL;
418 break; 418 break;
419 } 419 }
420 420
421 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags); 421 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
422 422
423 len = min_t(unsigned int, len, sizeof(pwr)); 423 len = min_t(unsigned int, len, sizeof(pwr));
424 if (copy_to_user(optval, (char *) &pwr, len)) 424 if (copy_to_user(optval, (char *) &pwr, len))
425 err = -EFAULT; 425 err = -EFAULT;
426 426
427 break; 427 break;
428 428
429 case BT_CHANNEL_POLICY: 429 case BT_CHANNEL_POLICY:
430 if (!enable_hs) { 430 if (!enable_hs) {
431 err = -ENOPROTOOPT; 431 err = -ENOPROTOOPT;
432 break; 432 break;
433 } 433 }
434 434
435 if (put_user(chan->chan_policy, (u32 __user *) optval)) 435 if (put_user(chan->chan_policy, (u32 __user *) optval))
436 err = -EFAULT; 436 err = -EFAULT;
437 break; 437 break;
438 438
439 default: 439 default:
440 err = -ENOPROTOOPT; 440 err = -ENOPROTOOPT;
441 break; 441 break;
442 } 442 }
443 443
444 release_sock(sk); 444 release_sock(sk);
445 return err; 445 return err;
446 } 446 }
447 447
448 static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu) 448 static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu)
449 { 449 {
450 switch (chan->scid) { 450 switch (chan->scid) {
451 case L2CAP_CID_LE_DATA: 451 case L2CAP_CID_LE_DATA:
452 if (mtu < L2CAP_LE_DEFAULT_MTU) 452 if (mtu < L2CAP_LE_MIN_MTU)
453 return false; 453 return false;
454 break; 454 break;
455 455
456 default: 456 default:
457 if (mtu < L2CAP_DEFAULT_MIN_MTU) 457 if (mtu < L2CAP_DEFAULT_MIN_MTU)
458 return false; 458 return false;
459 } 459 }
460 460
461 return true; 461 return true;
462 } 462 }
463 463
464 static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen) 464 static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen)
465 { 465 {
466 struct sock *sk = sock->sk; 466 struct sock *sk = sock->sk;
467 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 467 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
468 struct l2cap_options opts; 468 struct l2cap_options opts;
469 int len, err = 0; 469 int len, err = 0;
470 u32 opt; 470 u32 opt;
471 471
472 BT_DBG("sk %p", sk); 472 BT_DBG("sk %p", sk);
473 473
474 lock_sock(sk); 474 lock_sock(sk);
475 475
476 switch (optname) { 476 switch (optname) {
477 case L2CAP_OPTIONS: 477 case L2CAP_OPTIONS:
478 if (sk->sk_state == BT_CONNECTED) { 478 if (sk->sk_state == BT_CONNECTED) {
479 err = -EINVAL; 479 err = -EINVAL;
480 break; 480 break;
481 } 481 }
482 482
483 opts.imtu = chan->imtu; 483 opts.imtu = chan->imtu;
484 opts.omtu = chan->omtu; 484 opts.omtu = chan->omtu;
485 opts.flush_to = chan->flush_to; 485 opts.flush_to = chan->flush_to;
486 opts.mode = chan->mode; 486 opts.mode = chan->mode;
487 opts.fcs = chan->fcs; 487 opts.fcs = chan->fcs;
488 opts.max_tx = chan->max_tx; 488 opts.max_tx = chan->max_tx;
489 opts.txwin_size = chan->tx_win; 489 opts.txwin_size = chan->tx_win;
490 490
491 len = min_t(unsigned int, sizeof(opts), optlen); 491 len = min_t(unsigned int, sizeof(opts), optlen);
492 if (copy_from_user((char *) &opts, optval, len)) { 492 if (copy_from_user((char *) &opts, optval, len)) {
493 err = -EFAULT; 493 err = -EFAULT;
494 break; 494 break;
495 } 495 }
496 496
497 if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) { 497 if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
498 err = -EINVAL; 498 err = -EINVAL;
499 break; 499 break;
500 } 500 }
501 501
502 if (!l2cap_valid_mtu(chan, opts.imtu)) { 502 if (!l2cap_valid_mtu(chan, opts.imtu)) {
503 err = -EINVAL; 503 err = -EINVAL;
504 break; 504 break;
505 } 505 }
506 506
507 chan->mode = opts.mode; 507 chan->mode = opts.mode;
508 switch (chan->mode) { 508 switch (chan->mode) {
509 case L2CAP_MODE_BASIC: 509 case L2CAP_MODE_BASIC:
510 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state); 510 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
511 break; 511 break;
512 case L2CAP_MODE_ERTM: 512 case L2CAP_MODE_ERTM:
513 case L2CAP_MODE_STREAMING: 513 case L2CAP_MODE_STREAMING:
514 if (!disable_ertm) 514 if (!disable_ertm)
515 break; 515 break;
516 /* fall through */ 516 /* fall through */
517 default: 517 default:
518 err = -EINVAL; 518 err = -EINVAL;
519 break; 519 break;
520 } 520 }
521 521
522 chan->imtu = opts.imtu; 522 chan->imtu = opts.imtu;
523 chan->omtu = opts.omtu; 523 chan->omtu = opts.omtu;
524 chan->fcs = opts.fcs; 524 chan->fcs = opts.fcs;
525 chan->max_tx = opts.max_tx; 525 chan->max_tx = opts.max_tx;
526 chan->tx_win = opts.txwin_size; 526 chan->tx_win = opts.txwin_size;
527 break; 527 break;
528 528
529 case L2CAP_LM: 529 case L2CAP_LM:
530 if (get_user(opt, (u32 __user *) optval)) { 530 if (get_user(opt, (u32 __user *) optval)) {
531 err = -EFAULT; 531 err = -EFAULT;
532 break; 532 break;
533 } 533 }
534 534
535 if (opt & L2CAP_LM_AUTH) 535 if (opt & L2CAP_LM_AUTH)
536 chan->sec_level = BT_SECURITY_LOW; 536 chan->sec_level = BT_SECURITY_LOW;
537 if (opt & L2CAP_LM_ENCRYPT) 537 if (opt & L2CAP_LM_ENCRYPT)
538 chan->sec_level = BT_SECURITY_MEDIUM; 538 chan->sec_level = BT_SECURITY_MEDIUM;
539 if (opt & L2CAP_LM_SECURE) 539 if (opt & L2CAP_LM_SECURE)
540 chan->sec_level = BT_SECURITY_HIGH; 540 chan->sec_level = BT_SECURITY_HIGH;
541 541
542 if (opt & L2CAP_LM_MASTER) 542 if (opt & L2CAP_LM_MASTER)
543 set_bit(FLAG_ROLE_SWITCH, &chan->flags); 543 set_bit(FLAG_ROLE_SWITCH, &chan->flags);
544 else 544 else
545 clear_bit(FLAG_ROLE_SWITCH, &chan->flags); 545 clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
546 546
547 if (opt & L2CAP_LM_RELIABLE) 547 if (opt & L2CAP_LM_RELIABLE)
548 set_bit(FLAG_FORCE_RELIABLE, &chan->flags); 548 set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
549 else 549 else
550 clear_bit(FLAG_FORCE_RELIABLE, &chan->flags); 550 clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
551 break; 551 break;
552 552
553 default: 553 default:
554 err = -ENOPROTOOPT; 554 err = -ENOPROTOOPT;
555 break; 555 break;
556 } 556 }
557 557
558 release_sock(sk); 558 release_sock(sk);
559 return err; 559 return err;
560 } 560 }
561 561
562 static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen) 562 static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
563 { 563 {
564 struct sock *sk = sock->sk; 564 struct sock *sk = sock->sk;
565 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 565 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
566 struct bt_security sec; 566 struct bt_security sec;
567 struct bt_power pwr; 567 struct bt_power pwr;
568 struct l2cap_conn *conn; 568 struct l2cap_conn *conn;
569 int len, err = 0; 569 int len, err = 0;
570 u32 opt; 570 u32 opt;
571 571
572 BT_DBG("sk %p", sk); 572 BT_DBG("sk %p", sk);
573 573
574 if (level == SOL_L2CAP) 574 if (level == SOL_L2CAP)
575 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen); 575 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);
576 576
577 if (level != SOL_BLUETOOTH) 577 if (level != SOL_BLUETOOTH)
578 return -ENOPROTOOPT; 578 return -ENOPROTOOPT;
579 579
580 lock_sock(sk); 580 lock_sock(sk);
581 581
582 switch (optname) { 582 switch (optname) {
583 case BT_SECURITY: 583 case BT_SECURITY:
584 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 584 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
585 chan->chan_type != L2CAP_CHAN_RAW) { 585 chan->chan_type != L2CAP_CHAN_RAW) {
586 err = -EINVAL; 586 err = -EINVAL;
587 break; 587 break;
588 } 588 }
589 589
590 sec.level = BT_SECURITY_LOW; 590 sec.level = BT_SECURITY_LOW;
591 591
592 len = min_t(unsigned int, sizeof(sec), optlen); 592 len = min_t(unsigned int, sizeof(sec), optlen);
593 if (copy_from_user((char *) &sec, optval, len)) { 593 if (copy_from_user((char *) &sec, optval, len)) {
594 err = -EFAULT; 594 err = -EFAULT;
595 break; 595 break;
596 } 596 }
597 597
598 if (sec.level < BT_SECURITY_LOW || 598 if (sec.level < BT_SECURITY_LOW ||
599 sec.level > BT_SECURITY_HIGH) { 599 sec.level > BT_SECURITY_HIGH) {
600 err = -EINVAL; 600 err = -EINVAL;
601 break; 601 break;
602 } 602 }
603 603
604 chan->sec_level = sec.level; 604 chan->sec_level = sec.level;
605 605
606 if (!chan->conn) 606 if (!chan->conn)
607 break; 607 break;
608 608
609 conn = chan->conn; 609 conn = chan->conn;
610 610
611 /*change security for LE channels */ 611 /*change security for LE channels */
612 if (chan->scid == L2CAP_CID_LE_DATA) { 612 if (chan->scid == L2CAP_CID_LE_DATA) {
613 if (!conn->hcon->out) { 613 if (!conn->hcon->out) {
614 err = -EINVAL; 614 err = -EINVAL;
615 break; 615 break;
616 } 616 }
617 617
618 if (smp_conn_security(conn, sec.level)) 618 if (smp_conn_security(conn, sec.level))
619 break; 619 break;
620 sk->sk_state = BT_CONFIG; 620 sk->sk_state = BT_CONFIG;
621 chan->state = BT_CONFIG; 621 chan->state = BT_CONFIG;
622 622
623 /* or for ACL link */ 623 /* or for ACL link */
624 } else if ((sk->sk_state == BT_CONNECT2 && 624 } else if ((sk->sk_state == BT_CONNECT2 &&
625 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) || 625 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) ||
626 sk->sk_state == BT_CONNECTED) { 626 sk->sk_state == BT_CONNECTED) {
627 if (!l2cap_chan_check_security(chan)) 627 if (!l2cap_chan_check_security(chan))
628 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); 628 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
629 else 629 else
630 sk->sk_state_change(sk); 630 sk->sk_state_change(sk);
631 } else { 631 } else {
632 err = -EINVAL; 632 err = -EINVAL;
633 } 633 }
634 break; 634 break;
635 635
636 case BT_DEFER_SETUP: 636 case BT_DEFER_SETUP:
637 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { 637 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
638 err = -EINVAL; 638 err = -EINVAL;
639 break; 639 break;
640 } 640 }
641 641
642 if (get_user(opt, (u32 __user *) optval)) { 642 if (get_user(opt, (u32 __user *) optval)) {
643 err = -EFAULT; 643 err = -EFAULT;
644 break; 644 break;
645 } 645 }
646 646
647 if (opt) 647 if (opt)
648 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); 648 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
649 else 649 else
650 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); 650 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
651 break; 651 break;
652 652
653 case BT_FLUSHABLE: 653 case BT_FLUSHABLE:
654 if (get_user(opt, (u32 __user *) optval)) { 654 if (get_user(opt, (u32 __user *) optval)) {
655 err = -EFAULT; 655 err = -EFAULT;
656 break; 656 break;
657 } 657 }
658 658
659 if (opt > BT_FLUSHABLE_ON) { 659 if (opt > BT_FLUSHABLE_ON) {
660 err = -EINVAL; 660 err = -EINVAL;
661 break; 661 break;
662 } 662 }
663 663
664 if (opt == BT_FLUSHABLE_OFF) { 664 if (opt == BT_FLUSHABLE_OFF) {
665 struct l2cap_conn *conn = chan->conn; 665 struct l2cap_conn *conn = chan->conn;
666 /* proceed further only when we have l2cap_conn and 666 /* proceed further only when we have l2cap_conn and
667 No Flush support in the LM */ 667 No Flush support in the LM */
668 if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) { 668 if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
669 err = -EINVAL; 669 err = -EINVAL;
670 break; 670 break;
671 } 671 }
672 } 672 }
673 673
674 if (opt) 674 if (opt)
675 set_bit(FLAG_FLUSHABLE, &chan->flags); 675 set_bit(FLAG_FLUSHABLE, &chan->flags);
676 else 676 else
677 clear_bit(FLAG_FLUSHABLE, &chan->flags); 677 clear_bit(FLAG_FLUSHABLE, &chan->flags);
678 break; 678 break;
679 679
680 case BT_POWER: 680 case BT_POWER:
681 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 681 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
682 chan->chan_type != L2CAP_CHAN_RAW) { 682 chan->chan_type != L2CAP_CHAN_RAW) {
683 err = -EINVAL; 683 err = -EINVAL;
684 break; 684 break;
685 } 685 }
686 686
687 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON; 687 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
688 688
689 len = min_t(unsigned int, sizeof(pwr), optlen); 689 len = min_t(unsigned int, sizeof(pwr), optlen);
690 if (copy_from_user((char *) &pwr, optval, len)) { 690 if (copy_from_user((char *) &pwr, optval, len)) {
691 err = -EFAULT; 691 err = -EFAULT;
692 break; 692 break;
693 } 693 }
694 694
695 if (pwr.force_active) 695 if (pwr.force_active)
696 set_bit(FLAG_FORCE_ACTIVE, &chan->flags); 696 set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
697 else 697 else
698 clear_bit(FLAG_FORCE_ACTIVE, &chan->flags); 698 clear_bit(FLAG_FORCE_ACTIVE, &chan->flags);
699 break; 699 break;
700 700
701 case BT_CHANNEL_POLICY: 701 case BT_CHANNEL_POLICY:
702 if (!enable_hs) { 702 if (!enable_hs) {
703 err = -ENOPROTOOPT; 703 err = -ENOPROTOOPT;
704 break; 704 break;
705 } 705 }
706 706
707 if (get_user(opt, (u32 __user *) optval)) { 707 if (get_user(opt, (u32 __user *) optval)) {
708 err = -EFAULT; 708 err = -EFAULT;
709 break; 709 break;
710 } 710 }
711 711
712 if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) { 712 if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) {
713 err = -EINVAL; 713 err = -EINVAL;
714 break; 714 break;
715 } 715 }
716 716
717 if (chan->mode != L2CAP_MODE_ERTM && 717 if (chan->mode != L2CAP_MODE_ERTM &&
718 chan->mode != L2CAP_MODE_STREAMING) { 718 chan->mode != L2CAP_MODE_STREAMING) {
719 err = -EOPNOTSUPP; 719 err = -EOPNOTSUPP;
720 break; 720 break;
721 } 721 }
722 722
723 chan->chan_policy = (u8) opt; 723 chan->chan_policy = (u8) opt;
724 break; 724 break;
725 725
726 default: 726 default:
727 err = -ENOPROTOOPT; 727 err = -ENOPROTOOPT;
728 break; 728 break;
729 } 729 }
730 730
731 release_sock(sk); 731 release_sock(sk);
732 return err; 732 return err;
733 } 733 }
734 734
735 static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len) 735 static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len)
736 { 736 {
737 struct sock *sk = sock->sk; 737 struct sock *sk = sock->sk;
738 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 738 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
739 int err; 739 int err;
740 740
741 BT_DBG("sock %p, sk %p", sock, sk); 741 BT_DBG("sock %p, sk %p", sock, sk);
742 742
743 err = sock_error(sk); 743 err = sock_error(sk);
744 if (err) 744 if (err)
745 return err; 745 return err;
746 746
747 if (msg->msg_flags & MSG_OOB) 747 if (msg->msg_flags & MSG_OOB)
748 return -EOPNOTSUPP; 748 return -EOPNOTSUPP;
749 749
750 if (sk->sk_state != BT_CONNECTED) 750 if (sk->sk_state != BT_CONNECTED)
751 return -ENOTCONN; 751 return -ENOTCONN;
752 752
753 l2cap_chan_lock(chan); 753 l2cap_chan_lock(chan);
754 err = l2cap_chan_send(chan, msg, len, sk->sk_priority); 754 err = l2cap_chan_send(chan, msg, len, sk->sk_priority);
755 l2cap_chan_unlock(chan); 755 l2cap_chan_unlock(chan);
756 756
757 return err; 757 return err;
758 } 758 }
759 759
760 static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags) 760 static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags)
761 { 761 {
762 struct sock *sk = sock->sk; 762 struct sock *sk = sock->sk;
763 struct l2cap_pinfo *pi = l2cap_pi(sk); 763 struct l2cap_pinfo *pi = l2cap_pi(sk);
764 int err; 764 int err;
765 765
766 lock_sock(sk); 766 lock_sock(sk);
767 767
768 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP, 768 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
769 &bt_sk(sk)->flags)) { 769 &bt_sk(sk)->flags)) {
770 sk->sk_state = BT_CONFIG; 770 sk->sk_state = BT_CONFIG;
771 pi->chan->state = BT_CONFIG; 771 pi->chan->state = BT_CONFIG;
772 772
773 __l2cap_connect_rsp_defer(pi->chan); 773 __l2cap_connect_rsp_defer(pi->chan);
774 release_sock(sk); 774 release_sock(sk);
775 return 0; 775 return 0;
776 } 776 }
777 777
778 release_sock(sk); 778 release_sock(sk);
779 779
780 if (sock->type == SOCK_STREAM) 780 if (sock->type == SOCK_STREAM)
781 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags); 781 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
782 else 782 else
783 err = bt_sock_recvmsg(iocb, sock, msg, len, flags); 783 err = bt_sock_recvmsg(iocb, sock, msg, len, flags);
784 784
785 if (pi->chan->mode != L2CAP_MODE_ERTM) 785 if (pi->chan->mode != L2CAP_MODE_ERTM)
786 return err; 786 return err;
787 787
788 /* Attempt to put pending rx data in the socket buffer */ 788 /* Attempt to put pending rx data in the socket buffer */
789 789
790 lock_sock(sk); 790 lock_sock(sk);
791 791
792 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state)) 792 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state))
793 goto done; 793 goto done;
794 794
795 if (pi->rx_busy_skb) { 795 if (pi->rx_busy_skb) {
796 if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb)) 796 if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb))
797 pi->rx_busy_skb = NULL; 797 pi->rx_busy_skb = NULL;
798 else 798 else
799 goto done; 799 goto done;
800 } 800 }
801 801
802 /* Restore data flow when half of the receive buffer is 802 /* Restore data flow when half of the receive buffer is
803 * available. This avoids resending large numbers of 803 * available. This avoids resending large numbers of
804 * frames. 804 * frames.
805 */ 805 */
806 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1) 806 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1)
807 l2cap_chan_busy(pi->chan, 0); 807 l2cap_chan_busy(pi->chan, 0);
808 808
809 done: 809 done:
810 release_sock(sk); 810 release_sock(sk);
811 return err; 811 return err;
812 } 812 }
813 813
814 /* Kill socket (only if zapped and orphan) 814 /* Kill socket (only if zapped and orphan)
815 * Must be called on unlocked socket. 815 * Must be called on unlocked socket.
816 */ 816 */
817 static void l2cap_sock_kill(struct sock *sk) 817 static void l2cap_sock_kill(struct sock *sk)
818 { 818 {
819 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket) 819 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
820 return; 820 return;
821 821
822 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state)); 822 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state));
823 823
824 /* Kill poor orphan */ 824 /* Kill poor orphan */
825 825
826 l2cap_chan_destroy(l2cap_pi(sk)->chan); 826 l2cap_chan_destroy(l2cap_pi(sk)->chan);
827 sock_set_flag(sk, SOCK_DEAD); 827 sock_set_flag(sk, SOCK_DEAD);
828 sock_put(sk); 828 sock_put(sk);
829 } 829 }
830 830
831 static int l2cap_sock_shutdown(struct socket *sock, int how) 831 static int l2cap_sock_shutdown(struct socket *sock, int how)
832 { 832 {
833 struct sock *sk = sock->sk; 833 struct sock *sk = sock->sk;
834 struct l2cap_chan *chan; 834 struct l2cap_chan *chan;
835 struct l2cap_conn *conn; 835 struct l2cap_conn *conn;
836 int err = 0; 836 int err = 0;
837 837
838 BT_DBG("sock %p, sk %p", sock, sk); 838 BT_DBG("sock %p, sk %p", sock, sk);
839 839
840 if (!sk) 840 if (!sk)
841 return 0; 841 return 0;
842 842
843 chan = l2cap_pi(sk)->chan; 843 chan = l2cap_pi(sk)->chan;
844 conn = chan->conn; 844 conn = chan->conn;
845 845
846 if (conn) 846 if (conn)
847 mutex_lock(&conn->chan_lock); 847 mutex_lock(&conn->chan_lock);
848 848
849 l2cap_chan_lock(chan); 849 l2cap_chan_lock(chan);
850 lock_sock(sk); 850 lock_sock(sk);
851 851
852 if (!sk->sk_shutdown) { 852 if (!sk->sk_shutdown) {
853 if (chan->mode == L2CAP_MODE_ERTM) 853 if (chan->mode == L2CAP_MODE_ERTM)
854 err = __l2cap_wait_ack(sk); 854 err = __l2cap_wait_ack(sk);
855 855
856 sk->sk_shutdown = SHUTDOWN_MASK; 856 sk->sk_shutdown = SHUTDOWN_MASK;
857 857
858 release_sock(sk); 858 release_sock(sk);
859 l2cap_chan_close(chan, 0); 859 l2cap_chan_close(chan, 0);
860 lock_sock(sk); 860 lock_sock(sk);
861 861
862 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) 862 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
863 err = bt_sock_wait_state(sk, BT_CLOSED, 863 err = bt_sock_wait_state(sk, BT_CLOSED,
864 sk->sk_lingertime); 864 sk->sk_lingertime);
865 } 865 }
866 866
867 if (!err && sk->sk_err) 867 if (!err && sk->sk_err)
868 err = -sk->sk_err; 868 err = -sk->sk_err;
869 869
870 release_sock(sk); 870 release_sock(sk);
871 l2cap_chan_unlock(chan); 871 l2cap_chan_unlock(chan);
872 872
873 if (conn) 873 if (conn)
874 mutex_unlock(&conn->chan_lock); 874 mutex_unlock(&conn->chan_lock);
875 875
876 return err; 876 return err;
877 } 877 }
878 878
879 static int l2cap_sock_release(struct socket *sock) 879 static int l2cap_sock_release(struct socket *sock)
880 { 880 {
881 struct sock *sk = sock->sk; 881 struct sock *sk = sock->sk;
882 int err; 882 int err;
883 883
884 BT_DBG("sock %p, sk %p", sock, sk); 884 BT_DBG("sock %p, sk %p", sock, sk);
885 885
886 if (!sk) 886 if (!sk)
887 return 0; 887 return 0;
888 888
889 err = l2cap_sock_shutdown(sock, 2); 889 err = l2cap_sock_shutdown(sock, 2);
890 890
891 sock_orphan(sk); 891 sock_orphan(sk);
892 l2cap_sock_kill(sk); 892 l2cap_sock_kill(sk);
893 return err; 893 return err;
894 } 894 }
895 895
896 static void l2cap_sock_cleanup_listen(struct sock *parent) 896 static void l2cap_sock_cleanup_listen(struct sock *parent)
897 { 897 {
898 struct sock *sk; 898 struct sock *sk;
899 899
900 BT_DBG("parent %p", parent); 900 BT_DBG("parent %p", parent);
901 901
902 /* Close not yet accepted channels */ 902 /* Close not yet accepted channels */
903 while ((sk = bt_accept_dequeue(parent, NULL))) { 903 while ((sk = bt_accept_dequeue(parent, NULL))) {
904 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 904 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
905 905
906 l2cap_chan_lock(chan); 906 l2cap_chan_lock(chan);
907 __clear_chan_timer(chan); 907 __clear_chan_timer(chan);
908 l2cap_chan_close(chan, ECONNRESET); 908 l2cap_chan_close(chan, ECONNRESET);
909 l2cap_chan_unlock(chan); 909 l2cap_chan_unlock(chan);
910 910
911 l2cap_sock_kill(sk); 911 l2cap_sock_kill(sk);
912 } 912 }
913 } 913 }
914 914
915 static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan) 915 static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)
916 { 916 {
917 struct sock *sk, *parent = chan->data; 917 struct sock *sk, *parent = chan->data;
918 918
919 /* Check for backlog size */ 919 /* Check for backlog size */
920 if (sk_acceptq_is_full(parent)) { 920 if (sk_acceptq_is_full(parent)) {
921 BT_DBG("backlog full %d", parent->sk_ack_backlog); 921 BT_DBG("backlog full %d", parent->sk_ack_backlog);
922 return NULL; 922 return NULL;
923 } 923 }
924 924
925 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, 925 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
926 GFP_ATOMIC); 926 GFP_ATOMIC);
927 if (!sk) 927 if (!sk)
928 return NULL; 928 return NULL;
929 929
930 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP); 930 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);
931 931
932 l2cap_sock_init(sk, parent); 932 l2cap_sock_init(sk, parent);
933 933
934 return l2cap_pi(sk)->chan; 934 return l2cap_pi(sk)->chan;
935 } 935 }
936 936
937 static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb) 937 static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
938 { 938 {
939 int err; 939 int err;
940 struct sock *sk = chan->data; 940 struct sock *sk = chan->data;
941 struct l2cap_pinfo *pi = l2cap_pi(sk); 941 struct l2cap_pinfo *pi = l2cap_pi(sk);
942 942
943 lock_sock(sk); 943 lock_sock(sk);
944 944
945 if (pi->rx_busy_skb) { 945 if (pi->rx_busy_skb) {
946 err = -ENOMEM; 946 err = -ENOMEM;
947 goto done; 947 goto done;
948 } 948 }
949 949
950 err = sock_queue_rcv_skb(sk, skb); 950 err = sock_queue_rcv_skb(sk, skb);
951 951
952 /* For ERTM, handle one skb that doesn't fit into the recv 952 /* For ERTM, handle one skb that doesn't fit into the recv
953 * buffer. This is important to do because the data frames 953 * buffer. This is important to do because the data frames
954 * have already been acked, so the skb cannot be discarded. 954 * have already been acked, so the skb cannot be discarded.
955 * 955 *
956 * Notify the l2cap core that the buffer is full, so the 956 * Notify the l2cap core that the buffer is full, so the
957 * LOCAL_BUSY state is entered and no more frames are 957 * LOCAL_BUSY state is entered and no more frames are
958 * acked and reassembled until there is buffer space 958 * acked and reassembled until there is buffer space
959 * available. 959 * available.
960 */ 960 */
961 if (err < 0 && pi->chan->mode == L2CAP_MODE_ERTM) { 961 if (err < 0 && pi->chan->mode == L2CAP_MODE_ERTM) {
962 pi->rx_busy_skb = skb; 962 pi->rx_busy_skb = skb;
963 l2cap_chan_busy(pi->chan, 1); 963 l2cap_chan_busy(pi->chan, 1);
964 err = 0; 964 err = 0;
965 } 965 }
966 966
967 done: 967 done:
968 release_sock(sk); 968 release_sock(sk);
969 969
970 return err; 970 return err;
971 } 971 }
972 972
973 static void l2cap_sock_close_cb(struct l2cap_chan *chan) 973 static void l2cap_sock_close_cb(struct l2cap_chan *chan)
974 { 974 {
975 struct sock *sk = chan->data; 975 struct sock *sk = chan->data;
976 976
977 l2cap_sock_kill(sk); 977 l2cap_sock_kill(sk);
978 } 978 }
979 979
980 static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err) 980 static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
981 { 981 {
982 struct sock *sk = chan->data; 982 struct sock *sk = chan->data;
983 struct sock *parent; 983 struct sock *parent;
984 984
985 lock_sock(sk); 985 lock_sock(sk);
986 986
987 parent = bt_sk(sk)->parent; 987 parent = bt_sk(sk)->parent;
988 988
989 sock_set_flag(sk, SOCK_ZAPPED); 989 sock_set_flag(sk, SOCK_ZAPPED);
990 990
991 switch (chan->state) { 991 switch (chan->state) {
992 case BT_OPEN: 992 case BT_OPEN:
993 case BT_BOUND: 993 case BT_BOUND:
994 case BT_CLOSED: 994 case BT_CLOSED:
995 break; 995 break;
996 case BT_LISTEN: 996 case BT_LISTEN:
997 l2cap_sock_cleanup_listen(sk); 997 l2cap_sock_cleanup_listen(sk);
998 sk->sk_state = BT_CLOSED; 998 sk->sk_state = BT_CLOSED;
999 chan->state = BT_CLOSED; 999 chan->state = BT_CLOSED;
1000 1000
1001 break; 1001 break;
1002 default: 1002 default:
1003 sk->sk_state = BT_CLOSED; 1003 sk->sk_state = BT_CLOSED;
1004 chan->state = BT_CLOSED; 1004 chan->state = BT_CLOSED;
1005 1005
1006 sk->sk_err = err; 1006 sk->sk_err = err;
1007 1007
1008 if (parent) { 1008 if (parent) {
1009 bt_accept_unlink(sk); 1009 bt_accept_unlink(sk);
1010 parent->sk_data_ready(parent, 0); 1010 parent->sk_data_ready(parent, 0);
1011 } else { 1011 } else {
1012 sk->sk_state_change(sk); 1012 sk->sk_state_change(sk);
1013 } 1013 }
1014 1014
1015 break; 1015 break;
1016 } 1016 }
1017 1017
1018 release_sock(sk); 1018 release_sock(sk);
1019 } 1019 }
1020 1020
1021 static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state) 1021 static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state)
1022 { 1022 {
1023 struct sock *sk = chan->data; 1023 struct sock *sk = chan->data;
1024 1024
1025 sk->sk_state = state; 1025 sk->sk_state = state;
1026 } 1026 }
1027 1027
1028 static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan, 1028 static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
1029 unsigned long len, int nb) 1029 unsigned long len, int nb)
1030 { 1030 {
1031 struct sk_buff *skb; 1031 struct sk_buff *skb;
1032 int err; 1032 int err;
1033 1033
1034 l2cap_chan_unlock(chan); 1034 l2cap_chan_unlock(chan);
1035 skb = bt_skb_send_alloc(chan->sk, len, nb, &err); 1035 skb = bt_skb_send_alloc(chan->sk, len, nb, &err);
1036 l2cap_chan_lock(chan); 1036 l2cap_chan_lock(chan);
1037 1037
1038 if (!skb) 1038 if (!skb)
1039 return ERR_PTR(err); 1039 return ERR_PTR(err);
1040 1040
1041 return skb; 1041 return skb;
1042 } 1042 }
1043 1043
1044 static void l2cap_sock_ready_cb(struct l2cap_chan *chan) 1044 static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
1045 { 1045 {
1046 struct sock *sk = chan->data; 1046 struct sock *sk = chan->data;
1047 struct sock *parent; 1047 struct sock *parent;
1048 1048
1049 lock_sock(sk); 1049 lock_sock(sk);
1050 1050
1051 parent = bt_sk(sk)->parent; 1051 parent = bt_sk(sk)->parent;
1052 1052
1053 BT_DBG("sk %p, parent %p", sk, parent); 1053 BT_DBG("sk %p, parent %p", sk, parent);
1054 1054
1055 sk->sk_state = BT_CONNECTED; 1055 sk->sk_state = BT_CONNECTED;
1056 sk->sk_state_change(sk); 1056 sk->sk_state_change(sk);
1057 1057
1058 if (parent) 1058 if (parent)
1059 parent->sk_data_ready(parent, 0); 1059 parent->sk_data_ready(parent, 0);
1060 1060
1061 release_sock(sk); 1061 release_sock(sk);
1062 } 1062 }
1063 1063
1064 static struct l2cap_ops l2cap_chan_ops = { 1064 static struct l2cap_ops l2cap_chan_ops = {
1065 .name = "L2CAP Socket Interface", 1065 .name = "L2CAP Socket Interface",
1066 .new_connection = l2cap_sock_new_connection_cb, 1066 .new_connection = l2cap_sock_new_connection_cb,
1067 .recv = l2cap_sock_recv_cb, 1067 .recv = l2cap_sock_recv_cb,
1068 .close = l2cap_sock_close_cb, 1068 .close = l2cap_sock_close_cb,
1069 .teardown = l2cap_sock_teardown_cb, 1069 .teardown = l2cap_sock_teardown_cb,
1070 .state_change = l2cap_sock_state_change_cb, 1070 .state_change = l2cap_sock_state_change_cb,
1071 .ready = l2cap_sock_ready_cb, 1071 .ready = l2cap_sock_ready_cb,
1072 .alloc_skb = l2cap_sock_alloc_skb_cb, 1072 .alloc_skb = l2cap_sock_alloc_skb_cb,
1073 }; 1073 };
1074 1074
1075 static void l2cap_sock_destruct(struct sock *sk) 1075 static void l2cap_sock_destruct(struct sock *sk)
1076 { 1076 {
1077 BT_DBG("sk %p", sk); 1077 BT_DBG("sk %p", sk);
1078 1078
1079 l2cap_chan_put(l2cap_pi(sk)->chan); 1079 l2cap_chan_put(l2cap_pi(sk)->chan);
1080 if (l2cap_pi(sk)->rx_busy_skb) { 1080 if (l2cap_pi(sk)->rx_busy_skb) {
1081 kfree_skb(l2cap_pi(sk)->rx_busy_skb); 1081 kfree_skb(l2cap_pi(sk)->rx_busy_skb);
1082 l2cap_pi(sk)->rx_busy_skb = NULL; 1082 l2cap_pi(sk)->rx_busy_skb = NULL;
1083 } 1083 }
1084 1084
1085 skb_queue_purge(&sk->sk_receive_queue); 1085 skb_queue_purge(&sk->sk_receive_queue);
1086 skb_queue_purge(&sk->sk_write_queue); 1086 skb_queue_purge(&sk->sk_write_queue);
1087 } 1087 }
1088 1088
1089 static void l2cap_sock_init(struct sock *sk, struct sock *parent) 1089 static void l2cap_sock_init(struct sock *sk, struct sock *parent)
1090 { 1090 {
1091 struct l2cap_pinfo *pi = l2cap_pi(sk); 1091 struct l2cap_pinfo *pi = l2cap_pi(sk);
1092 struct l2cap_chan *chan = pi->chan; 1092 struct l2cap_chan *chan = pi->chan;
1093 1093
1094 BT_DBG("sk %p", sk); 1094 BT_DBG("sk %p", sk);
1095 1095
1096 if (parent) { 1096 if (parent) {
1097 struct l2cap_chan *pchan = l2cap_pi(parent)->chan; 1097 struct l2cap_chan *pchan = l2cap_pi(parent)->chan;
1098 1098
1099 sk->sk_type = parent->sk_type; 1099 sk->sk_type = parent->sk_type;
1100 bt_sk(sk)->flags = bt_sk(parent)->flags; 1100 bt_sk(sk)->flags = bt_sk(parent)->flags;
1101 1101
1102 chan->chan_type = pchan->chan_type; 1102 chan->chan_type = pchan->chan_type;
1103 chan->imtu = pchan->imtu; 1103 chan->imtu = pchan->imtu;
1104 chan->omtu = pchan->omtu; 1104 chan->omtu = pchan->omtu;
1105 chan->conf_state = pchan->conf_state; 1105 chan->conf_state = pchan->conf_state;
1106 chan->mode = pchan->mode; 1106 chan->mode = pchan->mode;
1107 chan->fcs = pchan->fcs; 1107 chan->fcs = pchan->fcs;
1108 chan->max_tx = pchan->max_tx; 1108 chan->max_tx = pchan->max_tx;
1109 chan->tx_win = pchan->tx_win; 1109 chan->tx_win = pchan->tx_win;
1110 chan->tx_win_max = pchan->tx_win_max; 1110 chan->tx_win_max = pchan->tx_win_max;
1111 chan->sec_level = pchan->sec_level; 1111 chan->sec_level = pchan->sec_level;
1112 chan->flags = pchan->flags; 1112 chan->flags = pchan->flags;
1113 1113
1114 security_sk_clone(parent, sk); 1114 security_sk_clone(parent, sk);
1115 } else { 1115 } else {
1116 1116
1117 switch (sk->sk_type) { 1117 switch (sk->sk_type) {
1118 case SOCK_RAW: 1118 case SOCK_RAW:
1119 chan->chan_type = L2CAP_CHAN_RAW; 1119 chan->chan_type = L2CAP_CHAN_RAW;
1120 break; 1120 break;
1121 case SOCK_DGRAM: 1121 case SOCK_DGRAM:
1122 chan->chan_type = L2CAP_CHAN_CONN_LESS; 1122 chan->chan_type = L2CAP_CHAN_CONN_LESS;
1123 break; 1123 break;
1124 case SOCK_SEQPACKET: 1124 case SOCK_SEQPACKET:
1125 case SOCK_STREAM: 1125 case SOCK_STREAM:
1126 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED; 1126 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
1127 break; 1127 break;
1128 } 1128 }
1129 1129
1130 chan->imtu = L2CAP_DEFAULT_MTU; 1130 chan->imtu = L2CAP_DEFAULT_MTU;
1131 chan->omtu = 0; 1131 chan->omtu = 0;
1132 if (!disable_ertm && sk->sk_type == SOCK_STREAM) { 1132 if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
1133 chan->mode = L2CAP_MODE_ERTM; 1133 chan->mode = L2CAP_MODE_ERTM;
1134 set_bit(CONF_STATE2_DEVICE, &chan->conf_state); 1134 set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
1135 } else { 1135 } else {
1136 chan->mode = L2CAP_MODE_BASIC; 1136 chan->mode = L2CAP_MODE_BASIC;
1137 } 1137 }
1138 1138
1139 l2cap_chan_set_defaults(chan); 1139 l2cap_chan_set_defaults(chan);
1140 } 1140 }
1141 1141
1142 /* Default config options */ 1142 /* Default config options */
1143 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO; 1143 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
1144 1144
1145 chan->data = sk; 1145 chan->data = sk;
1146 chan->ops = &l2cap_chan_ops; 1146 chan->ops = &l2cap_chan_ops;
1147 } 1147 }
1148 1148
1149 static struct proto l2cap_proto = { 1149 static struct proto l2cap_proto = {
1150 .name = "L2CAP", 1150 .name = "L2CAP",
1151 .owner = THIS_MODULE, 1151 .owner = THIS_MODULE,
1152 .obj_size = sizeof(struct l2cap_pinfo) 1152 .obj_size = sizeof(struct l2cap_pinfo)
1153 }; 1153 };
1154 1154
1155 static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio) 1155 static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
1156 { 1156 {
1157 struct sock *sk; 1157 struct sock *sk;
1158 struct l2cap_chan *chan; 1158 struct l2cap_chan *chan;
1159 1159
1160 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto); 1160 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
1161 if (!sk) 1161 if (!sk)
1162 return NULL; 1162 return NULL;
1163 1163
1164 sock_init_data(sock, sk); 1164 sock_init_data(sock, sk);
1165 INIT_LIST_HEAD(&bt_sk(sk)->accept_q); 1165 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
1166 1166
1167 sk->sk_destruct = l2cap_sock_destruct; 1167 sk->sk_destruct = l2cap_sock_destruct;
1168 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT; 1168 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
1169 1169
1170 sock_reset_flag(sk, SOCK_ZAPPED); 1170 sock_reset_flag(sk, SOCK_ZAPPED);
1171 1171
1172 sk->sk_protocol = proto; 1172 sk->sk_protocol = proto;
1173 sk->sk_state = BT_OPEN; 1173 sk->sk_state = BT_OPEN;
1174 1174
1175 chan = l2cap_chan_create(); 1175 chan = l2cap_chan_create();
1176 if (!chan) { 1176 if (!chan) {
1177 l2cap_sock_kill(sk); 1177 l2cap_sock_kill(sk);
1178 return NULL; 1178 return NULL;
1179 } 1179 }
1180 1180
1181 l2cap_chan_hold(chan); 1181 l2cap_chan_hold(chan);
1182 1182
1183 chan->sk = sk; 1183 chan->sk = sk;
1184 1184
1185 l2cap_pi(sk)->chan = chan; 1185 l2cap_pi(sk)->chan = chan;
1186 1186
1187 return sk; 1187 return sk;
1188 } 1188 }
1189 1189
1190 static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol, 1190 static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1191 int kern) 1191 int kern)
1192 { 1192 {
1193 struct sock *sk; 1193 struct sock *sk;
1194 1194
1195 BT_DBG("sock %p", sock); 1195 BT_DBG("sock %p", sock);
1196 1196
1197 sock->state = SS_UNCONNECTED; 1197 sock->state = SS_UNCONNECTED;
1198 1198
1199 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM && 1199 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
1200 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW) 1200 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
1201 return -ESOCKTNOSUPPORT; 1201 return -ESOCKTNOSUPPORT;
1202 1202
1203 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW)) 1203 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
1204 return -EPERM; 1204 return -EPERM;
1205 1205
1206 sock->ops = &l2cap_sock_ops; 1206 sock->ops = &l2cap_sock_ops;
1207 1207
1208 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC); 1208 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
1209 if (!sk) 1209 if (!sk)
1210 return -ENOMEM; 1210 return -ENOMEM;
1211 1211
1212 l2cap_sock_init(sk, NULL); 1212 l2cap_sock_init(sk, NULL);
1213 return 0; 1213 return 0;
1214 } 1214 }
1215 1215
1216 static const struct proto_ops l2cap_sock_ops = { 1216 static const struct proto_ops l2cap_sock_ops = {
1217 .family = PF_BLUETOOTH, 1217 .family = PF_BLUETOOTH,
1218 .owner = THIS_MODULE, 1218 .owner = THIS_MODULE,
1219 .release = l2cap_sock_release, 1219 .release = l2cap_sock_release,
1220 .bind = l2cap_sock_bind, 1220 .bind = l2cap_sock_bind,
1221 .connect = l2cap_sock_connect, 1221 .connect = l2cap_sock_connect,
1222 .listen = l2cap_sock_listen, 1222 .listen = l2cap_sock_listen,
1223 .accept = l2cap_sock_accept, 1223 .accept = l2cap_sock_accept,
1224 .getname = l2cap_sock_getname, 1224 .getname = l2cap_sock_getname,
1225 .sendmsg = l2cap_sock_sendmsg, 1225 .sendmsg = l2cap_sock_sendmsg,
1226 .recvmsg = l2cap_sock_recvmsg, 1226 .recvmsg = l2cap_sock_recvmsg,
1227 .poll = bt_sock_poll, 1227 .poll = bt_sock_poll,
1228 .ioctl = bt_sock_ioctl, 1228 .ioctl = bt_sock_ioctl,
1229 .mmap = sock_no_mmap, 1229 .mmap = sock_no_mmap,
1230 .socketpair = sock_no_socketpair, 1230 .socketpair = sock_no_socketpair,
1231 .shutdown = l2cap_sock_shutdown, 1231 .shutdown = l2cap_sock_shutdown,
1232 .setsockopt = l2cap_sock_setsockopt, 1232 .setsockopt = l2cap_sock_setsockopt,
1233 .getsockopt = l2cap_sock_getsockopt 1233 .getsockopt = l2cap_sock_getsockopt
1234 }; 1234 };
1235 1235
1236 static const struct net_proto_family l2cap_sock_family_ops = { 1236 static const struct net_proto_family l2cap_sock_family_ops = {
1237 .family = PF_BLUETOOTH, 1237 .family = PF_BLUETOOTH,
1238 .owner = THIS_MODULE, 1238 .owner = THIS_MODULE,
1239 .create = l2cap_sock_create, 1239 .create = l2cap_sock_create,
1240 }; 1240 };
1241 1241
1242 int __init l2cap_init_sockets(void) 1242 int __init l2cap_init_sockets(void)
1243 { 1243 {
1244 int err; 1244 int err;
1245 1245
1246 err = proto_register(&l2cap_proto, 0); 1246 err = proto_register(&l2cap_proto, 0);
1247 if (err < 0) 1247 if (err < 0)
1248 return err; 1248 return err;
1249 1249
1250 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops); 1250 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
1251 if (err < 0) 1251 if (err < 0)
1252 goto error; 1252 goto error;
1253 1253
1254 BT_INFO("L2CAP socket layer initialized"); 1254 BT_INFO("L2CAP socket layer initialized");
1255 1255
1256 return 0; 1256 return 0;
1257 1257
1258 error: 1258 error:
1259 BT_ERR("L2CAP socket registration failed"); 1259 BT_ERR("L2CAP socket registration failed");
1260 proto_unregister(&l2cap_proto); 1260 proto_unregister(&l2cap_proto);
1261 return err; 1261 return err;
1262 } 1262 }
1263 1263
1264 void l2cap_cleanup_sockets(void) 1264 void l2cap_cleanup_sockets(void)
1265 { 1265 {
1266 if (bt_sock_unregister(BTPROTO_L2CAP) < 0) 1266 if (bt_sock_unregister(BTPROTO_L2CAP) < 0)
1267 BT_ERR("L2CAP socket unregistration failed"); 1267 BT_ERR("L2CAP socket unregistration failed");
1268 1268
1269 proto_unregister(&l2cap_proto); 1269 proto_unregister(&l2cap_proto);
1270 } 1270 }
1271 1271