Lines Matching refs:sk
45 #define hci_pi(sk) ((struct hci_pinfo *) sk) argument
56 void hci_sock_set_flag(struct sock *sk, int nr) in hci_sock_set_flag() argument
58 set_bit(nr, &hci_pi(sk)->flags); in hci_sock_set_flag()
61 void hci_sock_clear_flag(struct sock *sk, int nr) in hci_sock_clear_flag() argument
63 clear_bit(nr, &hci_pi(sk)->flags); in hci_sock_clear_flag()
66 int hci_sock_test_flag(struct sock *sk, int nr) in hci_sock_test_flag() argument
68 return test_bit(nr, &hci_pi(sk)->flags); in hci_sock_test_flag()
71 unsigned short hci_sock_get_channel(struct sock *sk) in hci_sock_get_channel() argument
73 return hci_pi(sk)->channel; in hci_sock_get_channel()
115 static bool is_filtered_packet(struct sock *sk, struct sk_buff *skb) in is_filtered_packet() argument
121 flt = &hci_pi(sk)->filter; in is_filtered_packet()
155 struct sock *sk; in hci_send_to_sock() local
162 sk_for_each(sk, &hci_sk_list.head) { in hci_send_to_sock()
165 if (sk->sk_state != BT_BOUND || hci_pi(sk)->hdev != hdev) in hci_send_to_sock()
169 if (skb->sk == sk) in hci_send_to_sock()
172 if (hci_pi(sk)->channel == HCI_CHANNEL_RAW) { in hci_send_to_sock()
178 if (is_filtered_packet(sk, skb)) in hci_send_to_sock()
180 } else if (hci_pi(sk)->channel == HCI_CHANNEL_USER) { in hci_send_to_sock()
206 if (sock_queue_rcv_skb(sk, nskb)) in hci_send_to_sock()
219 struct sock *sk; in hci_send_to_channel() local
225 sk_for_each(sk, &hci_sk_list.head) { in hci_send_to_channel()
229 if (!hci_sock_test_flag(sk, flag)) in hci_send_to_channel()
233 if (sk == skip_sk) in hci_send_to_channel()
236 if (sk->sk_state != BT_BOUND) in hci_send_to_channel()
239 if (hci_pi(sk)->channel != channel) in hci_send_to_channel()
246 if (sock_queue_rcv_skb(sk, nskb)) in hci_send_to_channel()
386 static void send_monitor_replay(struct sock *sk) in send_monitor_replay() argument
399 if (sock_queue_rcv_skb(sk, skb)) in send_monitor_replay()
409 if (sock_queue_rcv_skb(sk, skb)) in send_monitor_replay()
420 if (sock_queue_rcv_skb(sk, skb)) in send_monitor_replay()
481 struct sock *sk; in hci_sock_dev_event() local
485 sk_for_each(sk, &hci_sk_list.head) { in hci_sock_dev_event()
486 bh_lock_sock_nested(sk); in hci_sock_dev_event()
487 if (hci_pi(sk)->hdev == hdev) { in hci_sock_dev_event()
488 hci_pi(sk)->hdev = NULL; in hci_sock_dev_event()
489 sk->sk_err = EPIPE; in hci_sock_dev_event()
490 sk->sk_state = BT_OPEN; in hci_sock_dev_event()
491 sk->sk_state_change(sk); in hci_sock_dev_event()
495 bh_unlock_sock(sk); in hci_sock_dev_event()
553 struct sock *sk = sock->sk; in hci_sock_release() local
556 BT_DBG("sock %p sk %p", sock, sk); in hci_sock_release()
558 if (!sk) in hci_sock_release()
561 hdev = hci_pi(sk)->hdev; in hci_sock_release()
563 if (hci_pi(sk)->channel == HCI_CHANNEL_MONITOR) in hci_sock_release()
566 bt_sock_unlink(&hci_sk_list, sk); in hci_sock_release()
569 if (hci_pi(sk)->channel == HCI_CHANNEL_USER) { in hci_sock_release()
588 sock_orphan(sk); in hci_sock_release()
590 skb_queue_purge(&sk->sk_receive_queue); in hci_sock_release()
591 skb_queue_purge(&sk->sk_write_queue); in hci_sock_release()
593 sock_put(sk); in hci_sock_release()
632 static int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd, in hci_sock_bound_ioctl() argument
635 struct hci_dev *hdev = hci_pi(sk)->hdev; in hci_sock_bound_ioctl()
679 struct sock *sk = sock->sk; in hci_sock_ioctl() local
684 lock_sock(sk); in hci_sock_ioctl()
686 if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) { in hci_sock_ioctl()
691 release_sock(sk); in hci_sock_ioctl()
739 lock_sock(sk); in hci_sock_ioctl()
741 err = hci_sock_bound_ioctl(sk, cmd, arg); in hci_sock_ioctl()
744 release_sock(sk); in hci_sock_ioctl()
752 struct sock *sk = sock->sk; in hci_sock_bind() local
756 BT_DBG("sock %p sk %p", sock, sk); in hci_sock_bind()
768 lock_sock(sk); in hci_sock_bind()
770 if (sk->sk_state == BT_BOUND) { in hci_sock_bind()
777 if (hci_pi(sk)->hdev) { in hci_sock_bind()
792 hci_pi(sk)->hdev = hdev; in hci_sock_bind()
796 if (hci_pi(sk)->hdev) { in hci_sock_bind()
856 hci_pi(sk)->hdev = hdev; in hci_sock_bind()
873 hci_sock_set_flag(sk, HCI_SOCK_TRUSTED); in hci_sock_bind()
875 send_monitor_replay(sk); in hci_sock_bind()
897 hci_sock_set_flag(sk, HCI_SOCK_TRUSTED); in hci_sock_bind()
910 hci_sock_set_flag(sk, HCI_MGMT_INDEX_EVENTS); in hci_sock_bind()
911 hci_sock_set_flag(sk, HCI_MGMT_UNCONF_INDEX_EVENTS); in hci_sock_bind()
912 hci_sock_set_flag(sk, HCI_MGMT_GENERIC_EVENTS); in hci_sock_bind()
918 hci_pi(sk)->channel = haddr.hci_channel; in hci_sock_bind()
919 sk->sk_state = BT_BOUND; in hci_sock_bind()
922 release_sock(sk); in hci_sock_bind()
930 struct sock *sk = sock->sk; in hci_sock_getname() local
934 BT_DBG("sock %p sk %p", sock, sk); in hci_sock_getname()
939 lock_sock(sk); in hci_sock_getname()
941 hdev = hci_pi(sk)->hdev; in hci_sock_getname()
950 haddr->hci_channel= hci_pi(sk)->channel; in hci_sock_getname()
953 release_sock(sk); in hci_sock_getname()
957 static void hci_sock_cmsg(struct sock *sk, struct msghdr *msg, in hci_sock_cmsg() argument
960 __u32 mask = hci_pi(sk)->cmsg_mask; in hci_sock_cmsg()
998 struct sock *sk = sock->sk; in hci_sock_recvmsg() local
1002 BT_DBG("sock %p, sk %p", sock, sk); in hci_sock_recvmsg()
1007 if (sk->sk_state == BT_CLOSED) in hci_sock_recvmsg()
1010 skb = skb_recv_datagram(sk, flags, noblock, &err); in hci_sock_recvmsg()
1023 switch (hci_pi(sk)->channel) { in hci_sock_recvmsg()
1025 hci_sock_cmsg(sk, msg, skb); in hci_sock_recvmsg()
1029 sock_recv_timestamp(msg, sk, skb); in hci_sock_recvmsg()
1032 if (hci_mgmt_chan_find(hci_pi(sk)->channel)) in hci_sock_recvmsg()
1033 sock_recv_timestamp(msg, sk, skb); in hci_sock_recvmsg()
1037 skb_free_datagram(sk, skb); in hci_sock_recvmsg()
1042 static int hci_mgmt_cmd(struct hci_mgmt_chan *chan, struct sock *sk, in hci_mgmt_cmd() argument
1081 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1088 if (!hci_sock_test_flag(sk, HCI_SOCK_TRUSTED) && in hci_mgmt_cmd()
1090 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1098 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1106 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1113 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1121 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1129 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1135 chan->hdev_init(sk, hdev); in hci_mgmt_cmd()
1139 err = handler->func(sk, hdev, cp, len); in hci_mgmt_cmd()
1156 struct sock *sk = sock->sk; in hci_sock_sendmsg() local
1162 BT_DBG("sock %p sk %p", sock, sk); in hci_sock_sendmsg()
1173 lock_sock(sk); in hci_sock_sendmsg()
1175 switch (hci_pi(sk)->channel) { in hci_sock_sendmsg()
1184 chan = __hci_mgmt_chan_find(hci_pi(sk)->channel); in hci_sock_sendmsg()
1186 err = hci_mgmt_cmd(chan, sk, msg, len); in hci_sock_sendmsg()
1194 hdev = hci_pi(sk)->hdev; in hci_sock_sendmsg()
1205 skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err); in hci_sock_sendmsg()
1217 if (hci_pi(sk)->channel == HCI_CHANNEL_USER) { in hci_sock_sendmsg()
1276 release_sock(sk); in hci_sock_sendmsg()
1288 struct sock *sk = sock->sk; in hci_sock_setsockopt() local
1291 BT_DBG("sk %p, opt %d", sk, optname); in hci_sock_setsockopt()
1293 lock_sock(sk); in hci_sock_setsockopt()
1295 if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) { in hci_sock_setsockopt()
1308 hci_pi(sk)->cmsg_mask |= HCI_CMSG_DIR; in hci_sock_setsockopt()
1310 hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_DIR; in hci_sock_setsockopt()
1320 hci_pi(sk)->cmsg_mask |= HCI_CMSG_TSTAMP; in hci_sock_setsockopt()
1322 hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_TSTAMP; in hci_sock_setsockopt()
1327 struct hci_filter *f = &hci_pi(sk)->filter; in hci_sock_setsockopt()
1348 struct hci_filter *f = &hci_pi(sk)->filter; in hci_sock_setsockopt()
1363 release_sock(sk); in hci_sock_setsockopt()
1371 struct sock *sk = sock->sk; in hci_sock_getsockopt() local
1374 BT_DBG("sk %p, opt %d", sk, optname); in hci_sock_getsockopt()
1379 lock_sock(sk); in hci_sock_getsockopt()
1381 if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) { in hci_sock_getsockopt()
1388 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_DIR) in hci_sock_getsockopt()
1398 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_TSTAMP) in hci_sock_getsockopt()
1409 struct hci_filter *f = &hci_pi(sk)->filter; in hci_sock_getsockopt()
1429 release_sock(sk); in hci_sock_getsockopt()
1462 struct sock *sk; in hci_sock_create() local
1471 sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &hci_sk_proto, kern); in hci_sock_create()
1472 if (!sk) in hci_sock_create()
1475 sock_init_data(sock, sk); in hci_sock_create()
1477 sock_reset_flag(sk, SOCK_ZAPPED); in hci_sock_create()
1479 sk->sk_protocol = protocol; in hci_sock_create()
1482 sk->sk_state = BT_OPEN; in hci_sock_create()
1484 bt_sock_link(&hci_sk_list, sk); in hci_sock_create()