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/capability.h>
32 #include <linux/errno.h>
33 #include <linux/kernel.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, 0x0000b00c },
75 { 0xbe000006, 0x00000001, 0x000000, 0x00 },
77 { 0x00005200, 0x00000000, 0x000000, 0x00 },
79 { 0xaab00200, 0x2b402aaa, 0x020154, 0x00 },
81 { 0x000002be, 0x00000000, 0x000000, 0x00 },
82 /* OGF_STATUS_PARAM */
83 { 0x000000ea, 0x00000000, 0x000000, 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((bt_cb(skb)->pkt_type == HCI_VENDOR_PKT) ?
115 0 : (bt_cb(skb)->pkt_type & HCI_FLT_TYPE_BITS), &flt->type_mask))
118 if (bt_cb(skb)->pkt_type == HCI_EVENT_PKT) {
119 register int evt = (*(__u8 *)skb->data & HCI_FLT_EVENT_BITS);
121 if (!hci_test_bit(evt, &flt->event_mask))
124 if (flt->opcode && ((evt == HCI_EV_CMD_COMPLETE &&
125 flt->opcode != *(__u16 *)(skb->data + 3)) ||
126 (evt == HCI_EV_CMD_STATUS &&
127 flt->opcode != *(__u16 *)(skb->data + 4))))
131 if (!(nskb = skb_clone(skb, GFP_ATOMIC)))
134 /* Put type byte before the data */
135 memcpy(skb_push(nskb, 1), &bt_cb(nskb)->pkt_type, 1);
137 if (sock_queue_rcv_skb(sk, nskb))
140 read_unlock(&hci_sk_list.lock);
143 static int hci_sock_release(struct socket *sock)
145 struct sock *sk = sock->sk;
146 struct hci_dev *hdev;
148 BT_DBG("sock %p sk %p", sock, sk);
153 hdev = hci_pi(sk)->hdev;
155 bt_sock_unlink(&hci_sk_list, sk);
158 atomic_dec(&hdev->promisc);
164 skb_queue_purge(&sk->sk_receive_queue);
165 skb_queue_purge(&sk->sk_write_queue);
171 /* Ioctls that require bound socket */
172 static inline int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
174 struct hci_dev *hdev = hci_pi(sk)->hdev;
181 if (!capable(CAP_NET_ADMIN))
184 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
188 set_bit(HCI_RAW, &hdev->flags);
190 clear_bit(HCI_RAW, &hdev->flags);
195 if (!capable(CAP_NET_ADMIN))
199 set_bit(HCI_SECMGR, &hdev->flags);
201 clear_bit(HCI_SECMGR, &hdev->flags);
206 return hci_get_conn_info(hdev, (void __user *)arg);
210 return hdev->ioctl(hdev, cmd, arg);
215 static int hci_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
217 struct sock *sk = sock->sk;
218 void __user *argp = (void __user *)arg;
221 BT_DBG("cmd %x arg %lx", cmd, arg);
225 return hci_get_dev_list(argp);
228 return hci_get_dev_info(argp);
231 return hci_get_conn_list(argp);
234 if (!capable(CAP_NET_ADMIN))
236 return hci_dev_open(arg);
239 if (!capable(CAP_NET_ADMIN))
241 return hci_dev_close(arg);
244 if (!capable(CAP_NET_ADMIN))
246 return hci_dev_reset(arg);
249 if (!capable(CAP_NET_ADMIN))
251 return hci_dev_reset_stat(arg);
261 if (!capable(CAP_NET_ADMIN))
263 return hci_dev_cmd(cmd, argp);
266 return hci_inquiry(argp);
270 err = hci_sock_bound_ioctl(sk, cmd, arg);
276 static int hci_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
278 struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
279 struct sock *sk = sock->sk;
280 struct hci_dev *hdev = NULL;
283 BT_DBG("sock %p sk %p", sock, sk);
285 if (!haddr || haddr->hci_family != AF_BLUETOOTH)
290 if (hci_pi(sk)->hdev) {
295 if (haddr->hci_dev != HCI_DEV_NONE) {
296 if (!(hdev = hci_dev_get(haddr->hci_dev))) {
301 atomic_inc(&hdev->promisc);
304 hci_pi(sk)->hdev = hdev;
305 sk->sk_state = BT_BOUND;
312 static int hci_sock_getname(struct socket *sock, struct sockaddr *addr, int *addr_len, int peer)
314 struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
315 struct sock *sk = sock->sk;
316 struct hci_dev *hdev = hci_pi(sk)->hdev;
318 BT_DBG("sock %p sk %p", sock, sk);
325 *addr_len = sizeof(*haddr);
326 haddr->hci_family = AF_BLUETOOTH;
327 haddr->hci_dev = hdev->id;
333 static inline void hci_sock_cmsg(struct sock *sk, struct msghdr *msg, struct sk_buff *skb)
335 __u32 mask = hci_pi(sk)->cmsg_mask;
337 if (mask & HCI_CMSG_DIR) {
338 int incoming = bt_cb(skb)->incoming;
339 put_cmsg(msg, SOL_HCI, HCI_CMSG_DIR, sizeof(incoming), &incoming);
342 if (mask & HCI_CMSG_TSTAMP) {
345 skb_get_timestamp(skb, &tv);
346 put_cmsg(msg, SOL_HCI, HCI_CMSG_TSTAMP, sizeof(tv), &tv);
350 static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
351 struct msghdr *msg, size_t len, int flags)
353 int noblock = flags & MSG_DONTWAIT;
354 struct sock *sk = sock->sk;
358 BT_DBG("sock %p, sk %p", sock, sk);
360 if (flags & (MSG_OOB))
363 if (sk->sk_state == BT_CLOSED)
366 if (!(skb = skb_recv_datagram(sk, flags, noblock, &err)))
369 msg->msg_namelen = 0;
373 msg->msg_flags |= MSG_TRUNC;
377 skb->h.raw = skb->data;
378 err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
380 hci_sock_cmsg(sk, msg, skb);
382 skb_free_datagram(sk, skb);
384 return err ? : copied;
387 static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
388 struct msghdr *msg, size_t len)
390 struct sock *sk = sock->sk;
391 struct hci_dev *hdev;
395 BT_DBG("sock %p sk %p", sock, sk);
397 if (msg->msg_flags & MSG_OOB)
400 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
403 if (len < 4 || len > HCI_MAX_FRAME_SIZE)
408 if (!(hdev = hci_pi(sk)->hdev)) {
413 if (!(skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err)))
416 if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
421 bt_cb(skb)->pkt_type = *((unsigned char *) skb->data);
423 skb->dev = (void *) hdev;
425 if (bt_cb(skb)->pkt_type == HCI_COMMAND_PKT) {
426 u16 opcode = __le16_to_cpu(get_unaligned((__le16 *) skb->data));
427 u16 ogf = hci_opcode_ogf(opcode);
428 u16 ocf = hci_opcode_ocf(opcode);
430 if (((ogf > HCI_SFLT_MAX_OGF) ||
431 !hci_test_bit(ocf & HCI_FLT_OCF_BITS, &hci_sec_filter.ocf_mask[ogf])) &&
432 !capable(CAP_NET_RAW)) {
437 if (test_bit(HCI_RAW, &hdev->flags) || (ogf == OGF_VENDOR_CMD)) {
438 skb_queue_tail(&hdev->raw_q, skb);
441 skb_queue_tail(&hdev->cmd_q, skb);
445 if (!capable(CAP_NET_RAW)) {
450 skb_queue_tail(&hdev->raw_q, skb);
465 static int hci_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int len)
467 struct hci_ufilter uf = { .opcode = 0 };
468 struct sock *sk = sock->sk;
469 int err = 0, opt = 0;
471 BT_DBG("sk %p, opt %d", sk, optname);
477 if (get_user(opt, (int __user *)optval)) {
483 hci_pi(sk)->cmsg_mask |= HCI_CMSG_DIR;
485 hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_DIR;
489 if (get_user(opt, (int __user *)optval)) {
495 hci_pi(sk)->cmsg_mask |= HCI_CMSG_TSTAMP;
497 hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_TSTAMP;
501 len = min_t(unsigned int, len, sizeof(uf));
502 if (copy_from_user(&uf, optval, len)) {
507 if (!capable(CAP_NET_RAW)) {
508 uf.type_mask &= hci_sec_filter.type_mask;
509 uf.event_mask[0] &= *((u32 *) hci_sec_filter.event_mask + 0);
510 uf.event_mask[1] &= *((u32 *) hci_sec_filter.event_mask + 1);
514 struct hci_filter *f = &hci_pi(sk)->filter;
516 f->type_mask = uf.type_mask;
517 f->opcode = uf.opcode;
518 *((u32 *) f->event_mask + 0) = uf.event_mask[0];
519 *((u32 *) f->event_mask + 1) = uf.event_mask[1];
532 static int hci_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
534 struct hci_ufilter uf;
535 struct sock *sk = sock->sk;
538 if (get_user(len, optlen))
543 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_DIR)
548 if (put_user(opt, optval))
553 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_TSTAMP)
558 if (put_user(opt, optval))
564 struct hci_filter *f = &hci_pi(sk)->filter;
566 uf.type_mask = f->type_mask;
567 uf.opcode = f->opcode;
568 uf.event_mask[0] = *((u32 *) f->event_mask + 0);
569 uf.event_mask[1] = *((u32 *) f->event_mask + 1);
572 len = min_t(unsigned int, len, sizeof(uf));
573 if (copy_to_user(optval, &uf, len))
585 static const struct proto_ops hci_sock_ops = {
586 .family = PF_BLUETOOTH,
587 .owner = THIS_MODULE,
588 .release = hci_sock_release,
589 .bind = hci_sock_bind,
590 .getname = hci_sock_getname,
591 .sendmsg = hci_sock_sendmsg,
592 .recvmsg = hci_sock_recvmsg,
593 .ioctl = hci_sock_ioctl,
594 .poll = datagram_poll,
595 .listen = sock_no_listen,
596 .shutdown = sock_no_shutdown,
597 .setsockopt = hci_sock_setsockopt,
598 .getsockopt = hci_sock_getsockopt,
599 .connect = sock_no_connect,
600 .socketpair = sock_no_socketpair,
601 .accept = sock_no_accept,
605 static struct proto hci_sk_proto = {
607 .owner = THIS_MODULE,
608 .obj_size = sizeof(struct hci_pinfo)
611 static int hci_sock_create(struct socket *sock, int protocol)
615 BT_DBG("sock %p", sock);
617 if (sock->type != SOCK_RAW)
618 return -ESOCKTNOSUPPORT;
620 sock->ops = &hci_sock_ops;
622 sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, &hci_sk_proto, 1);
626 sock_init_data(sock, sk);
628 sock_reset_flag(sk, SOCK_ZAPPED);
630 sk->sk_protocol = protocol;
632 sock->state = SS_UNCONNECTED;
633 sk->sk_state = BT_OPEN;
635 bt_sock_link(&hci_sk_list, sk);
639 static int hci_sock_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
641 struct hci_dev *hdev = (struct hci_dev *) ptr;
642 struct hci_ev_si_device ev;
644 BT_DBG("hdev %s event %ld", hdev->name, event);
646 /* Send event to sockets */
648 ev.dev_id = hdev->id;
649 hci_si_event(NULL, HCI_EV_SI_DEVICE, sizeof(ev), &ev);
651 if (event == HCI_DEV_UNREG) {
653 struct hlist_node *node;
655 /* Detach sockets from device */
656 read_lock(&hci_sk_list.lock);
657 sk_for_each(sk, node, &hci_sk_list.head) {
659 if (hci_pi(sk)->hdev == hdev) {
660 hci_pi(sk)->hdev = NULL;
662 sk->sk_state = BT_OPEN;
663 sk->sk_state_change(sk);
669 read_unlock(&hci_sk_list.lock);
675 static struct net_proto_family hci_sock_family_ops = {
676 .family = PF_BLUETOOTH,
677 .owner = THIS_MODULE,
678 .create = hci_sock_create,
681 static struct notifier_block hci_sock_nblock = {
682 .notifier_call = hci_sock_dev_event
685 int __init hci_sock_init(void)
689 err = proto_register(&hci_sk_proto, 0);
693 err = bt_sock_register(BTPROTO_HCI, &hci_sock_family_ops);
697 hci_register_notifier(&hci_sock_nblock);
699 BT_INFO("HCI socket layer initialized");
704 BT_ERR("HCI socket registration failed");
705 proto_unregister(&hci_sk_proto);
709 int __exit hci_sock_cleanup(void)
711 if (bt_sock_unregister(BTPROTO_HCI) < 0)
712 BT_ERR("HCI socket unregistration failed");
714 hci_unregister_notifier(&hci_sock_nblock);
716 proto_unregister(&hci_sk_proto);