|
@@ -1430,6 +1430,8 @@ static void l2cap_retransmit_one_frame(struct sock *sk, u8 tx_seq)
|
|
tx_skb = skb_clone(skb, GFP_ATOMIC);
|
|
tx_skb = skb_clone(skb, GFP_ATOMIC);
|
|
bt_cb(skb)->retries++;
|
|
bt_cb(skb)->retries++;
|
|
control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
|
|
control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
|
|
|
|
+ control &= L2CAP_CTRL_SAR;
|
|
|
|
+
|
|
control |= (pi->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
|
|
control |= (pi->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
|
|
| (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
|
|
| (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
|
|
put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
|
|
put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
|
|
@@ -1465,6 +1467,8 @@ static int l2cap_ertm_send(struct sock *sk)
|
|
bt_cb(skb)->retries++;
|
|
bt_cb(skb)->retries++;
|
|
|
|
|
|
control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
|
|
control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
|
|
|
|
+ control &= L2CAP_CTRL_SAR;
|
|
|
|
+
|
|
if (pi->conn_state & L2CAP_CONN_SEND_FBIT) {
|
|
if (pi->conn_state & L2CAP_CONN_SEND_FBIT) {
|
|
control |= L2CAP_CTRL_FINAL;
|
|
control |= L2CAP_CTRL_FINAL;
|
|
pi->conn_state &= ~L2CAP_CONN_SEND_FBIT;
|
|
pi->conn_state &= ~L2CAP_CONN_SEND_FBIT;
|