aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/l2cap.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/bluetooth/l2cap.c')
-rw-r--r--net/bluetooth/l2cap.c210
1 files changed, 149 insertions, 61 deletions
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index 947f8bbb4bb3..9753b690a8b3 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -40,6 +40,8 @@
40#include <linux/skbuff.h> 40#include <linux/skbuff.h>
41#include <linux/list.h> 41#include <linux/list.h>
42#include <linux/device.h> 42#include <linux/device.h>
43#include <linux/debugfs.h>
44#include <linux/seq_file.h>
43#include <linux/uaccess.h> 45#include <linux/uaccess.h>
44#include <linux/crc16.h> 46#include <linux/crc16.h>
45#include <net/sock.h> 47#include <net/sock.h>
@@ -54,6 +56,7 @@
54#define VERSION "2.14" 56#define VERSION "2.14"
55 57
56static int enable_ertm = 0; 58static int enable_ertm = 0;
59static int max_transmit = L2CAP_DEFAULT_MAX_TX;
57 60
58static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN; 61static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN;
59static u8 l2cap_fixed_chan[8] = { 0x02, }; 62static u8 l2cap_fixed_chan[8] = { 0x02, };
@@ -373,6 +376,8 @@ static inline int l2cap_send_rr_or_rnr(struct l2cap_pinfo *pi, u16 control)
373 else 376 else
374 control |= L2CAP_SUPER_RCV_READY; 377 control |= L2CAP_SUPER_RCV_READY;
375 378
379 control |= pi->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
380
376 return l2cap_send_sframe(pi, control); 381 return l2cap_send_sframe(pi, control);
377} 382}
378 383
@@ -819,7 +824,8 @@ static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int p
819 return sk; 824 return sk;
820} 825}
821 826
822static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol) 827static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
828 int kern)
823{ 829{
824 struct sock *sk; 830 struct sock *sk;
825 831
@@ -831,7 +837,7 @@ static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol)
831 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW) 837 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
832 return -ESOCKTNOSUPPORT; 838 return -ESOCKTNOSUPPORT;
833 839
834 if (sock->type == SOCK_RAW && !capable(CAP_NET_RAW)) 840 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
835 return -EPERM; 841 return -EPERM;
836 842
837 sock->ops = &l2cap_sock_ops; 843 sock->ops = &l2cap_sock_ops;
@@ -996,7 +1002,8 @@ static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int al
996 1002
997 BT_DBG("sk %p", sk); 1003 BT_DBG("sk %p", sk);
998 1004
999 if (!addr || addr->sa_family != AF_BLUETOOTH) 1005 if (!addr || alen < sizeof(addr->sa_family) ||
1006 addr->sa_family != AF_BLUETOOTH)
1000 return -EINVAL; 1007 return -EINVAL;
1001 1008
1002 memset(&la, 0, sizeof(la)); 1009 memset(&la, 0, sizeof(la));
@@ -1208,6 +1215,7 @@ static void l2cap_monitor_timeout(unsigned long arg)
1208 bh_lock_sock(sk); 1215 bh_lock_sock(sk);
1209 if (l2cap_pi(sk)->retry_count >= l2cap_pi(sk)->remote_max_tx) { 1216 if (l2cap_pi(sk)->retry_count >= l2cap_pi(sk)->remote_max_tx) {
1210 l2cap_send_disconn_req(l2cap_pi(sk)->conn, sk); 1217 l2cap_send_disconn_req(l2cap_pi(sk)->conn, sk);
1218 bh_unlock_sock(sk);
1211 return; 1219 return;
1212 } 1220 }
1213 1221
@@ -1332,7 +1340,7 @@ static int l2cap_retransmit_frame(struct sock *sk, u8 tx_seq)
1332 tx_skb = skb_clone(skb, GFP_ATOMIC); 1340 tx_skb = skb_clone(skb, GFP_ATOMIC);
1333 bt_cb(skb)->retries++; 1341 bt_cb(skb)->retries++;
1334 control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE); 1342 control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1335 control |= (pi->req_seq << L2CAP_CTRL_REQSEQ_SHIFT) 1343 control |= (pi->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1336 | (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT); 1344 | (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1337 put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE); 1345 put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
1338 1346
@@ -1361,9 +1369,8 @@ static int l2cap_ertm_send(struct sock *sk)
1361 if (pi->conn_state & L2CAP_CONN_WAIT_F) 1369 if (pi->conn_state & L2CAP_CONN_WAIT_F)
1362 return 0; 1370 return 0;
1363 1371
1364 while ((skb = sk->sk_send_head) && (!l2cap_tx_window_full(sk)) 1372 while ((skb = sk->sk_send_head) && (!l2cap_tx_window_full(sk)) &&
1365 && !(pi->conn_state & L2CAP_CONN_REMOTE_BUSY)) { 1373 !(pi->conn_state & L2CAP_CONN_REMOTE_BUSY)) {
1366 tx_skb = skb_clone(skb, GFP_ATOMIC);
1367 1374
1368 if (pi->remote_max_tx && 1375 if (pi->remote_max_tx &&
1369 bt_cb(skb)->retries == pi->remote_max_tx) { 1376 bt_cb(skb)->retries == pi->remote_max_tx) {
@@ -1371,10 +1378,12 @@ static int l2cap_ertm_send(struct sock *sk)
1371 break; 1378 break;
1372 } 1379 }
1373 1380
1381 tx_skb = skb_clone(skb, GFP_ATOMIC);
1382
1374 bt_cb(skb)->retries++; 1383 bt_cb(skb)->retries++;
1375 1384
1376 control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE); 1385 control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1377 control |= (pi->req_seq << L2CAP_CTRL_REQSEQ_SHIFT) 1386 control |= (pi->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1378 | (pi->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT); 1387 | (pi->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1379 put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE); 1388 put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
1380 1389
@@ -1603,8 +1612,8 @@ static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct ms
1603 return -EOPNOTSUPP; 1612 return -EOPNOTSUPP;
1604 1613
1605 /* Check outgoing MTU */ 1614 /* Check outgoing MTU */
1606 if (sk->sk_type == SOCK_SEQPACKET && pi->mode == L2CAP_MODE_BASIC 1615 if (sk->sk_type == SOCK_SEQPACKET && pi->mode == L2CAP_MODE_BASIC &&
1607 && len > pi->omtu) 1616 len > pi->omtu)
1608 return -EINVAL; 1617 return -EINVAL;
1609 1618
1610 lock_sock(sk); 1619 lock_sock(sk);
@@ -1617,7 +1626,10 @@ static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct ms
1617 /* Connectionless channel */ 1626 /* Connectionless channel */
1618 if (sk->sk_type == SOCK_DGRAM) { 1627 if (sk->sk_type == SOCK_DGRAM) {
1619 skb = l2cap_create_connless_pdu(sk, msg, len); 1628 skb = l2cap_create_connless_pdu(sk, msg, len);
1620 err = l2cap_do_send(sk, skb); 1629 if (IS_ERR(skb))
1630 err = PTR_ERR(skb);
1631 else
1632 err = l2cap_do_send(sk, skb);
1621 goto done; 1633 goto done;
1622 } 1634 }
1623 1635
@@ -2172,6 +2184,21 @@ static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
2172 *ptr += L2CAP_CONF_OPT_SIZE + len; 2184 *ptr += L2CAP_CONF_OPT_SIZE + len;
2173} 2185}
2174 2186
2187static inline void l2cap_ertm_init(struct sock *sk)
2188{
2189 l2cap_pi(sk)->expected_ack_seq = 0;
2190 l2cap_pi(sk)->unacked_frames = 0;
2191 l2cap_pi(sk)->buffer_seq = 0;
2192 l2cap_pi(sk)->num_to_ack = 0;
2193
2194 setup_timer(&l2cap_pi(sk)->retrans_timer,
2195 l2cap_retrans_timeout, (unsigned long) sk);
2196 setup_timer(&l2cap_pi(sk)->monitor_timer,
2197 l2cap_monitor_timeout, (unsigned long) sk);
2198
2199 __skb_queue_head_init(SREJ_QUEUE(sk));
2200}
2201
2175static int l2cap_mode_supported(__u8 mode, __u32 feat_mask) 2202static int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
2176{ 2203{
2177 u32 local_feat_mask = l2cap_feat_mask; 2204 u32 local_feat_mask = l2cap_feat_mask;
@@ -2235,7 +2262,7 @@ done:
2235 case L2CAP_MODE_ERTM: 2262 case L2CAP_MODE_ERTM:
2236 rfc.mode = L2CAP_MODE_ERTM; 2263 rfc.mode = L2CAP_MODE_ERTM;
2237 rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW; 2264 rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
2238 rfc.max_transmit = L2CAP_DEFAULT_MAX_TX; 2265 rfc.max_transmit = max_transmit;
2239 rfc.retrans_timeout = 0; 2266 rfc.retrans_timeout = 0;
2240 rfc.monitor_timeout = 0; 2267 rfc.monitor_timeout = 0;
2241 rfc.max_pdu_size = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE); 2268 rfc.max_pdu_size = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
@@ -2755,22 +2782,18 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr
2755 goto unlock; 2782 goto unlock;
2756 2783
2757 if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) { 2784 if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) {
2758 if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_NO_FCS_RECV) 2785 if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_NO_FCS_RECV) ||
2759 || l2cap_pi(sk)->fcs != L2CAP_FCS_NONE) 2786 l2cap_pi(sk)->fcs != L2CAP_FCS_NONE)
2760 l2cap_pi(sk)->fcs = L2CAP_FCS_CRC16; 2787 l2cap_pi(sk)->fcs = L2CAP_FCS_CRC16;
2761 2788
2762 sk->sk_state = BT_CONNECTED; 2789 sk->sk_state = BT_CONNECTED;
2763 l2cap_pi(sk)->next_tx_seq = 0;
2764 l2cap_pi(sk)->expected_ack_seq = 0;
2765 l2cap_pi(sk)->unacked_frames = 0;
2766
2767 setup_timer(&l2cap_pi(sk)->retrans_timer,
2768 l2cap_retrans_timeout, (unsigned long) sk);
2769 setup_timer(&l2cap_pi(sk)->monitor_timer,
2770 l2cap_monitor_timeout, (unsigned long) sk);
2771 2790
2791 l2cap_pi(sk)->next_tx_seq = 0;
2792 l2cap_pi(sk)->expected_tx_seq = 0;
2772 __skb_queue_head_init(TX_QUEUE(sk)); 2793 __skb_queue_head_init(TX_QUEUE(sk));
2773 __skb_queue_head_init(SREJ_QUEUE(sk)); 2794 if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM)
2795 l2cap_ertm_init(sk);
2796
2774 l2cap_chan_ready(sk); 2797 l2cap_chan_ready(sk);
2775 goto unlock; 2798 goto unlock;
2776 } 2799 }
@@ -2813,6 +2836,11 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr
2813 int len = cmd->len - sizeof(*rsp); 2836 int len = cmd->len - sizeof(*rsp);
2814 char req[64]; 2837 char req[64];
2815 2838
2839 if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2840 l2cap_send_disconn_req(conn, sk);
2841 goto done;
2842 }
2843
2816 /* throw out any old stored conf requests */ 2844 /* throw out any old stored conf requests */
2817 result = L2CAP_CONF_SUCCESS; 2845 result = L2CAP_CONF_SUCCESS;
2818 len = l2cap_parse_conf_rsp(sk, rsp->data, 2846 len = l2cap_parse_conf_rsp(sk, rsp->data,
@@ -2844,16 +2872,17 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr
2844 l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE; 2872 l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE;
2845 2873
2846 if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) { 2874 if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) {
2847 if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_NO_FCS_RECV) 2875 if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_NO_FCS_RECV) ||
2848 || l2cap_pi(sk)->fcs != L2CAP_FCS_NONE) 2876 l2cap_pi(sk)->fcs != L2CAP_FCS_NONE)
2849 l2cap_pi(sk)->fcs = L2CAP_FCS_CRC16; 2877 l2cap_pi(sk)->fcs = L2CAP_FCS_CRC16;
2850 2878
2851 sk->sk_state = BT_CONNECTED; 2879 sk->sk_state = BT_CONNECTED;
2880 l2cap_pi(sk)->next_tx_seq = 0;
2852 l2cap_pi(sk)->expected_tx_seq = 0; 2881 l2cap_pi(sk)->expected_tx_seq = 0;
2853 l2cap_pi(sk)->buffer_seq = 0;
2854 l2cap_pi(sk)->num_to_ack = 0;
2855 __skb_queue_head_init(TX_QUEUE(sk)); 2882 __skb_queue_head_init(TX_QUEUE(sk));
2856 __skb_queue_head_init(SREJ_QUEUE(sk)); 2883 if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM)
2884 l2cap_ertm_init(sk);
2885
2857 l2cap_chan_ready(sk); 2886 l2cap_chan_ready(sk);
2858 } 2887 }
2859 2888
@@ -2885,9 +2914,12 @@ static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd
2885 sk->sk_shutdown = SHUTDOWN_MASK; 2914 sk->sk_shutdown = SHUTDOWN_MASK;
2886 2915
2887 skb_queue_purge(TX_QUEUE(sk)); 2916 skb_queue_purge(TX_QUEUE(sk));
2888 skb_queue_purge(SREJ_QUEUE(sk)); 2917
2889 del_timer(&l2cap_pi(sk)->retrans_timer); 2918 if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM) {
2890 del_timer(&l2cap_pi(sk)->monitor_timer); 2919 skb_queue_purge(SREJ_QUEUE(sk));
2920 del_timer(&l2cap_pi(sk)->retrans_timer);
2921 del_timer(&l2cap_pi(sk)->monitor_timer);
2922 }
2891 2923
2892 l2cap_chan_del(sk, ECONNRESET); 2924 l2cap_chan_del(sk, ECONNRESET);
2893 bh_unlock_sock(sk); 2925 bh_unlock_sock(sk);
@@ -2912,9 +2944,12 @@ static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd
2912 return 0; 2944 return 0;
2913 2945
2914 skb_queue_purge(TX_QUEUE(sk)); 2946 skb_queue_purge(TX_QUEUE(sk));
2915 skb_queue_purge(SREJ_QUEUE(sk)); 2947
2916 del_timer(&l2cap_pi(sk)->retrans_timer); 2948 if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM) {
2917 del_timer(&l2cap_pi(sk)->monitor_timer); 2949 skb_queue_purge(SREJ_QUEUE(sk));
2950 del_timer(&l2cap_pi(sk)->retrans_timer);
2951 del_timer(&l2cap_pi(sk)->monitor_timer);
2952 }
2918 2953
2919 l2cap_chan_del(sk, 0); 2954 l2cap_chan_del(sk, 0);
2920 bh_unlock_sock(sk); 2955 bh_unlock_sock(sk);
@@ -3279,12 +3314,16 @@ static inline int l2cap_data_channel_iframe(struct sock *sk, u16 rx_control, str
3279{ 3314{
3280 struct l2cap_pinfo *pi = l2cap_pi(sk); 3315 struct l2cap_pinfo *pi = l2cap_pi(sk);
3281 u8 tx_seq = __get_txseq(rx_control); 3316 u8 tx_seq = __get_txseq(rx_control);
3317 u8 req_seq = __get_reqseq(rx_control);
3282 u16 tx_control = 0; 3318 u16 tx_control = 0;
3283 u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT; 3319 u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT;
3284 int err = 0; 3320 int err = 0;
3285 3321
3286 BT_DBG("sk %p rx_control 0x%4.4x len %d", sk, rx_control, skb->len); 3322 BT_DBG("sk %p rx_control 0x%4.4x len %d", sk, rx_control, skb->len);
3287 3323
3324 pi->expected_ack_seq = req_seq;
3325 l2cap_drop_acked_frames(sk);
3326
3288 if (tx_seq == pi->expected_tx_seq) 3327 if (tx_seq == pi->expected_tx_seq)
3289 goto expected; 3328 goto expected;
3290 3329
@@ -3339,6 +3378,16 @@ expected:
3339 return 0; 3378 return 0;
3340 } 3379 }
3341 3380
3381 if (rx_control & L2CAP_CTRL_FINAL) {
3382 if (pi->conn_state & L2CAP_CONN_REJ_ACT)
3383 pi->conn_state &= ~L2CAP_CONN_REJ_ACT;
3384 else {
3385 sk->sk_send_head = TX_QUEUE(sk)->next;
3386 pi->next_tx_seq = pi->expected_ack_seq;
3387 l2cap_ertm_send(sk);
3388 }
3389 }
3390
3342 pi->buffer_seq = (pi->buffer_seq + 1) % 64; 3391 pi->buffer_seq = (pi->buffer_seq + 1) % 64;
3343 3392
3344 err = l2cap_sar_reassembly_sdu(sk, skb, rx_control); 3393 err = l2cap_sar_reassembly_sdu(sk, skb, rx_control);
@@ -3375,6 +3424,14 @@ static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, str
3375 pi->expected_ack_seq = tx_seq; 3424 pi->expected_ack_seq = tx_seq;
3376 l2cap_drop_acked_frames(sk); 3425 l2cap_drop_acked_frames(sk);
3377 3426
3427 if (pi->conn_state & L2CAP_CONN_REJ_ACT)
3428 pi->conn_state &= ~L2CAP_CONN_REJ_ACT;
3429 else {
3430 sk->sk_send_head = TX_QUEUE(sk)->next;
3431 pi->next_tx_seq = pi->expected_ack_seq;
3432 l2cap_ertm_send(sk);
3433 }
3434
3378 if (!(pi->conn_state & L2CAP_CONN_WAIT_F)) 3435 if (!(pi->conn_state & L2CAP_CONN_WAIT_F))
3379 break; 3436 break;
3380 3437
@@ -3387,12 +3444,12 @@ static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, str
3387 pi->expected_ack_seq = tx_seq; 3444 pi->expected_ack_seq = tx_seq;
3388 l2cap_drop_acked_frames(sk); 3445 l2cap_drop_acked_frames(sk);
3389 3446
3390 if ((pi->conn_state & L2CAP_CONN_REMOTE_BUSY) 3447 if ((pi->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
3391 && (pi->unacked_frames > 0)) 3448 (pi->unacked_frames > 0))
3392 __mod_retrans_timer(); 3449 __mod_retrans_timer();
3393 3450
3394 l2cap_ertm_send(sk);
3395 pi->conn_state &= ~L2CAP_CONN_REMOTE_BUSY; 3451 pi->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3452 l2cap_ertm_send(sk);
3396 } 3453 }
3397 break; 3454 break;
3398 3455
@@ -3402,10 +3459,24 @@ static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, str
3402 pi->expected_ack_seq = __get_reqseq(rx_control); 3459 pi->expected_ack_seq = __get_reqseq(rx_control);
3403 l2cap_drop_acked_frames(sk); 3460 l2cap_drop_acked_frames(sk);
3404 3461
3405 sk->sk_send_head = TX_QUEUE(sk)->next; 3462 if (rx_control & L2CAP_CTRL_FINAL) {
3406 pi->next_tx_seq = pi->expected_ack_seq; 3463 if (pi->conn_state & L2CAP_CONN_REJ_ACT)
3464 pi->conn_state &= ~L2CAP_CONN_REJ_ACT;
3465 else {
3466 sk->sk_send_head = TX_QUEUE(sk)->next;
3467 pi->next_tx_seq = pi->expected_ack_seq;
3468 l2cap_ertm_send(sk);
3469 }
3470 } else {
3471 sk->sk_send_head = TX_QUEUE(sk)->next;
3472 pi->next_tx_seq = pi->expected_ack_seq;
3473 l2cap_ertm_send(sk);
3407 3474
3408 l2cap_ertm_send(sk); 3475 if (pi->conn_state & L2CAP_CONN_WAIT_F) {
3476 pi->srej_save_reqseq = tx_seq;
3477 pi->conn_state |= L2CAP_CONN_REJ_ACT;
3478 }
3479 }
3409 3480
3410 break; 3481 break;
3411 3482
@@ -3413,9 +3484,9 @@ static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, str
3413 pi->conn_state &= ~L2CAP_CONN_REMOTE_BUSY; 3484 pi->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3414 3485
3415 if (rx_control & L2CAP_CTRL_POLL) { 3486 if (rx_control & L2CAP_CTRL_POLL) {
3416 l2cap_retransmit_frame(sk, tx_seq);
3417 pi->expected_ack_seq = tx_seq; 3487 pi->expected_ack_seq = tx_seq;
3418 l2cap_drop_acked_frames(sk); 3488 l2cap_drop_acked_frames(sk);
3489 l2cap_retransmit_frame(sk, tx_seq);
3419 l2cap_ertm_send(sk); 3490 l2cap_ertm_send(sk);
3420 if (pi->conn_state & L2CAP_CONN_WAIT_F) { 3491 if (pi->conn_state & L2CAP_CONN_WAIT_F) {
3421 pi->srej_save_reqseq = tx_seq; 3492 pi->srej_save_reqseq = tx_seq;
@@ -3424,7 +3495,7 @@ static inline int l2cap_data_channel_sframe(struct sock *sk, u16 rx_control, str
3424 } else if (rx_control & L2CAP_CTRL_FINAL) { 3495 } else if (rx_control & L2CAP_CTRL_FINAL) {
3425 if ((pi->conn_state & L2CAP_CONN_SREJ_ACT) && 3496 if ((pi->conn_state & L2CAP_CONN_SREJ_ACT) &&
3426 pi->srej_save_reqseq == tx_seq) 3497 pi->srej_save_reqseq == tx_seq)
3427 pi->srej_save_reqseq &= ~L2CAP_CONN_SREJ_ACT; 3498 pi->conn_state &= ~L2CAP_CONN_SREJ_ACT;
3428 else 3499 else
3429 l2cap_retransmit_frame(sk, tx_seq); 3500 l2cap_retransmit_frame(sk, tx_seq);
3430 } 3501 }
@@ -3459,7 +3530,6 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
3459 struct l2cap_pinfo *pi; 3530 struct l2cap_pinfo *pi;
3460 u16 control, len; 3531 u16 control, len;
3461 u8 tx_seq; 3532 u8 tx_seq;
3462 int err;
3463 3533
3464 sk = l2cap_get_chan_by_scid(&conn->chan_list, cid); 3534 sk = l2cap_get_chan_by_scid(&conn->chan_list, cid);
3465 if (!sk) { 3535 if (!sk) {
@@ -3511,13 +3581,11 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
3511 goto drop; 3581 goto drop;
3512 3582
3513 if (__is_iframe(control)) 3583 if (__is_iframe(control))
3514 err = l2cap_data_channel_iframe(sk, control, skb); 3584 l2cap_data_channel_iframe(sk, control, skb);
3515 else 3585 else
3516 err = l2cap_data_channel_sframe(sk, control, skb); 3586 l2cap_data_channel_sframe(sk, control, skb);
3517 3587
3518 if (!err) 3588 goto done;
3519 goto done;
3520 break;
3521 3589
3522 case L2CAP_MODE_STREAMING: 3590 case L2CAP_MODE_STREAMING:
3523 control = get_unaligned_le16(skb->data); 3591 control = get_unaligned_le16(skb->data);
@@ -3543,7 +3611,7 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
3543 else 3611 else
3544 pi->expected_tx_seq = tx_seq + 1; 3612 pi->expected_tx_seq = tx_seq + 1;
3545 3613
3546 err = l2cap_sar_reassembly_sdu(sk, skb, control); 3614 l2cap_sar_reassembly_sdu(sk, skb, control);
3547 3615
3548 goto done; 3616 goto done;
3549 3617
@@ -3880,29 +3948,42 @@ drop:
3880 return 0; 3948 return 0;
3881} 3949}
3882 3950
3883static ssize_t l2cap_sysfs_show(struct class *dev, char *buf) 3951static int l2cap_debugfs_show(struct seq_file *f, void *p)
3884{ 3952{
3885 struct sock *sk; 3953 struct sock *sk;
3886 struct hlist_node *node; 3954 struct hlist_node *node;
3887 char *str = buf;
3888 3955
3889 read_lock_bh(&l2cap_sk_list.lock); 3956 read_lock_bh(&l2cap_sk_list.lock);
3890 3957
3891 sk_for_each(sk, node, &l2cap_sk_list.head) { 3958 sk_for_each(sk, node, &l2cap_sk_list.head) {
3892 struct l2cap_pinfo *pi = l2cap_pi(sk); 3959 struct l2cap_pinfo *pi = l2cap_pi(sk);
3893 3960
3894 str += sprintf(str, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d\n", 3961 seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d\n",
3895 batostr(&bt_sk(sk)->src), batostr(&bt_sk(sk)->dst), 3962 batostr(&bt_sk(sk)->src),
3896 sk->sk_state, __le16_to_cpu(pi->psm), pi->scid, 3963 batostr(&bt_sk(sk)->dst),
3897 pi->dcid, pi->imtu, pi->omtu, pi->sec_level); 3964 sk->sk_state, __le16_to_cpu(pi->psm),
3965 pi->scid, pi->dcid,
3966 pi->imtu, pi->omtu, pi->sec_level);
3898 } 3967 }
3899 3968
3900 read_unlock_bh(&l2cap_sk_list.lock); 3969 read_unlock_bh(&l2cap_sk_list.lock);
3901 3970
3902 return str - buf; 3971 return 0;
3972}
3973
3974static int l2cap_debugfs_open(struct inode *inode, struct file *file)
3975{
3976 return single_open(file, l2cap_debugfs_show, inode->i_private);
3903} 3977}
3904 3978
3905static CLASS_ATTR(l2cap, S_IRUGO, l2cap_sysfs_show, NULL); 3979static const struct file_operations l2cap_debugfs_fops = {
3980 .open = l2cap_debugfs_open,
3981 .read = seq_read,
3982 .llseek = seq_lseek,
3983 .release = single_release,
3984};
3985
3986static struct dentry *l2cap_debugfs;
3906 3987
3907static const struct proto_ops l2cap_sock_ops = { 3988static const struct proto_ops l2cap_sock_ops = {
3908 .family = PF_BLUETOOTH, 3989 .family = PF_BLUETOOTH,
@@ -3924,7 +4005,7 @@ static const struct proto_ops l2cap_sock_ops = {
3924 .getsockopt = l2cap_sock_getsockopt 4005 .getsockopt = l2cap_sock_getsockopt
3925}; 4006};
3926 4007
3927static struct net_proto_family l2cap_sock_family_ops = { 4008static const struct net_proto_family l2cap_sock_family_ops = {
3928 .family = PF_BLUETOOTH, 4009 .family = PF_BLUETOOTH,
3929 .owner = THIS_MODULE, 4010 .owner = THIS_MODULE,
3930 .create = l2cap_sock_create, 4011 .create = l2cap_sock_create,
@@ -3962,8 +4043,12 @@ static int __init l2cap_init(void)
3962 goto error; 4043 goto error;
3963 } 4044 }
3964 4045
3965 if (class_create_file(bt_class, &class_attr_l2cap) < 0) 4046 if (bt_debugfs) {
3966 BT_ERR("Failed to create L2CAP info file"); 4047 l2cap_debugfs = debugfs_create_file("l2cap", 0444,
4048 bt_debugfs, NULL, &l2cap_debugfs_fops);
4049 if (!l2cap_debugfs)
4050 BT_ERR("Failed to create L2CAP debug file");
4051 }
3967 4052
3968 BT_INFO("L2CAP ver %s", VERSION); 4053 BT_INFO("L2CAP ver %s", VERSION);
3969 BT_INFO("L2CAP socket layer initialized"); 4054 BT_INFO("L2CAP socket layer initialized");
@@ -3977,7 +4062,7 @@ error:
3977 4062
3978static void __exit l2cap_exit(void) 4063static void __exit l2cap_exit(void)
3979{ 4064{
3980 class_remove_file(bt_class, &class_attr_l2cap); 4065 debugfs_remove(l2cap_debugfs);
3981 4066
3982 if (bt_sock_unregister(BTPROTO_L2CAP) < 0) 4067 if (bt_sock_unregister(BTPROTO_L2CAP) < 0)
3983 BT_ERR("L2CAP socket unregistration failed"); 4068 BT_ERR("L2CAP socket unregistration failed");
@@ -4003,6 +4088,9 @@ module_exit(l2cap_exit);
4003module_param(enable_ertm, bool, 0644); 4088module_param(enable_ertm, bool, 0644);
4004MODULE_PARM_DESC(enable_ertm, "Enable enhanced retransmission mode"); 4089MODULE_PARM_DESC(enable_ertm, "Enable enhanced retransmission mode");
4005 4090
4091module_param(max_transmit, uint, 0644);
4092MODULE_PARM_DESC(max_transmit, "Max transmit value (default = 3)");
4093
4006MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>"); 4094MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
4007MODULE_DESCRIPTION("Bluetooth L2CAP ver " VERSION); 4095MODULE_DESCRIPTION("Bluetooth L2CAP ver " VERSION);
4008MODULE_VERSION(VERSION); 4096MODULE_VERSION(VERSION);