Skip to content

Commit 0731c5a

Browse files
committed
Bluetooth: ISO: Add support for BT_PKT_STATUS
This adds support for BT_PKT_STATUS socketopt by setting BT_SK_PKT_STATUS. Then upon receiving an ISO packet the code would attempt to store the Packet_Status_Flag to hci_skb_pkt_status which is then forward to userspace in the form of BT_SCM_PKT_STATUS whenever BT_PKT_STATUS has been enabled/set. Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
1 parent 3f19ffb commit 0731c5a

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

net/bluetooth/iso.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,6 +1288,18 @@ static int iso_sock_setsockopt(struct socket *sock, int level, int optname,
12881288
clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
12891289
break;
12901290

1291+
case BT_PKT_STATUS:
1292+
if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
1293+
err = -EFAULT;
1294+
break;
1295+
}
1296+
1297+
if (opt)
1298+
set_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
1299+
else
1300+
clear_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags);
1301+
break;
1302+
12911303
case BT_ISO_QOS:
12921304
if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND &&
12931305
sk->sk_state != BT_CONNECT2) {
@@ -1373,6 +1385,12 @@ static int iso_sock_getsockopt(struct socket *sock, int level, int optname,
13731385

13741386
break;
13751387

1388+
case BT_PKT_STATUS:
1389+
if (put_user(test_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags),
1390+
(int __user *)optval))
1391+
err = -EFAULT;
1392+
break;
1393+
13761394
case BT_ISO_QOS:
13771395
qos = iso_sock_get_qos(sk);
13781396

@@ -1767,6 +1785,7 @@ void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
17671785

17681786
if (len == skb->len) {
17691787
/* Complete frame received */
1788+
hci_skb_pkt_status(skb) = flags & 0x03;
17701789
iso_recv_frame(conn, skb);
17711790
return;
17721791
}
@@ -1788,6 +1807,7 @@ void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
17881807
if (!conn->rx_skb)
17891808
goto drop;
17901809

1810+
hci_skb_pkt_status(conn->rx_skb) = flags & 0x03;
17911811
skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
17921812
skb->len);
17931813
conn->rx_len = len - skb->len;

0 commit comments

Comments
 (0)