2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
25 /* Bluetooth HCI sockets. */
27 #include <linux/config.h>
28 #include <linux/module.h>
30 #include <linux/types.h>
31 #include <linux/errno.h>
32 #include <linux/kernel.h>
33 #include <linux/major.h>
34 #include <linux/sched.h>
35 #include <linux/slab.h>
36 #include <linux/poll.h>
37 #include <linux/fcntl.h>
38 #include <linux/init.h>
39 #include <linux/skbuff.h>
40 #include <linux/workqueue.h>
41 #include <linux/interrupt.h>
42 #include <linux/socket.h>
43 #include <linux/ioctl.h>
46 #include <asm/system.h>
47 #include <asm/uaccess.h>
48 #include <asm/unaligned.h>
50 #include <net/bluetooth/bluetooth.h>
51 #include <net/bluetooth/hci_core.h>
53 #ifndef CONFIG_BT_HCI_SOCK_DEBUG
58 /* ----- HCI socket interface ----- */
60 static inline int hci_test_bit(int nr, void *addr)
62 return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31));
66 static struct hci_sec_filter hci_sec_filter = {
70 { 0x1000d9fe, 0x0000300c },
75 { 0xbe000006, 0x00000001, 0x0000, 0x00 },
77 { 0x00005200, 0x00000000, 0x0000, 0x00 },
79 { 0xaab00200, 0x2b402aaa, 0x0154, 0x00 },
81 { 0x000002be, 0x00000000, 0x0000, 0x00 },
82 /* OGF_STATUS_PARAM */
83 { 0x000000ea, 0x00000000, 0x0000, 0x00 }
87 static struct bt_sock_list hci_sk_list = {
88 .lock = RW_LOCK_UNLOCKED
91 /* Send frame to RAW socket */
92 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb)
95 struct hlist_node *node;
97 BT_DBG("hdev %p len %d", hdev, skb->len);
99 read_lock(&hci_sk_list.lock);
100 sk_for_each(sk, node, &hci_sk_list.head) {
101 struct hci_filter *flt;
102 struct sk_buff *nskb;
104 if (sk->sk_state != BT_BOUND || hci_pi(sk)->hdev != hdev)
107 /* Don't send frame to the socket it came from */
112 flt = &hci_pi(sk)->filter;
114 if (!test_bit((skb->pkt_type & HCI_FLT_TYPE_BITS), &flt->type_mask))
117 if (skb->pkt_type == HCI_EVENT_PKT) {
118 register int evt = (*(__u8 *)skb->data & HCI_FLT_EVENT_BITS);
120 if (!hci_test_bit(evt, &flt->event_mask))
123 if (flt->opcode && ((evt == HCI_EV_CMD_COMPLETE &&
124 flt->opcode != *(__u16 *)(skb->data + 3)) ||
125 (evt == HCI_EV_CMD_STATUS &&
126 flt->opcode != *(__u16 *)(skb->data + 4))))
130 if (!(nskb = skb_clone(skb, GFP_ATOMIC)))
133 /* Put type byte before the data */
134 memcpy(skb_push(nskb, 1), &nskb->pkt_type, 1);
136 if (sock_queue_rcv_skb(sk, nskb))
139 read_unlock(&hci_sk_list.lock);
142 static int hci_sock_release(struct socket *sock)
144 struct sock *sk = sock->sk;
145 struct hci_dev *hdev = hci_pi(sk)->hdev;
147 BT_DBG("sock %p sk %p", sock, sk);
152 bt_sock_unlink(&hci_sk_list, sk);
155 atomic_dec(&hdev->promisc);
161 skb_queue_purge(&sk->sk_receive_queue);
162 skb_queue_purge(&sk->sk_write_queue);
168 /* Ioctls that require bound socket */
169 static inline int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
171 struct hci_dev *hdev = hci_pi(sk)->hdev;
178 if (!capable(CAP_NET_ADMIN))
182 set_bit(HCI_RAW, &hdev->flags);
184 clear_bit(HCI_RAW, &hdev->flags);
189 return hci_get_conn_info(hdev, arg);
193 return hdev->ioctl(hdev, cmd, arg);
198 static int hci_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
200 struct sock *sk = sock->sk;
203 BT_DBG("cmd %x arg %lx", cmd, arg);
207 return hci_get_dev_list(arg);
210 return hci_get_dev_info(arg);
213 return hci_get_conn_list(arg);
216 if (!capable(CAP_NET_ADMIN))
218 return hci_dev_open(arg);
221 if (!capable(CAP_NET_ADMIN))
223 return hci_dev_close(arg);
226 if (!capable(CAP_NET_ADMIN))
228 return hci_dev_reset(arg);
231 if (!capable(CAP_NET_ADMIN))
233 return hci_dev_reset_stat(arg);
243 if (!capable(CAP_NET_ADMIN))
245 return hci_dev_cmd(cmd, arg);
248 return hci_inquiry(arg);
252 err = hci_sock_bound_ioctl(sk, cmd, arg);
258 static int hci_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
260 struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
261 struct sock *sk = sock->sk;
262 struct hci_dev *hdev = NULL;
265 BT_DBG("sock %p sk %p", sock, sk);
267 if (!haddr || haddr->hci_family != AF_BLUETOOTH)
272 if (hci_pi(sk)->hdev) {
277 if (haddr->hci_dev != HCI_DEV_NONE) {
278 if (!(hdev = hci_dev_get(haddr->hci_dev))) {
283 atomic_inc(&hdev->promisc);
286 hci_pi(sk)->hdev = hdev;
287 sk->sk_state = BT_BOUND;
294 static int hci_sock_getname(struct socket *sock, struct sockaddr *addr, int *addr_len, int peer)
296 struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
297 struct sock *sk = sock->sk;
299 BT_DBG("sock %p sk %p", sock, sk);
303 *addr_len = sizeof(*haddr);
304 haddr->hci_family = AF_BLUETOOTH;
305 haddr->hci_dev = hci_pi(sk)->hdev->id;
311 static inline void hci_sock_cmsg(struct sock *sk, struct msghdr *msg, struct sk_buff *skb)
313 __u32 mask = hci_pi(sk)->cmsg_mask;
315 if (mask & HCI_CMSG_DIR)
316 put_cmsg(msg, SOL_HCI, HCI_CMSG_DIR, sizeof(int), &bt_cb(skb)->incoming);
318 if (mask & HCI_CMSG_TSTAMP)
319 put_cmsg(msg, SOL_HCI, HCI_CMSG_TSTAMP, sizeof(skb->stamp), &skb->stamp);
322 static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
323 struct msghdr *msg, size_t len, int flags)
325 int noblock = flags & MSG_DONTWAIT;
326 struct sock *sk = sock->sk;
330 BT_DBG("sock %p, sk %p", sock, sk);
332 if (flags & (MSG_OOB))
335 if (sk->sk_state == BT_CLOSED)
338 if (!(skb = skb_recv_datagram(sk, flags, noblock, &err)))
341 msg->msg_namelen = 0;
345 msg->msg_flags |= MSG_TRUNC;
349 skb->h.raw = skb->data;
350 err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
352 hci_sock_cmsg(sk, msg, skb);
354 skb_free_datagram(sk, skb);
356 return err ? : copied;
359 static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
360 struct msghdr *msg, size_t len)
362 struct sock *sk = sock->sk;
363 struct hci_dev *hdev;
367 BT_DBG("sock %p sk %p", sock, sk);
369 if (msg->msg_flags & MSG_OOB)
372 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
375 if (len < 4 || len > HCI_MAX_FRAME_SIZE)
380 if (!(hdev = hci_pi(sk)->hdev)) {
385 if (!(skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err)))
388 if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
393 skb->pkt_type = *((unsigned char *) skb->data);
395 skb->dev = (void *) hdev;
397 if (skb->pkt_type == HCI_COMMAND_PKT) {
398 u16 opcode = __le16_to_cpu(get_unaligned((u16 *)skb->data));
399 u16 ogf = hci_opcode_ogf(opcode);
400 u16 ocf = hci_opcode_ocf(opcode);
402 if (((ogf > HCI_SFLT_MAX_OGF) ||
403 !hci_test_bit(ocf & HCI_FLT_OCF_BITS, &hci_sec_filter.ocf_mask[ogf])) &&
404 !capable(CAP_NET_RAW)) {
409 if (test_bit(HCI_RAW, &hdev->flags) || (ogf == OGF_VENDOR_CMD)) {
410 skb_queue_tail(&hdev->raw_q, skb);
413 skb_queue_tail(&hdev->cmd_q, skb);
417 if (!capable(CAP_NET_RAW)) {
422 skb_queue_tail(&hdev->raw_q, skb);
437 int hci_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int len)
439 struct hci_ufilter uf = { .opcode = 0 };
440 struct sock *sk = sock->sk;
441 int err = 0, opt = 0;
443 BT_DBG("sk %p, opt %d", sk, optname);
449 if (get_user(opt, (int __user *)optval)) {
455 hci_pi(sk)->cmsg_mask |= HCI_CMSG_DIR;
457 hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_DIR;
461 if (get_user(opt, (int __user *)optval)) {
467 hci_pi(sk)->cmsg_mask |= HCI_CMSG_TSTAMP;
469 hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_TSTAMP;
473 len = min_t(unsigned int, len, sizeof(uf));
474 if (copy_from_user(&uf, optval, len)) {
479 if (!capable(CAP_NET_RAW)) {
480 uf.type_mask &= hci_sec_filter.type_mask;
481 uf.event_mask[0] &= *((u32 *) hci_sec_filter.event_mask + 0);
482 uf.event_mask[1] &= *((u32 *) hci_sec_filter.event_mask + 1);
486 struct hci_filter *f = &hci_pi(sk)->filter;
488 f->type_mask = uf.type_mask;
489 f->opcode = uf.opcode;
490 *((u32 *) f->event_mask + 0) = uf.event_mask[0];
491 *((u32 *) f->event_mask + 1) = uf.event_mask[1];
504 int hci_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
506 struct hci_ufilter uf;
507 struct sock *sk = sock->sk;
510 if (get_user(len, optlen))
515 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_DIR)
520 if (put_user(opt, optval))
525 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_TSTAMP)
530 if (put_user(opt, optval))
536 struct hci_filter *f = &hci_pi(sk)->filter;
538 uf.type_mask = f->type_mask;
539 uf.opcode = f->opcode;
540 uf.event_mask[0] = *((u32 *) f->event_mask + 0);
541 uf.event_mask[1] = *((u32 *) f->event_mask + 1);
544 len = min_t(unsigned int, len, sizeof(uf));
545 if (copy_to_user(optval, &uf, len))
557 struct proto_ops hci_sock_ops = {
558 .family = PF_BLUETOOTH,
559 .owner = THIS_MODULE,
560 .release = hci_sock_release,
561 .bind = hci_sock_bind,
562 .getname = hci_sock_getname,
563 .sendmsg = hci_sock_sendmsg,
564 .recvmsg = hci_sock_recvmsg,
565 .ioctl = hci_sock_ioctl,
566 .poll = datagram_poll,
567 .listen = sock_no_listen,
568 .shutdown = sock_no_shutdown,
569 .setsockopt = hci_sock_setsockopt,
570 .getsockopt = hci_sock_getsockopt,
571 .connect = sock_no_connect,
572 .socketpair = sock_no_socketpair,
573 .accept = sock_no_accept,
577 static int hci_sock_create(struct socket *sock, int protocol)
581 BT_DBG("sock %p", sock);
583 if (sock->type != SOCK_RAW)
584 return -ESOCKTNOSUPPORT;
586 sock->ops = &hci_sock_ops;
588 sk = bt_sock_alloc(sock, protocol, sizeof(struct hci_pinfo), GFP_KERNEL);
592 sk_set_owner(sk, THIS_MODULE);
594 sock->state = SS_UNCONNECTED;
595 sk->sk_state = BT_OPEN;
597 bt_sock_link(&hci_sk_list, sk);
601 static int hci_sock_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
603 struct hci_dev *hdev = (struct hci_dev *) ptr;
604 struct hci_ev_si_device ev;
606 BT_DBG("hdev %s event %ld", hdev->name, event);
608 /* Send event to sockets */
610 ev.dev_id = hdev->id;
611 hci_si_event(NULL, HCI_EV_SI_DEVICE, sizeof(ev), &ev);
613 if (event == HCI_DEV_UNREG) {
615 struct hlist_node *node;
617 /* Detach sockets from device */
618 read_lock(&hci_sk_list.lock);
619 sk_for_each(sk, node, &hci_sk_list.head) {
621 if (hci_pi(sk)->hdev == hdev) {
622 hci_pi(sk)->hdev = NULL;
624 sk->sk_state = BT_OPEN;
625 sk->sk_state_change(sk);
631 read_unlock(&hci_sk_list.lock);
637 struct net_proto_family hci_sock_family_ops = {
638 .family = PF_BLUETOOTH,
639 .owner = THIS_MODULE,
640 .create = hci_sock_create,
643 struct notifier_block hci_sock_nblock = {
644 .notifier_call = hci_sock_dev_event
647 int __init hci_sock_init(void)
649 if (bt_sock_register(BTPROTO_HCI, &hci_sock_family_ops)) {
650 BT_ERR("HCI socket registration failed");
654 hci_register_notifier(&hci_sock_nblock);
656 BT_INFO("HCI socket layer initialized");
661 int __exit hci_sock_cleanup(void)
663 if (bt_sock_unregister(BTPROTO_HCI))
664 BT_ERR("HCI socket unregistration failed");
666 hci_unregister_notifier(&hci_sock_nblock);