Lines Matching refs:sk

49 	struct sock	*sk;  member
57 static void sco_sock_close(struct sock *sk);
58 static void sco_sock_kill(struct sock *sk);
61 #define sco_pi(sk) ((struct sco_pinfo *) sk) argument
79 struct sock *sk = from_timer(sk, t, sk_timer); in sco_sock_timeout() local
81 BT_DBG("sock %p state %d", sk, sk->sk_state); in sco_sock_timeout()
83 bh_lock_sock(sk); in sco_sock_timeout()
84 sk->sk_err = ETIMEDOUT; in sco_sock_timeout()
85 sk->sk_state_change(sk); in sco_sock_timeout()
86 bh_unlock_sock(sk); in sco_sock_timeout()
88 sco_sock_kill(sk); in sco_sock_timeout()
89 sock_put(sk); in sco_sock_timeout()
92 static void sco_sock_set_timer(struct sock *sk, long timeout) in sco_sock_set_timer() argument
94 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout); in sco_sock_set_timer()
95 sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout); in sco_sock_set_timer()
98 static void sco_sock_clear_timer(struct sock *sk) in sco_sock_clear_timer() argument
100 BT_DBG("sock %p state %d", sk, sk->sk_state); in sco_sock_clear_timer()
101 sk_stop_timer(sk, &sk->sk_timer); in sco_sock_clear_timer()
134 static void sco_chan_del(struct sock *sk, int err) in sco_chan_del() argument
138 conn = sco_pi(sk)->conn; in sco_chan_del()
140 BT_DBG("sk %p, conn %p, err %d", sk, conn, err); in sco_chan_del()
144 conn->sk = NULL; in sco_chan_del()
145 sco_pi(sk)->conn = NULL; in sco_chan_del()
152 sk->sk_state = BT_CLOSED; in sco_chan_del()
153 sk->sk_err = err; in sco_chan_del()
154 sk->sk_state_change(sk); in sco_chan_del()
156 sock_set_flag(sk, SOCK_ZAPPED); in sco_chan_del()
162 struct sock *sk; in sco_conn_del() local
171 sk = conn->sk; in sco_conn_del()
174 if (sk) { in sco_conn_del()
175 sock_hold(sk); in sco_conn_del()
176 bh_lock_sock(sk); in sco_conn_del()
177 sco_sock_clear_timer(sk); in sco_conn_del()
178 sco_chan_del(sk, err); in sco_conn_del()
179 bh_unlock_sock(sk); in sco_conn_del()
180 sco_sock_kill(sk); in sco_conn_del()
181 sock_put(sk); in sco_conn_del()
188 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, in __sco_chan_add() argument
193 sco_pi(sk)->conn = conn; in __sco_chan_add()
194 conn->sk = sk; in __sco_chan_add()
197 bt_accept_enqueue(parent, sk, true); in __sco_chan_add()
200 static int sco_chan_add(struct sco_conn *conn, struct sock *sk, in sco_chan_add() argument
206 if (conn->sk) in sco_chan_add()
209 __sco_chan_add(conn, sk, parent); in sco_chan_add()
215 static int sco_connect(struct sock *sk) in sco_connect() argument
222 BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst); in sco_connect()
224 hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR); in sco_connect()
235 if (sco_pi(sk)->setting == BT_VOICE_TRANSPARENT && in sco_connect()
241 hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst, in sco_connect()
242 sco_pi(sk)->setting); in sco_connect()
256 bacpy(&sco_pi(sk)->src, &hcon->src); in sco_connect()
258 err = sco_chan_add(conn, sk, NULL); in sco_connect()
263 sco_sock_clear_timer(sk); in sco_connect()
264 sk->sk_state = BT_CONNECTED; in sco_connect()
266 sk->sk_state = BT_CONNECT; in sco_connect()
267 sco_sock_set_timer(sk, sk->sk_sndtimeo); in sco_connect()
276 static int sco_send_frame(struct sock *sk, struct msghdr *msg, int len) in sco_send_frame() argument
278 struct sco_conn *conn = sco_pi(sk)->conn; in sco_send_frame()
286 BT_DBG("sk %p len %d", sk, len); in sco_send_frame()
288 skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err); in sco_send_frame()
304 struct sock *sk; in sco_recv_frame() local
307 sk = conn->sk; in sco_recv_frame()
310 if (!sk) in sco_recv_frame()
313 BT_DBG("sk %p len %d", sk, skb->len); in sco_recv_frame()
315 if (sk->sk_state != BT_CONNECTED) in sco_recv_frame()
318 if (!sock_queue_rcv_skb(sk, skb)) in sco_recv_frame()
328 struct sock *sk; in __sco_get_sock_listen_by_addr() local
330 sk_for_each(sk, &sco_sk_list.head) { in __sco_get_sock_listen_by_addr()
331 if (sk->sk_state != BT_LISTEN) in __sco_get_sock_listen_by_addr()
334 if (!bacmp(&sco_pi(sk)->src, ba)) in __sco_get_sock_listen_by_addr()
335 return sk; in __sco_get_sock_listen_by_addr()
346 struct sock *sk = NULL, *sk1 = NULL; in sco_get_sock_listen() local
350 sk_for_each(sk, &sco_sk_list.head) { in sco_get_sock_listen()
351 if (sk->sk_state != BT_LISTEN) in sco_get_sock_listen()
355 if (!bacmp(&sco_pi(sk)->src, src)) in sco_get_sock_listen()
359 if (!bacmp(&sco_pi(sk)->src, BDADDR_ANY)) in sco_get_sock_listen()
360 sk1 = sk; in sco_get_sock_listen()
365 return sk ? sk : sk1; in sco_get_sock_listen()
368 static void sco_sock_destruct(struct sock *sk) in sco_sock_destruct() argument
370 BT_DBG("sk %p", sk); in sco_sock_destruct()
372 skb_queue_purge(&sk->sk_receive_queue); in sco_sock_destruct()
373 skb_queue_purge(&sk->sk_write_queue); in sco_sock_destruct()
378 struct sock *sk; in sco_sock_cleanup_listen() local
383 while ((sk = bt_accept_dequeue(parent, NULL))) { in sco_sock_cleanup_listen()
384 sco_sock_close(sk); in sco_sock_cleanup_listen()
385 sco_sock_kill(sk); in sco_sock_cleanup_listen()
395 static void sco_sock_kill(struct sock *sk) in sco_sock_kill() argument
397 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket || in sco_sock_kill()
398 sock_flag(sk, SOCK_DEAD)) in sco_sock_kill()
401 BT_DBG("sk %p state %d", sk, sk->sk_state); in sco_sock_kill()
404 bt_sock_unlink(&sco_sk_list, sk); in sco_sock_kill()
405 sock_set_flag(sk, SOCK_DEAD); in sco_sock_kill()
406 sock_put(sk); in sco_sock_kill()
409 static void __sco_sock_close(struct sock *sk) in __sco_sock_close() argument
411 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket); in __sco_sock_close()
413 switch (sk->sk_state) { in __sco_sock_close()
415 sco_sock_cleanup_listen(sk); in __sco_sock_close()
420 if (sco_pi(sk)->conn->hcon) { in __sco_sock_close()
421 sk->sk_state = BT_DISCONN; in __sco_sock_close()
422 sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT); in __sco_sock_close()
423 sco_conn_lock(sco_pi(sk)->conn); in __sco_sock_close()
424 hci_conn_drop(sco_pi(sk)->conn->hcon); in __sco_sock_close()
425 sco_pi(sk)->conn->hcon = NULL; in __sco_sock_close()
426 sco_conn_unlock(sco_pi(sk)->conn); in __sco_sock_close()
428 sco_chan_del(sk, ECONNRESET); in __sco_sock_close()
434 sco_chan_del(sk, ECONNRESET); in __sco_sock_close()
438 sock_set_flag(sk, SOCK_ZAPPED); in __sco_sock_close()
444 static void sco_sock_close(struct sock *sk) in sco_sock_close() argument
446 sco_sock_clear_timer(sk); in sco_sock_close()
447 lock_sock(sk); in sco_sock_close()
448 __sco_sock_close(sk); in sco_sock_close()
449 release_sock(sk); in sco_sock_close()
450 sco_sock_kill(sk); in sco_sock_close()
454 struct sock *sk) in sco_skb_put_cmsg() argument
456 if (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS) in sco_skb_put_cmsg()
462 static void sco_sock_init(struct sock *sk, struct sock *parent) in sco_sock_init() argument
464 BT_DBG("sk %p", sk); in sco_sock_init()
467 sk->sk_type = parent->sk_type; in sco_sock_init()
468 bt_sk(sk)->flags = bt_sk(parent)->flags; in sco_sock_init()
469 security_sk_clone(parent, sk); in sco_sock_init()
471 bt_sk(sk)->skb_put_cmsg = sco_skb_put_cmsg; in sco_sock_init()
484 struct sock *sk; in sco_sock_alloc() local
486 sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto, kern); in sco_sock_alloc()
487 if (!sk) in sco_sock_alloc()
490 sock_init_data(sock, sk); in sco_sock_alloc()
491 INIT_LIST_HEAD(&bt_sk(sk)->accept_q); in sco_sock_alloc()
493 sk->sk_destruct = sco_sock_destruct; in sco_sock_alloc()
494 sk->sk_sndtimeo = SCO_CONN_TIMEOUT; in sco_sock_alloc()
496 sock_reset_flag(sk, SOCK_ZAPPED); in sco_sock_alloc()
498 sk->sk_protocol = proto; in sco_sock_alloc()
499 sk->sk_state = BT_OPEN; in sco_sock_alloc()
501 sco_pi(sk)->setting = BT_VOICE_CVSD_16BIT; in sco_sock_alloc()
503 timer_setup(&sk->sk_timer, sco_sock_timeout, 0); in sco_sock_alloc()
505 bt_sock_link(&sco_sk_list, sk); in sco_sock_alloc()
506 return sk; in sco_sock_alloc()
512 struct sock *sk; in sco_sock_create() local
523 sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern); in sco_sock_create()
524 if (!sk) in sco_sock_create()
527 sco_sock_init(sk, NULL); in sco_sock_create()
535 struct sock *sk = sock->sk; in sco_sock_bind() local
542 BT_DBG("sk %p %pMR", sk, &sa->sco_bdaddr); in sco_sock_bind()
544 lock_sock(sk); in sco_sock_bind()
546 if (sk->sk_state != BT_OPEN) { in sco_sock_bind()
551 if (sk->sk_type != SOCK_SEQPACKET) { in sco_sock_bind()
556 bacpy(&sco_pi(sk)->src, &sa->sco_bdaddr); in sco_sock_bind()
558 sk->sk_state = BT_BOUND; in sco_sock_bind()
561 release_sock(sk); in sco_sock_bind()
568 struct sock *sk = sock->sk; in sco_sock_connect() local
571 BT_DBG("sk %p", sk); in sco_sock_connect()
577 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) in sco_sock_connect()
580 if (sk->sk_type != SOCK_SEQPACKET) in sco_sock_connect()
583 lock_sock(sk); in sco_sock_connect()
586 bacpy(&sco_pi(sk)->dst, &sa->sco_bdaddr); in sco_sock_connect()
588 err = sco_connect(sk); in sco_sock_connect()
592 err = bt_sock_wait_state(sk, BT_CONNECTED, in sco_sock_connect()
593 sock_sndtimeo(sk, flags & O_NONBLOCK)); in sco_sock_connect()
596 release_sock(sk); in sco_sock_connect()
602 struct sock *sk = sock->sk; in sco_sock_listen() local
603 bdaddr_t *src = &sco_pi(sk)->src; in sco_sock_listen()
606 BT_DBG("sk %p backlog %d", sk, backlog); in sco_sock_listen()
608 lock_sock(sk); in sco_sock_listen()
610 if (sk->sk_state != BT_BOUND) { in sco_sock_listen()
615 if (sk->sk_type != SOCK_SEQPACKET) { in sco_sock_listen()
627 sk->sk_max_ack_backlog = backlog; in sco_sock_listen()
628 sk->sk_ack_backlog = 0; in sco_sock_listen()
630 sk->sk_state = BT_LISTEN; in sco_sock_listen()
636 release_sock(sk); in sco_sock_listen()
644 struct sock *sk = sock->sk, *ch; in sco_sock_accept() local
648 lock_sock(sk); in sco_sock_accept()
650 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); in sco_sock_accept()
652 BT_DBG("sk %p timeo %ld", sk, timeo); in sco_sock_accept()
655 add_wait_queue_exclusive(sk_sleep(sk), &wait); in sco_sock_accept()
657 if (sk->sk_state != BT_LISTEN) { in sco_sock_accept()
662 ch = bt_accept_dequeue(sk, newsock); in sco_sock_accept()
676 release_sock(sk); in sco_sock_accept()
679 lock_sock(sk); in sco_sock_accept()
681 remove_wait_queue(sk_sleep(sk), &wait); in sco_sock_accept()
691 release_sock(sk); in sco_sock_accept()
699 struct sock *sk = sock->sk; in sco_sock_getname() local
701 BT_DBG("sock %p, sk %p", sock, sk); in sco_sock_getname()
706 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->dst); in sco_sock_getname()
708 bacpy(&sa->sco_bdaddr, &sco_pi(sk)->src); in sco_sock_getname()
716 struct sock *sk = sock->sk; in sco_sock_sendmsg() local
719 BT_DBG("sock %p, sk %p", sock, sk); in sco_sock_sendmsg()
721 err = sock_error(sk); in sco_sock_sendmsg()
728 lock_sock(sk); in sco_sock_sendmsg()
730 if (sk->sk_state == BT_CONNECTED) in sco_sock_sendmsg()
731 err = sco_send_frame(sk, msg, len); in sco_sock_sendmsg()
735 release_sock(sk); in sco_sock_sendmsg()
786 struct sock *sk = sock->sk; in sco_sock_recvmsg() local
787 struct sco_pinfo *pi = sco_pi(sk); in sco_sock_recvmsg()
789 lock_sock(sk); in sco_sock_recvmsg()
791 if (sk->sk_state == BT_CONNECT2 && in sco_sock_recvmsg()
792 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { in sco_sock_recvmsg()
794 sk->sk_state = BT_CONFIG; in sco_sock_recvmsg()
796 release_sock(sk); in sco_sock_recvmsg()
800 release_sock(sk); in sco_sock_recvmsg()
808 struct sock *sk = sock->sk; in sco_sock_setsockopt() local
813 BT_DBG("sk %p", sk); in sco_sock_setsockopt()
815 lock_sock(sk); in sco_sock_setsockopt()
820 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in sco_sock_setsockopt()
831 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in sco_sock_setsockopt()
833 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in sco_sock_setsockopt()
837 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND && in sco_sock_setsockopt()
838 sk->sk_state != BT_CONNECT2) { in sco_sock_setsockopt()
843 voice.setting = sco_pi(sk)->setting; in sco_sock_setsockopt()
858 sco_pi(sk)->setting = voice.setting; in sco_sock_setsockopt()
868 sco_pi(sk)->cmsg_mask |= SCO_CMSG_PKT_STATUS; in sco_sock_setsockopt()
870 sco_pi(sk)->cmsg_mask &= SCO_CMSG_PKT_STATUS; in sco_sock_setsockopt()
878 release_sock(sk); in sco_sock_setsockopt()
885 struct sock *sk = sock->sk; in sco_sock_getsockopt_old() local
890 BT_DBG("sk %p", sk); in sco_sock_getsockopt_old()
895 lock_sock(sk); in sco_sock_getsockopt_old()
899 if (sk->sk_state != BT_CONNECTED && in sco_sock_getsockopt_old()
900 !(sk->sk_state == BT_CONNECT2 && in sco_sock_getsockopt_old()
901 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) { in sco_sock_getsockopt_old()
906 opts.mtu = sco_pi(sk)->conn->mtu; in sco_sock_getsockopt_old()
917 if (sk->sk_state != BT_CONNECTED && in sco_sock_getsockopt_old()
918 !(sk->sk_state == BT_CONNECT2 && in sco_sock_getsockopt_old()
919 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) { in sco_sock_getsockopt_old()
925 cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle; in sco_sock_getsockopt_old()
926 memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3); in sco_sock_getsockopt_old()
939 release_sock(sk); in sco_sock_getsockopt_old()
946 struct sock *sk = sock->sk; in sco_sock_getsockopt() local
952 BT_DBG("sk %p", sk); in sco_sock_getsockopt()
960 lock_sock(sk); in sco_sock_getsockopt()
965 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in sco_sock_getsockopt()
970 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), in sco_sock_getsockopt()
977 voice.setting = sco_pi(sk)->setting; in sco_sock_getsockopt()
986 if (sk->sk_state != BT_CONNECTED) { in sco_sock_getsockopt()
991 phys = hci_conn_get_phy(sco_pi(sk)->conn->hcon); in sco_sock_getsockopt()
998 pkt_status = (sco_pi(sk)->cmsg_mask & SCO_CMSG_PKT_STATUS); in sco_sock_getsockopt()
1006 if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval)) in sco_sock_getsockopt()
1015 release_sock(sk); in sco_sock_getsockopt()
1021 struct sock *sk = sock->sk; in sco_sock_shutdown() local
1024 BT_DBG("sock %p, sk %p", sock, sk); in sco_sock_shutdown()
1026 if (!sk) in sco_sock_shutdown()
1029 sock_hold(sk); in sco_sock_shutdown()
1030 lock_sock(sk); in sco_sock_shutdown()
1032 if (!sk->sk_shutdown) { in sco_sock_shutdown()
1033 sk->sk_shutdown = SHUTDOWN_MASK; in sco_sock_shutdown()
1034 sco_sock_clear_timer(sk); in sco_sock_shutdown()
1035 __sco_sock_close(sk); in sco_sock_shutdown()
1037 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime && in sco_sock_shutdown()
1039 err = bt_sock_wait_state(sk, BT_CLOSED, in sco_sock_shutdown()
1040 sk->sk_lingertime); in sco_sock_shutdown()
1043 release_sock(sk); in sco_sock_shutdown()
1044 sock_put(sk); in sco_sock_shutdown()
1051 struct sock *sk = sock->sk; in sco_sock_release() local
1054 BT_DBG("sock %p, sk %p", sock, sk); in sco_sock_release()
1056 if (!sk) in sco_sock_release()
1059 sco_sock_close(sk); in sco_sock_release()
1061 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime && in sco_sock_release()
1063 lock_sock(sk); in sco_sock_release()
1064 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime); in sco_sock_release()
1065 release_sock(sk); in sco_sock_release()
1068 sock_orphan(sk); in sco_sock_release()
1069 sco_sock_kill(sk); in sco_sock_release()
1076 struct sock *sk = conn->sk; in sco_conn_ready() local
1080 if (sk) { in sco_conn_ready()
1081 sco_sock_clear_timer(sk); in sco_conn_ready()
1082 bh_lock_sock(sk); in sco_conn_ready()
1083 sk->sk_state = BT_CONNECTED; in sco_conn_ready()
1084 sk->sk_state_change(sk); in sco_conn_ready()
1085 bh_unlock_sock(sk); in sco_conn_ready()
1102 sk = sco_sock_alloc(sock_net(parent), NULL, in sco_conn_ready()
1104 if (!sk) { in sco_conn_ready()
1110 sco_sock_init(sk, parent); in sco_conn_ready()
1112 bacpy(&sco_pi(sk)->src, &conn->hcon->src); in sco_conn_ready()
1113 bacpy(&sco_pi(sk)->dst, &conn->hcon->dst); in sco_conn_ready()
1116 __sco_chan_add(conn, sk, parent); in sco_conn_ready()
1119 sk->sk_state = BT_CONNECT2; in sco_conn_ready()
1121 sk->sk_state = BT_CONNECTED; in sco_conn_ready()
1135 struct sock *sk; in sco_connect_ind() local
1142 sk_for_each(sk, &sco_sk_list.head) { in sco_connect_ind()
1143 if (sk->sk_state != BT_LISTEN) in sco_connect_ind()
1146 if (!bacmp(&sco_pi(sk)->src, &hdev->bdaddr) || in sco_connect_ind()
1147 !bacmp(&sco_pi(sk)->src, BDADDR_ANY)) { in sco_connect_ind()
1150 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) in sco_connect_ind()
1213 struct sock *sk; in sco_debugfs_show() local
1217 sk_for_each(sk, &sco_sk_list.head) { in sco_debugfs_show()
1218 seq_printf(f, "%pMR %pMR %d\n", &sco_pi(sk)->src, in sco_debugfs_show()
1219 &sco_pi(sk)->dst, sk->sk_state); in sco_debugfs_show()