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()
158 struct sock *sk; in hci_send_to_sock() local
165 sk_for_each(sk, &hci_sk_list.head) { in hci_send_to_sock()
168 if (sk->sk_state != BT_BOUND || hci_pi(sk)->hdev != hdev) in hci_send_to_sock()
172 if (skb->sk == sk) in hci_send_to_sock()
175 if (hci_pi(sk)->channel == HCI_CHANNEL_RAW) { in hci_send_to_sock()
176 if (is_filtered_packet(sk, skb)) in hci_send_to_sock()
178 } else if (hci_pi(sk)->channel == HCI_CHANNEL_USER) { in hci_send_to_sock()
204 if (sock_queue_rcv_skb(sk, nskb)) in hci_send_to_sock()
217 struct sock *sk; in hci_send_to_channel() local
223 sk_for_each(sk, &hci_sk_list.head) { in hci_send_to_channel()
227 if (!hci_sock_test_flag(sk, flag)) in hci_send_to_channel()
231 if (sk == skip_sk) in hci_send_to_channel()
234 if (sk->sk_state != BT_BOUND) in hci_send_to_channel()
237 if (hci_pi(sk)->channel != channel) in hci_send_to_channel()
244 if (sock_queue_rcv_skb(sk, nskb)) in hci_send_to_channel()
346 static void send_monitor_replay(struct sock *sk) in send_monitor_replay() argument
359 if (sock_queue_rcv_skb(sk, skb)) in send_monitor_replay()
417 struct sock *sk; in hci_sock_dev_event() local
421 sk_for_each(sk, &hci_sk_list.head) { in hci_sock_dev_event()
422 bh_lock_sock_nested(sk); in hci_sock_dev_event()
423 if (hci_pi(sk)->hdev == hdev) { in hci_sock_dev_event()
424 hci_pi(sk)->hdev = NULL; in hci_sock_dev_event()
425 sk->sk_err = EPIPE; in hci_sock_dev_event()
426 sk->sk_state = BT_OPEN; in hci_sock_dev_event()
427 sk->sk_state_change(sk); in hci_sock_dev_event()
431 bh_unlock_sock(sk); in hci_sock_dev_event()
489 struct sock *sk = sock->sk; in hci_sock_release() local
492 BT_DBG("sock %p sk %p", sock, sk); in hci_sock_release()
494 if (!sk) in hci_sock_release()
497 hdev = hci_pi(sk)->hdev; in hci_sock_release()
499 if (hci_pi(sk)->channel == HCI_CHANNEL_MONITOR) in hci_sock_release()
502 bt_sock_unlink(&hci_sk_list, sk); in hci_sock_release()
505 if (hci_pi(sk)->channel == HCI_CHANNEL_USER) { in hci_sock_release()
515 sock_orphan(sk); in hci_sock_release()
517 skb_queue_purge(&sk->sk_receive_queue); in hci_sock_release()
518 skb_queue_purge(&sk->sk_write_queue); in hci_sock_release()
520 sock_put(sk); in hci_sock_release()
559 static int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd, in hci_sock_bound_ioctl() argument
562 struct hci_dev *hdev = hci_pi(sk)->hdev; in hci_sock_bound_ioctl()
606 struct sock *sk = sock->sk; in hci_sock_ioctl() local
611 lock_sock(sk); in hci_sock_ioctl()
613 if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) { in hci_sock_ioctl()
618 release_sock(sk); in hci_sock_ioctl()
666 lock_sock(sk); in hci_sock_ioctl()
668 err = hci_sock_bound_ioctl(sk, cmd, arg); in hci_sock_ioctl()
671 release_sock(sk); in hci_sock_ioctl()
679 struct sock *sk = sock->sk; in hci_sock_bind() local
683 BT_DBG("sock %p sk %p", sock, sk); in hci_sock_bind()
695 lock_sock(sk); in hci_sock_bind()
697 if (sk->sk_state == BT_BOUND) { in hci_sock_bind()
704 if (hci_pi(sk)->hdev) { in hci_sock_bind()
719 hci_pi(sk)->hdev = hdev; in hci_sock_bind()
723 if (hci_pi(sk)->hdev) { in hci_sock_bind()
783 hci_pi(sk)->hdev = hdev; in hci_sock_bind()
800 hci_sock_set_flag(sk, HCI_SOCK_TRUSTED); in hci_sock_bind()
802 send_monitor_replay(sk); in hci_sock_bind()
824 hci_sock_set_flag(sk, HCI_SOCK_TRUSTED); in hci_sock_bind()
837 hci_sock_set_flag(sk, HCI_MGMT_INDEX_EVENTS); in hci_sock_bind()
838 hci_sock_set_flag(sk, HCI_MGMT_UNCONF_INDEX_EVENTS); in hci_sock_bind()
839 hci_sock_set_flag(sk, HCI_MGMT_GENERIC_EVENTS); in hci_sock_bind()
845 hci_pi(sk)->channel = haddr.hci_channel; in hci_sock_bind()
846 sk->sk_state = BT_BOUND; in hci_sock_bind()
849 release_sock(sk); in hci_sock_bind()
857 struct sock *sk = sock->sk; in hci_sock_getname() local
861 BT_DBG("sock %p sk %p", sock, sk); in hci_sock_getname()
866 lock_sock(sk); in hci_sock_getname()
868 hdev = hci_pi(sk)->hdev; in hci_sock_getname()
877 haddr->hci_channel= hci_pi(sk)->channel; in hci_sock_getname()
880 release_sock(sk); in hci_sock_getname()
884 static void hci_sock_cmsg(struct sock *sk, struct msghdr *msg, in hci_sock_cmsg() argument
887 __u32 mask = hci_pi(sk)->cmsg_mask; in hci_sock_cmsg()
925 struct sock *sk = sock->sk; in hci_sock_recvmsg() local
929 BT_DBG("sock %p, sk %p", sock, sk); in hci_sock_recvmsg()
934 if (sk->sk_state == BT_CLOSED) in hci_sock_recvmsg()
937 skb = skb_recv_datagram(sk, flags, noblock, &err); in hci_sock_recvmsg()
950 switch (hci_pi(sk)->channel) { in hci_sock_recvmsg()
952 hci_sock_cmsg(sk, msg, skb); in hci_sock_recvmsg()
956 sock_recv_timestamp(msg, sk, skb); in hci_sock_recvmsg()
959 if (hci_mgmt_chan_find(hci_pi(sk)->channel)) in hci_sock_recvmsg()
960 sock_recv_timestamp(msg, sk, skb); in hci_sock_recvmsg()
964 skb_free_datagram(sk, skb); in hci_sock_recvmsg()
969 static int hci_mgmt_cmd(struct hci_mgmt_chan *chan, struct sock *sk, in hci_mgmt_cmd() argument
1008 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1015 if (!hci_sock_test_flag(sk, HCI_SOCK_TRUSTED) && in hci_mgmt_cmd()
1017 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1025 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1033 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1040 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1048 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1056 err = mgmt_cmd_status(sk, index, opcode, in hci_mgmt_cmd()
1062 chan->hdev_init(sk, hdev); in hci_mgmt_cmd()
1066 err = handler->func(sk, hdev, cp, len); in hci_mgmt_cmd()
1083 struct sock *sk = sock->sk; in hci_sock_sendmsg() local
1089 BT_DBG("sock %p sk %p", sock, sk); in hci_sock_sendmsg()
1100 lock_sock(sk); in hci_sock_sendmsg()
1102 switch (hci_pi(sk)->channel) { in hci_sock_sendmsg()
1111 chan = __hci_mgmt_chan_find(hci_pi(sk)->channel); in hci_sock_sendmsg()
1113 err = hci_mgmt_cmd(chan, sk, msg, len); in hci_sock_sendmsg()
1121 hdev = hci_pi(sk)->hdev; in hci_sock_sendmsg()
1132 skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err); in hci_sock_sendmsg()
1144 if (hci_pi(sk)->channel == HCI_CHANNEL_USER) { in hci_sock_sendmsg()
1197 release_sock(sk); in hci_sock_sendmsg()
1209 struct sock *sk = sock->sk; in hci_sock_setsockopt() local
1212 BT_DBG("sk %p, opt %d", sk, optname); in hci_sock_setsockopt()
1214 lock_sock(sk); in hci_sock_setsockopt()
1216 if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) { in hci_sock_setsockopt()
1229 hci_pi(sk)->cmsg_mask |= HCI_CMSG_DIR; in hci_sock_setsockopt()
1231 hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_DIR; in hci_sock_setsockopt()
1241 hci_pi(sk)->cmsg_mask |= HCI_CMSG_TSTAMP; in hci_sock_setsockopt()
1243 hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_TSTAMP; in hci_sock_setsockopt()
1248 struct hci_filter *f = &hci_pi(sk)->filter; in hci_sock_setsockopt()
1269 struct hci_filter *f = &hci_pi(sk)->filter; in hci_sock_setsockopt()
1284 release_sock(sk); in hci_sock_setsockopt()
1292 struct sock *sk = sock->sk; in hci_sock_getsockopt() local
1295 BT_DBG("sk %p, opt %d", sk, optname); in hci_sock_getsockopt()
1300 lock_sock(sk); in hci_sock_getsockopt()
1302 if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) { in hci_sock_getsockopt()
1309 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_DIR) in hci_sock_getsockopt()
1319 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_TSTAMP) in hci_sock_getsockopt()
1330 struct hci_filter *f = &hci_pi(sk)->filter; in hci_sock_getsockopt()
1350 release_sock(sk); in hci_sock_getsockopt()
1383 struct sock *sk; in hci_sock_create() local
1392 sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &hci_sk_proto); in hci_sock_create()
1393 if (!sk) in hci_sock_create()
1396 sock_init_data(sock, sk); in hci_sock_create()
1398 sock_reset_flag(sk, SOCK_ZAPPED); in hci_sock_create()
1400 sk->sk_protocol = protocol; in hci_sock_create()
1403 sk->sk_state = BT_OPEN; in hci_sock_create()
1405 bt_sock_link(&hci_sk_list, sk); in hci_sock_create()