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_VENDOR_PKT) ?
115 0 : (skb->pkt_type & HCI_FLT_TYPE_BITS), &flt->type_mask))
118 if (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), &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 = hci_pi(sk)->hdev;
148 BT_DBG("sock %p sk %p", sock, sk);
153 bt_sock_unlink(&hci_sk_list, sk);
156 atomic_dec(&hdev->promisc);
162 skb_queue_purge(&sk->sk_receive_queue);
163 skb_queue_purge(&sk->sk_write_queue);
169 /* Ioctls that require bound socket */
170 static inline int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
172 struct hci_dev *hdev = hci_pi(sk)->hdev;
179 if (!capable(CAP_NET_ADMIN))
183 set_bit(HCI_RAW, &hdev->flags);
185 clear_bit(HCI_RAW, &hdev->flags);
190 if (!capable(CAP_NET_ADMIN))
194 set_bit(HCI_SECMGR, &hdev->flags);
196 clear_bit(HCI_SECMGR, &hdev->flags);
201 return hci_get_conn_info(hdev, (void __user *)arg);
205 return hdev->ioctl(hdev, cmd, arg);
210 static int hci_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
212 struct sock *sk = sock->sk;
213 void __user *argp = (void __user *)arg;
216 BT_DBG("cmd %x arg %lx", cmd, arg);
220 return hci_get_dev_list(argp);
223 return hci_get_dev_info(argp);
226 return hci_get_conn_list(argp);
229 if (!capable(CAP_NET_ADMIN))
231 return hci_dev_open(arg);
234 if (!capable(CAP_NET_ADMIN))
236 return hci_dev_close(arg);
239 if (!capable(CAP_NET_ADMIN))
241 return hci_dev_reset(arg);
244 if (!capable(CAP_NET_ADMIN))
246 return hci_dev_reset_stat(arg);
256 if (!capable(CAP_NET_ADMIN))
258 return hci_dev_cmd(cmd, argp);
261 return hci_inquiry(argp);
265 err = hci_sock_bound_ioctl(sk, cmd, arg);
271 static int hci_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
273 struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
274 struct sock *sk = sock->sk;
275 struct hci_dev *hdev = NULL;
278 BT_DBG("sock %p sk %p", sock, sk);
280 if (!haddr || haddr->hci_family != AF_BLUETOOTH)
285 if (hci_pi(sk)->hdev) {
290 if (haddr->hci_dev != HCI_DEV_NONE) {
291 if (!(hdev = hci_dev_get(haddr->hci_dev))) {
296 atomic_inc(&hdev->promisc);
299 hci_pi(sk)->hdev = hdev;
300 sk->sk_state = BT_BOUND;
307 static int hci_sock_getname(struct socket *sock, struct sockaddr *addr, int *addr_len, int peer)
309 struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
310 struct sock *sk = sock->sk;
312 BT_DBG("sock %p sk %p", sock, sk);
316 *addr_len = sizeof(*haddr);
317 haddr->hci_family = AF_BLUETOOTH;
318 haddr->hci_dev = hci_pi(sk)->hdev->id;
324 static inline void hci_sock_cmsg(struct sock *sk, struct msghdr *msg, struct sk_buff *skb)
326 __u32 mask = hci_pi(sk)->cmsg_mask;
328 if (mask & HCI_CMSG_DIR)
329 put_cmsg(msg, SOL_HCI, HCI_CMSG_DIR, sizeof(int), &bt_cb(skb)->incoming);
331 if (mask & HCI_CMSG_TSTAMP)
332 put_cmsg(msg, SOL_HCI, HCI_CMSG_TSTAMP, sizeof(skb->stamp), &skb->stamp);
335 static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
336 struct msghdr *msg, size_t len, int flags)
338 int noblock = flags & MSG_DONTWAIT;
339 struct sock *sk = sock->sk;
343 BT_DBG("sock %p, sk %p", sock, sk);
345 if (flags & (MSG_OOB))
348 if (sk->sk_state == BT_CLOSED)
351 if (!(skb = skb_recv_datagram(sk, flags, noblock, &err)))
354 msg->msg_namelen = 0;
358 msg->msg_flags |= MSG_TRUNC;
362 skb->h.raw = skb->data;
363 err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
365 hci_sock_cmsg(sk, msg, skb);
367 skb_free_datagram(sk, skb);
369 return err ? : copied;
372 static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
373 struct msghdr *msg, size_t len)
375 struct sock *sk = sock->sk;
376 struct hci_dev *hdev;
380 BT_DBG("sock %p sk %p", sock, sk);
382 if (msg->msg_flags & MSG_OOB)
385 if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
388 if (len < 4 || len > HCI_MAX_FRAME_SIZE)
393 if (!(hdev = hci_pi(sk)->hdev)) {
398 if (!(skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err)))
401 if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
406 skb->pkt_type = *((unsigned char *) skb->data);
408 skb->dev = (void *) hdev;
410 if (skb->pkt_type == HCI_COMMAND_PKT) {
411 u16 opcode = __le16_to_cpu(get_unaligned((u16 *)skb->data));
412 u16 ogf = hci_opcode_ogf(opcode);
413 u16 ocf = hci_opcode_ocf(opcode);
415 if (((ogf > HCI_SFLT_MAX_OGF) ||
416 !hci_test_bit(ocf & HCI_FLT_OCF_BITS, &hci_sec_filter.ocf_mask[ogf])) &&
417 !capable(CAP_NET_RAW)) {
422 if (test_bit(HCI_RAW, &hdev->flags) || (ogf == OGF_VENDOR_CMD)) {
423 skb_queue_tail(&hdev->raw_q, skb);
426 skb_queue_tail(&hdev->cmd_q, skb);
430 if (!capable(CAP_NET_RAW)) {
435 skb_queue_tail(&hdev->raw_q, skb);
450 int hci_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int len)
452 struct hci_ufilter uf = { .opcode = 0 };
453 struct sock *sk = sock->sk;
454 int err = 0, opt = 0;
456 BT_DBG("sk %p, opt %d", sk, optname);
462 if (get_user(opt, (int __user *)optval)) {
468 hci_pi(sk)->cmsg_mask |= HCI_CMSG_DIR;
470 hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_DIR;
474 if (get_user(opt, (int __user *)optval)) {
480 hci_pi(sk)->cmsg_mask |= HCI_CMSG_TSTAMP;
482 hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_TSTAMP;
486 len = min_t(unsigned int, len, sizeof(uf));
487 if (copy_from_user(&uf, optval, len)) {
492 if (!capable(CAP_NET_RAW)) {
493 uf.type_mask &= hci_sec_filter.type_mask;
494 uf.event_mask[0] &= *((u32 *) hci_sec_filter.event_mask + 0);
495 uf.event_mask[1] &= *((u32 *) hci_sec_filter.event_mask + 1);
499 struct hci_filter *f = &hci_pi(sk)->filter;
501 f->type_mask = uf.type_mask;
502 f->opcode = uf.opcode;
503 *((u32 *) f->event_mask + 0) = uf.event_mask[0];
504 *((u32 *) f->event_mask + 1) = uf.event_mask[1];
517 int hci_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
519 struct hci_ufilter uf;
520 struct sock *sk = sock->sk;
523 if (get_user(len, optlen))
528 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_DIR)
533 if (put_user(opt, optval))
538 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_TSTAMP)
543 if (put_user(opt, optval))
549 struct hci_filter *f = &hci_pi(sk)->filter;
551 uf.type_mask = f->type_mask;
552 uf.opcode = f->opcode;
553 uf.event_mask[0] = *((u32 *) f->event_mask + 0);
554 uf.event_mask[1] = *((u32 *) f->event_mask + 1);
557 len = min_t(unsigned int, len, sizeof(uf));
558 if (copy_to_user(optval, &uf, len))
570 struct proto_ops hci_sock_ops = {
571 .family = PF_BLUETOOTH,
572 .owner = THIS_MODULE,
573 .release = hci_sock_release,
574 .bind = hci_sock_bind,
575 .getname = hci_sock_getname,
576 .sendmsg = hci_sock_sendmsg,
577 .recvmsg = hci_sock_recvmsg,
578 .ioctl = hci_sock_ioctl,
579 .poll = datagram_poll,
580 .listen = sock_no_listen,
581 .shutdown = sock_no_shutdown,
582 .setsockopt = hci_sock_setsockopt,
583 .getsockopt = hci_sock_getsockopt,
584 .connect = sock_no_connect,
585 .socketpair = sock_no_socketpair,
586 .accept = sock_no_accept,
590 static int hci_sock_create(struct socket *sock, int protocol)
594 BT_DBG("sock %p", sock);
596 if (sock->type != SOCK_RAW)
597 return -ESOCKTNOSUPPORT;
599 sock->ops = &hci_sock_ops;
601 sk = bt_sock_alloc(sock, protocol, sizeof(struct hci_pinfo), GFP_KERNEL);
605 sk_set_owner(sk, THIS_MODULE);
607 sock->state = SS_UNCONNECTED;
608 sk->sk_state = BT_OPEN;
610 bt_sock_link(&hci_sk_list, sk);
614 static int hci_sock_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
616 struct hci_dev *hdev = (struct hci_dev *) ptr;
617 struct hci_ev_si_device ev;
619 BT_DBG("hdev %s event %ld", hdev->name, event);
621 /* Send event to sockets */
623 ev.dev_id = hdev->id;
624 hci_si_event(NULL, HCI_EV_SI_DEVICE, sizeof(ev), &ev);
626 if (event == HCI_DEV_UNREG) {
628 struct hlist_node *node;
630 /* Detach sockets from device */
631 read_lock(&hci_sk_list.lock);
632 sk_for_each(sk, node, &hci_sk_list.head) {
634 if (hci_pi(sk)->hdev == hdev) {
635 hci_pi(sk)->hdev = NULL;
637 sk->sk_state = BT_OPEN;
638 sk->sk_state_change(sk);
644 read_unlock(&hci_sk_list.lock);
650 struct net_proto_family hci_sock_family_ops = {
651 .family = PF_BLUETOOTH,
652 .owner = THIS_MODULE,
653 .create = hci_sock_create,
656 struct notifier_block hci_sock_nblock = {
657 .notifier_call = hci_sock_dev_event
660 int __init hci_sock_init(void)
662 if (bt_sock_register(BTPROTO_HCI, &hci_sock_family_ops)) {
663 BT_ERR("HCI socket registration failed");
667 hci_register_notifier(&hci_sock_nblock);
669 BT_INFO("HCI socket layer initialized");
674 int __exit hci_sock_cleanup(void)
676 if (bt_sock_unregister(BTPROTO_HCI))
677 BT_ERR("HCI socket unregistration failed");
679 hci_unregister_notifier(&hci_sock_nblock);