Lines Matching refs:skb

165 static bool is_filtered_packet(struct sock *sk, struct sk_buff *skb)
173 flt_type = hci_skb_pkt_type(skb) & HCI_FLT_TYPE_BITS;
179 if (hci_skb_pkt_type(skb) != HCI_EVENT_PKT)
182 flt_event = (*(__u8 *)skb->data & HCI_FLT_EVENT_BITS);
192 flt->opcode != get_unaligned((__le16 *)(skb->data + 3)))
196 flt->opcode != get_unaligned((__le16 *)(skb->data + 4)))
203 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb)
208 BT_DBG("hdev %p len %d", hdev, skb->len);
219 if (skb->sk == sk)
223 if (hci_skb_pkt_type(skb) != HCI_COMMAND_PKT &&
224 hci_skb_pkt_type(skb) != HCI_EVENT_PKT &&
225 hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
226 hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
227 hci_skb_pkt_type(skb) != HCI_ISODATA_PKT)
229 if (is_filtered_packet(sk, skb))
232 if (!bt_cb(skb)->incoming)
234 if (hci_skb_pkt_type(skb) != HCI_EVENT_PKT &&
235 hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
236 hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
237 hci_skb_pkt_type(skb) != HCI_ISODATA_PKT)
246 skb_copy = __pskb_copy_fclone(skb, 1, GFP_ATOMIC, true);
251 memcpy(skb_push(skb_copy, 1), &hci_skb_pkt_type(skb), 1);
267 static void hci_sock_copy_creds(struct sock *sk, struct sk_buff *skb)
271 if (!sk || WARN_ON(!skb))
274 creds = &bt_cb(skb)->creds;
298 static struct sk_buff *hci_skb_clone(struct sk_buff *skb)
302 if (!skb)
305 nskb = skb_clone(skb, GFP_ATOMIC);
309 hci_sock_copy_creds(skb->sk, nskb);
315 static void __hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
320 BT_DBG("channel %u len %d", channel, skb->len);
339 nskb = hci_skb_clone(skb);
349 void hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
353 __hci_send_to_channel(channel, skb, flag, skip_sk);
358 void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb)
367 BT_DBG("hdev %p len %d", hdev, skb->len);
369 switch (hci_skb_pkt_type(skb)) {
377 if (bt_cb(skb)->incoming)
383 if (bt_cb(skb)->incoming)
389 if (bt_cb(skb)->incoming)
402 skb_copy = __pskb_copy_fclone(skb, HCI_MON_HDR_SIZE, GFP_ATOMIC, true);
406 hci_sock_copy_creds(skb->sk, skb_copy);
412 hdr->len = cpu_to_le16(skb->len);
435 struct sk_buff *skb;
448 skb = bt_skb_alloc(6 + data_len, GFP_ATOMIC);
449 if (!skb)
452 put_unaligned_le32(hci_pi(sk)->cookie, skb_put(skb, 4));
453 put_unaligned_le16(event, skb_put(skb, 2));
456 skb_put_data(skb, data, data_len);
458 skb->tstamp = tstamp;
460 hdr = skb_push(skb, HCI_MON_HDR_SIZE);
463 hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
465 __hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
467 kfree_skb(skb);
478 struct sk_buff *skb;
483 skb = bt_skb_alloc(HCI_MON_NEW_INDEX_SIZE, GFP_ATOMIC);
484 if (!skb)
487 ni = skb_put(skb, HCI_MON_NEW_INDEX_SIZE);
498 skb = bt_skb_alloc(0, GFP_ATOMIC);
499 if (!skb)
511 skb = bt_skb_alloc(HCI_MON_INDEX_INFO_SIZE, GFP_ATOMIC);
512 if (!skb)
515 ii = skb_put(skb, HCI_MON_INDEX_INFO_SIZE);
523 skb = bt_skb_alloc(0, GFP_ATOMIC);
524 if (!skb)
531 skb = bt_skb_alloc(0, GFP_ATOMIC);
532 if (!skb)
542 __net_timestamp(skb);
544 hdr = skb_push(skb, HCI_MON_HDR_SIZE);
547 hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
549 return skb;
555 struct sk_buff *skb;
584 skb = bt_skb_alloc(14 + TASK_COMM_LEN, GFP_ATOMIC);
585 if (!skb)
588 hci_sock_copy_creds(sk, skb);
592 put_unaligned_le32(hci_pi(sk)->cookie, skb_put(skb, 4));
593 put_unaligned_le16(format, skb_put(skb, 2));
594 skb_put_data(skb, ver, sizeof(ver));
595 put_unaligned_le32(flags, skb_put(skb, 4));
596 skb_put_u8(skb, TASK_COMM_LEN);
597 skb_put_data(skb, hci_pi(sk)->comm, TASK_COMM_LEN);
599 __net_timestamp(skb);
601 hdr = skb_push(skb, HCI_MON_HDR_SIZE);
607 hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
609 return skb;
615 struct sk_buff *skb;
631 skb = bt_skb_alloc(4, GFP_ATOMIC);
632 if (!skb)
635 hci_sock_copy_creds(sk, skb);
637 put_unaligned_le32(hci_pi(sk)->cookie, skb_put(skb, 4));
639 __net_timestamp(skb);
641 hdr = skb_push(skb, HCI_MON_HDR_SIZE);
647 hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
649 return skb;
657 struct sk_buff *skb;
659 skb = bt_skb_alloc(6 + len, GFP_ATOMIC);
660 if (!skb)
663 hci_sock_copy_creds(sk, skb);
665 put_unaligned_le32(hci_pi(sk)->cookie, skb_put(skb, 4));
666 put_unaligned_le16(opcode, skb_put(skb, 2));
669 skb_put_data(skb, buf, len);
671 __net_timestamp(skb);
673 hdr = skb_push(skb, HCI_MON_HDR_SIZE);
676 hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
678 return skb;
686 struct sk_buff *skb;
693 skb = bt_skb_alloc(len + 1, GFP_ATOMIC);
694 if (!skb)
697 hci_sock_copy_creds(sk, skb);
700 vsprintf(skb_put(skb, len), fmt, args);
701 *(u8 *)skb_put(skb, 1) = 0;
704 __net_timestamp(skb);
706 hdr = (void *)skb_push(skb, HCI_MON_HDR_SIZE);
709 hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
711 if (sock_queue_rcv_skb(sk, skb))
712 kfree_skb(skb);
722 struct sk_buff *skb;
724 skb = create_monitor_event(hdev, HCI_DEV_REG);
725 if (!skb)
728 if (sock_queue_rcv_skb(sk, skb))
729 kfree_skb(skb);
734 skb = create_monitor_event(hdev, HCI_DEV_OPEN);
735 if (!skb)
738 if (sock_queue_rcv_skb(sk, skb))
739 kfree_skb(skb);
742 skb = create_monitor_event(hdev, HCI_DEV_UP);
744 skb = create_monitor_event(hdev, HCI_DEV_SETUP);
746 skb = NULL;
748 if (skb) {
749 if (sock_queue_rcv_skb(sk, skb))
750 kfree_skb(skb);
764 struct sk_buff *skb;
766 skb = create_monitor_ctrl_open(sk);
767 if (!skb)
770 if (sock_queue_rcv_skb(mon_sk, skb))
771 kfree_skb(skb);
782 struct sk_buff *skb;
784 skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
785 if (!skb)
788 hdr = skb_put(skb, HCI_EVENT_HDR_SIZE);
792 ev = skb_put(skb, sizeof(*ev) + dlen);
796 bt_cb(skb)->incoming = 1;
797 __net_timestamp(skb);
799 hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
800 hci_send_to_sock(hdev, skb);
801 kfree_skb(skb);
809 struct sk_buff *skb;
812 skb = create_monitor_event(hdev, event);
813 if (skb) {
814 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
816 kfree_skb(skb);
898 struct sk_buff *skb;
915 skb = create_monitor_ctrl_close(sk);
916 if (skb) {
917 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
919 kfree_skb(skb);
1087 struct sk_buff *skb;
1100 skb = create_monitor_ctrl_open(sk);
1101 if (skb) {
1102 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1104 kfree_skb(skb);
1187 struct sk_buff *skb;
1247 skb = create_monitor_ctrl_close(sk);
1248 if (skb) {
1249 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1251 kfree_skb(skb);
1261 skb = create_monitor_ctrl_open(sk);
1262 if (skb) {
1263 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1265 kfree_skb(skb);
1336 skb = create_monitor_ctrl_close(sk);
1337 if (skb) {
1338 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1340 kfree_skb(skb);
1352 skb = create_monitor_ctrl_open(sk);
1353 if (skb) {
1354 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1356 kfree_skb(skb);
1444 skb = create_monitor_ctrl_close(sk);
1445 if (skb) {
1446 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1448 kfree_skb(skb);
1453 skb = create_monitor_ctrl_open(sk);
1454 if (skb) {
1455 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1457 kfree_skb(skb);
1513 struct sk_buff *skb)
1518 int incoming = bt_cb(skb)->incoming;
1531 skb_get_timestamp(skb, &tv);
1554 struct sk_buff *skb;
1569 skb = skb_recv_datagram(sk, flags, &err);
1570 if (!skb)
1573 skblen = skb->len;
1574 copied = skb->len;
1580 skb_reset_transport_header(skb);
1581 err = skb_copy_datagram_msg(skb, 0, msg, copied);
1585 hci_sock_cmsg(sk, msg, skb);
1589 sock_recv_timestamp(msg, sk, skb);
1593 sock_recv_timestamp(msg, sk, skb);
1598 scm.creds = bt_cb(skb)->creds;
1600 skb_free_datagram(sk, skb);
1611 struct sk_buff *skb)
1621 BT_DBG("got %d bytes", skb->len);
1623 if (skb->len < sizeof(*hdr))
1626 hdr = (void *)skb->data;
1631 if (len != skb->len - sizeof(*hdr)) {
1641 skb->data + sizeof(*hdr));
1710 cp = skb->data + sizeof(*hdr);
1716 err = skb->len;
1725 static int hci_logging_frame(struct sock *sk, struct sk_buff *skb,
1737 if (skb->len < sizeof(*hdr) + 3)
1740 hdr = (void *)skb->data;
1742 if (__le16_to_cpu(hdr->len) != skb->len - sizeof(*hdr))
1746 __u8 priority = skb->data[sizeof(*hdr)];
1747 __u8 ident_len = skb->data[sizeof(*hdr) + 1];
1762 if (priority > 7 || skb->data[skb->len - 1] != 0x00 ||
1763 ident_len > skb->len - sizeof(*hdr) - 3 ||
1764 skb->data[sizeof(*hdr) + ident_len + 1] != 0x00)
1782 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb, HCI_SOCK_TRUSTED, NULL);
1783 err = skb->len;
1797 struct sk_buff *skb;
1812 skb = bt_skb_sendmsg(sk, msg, len, len, 0, 0);
1813 if (IS_ERR(skb))
1814 return PTR_ERR(skb);
1826 err = hci_logging_frame(sk, skb, flags);
1832 err = hci_mgmt_cmd(chan, sk, skb);
1851 hci_skb_pkt_type(skb) = skb->data[0];
1852 skb_pull(skb, 1);
1860 if (hci_skb_pkt_type(skb) != HCI_COMMAND_PKT &&
1861 hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
1862 hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
1863 hci_skb_pkt_type(skb) != HCI_ISODATA_PKT) {
1868 skb_queue_tail(&hdev->raw_q, skb);
1870 } else if (hci_skb_pkt_type(skb) == HCI_COMMAND_PKT) {
1871 u16 opcode = get_unaligned_le16(skb->data);
1886 hci_skb_opcode(skb) = opcode;
1889 skb_queue_tail(&hdev->raw_q, skb);
1895 bt_cb(skb)->hci.req_flags |= HCI_REQ_START;
1897 skb_queue_tail(&hdev->cmd_q, skb);
1906 if (hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
1907 hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
1908 hci_skb_pkt_type(skb) != HCI_ISODATA_PKT) {
1913 skb_queue_tail(&hdev->raw_q, skb);
1924 kfree_skb(skb);