Lines Matching refs:sk

30 	struct sock	*sk;  member
42 static void iso_sock_close(struct sock *sk);
43 static void iso_sock_kill(struct sock *sk);
46 #define iso_pi(sk) ((struct iso_pinfo *)sk) argument
79 static bool iso_match_sid(struct sock *sk, void *data);
80 static void iso_sock_disconn(struct sock *sk);
90 struct sock *sk; in iso_sock_timeout() local
93 sk = conn->sk; in iso_sock_timeout()
94 if (sk) in iso_sock_timeout()
95 sock_hold(sk); in iso_sock_timeout()
98 if (!sk) in iso_sock_timeout()
101 BT_DBG("sock %p state %d", sk, sk->sk_state); in iso_sock_timeout()
103 lock_sock(sk); in iso_sock_timeout()
104 sk->sk_err = ETIMEDOUT; in iso_sock_timeout()
105 sk->sk_state_change(sk); in iso_sock_timeout()
106 release_sock(sk); in iso_sock_timeout()
107 sock_put(sk); in iso_sock_timeout()
110 static void iso_sock_set_timer(struct sock *sk, long timeout) in iso_sock_set_timer() argument
112 if (!iso_pi(sk)->conn) in iso_sock_set_timer()
115 BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout); in iso_sock_set_timer()
116 cancel_delayed_work(&iso_pi(sk)->conn->timeout_work); in iso_sock_set_timer()
117 schedule_delayed_work(&iso_pi(sk)->conn->timeout_work, timeout); in iso_sock_set_timer()
120 static void iso_sock_clear_timer(struct sock *sk) in iso_sock_clear_timer() argument
122 if (!iso_pi(sk)->conn) in iso_sock_clear_timer()
125 BT_DBG("sock %p state %d", sk, sk->sk_state); in iso_sock_clear_timer()
126 cancel_delayed_work(&iso_pi(sk)->conn->timeout_work); in iso_sock_clear_timer()
157 static void iso_chan_del(struct sock *sk, int err) in iso_chan_del() argument
162 conn = iso_pi(sk)->conn; in iso_chan_del()
164 BT_DBG("sk %p, conn %p, err %d", sk, conn, err); in iso_chan_del()
168 conn->sk = NULL; in iso_chan_del()
169 iso_pi(sk)->conn = NULL; in iso_chan_del()
176 sk->sk_state = BT_CLOSED; in iso_chan_del()
177 sk->sk_err = err; in iso_chan_del()
179 parent = bt_sk(sk)->parent; in iso_chan_del()
181 bt_accept_unlink(sk); in iso_chan_del()
184 sk->sk_state_change(sk); in iso_chan_del()
187 sock_set_flag(sk, SOCK_ZAPPED); in iso_chan_del()
193 struct sock *sk; in iso_conn_del() local
202 sk = conn->sk; in iso_conn_del()
203 if (sk) in iso_conn_del()
204 sock_hold(sk); in iso_conn_del()
207 if (sk) { in iso_conn_del()
208 lock_sock(sk); in iso_conn_del()
209 iso_sock_clear_timer(sk); in iso_conn_del()
210 iso_chan_del(sk, err); in iso_conn_del()
211 release_sock(sk); in iso_conn_del()
212 sock_put(sk); in iso_conn_del()
222 static int __iso_chan_add(struct iso_conn *conn, struct sock *sk, in __iso_chan_add() argument
227 if (iso_pi(sk)->conn == conn && conn->sk == sk) in __iso_chan_add()
230 if (conn->sk) { in __iso_chan_add()
235 iso_pi(sk)->conn = conn; in __iso_chan_add()
236 conn->sk = sk; in __iso_chan_add()
239 bt_accept_enqueue(parent, sk, true); in __iso_chan_add()
244 static int iso_chan_add(struct iso_conn *conn, struct sock *sk, in iso_chan_add() argument
250 err = __iso_chan_add(conn, sk, parent); in iso_chan_add()
264 static int iso_connect_bis(struct sock *sk) in iso_connect_bis() argument
271 BT_DBG("%pMR", &iso_pi(sk)->src); in iso_connect_bis()
273 hdev = hci_get_route(&iso_pi(sk)->dst, &iso_pi(sk)->src, in iso_connect_bis()
274 iso_pi(sk)->src_type); in iso_connect_bis()
286 if (iso_pi(sk)->qos_user_set && !check_bcast_qos(&iso_pi(sk)->qos)) { in iso_connect_bis()
287 iso_pi(sk)->qos = default_qos; in iso_connect_bis()
293 if (!iso_pi(sk)->qos.bcast.out.phy) { in iso_connect_bis()
299 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { in iso_connect_bis()
300 hcon = hci_bind_bis(hdev, &iso_pi(sk)->dst, in iso_connect_bis()
301 &iso_pi(sk)->qos, iso_pi(sk)->base_len, in iso_connect_bis()
302 iso_pi(sk)->base); in iso_connect_bis()
308 hcon = hci_connect_bis(hdev, &iso_pi(sk)->dst, in iso_connect_bis()
309 le_addr_type(iso_pi(sk)->dst_type), in iso_connect_bis()
310 &iso_pi(sk)->qos, iso_pi(sk)->base_len, in iso_connect_bis()
311 iso_pi(sk)->base); in iso_connect_bis()
325 lock_sock(sk); in iso_connect_bis()
327 err = iso_chan_add(conn, sk, NULL); in iso_connect_bis()
329 release_sock(sk); in iso_connect_bis()
334 bacpy(&iso_pi(sk)->src, &hcon->src); in iso_connect_bis()
337 iso_sock_clear_timer(sk); in iso_connect_bis()
338 sk->sk_state = BT_CONNECTED; in iso_connect_bis()
339 } else if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { in iso_connect_bis()
340 iso_sock_clear_timer(sk); in iso_connect_bis()
341 sk->sk_state = BT_CONNECT; in iso_connect_bis()
343 sk->sk_state = BT_CONNECT; in iso_connect_bis()
344 iso_sock_set_timer(sk, sk->sk_sndtimeo); in iso_connect_bis()
347 release_sock(sk); in iso_connect_bis()
355 static int iso_connect_cis(struct sock *sk) in iso_connect_cis() argument
362 BT_DBG("%pMR -> %pMR", &iso_pi(sk)->src, &iso_pi(sk)->dst); in iso_connect_cis()
364 hdev = hci_get_route(&iso_pi(sk)->dst, &iso_pi(sk)->src, in iso_connect_cis()
365 iso_pi(sk)->src_type); in iso_connect_cis()
377 if (iso_pi(sk)->qos_user_set && !check_ucast_qos(&iso_pi(sk)->qos)) { in iso_connect_cis()
378 iso_pi(sk)->qos = default_qos; in iso_connect_cis()
384 if (!iso_pi(sk)->qos.ucast.in.phy && !iso_pi(sk)->qos.ucast.out.phy) { in iso_connect_cis()
390 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { in iso_connect_cis()
391 hcon = hci_bind_cis(hdev, &iso_pi(sk)->dst, in iso_connect_cis()
392 le_addr_type(iso_pi(sk)->dst_type), in iso_connect_cis()
393 &iso_pi(sk)->qos); in iso_connect_cis()
399 hcon = hci_connect_cis(hdev, &iso_pi(sk)->dst, in iso_connect_cis()
400 le_addr_type(iso_pi(sk)->dst_type), in iso_connect_cis()
401 &iso_pi(sk)->qos); in iso_connect_cis()
415 lock_sock(sk); in iso_connect_cis()
417 err = iso_chan_add(conn, sk, NULL); in iso_connect_cis()
419 release_sock(sk); in iso_connect_cis()
424 bacpy(&iso_pi(sk)->src, &hcon->src); in iso_connect_cis()
427 iso_sock_clear_timer(sk); in iso_connect_cis()
428 sk->sk_state = BT_CONNECTED; in iso_connect_cis()
429 } else if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { in iso_connect_cis()
430 iso_sock_clear_timer(sk); in iso_connect_cis()
431 sk->sk_state = BT_CONNECT; in iso_connect_cis()
433 sk->sk_state = BT_CONNECT; in iso_connect_cis()
434 iso_sock_set_timer(sk, sk->sk_sndtimeo); in iso_connect_cis()
437 release_sock(sk); in iso_connect_cis()
445 static struct bt_iso_qos *iso_sock_get_qos(struct sock *sk) in iso_sock_get_qos() argument
447 if (sk->sk_state == BT_CONNECTED || sk->sk_state == BT_CONNECT2) in iso_sock_get_qos()
448 return &iso_pi(sk)->conn->hcon->iso_qos; in iso_sock_get_qos()
450 return &iso_pi(sk)->qos; in iso_sock_get_qos()
453 static int iso_send_frame(struct sock *sk, struct sk_buff *skb) in iso_send_frame() argument
455 struct iso_conn *conn = iso_pi(sk)->conn; in iso_send_frame()
456 struct bt_iso_qos *qos = iso_sock_get_qos(sk); in iso_send_frame()
460 BT_DBG("sk %p len %d", sk, skb->len); in iso_send_frame()
473 if (sk->sk_state == BT_CONNECTED) in iso_send_frame()
483 struct sock *sk; in iso_recv_frame() local
486 sk = conn->sk; in iso_recv_frame()
489 if (!sk) in iso_recv_frame()
492 BT_DBG("sk %p len %d", sk, skb->len); in iso_recv_frame()
494 if (sk->sk_state != BT_CONNECTED) in iso_recv_frame()
497 if (!sock_queue_rcv_skb(sk, skb)) in iso_recv_frame()
507 struct sock *sk; in __iso_get_sock_listen_by_addr() local
509 sk_for_each(sk, &iso_sk_list.head) { in __iso_get_sock_listen_by_addr()
510 if (sk->sk_state != BT_LISTEN) in __iso_get_sock_listen_by_addr()
513 if (bacmp(&iso_pi(sk)->dst, dst)) in __iso_get_sock_listen_by_addr()
516 if (!bacmp(&iso_pi(sk)->src, src)) in __iso_get_sock_listen_by_addr()
517 return sk; in __iso_get_sock_listen_by_addr()
526 struct sock *sk; in __iso_get_sock_listen_by_sid() local
528 sk_for_each(sk, &iso_sk_list.head) { in __iso_get_sock_listen_by_sid()
529 if (sk->sk_state != BT_LISTEN) in __iso_get_sock_listen_by_sid()
532 if (bacmp(&iso_pi(sk)->src, ba)) in __iso_get_sock_listen_by_sid()
535 if (bacmp(&iso_pi(sk)->dst, bc)) in __iso_get_sock_listen_by_sid()
538 if (iso_pi(sk)->bc_sid == sid) in __iso_get_sock_listen_by_sid()
539 return sk; in __iso_get_sock_listen_by_sid()
545 typedef bool (*iso_sock_match_t)(struct sock *sk, void *data);
557 struct sock *sk = NULL, *sk1 = NULL; in iso_get_sock_listen() local
561 sk_for_each(sk, &iso_sk_list.head) { in iso_get_sock_listen()
562 if (sk->sk_state != BT_LISTEN) in iso_get_sock_listen()
566 if (bacmp(dst, BDADDR_ANY) && bacmp(&iso_pi(sk)->dst, dst)) in iso_get_sock_listen()
570 if (match && !match(sk, data)) in iso_get_sock_listen()
574 if (!bacmp(&iso_pi(sk)->src, src)) in iso_get_sock_listen()
578 if (!bacmp(&iso_pi(sk)->src, BDADDR_ANY)) in iso_get_sock_listen()
579 sk1 = sk; in iso_get_sock_listen()
584 return sk ? sk : sk1; in iso_get_sock_listen()
587 static void iso_sock_destruct(struct sock *sk) in iso_sock_destruct() argument
589 BT_DBG("sk %p", sk); in iso_sock_destruct()
591 skb_queue_purge(&sk->sk_receive_queue); in iso_sock_destruct()
592 skb_queue_purge(&sk->sk_write_queue); in iso_sock_destruct()
597 struct sock *sk; in iso_sock_cleanup_listen() local
602 while ((sk = bt_accept_dequeue(parent, NULL))) { in iso_sock_cleanup_listen()
603 iso_sock_close(sk); in iso_sock_cleanup_listen()
604 iso_sock_kill(sk); in iso_sock_cleanup_listen()
623 static void iso_sock_kill(struct sock *sk) in iso_sock_kill() argument
625 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket || in iso_sock_kill()
626 sock_flag(sk, SOCK_DEAD)) in iso_sock_kill()
629 BT_DBG("sk %p state %d", sk, sk->sk_state); in iso_sock_kill()
632 bt_sock_unlink(&iso_sk_list, sk); in iso_sock_kill()
633 sock_set_flag(sk, SOCK_DEAD); in iso_sock_kill()
634 sock_put(sk); in iso_sock_kill()
637 static void iso_sock_disconn(struct sock *sk) in iso_sock_disconn() argument
639 sk->sk_state = BT_DISCONN; in iso_sock_disconn()
640 iso_sock_set_timer(sk, ISO_DISCONN_TIMEOUT); in iso_sock_disconn()
641 iso_conn_lock(iso_pi(sk)->conn); in iso_sock_disconn()
642 hci_conn_drop(iso_pi(sk)->conn->hcon); in iso_sock_disconn()
643 iso_pi(sk)->conn->hcon = NULL; in iso_sock_disconn()
644 iso_conn_unlock(iso_pi(sk)->conn); in iso_sock_disconn()
647 static void __iso_sock_close(struct sock *sk) in __iso_sock_close() argument
649 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket); in __iso_sock_close()
651 switch (sk->sk_state) { in __iso_sock_close()
653 iso_sock_cleanup_listen(sk); in __iso_sock_close()
659 if (iso_pi(sk)->conn->hcon) in __iso_sock_close()
660 iso_sock_disconn(sk); in __iso_sock_close()
662 iso_chan_del(sk, ECONNRESET); in __iso_sock_close()
666 if (iso_pi(sk)->conn->hcon && in __iso_sock_close()
667 (test_bit(HCI_CONN_PA_SYNC, &iso_pi(sk)->conn->hcon->flags) || in __iso_sock_close()
668 test_bit(HCI_CONN_PA_SYNC_FAILED, &iso_pi(sk)->conn->hcon->flags))) in __iso_sock_close()
669 iso_sock_disconn(sk); in __iso_sock_close()
671 iso_chan_del(sk, ECONNRESET); in __iso_sock_close()
674 iso_chan_del(sk, ECONNRESET); in __iso_sock_close()
678 sock_set_flag(sk, SOCK_ZAPPED); in __iso_sock_close()
684 static void iso_sock_close(struct sock *sk) in iso_sock_close() argument
686 iso_sock_clear_timer(sk); in iso_sock_close()
687 lock_sock(sk); in iso_sock_close()
688 __iso_sock_close(sk); in iso_sock_close()
689 release_sock(sk); in iso_sock_close()
690 iso_sock_kill(sk); in iso_sock_close()
693 static void iso_sock_init(struct sock *sk, struct sock *parent) in iso_sock_init() argument
695 BT_DBG("sk %p", sk); in iso_sock_init()
698 sk->sk_type = parent->sk_type; in iso_sock_init()
699 bt_sk(sk)->flags = bt_sk(parent)->flags; in iso_sock_init()
700 security_sk_clone(parent, sk); in iso_sock_init()
742 struct sock *sk; in iso_sock_alloc() local
744 sk = bt_sock_alloc(net, sock, &iso_proto, proto, prio, kern); in iso_sock_alloc()
745 if (!sk) in iso_sock_alloc()
748 sk->sk_destruct = iso_sock_destruct; in iso_sock_alloc()
749 sk->sk_sndtimeo = ISO_CONN_TIMEOUT; in iso_sock_alloc()
752 iso_pi(sk)->src_type = BDADDR_LE_PUBLIC; in iso_sock_alloc()
754 iso_pi(sk)->qos = default_qos; in iso_sock_alloc()
756 bt_sock_link(&iso_sk_list, sk); in iso_sock_alloc()
757 return sk; in iso_sock_alloc()
763 struct sock *sk; in iso_sock_create() local
774 sk = iso_sock_alloc(net, sock, protocol, GFP_ATOMIC, kern); in iso_sock_create()
775 if (!sk) in iso_sock_create()
778 iso_sock_init(sk, NULL); in iso_sock_create()
786 struct sock *sk = sock->sk; in iso_sock_bind_bc() local
789 BT_DBG("sk %p bc_sid %u bc_num_bis %u", sk, sa->iso_bc->bc_sid, in iso_sock_bind_bc()
796 bacpy(&iso_pi(sk)->dst, &sa->iso_bc->bc_bdaddr); in iso_sock_bind_bc()
797 iso_pi(sk)->dst_type = sa->iso_bc->bc_bdaddr_type; in iso_sock_bind_bc()
798 iso_pi(sk)->sync_handle = -1; in iso_sock_bind_bc()
799 iso_pi(sk)->bc_sid = sa->iso_bc->bc_sid; in iso_sock_bind_bc()
800 iso_pi(sk)->bc_num_bis = sa->iso_bc->bc_num_bis; in iso_sock_bind_bc()
802 for (i = 0; i < iso_pi(sk)->bc_num_bis; i++) { in iso_sock_bind_bc()
807 memcpy(iso_pi(sk)->bc_bis, sa->iso_bc->bc_bis, in iso_sock_bind_bc()
808 iso_pi(sk)->bc_num_bis); in iso_sock_bind_bc()
818 struct sock *sk = sock->sk; in iso_sock_bind() local
821 BT_DBG("sk %p %pMR type %u", sk, &sa->iso_bdaddr, sa->iso_bdaddr_type); in iso_sock_bind()
827 lock_sock(sk); in iso_sock_bind()
829 if (sk->sk_state != BT_OPEN) { in iso_sock_bind()
834 if (sk->sk_type != SOCK_SEQPACKET) { in iso_sock_bind()
845 bacpy(&iso_pi(sk)->src, &sa->iso_bdaddr); in iso_sock_bind()
846 iso_pi(sk)->src_type = sa->iso_bdaddr_type; in iso_sock_bind()
855 sk->sk_state = BT_BOUND; in iso_sock_bind()
858 release_sock(sk); in iso_sock_bind()
866 struct sock *sk = sock->sk; in iso_sock_connect() local
869 BT_DBG("sk %p", sk); in iso_sock_connect()
875 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND) in iso_sock_connect()
878 if (sk->sk_type != SOCK_SEQPACKET) in iso_sock_connect()
885 lock_sock(sk); in iso_sock_connect()
887 bacpy(&iso_pi(sk)->dst, &sa->iso_bdaddr); in iso_sock_connect()
888 iso_pi(sk)->dst_type = sa->iso_bdaddr_type; in iso_sock_connect()
890 release_sock(sk); in iso_sock_connect()
892 if (bacmp(&iso_pi(sk)->dst, BDADDR_ANY)) in iso_sock_connect()
893 err = iso_connect_cis(sk); in iso_sock_connect()
895 err = iso_connect_bis(sk); in iso_sock_connect()
900 lock_sock(sk); in iso_sock_connect()
902 if (!test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { in iso_sock_connect()
903 err = bt_sock_wait_state(sk, BT_CONNECTED, in iso_sock_connect()
904 sock_sndtimeo(sk, flags & O_NONBLOCK)); in iso_sock_connect()
907 release_sock(sk); in iso_sock_connect()
911 static int iso_listen_bis(struct sock *sk) in iso_listen_bis() argument
916 BT_DBG("%pMR -> %pMR (SID 0x%2.2x)", &iso_pi(sk)->src, in iso_listen_bis()
917 &iso_pi(sk)->dst, iso_pi(sk)->bc_sid); in iso_listen_bis()
921 if (__iso_get_sock_listen_by_sid(&iso_pi(sk)->src, &iso_pi(sk)->dst, in iso_listen_bis()
922 iso_pi(sk)->bc_sid)) in iso_listen_bis()
930 hdev = hci_get_route(&iso_pi(sk)->dst, &iso_pi(sk)->src, in iso_listen_bis()
931 iso_pi(sk)->src_type); in iso_listen_bis()
936 if (iso_pi(sk)->qos_user_set && !check_bcast_qos(&iso_pi(sk)->qos)) { in iso_listen_bis()
937 iso_pi(sk)->qos = default_qos; in iso_listen_bis()
941 err = hci_pa_create_sync(hdev, &iso_pi(sk)->dst, in iso_listen_bis()
942 le_addr_type(iso_pi(sk)->dst_type), in iso_listen_bis()
943 iso_pi(sk)->bc_sid, &iso_pi(sk)->qos); in iso_listen_bis()
950 static int iso_listen_cis(struct sock *sk) in iso_listen_cis() argument
954 BT_DBG("%pMR", &iso_pi(sk)->src); in iso_listen_cis()
958 if (__iso_get_sock_listen_by_addr(&iso_pi(sk)->src, &iso_pi(sk)->dst)) in iso_listen_cis()
968 struct sock *sk = sock->sk; in iso_sock_listen() local
971 BT_DBG("sk %p backlog %d", sk, backlog); in iso_sock_listen()
973 lock_sock(sk); in iso_sock_listen()
975 if (sk->sk_state != BT_BOUND) { in iso_sock_listen()
980 if (sk->sk_type != SOCK_SEQPACKET) { in iso_sock_listen()
985 if (!bacmp(&iso_pi(sk)->dst, BDADDR_ANY)) in iso_sock_listen()
986 err = iso_listen_cis(sk); in iso_sock_listen()
988 err = iso_listen_bis(sk); in iso_sock_listen()
993 sk->sk_max_ack_backlog = backlog; in iso_sock_listen()
994 sk->sk_ack_backlog = 0; in iso_sock_listen()
996 sk->sk_state = BT_LISTEN; in iso_sock_listen()
999 release_sock(sk); in iso_sock_listen()
1007 struct sock *sk = sock->sk, *ch; in iso_sock_accept() local
1011 lock_sock(sk); in iso_sock_accept()
1013 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); in iso_sock_accept()
1015 BT_DBG("sk %p timeo %ld", sk, timeo); in iso_sock_accept()
1018 add_wait_queue_exclusive(sk_sleep(sk), &wait); in iso_sock_accept()
1020 if (sk->sk_state != BT_LISTEN) { in iso_sock_accept()
1025 ch = bt_accept_dequeue(sk, newsock); in iso_sock_accept()
1039 release_sock(sk); in iso_sock_accept()
1042 lock_sock(sk); in iso_sock_accept()
1044 remove_wait_queue(sk_sleep(sk), &wait); in iso_sock_accept()
1054 release_sock(sk); in iso_sock_accept()
1062 struct sock *sk = sock->sk; in iso_sock_getname() local
1064 BT_DBG("sock %p, sk %p", sock, sk); in iso_sock_getname()
1069 bacpy(&sa->iso_bdaddr, &iso_pi(sk)->dst); in iso_sock_getname()
1070 sa->iso_bdaddr_type = iso_pi(sk)->dst_type; in iso_sock_getname()
1072 bacpy(&sa->iso_bdaddr, &iso_pi(sk)->src); in iso_sock_getname()
1073 sa->iso_bdaddr_type = iso_pi(sk)->src_type; in iso_sock_getname()
1082 struct sock *sk = sock->sk; in iso_sock_sendmsg() local
1087 BT_DBG("sock %p, sk %p", sock, sk); in iso_sock_sendmsg()
1089 err = sock_error(sk); in iso_sock_sendmsg()
1096 lock_sock(sk); in iso_sock_sendmsg()
1098 if (sk->sk_state != BT_CONNECTED) { in iso_sock_sendmsg()
1099 release_sock(sk); in iso_sock_sendmsg()
1103 mtu = iso_pi(sk)->conn->hcon->hdev->iso_mtu; in iso_sock_sendmsg()
1105 release_sock(sk); in iso_sock_sendmsg()
1107 skb = bt_skb_sendmsg(sk, msg, len, mtu, HCI_ISO_DATA_HDR_SIZE, 0); in iso_sock_sendmsg()
1113 BT_DBG("skb %p len %d", sk, skb->len); in iso_sock_sendmsg()
1120 tmp = bt_skb_sendmsg(sk, msg, len, mtu, 0, 0); in iso_sock_sendmsg()
1138 lock_sock(sk); in iso_sock_sendmsg()
1140 if (sk->sk_state == BT_CONNECTED) in iso_sock_sendmsg()
1141 err = iso_send_frame(sk, skb); in iso_sock_sendmsg()
1145 release_sock(sk); in iso_sock_sendmsg()
1166 static void iso_conn_big_sync(struct sock *sk) in iso_conn_big_sync() argument
1171 hdev = hci_get_route(&iso_pi(sk)->dst, &iso_pi(sk)->src, in iso_conn_big_sync()
1172 iso_pi(sk)->src_type); in iso_conn_big_sync()
1177 if (!test_and_set_bit(BT_SK_BIG_SYNC, &iso_pi(sk)->flags)) { in iso_conn_big_sync()
1178 err = hci_le_big_create_sync(hdev, iso_pi(sk)->conn->hcon, in iso_conn_big_sync()
1179 &iso_pi(sk)->qos, in iso_conn_big_sync()
1180 iso_pi(sk)->sync_handle, in iso_conn_big_sync()
1181 iso_pi(sk)->bc_num_bis, in iso_conn_big_sync()
1182 iso_pi(sk)->bc_bis); in iso_conn_big_sync()
1192 struct sock *sk = sock->sk; in iso_sock_recvmsg() local
1193 struct iso_pinfo *pi = iso_pi(sk); in iso_sock_recvmsg()
1195 BT_DBG("sk %p", sk); in iso_sock_recvmsg()
1197 if (test_and_clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) { in iso_sock_recvmsg()
1198 lock_sock(sk); in iso_sock_recvmsg()
1199 switch (sk->sk_state) { in iso_sock_recvmsg()
1203 iso_conn_big_sync(sk); in iso_sock_recvmsg()
1204 sk->sk_state = BT_LISTEN; in iso_sock_recvmsg()
1205 set_bit(BT_SK_PA_SYNC, &iso_pi(sk)->flags); in iso_sock_recvmsg()
1208 sk->sk_state = BT_CONFIG; in iso_sock_recvmsg()
1210 release_sock(sk); in iso_sock_recvmsg()
1213 release_sock(sk); in iso_sock_recvmsg()
1214 return iso_connect_cis(sk); in iso_sock_recvmsg()
1216 release_sock(sk); in iso_sock_recvmsg()
1312 struct sock *sk = sock->sk; in iso_sock_setsockopt() local
1317 BT_DBG("sk %p", sk); in iso_sock_setsockopt()
1319 lock_sock(sk); in iso_sock_setsockopt()
1323 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { in iso_sock_setsockopt()
1334 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in iso_sock_setsockopt()
1336 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); in iso_sock_setsockopt()
1346 set_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags); in iso_sock_setsockopt()
1348 clear_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags); in iso_sock_setsockopt()
1352 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND && in iso_sock_setsockopt()
1353 sk->sk_state != BT_CONNECT2) { in iso_sock_setsockopt()
1370 iso_pi(sk)->qos = qos; in iso_sock_setsockopt()
1371 iso_pi(sk)->qos_user_set = true; in iso_sock_setsockopt()
1376 if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND && in iso_sock_setsockopt()
1377 sk->sk_state != BT_CONNECT2) { in iso_sock_setsockopt()
1382 if (optlen > sizeof(iso_pi(sk)->base)) { in iso_sock_setsockopt()
1387 len = min_t(unsigned int, sizeof(iso_pi(sk)->base), optlen); in iso_sock_setsockopt()
1389 if (copy_from_sockptr(iso_pi(sk)->base, optval, len)) { in iso_sock_setsockopt()
1394 iso_pi(sk)->base_len = len; in iso_sock_setsockopt()
1403 release_sock(sk); in iso_sock_setsockopt()
1410 struct sock *sk = sock->sk; in iso_sock_getsockopt() local
1416 BT_DBG("sk %p", sk); in iso_sock_getsockopt()
1421 lock_sock(sk); in iso_sock_getsockopt()
1425 if (sk->sk_state == BT_CONNECTED) { in iso_sock_getsockopt()
1430 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), in iso_sock_getsockopt()
1437 if (put_user(test_bit(BT_SK_PKT_STATUS, &bt_sk(sk)->flags), in iso_sock_getsockopt()
1443 qos = iso_sock_get_qos(sk); in iso_sock_getsockopt()
1452 if (sk->sk_state == BT_CONNECTED && in iso_sock_getsockopt()
1453 !bacmp(&iso_pi(sk)->dst, BDADDR_ANY)) { in iso_sock_getsockopt()
1454 base_len = iso_pi(sk)->conn->hcon->le_per_adv_data_len; in iso_sock_getsockopt()
1455 base = iso_pi(sk)->conn->hcon->le_per_adv_data; in iso_sock_getsockopt()
1457 base_len = iso_pi(sk)->base_len; in iso_sock_getsockopt()
1458 base = iso_pi(sk)->base; in iso_sock_getsockopt()
1472 release_sock(sk); in iso_sock_getsockopt()
1478 struct sock *sk = sock->sk; in iso_sock_shutdown() local
1481 BT_DBG("sock %p, sk %p, how %d", sock, sk, how); in iso_sock_shutdown()
1483 if (!sk) in iso_sock_shutdown()
1486 sock_hold(sk); in iso_sock_shutdown()
1487 lock_sock(sk); in iso_sock_shutdown()
1491 if (sk->sk_shutdown & RCV_SHUTDOWN) in iso_sock_shutdown()
1493 sk->sk_shutdown |= RCV_SHUTDOWN; in iso_sock_shutdown()
1496 if (sk->sk_shutdown & SEND_SHUTDOWN) in iso_sock_shutdown()
1498 sk->sk_shutdown |= SEND_SHUTDOWN; in iso_sock_shutdown()
1501 if (sk->sk_shutdown & SHUTDOWN_MASK) in iso_sock_shutdown()
1503 sk->sk_shutdown |= SHUTDOWN_MASK; in iso_sock_shutdown()
1507 iso_sock_clear_timer(sk); in iso_sock_shutdown()
1508 __iso_sock_close(sk); in iso_sock_shutdown()
1510 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime && in iso_sock_shutdown()
1512 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime); in iso_sock_shutdown()
1515 release_sock(sk); in iso_sock_shutdown()
1516 sock_put(sk); in iso_sock_shutdown()
1523 struct sock *sk = sock->sk; in iso_sock_release() local
1526 BT_DBG("sock %p, sk %p", sock, sk); in iso_sock_release()
1528 if (!sk) in iso_sock_release()
1531 iso_sock_close(sk); in iso_sock_release()
1533 if (sock_flag(sk, SOCK_LINGER) && READ_ONCE(sk->sk_lingertime) && in iso_sock_release()
1535 lock_sock(sk); in iso_sock_release()
1536 err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime); in iso_sock_release()
1537 release_sock(sk); in iso_sock_release()
1540 sock_orphan(sk); in iso_sock_release()
1541 iso_sock_kill(sk); in iso_sock_release()
1545 static void iso_sock_ready(struct sock *sk) in iso_sock_ready() argument
1547 BT_DBG("sk %p", sk); in iso_sock_ready()
1549 if (!sk) in iso_sock_ready()
1552 lock_sock(sk); in iso_sock_ready()
1553 iso_sock_clear_timer(sk); in iso_sock_ready()
1554 sk->sk_state = BT_CONNECTED; in iso_sock_ready()
1555 sk->sk_state_change(sk); in iso_sock_ready()
1556 release_sock(sk); in iso_sock_ready()
1564 static bool iso_match_big(struct sock *sk, void *data) in iso_match_big() argument
1568 return ev->handle == iso_pi(sk)->qos.bcast.big; in iso_match_big()
1571 static bool iso_match_pa_sync_flag(struct sock *sk, void *data) in iso_match_pa_sync_flag() argument
1573 return test_bit(BT_SK_PA_SYNC, &iso_pi(sk)->flags); in iso_match_pa_sync_flag()
1579 struct sock *sk = conn->sk; in iso_conn_ready() local
1586 if (sk) { in iso_conn_ready()
1587 iso_sock_ready(conn->sk); in iso_conn_ready()
1625 sk = iso_sock_alloc(sock_net(parent), NULL, in iso_conn_ready()
1627 if (!sk) { in iso_conn_ready()
1632 iso_sock_init(sk, parent); in iso_conn_ready()
1634 bacpy(&iso_pi(sk)->src, &hcon->src); in iso_conn_ready()
1638 iso_pi(sk)->src_type = BDADDR_LE_PUBLIC; in iso_conn_ready()
1640 iso_pi(sk)->src_type = BDADDR_LE_RANDOM; in iso_conn_ready()
1654 iso_pi(sk)->sync_handle = iso_pi(parent)->sync_handle; in iso_conn_ready()
1655 iso_pi(sk)->qos = iso_pi(parent)->qos; in iso_conn_ready()
1656 iso_pi(sk)->bc_num_bis = iso_pi(parent)->bc_num_bis; in iso_conn_ready()
1657 memcpy(iso_pi(sk)->bc_bis, iso_pi(parent)->bc_bis, ISO_MAX_NUM_BIS); in iso_conn_ready()
1660 bacpy(&iso_pi(sk)->dst, &hcon->dst); in iso_conn_ready()
1661 iso_pi(sk)->dst_type = hcon->dst_type; in iso_conn_ready()
1662 iso_pi(sk)->sync_handle = iso_pi(parent)->sync_handle; in iso_conn_ready()
1663 memcpy(iso_pi(sk)->base, iso_pi(parent)->base, iso_pi(parent)->base_len); in iso_conn_ready()
1664 iso_pi(sk)->base_len = iso_pi(parent)->base_len; in iso_conn_ready()
1667 iso_chan_add(conn, sk, parent); in iso_conn_ready()
1672 sk->sk_err = ECONNREFUSED; in iso_conn_ready()
1673 sk->sk_error_report(sk); in iso_conn_ready()
1677 sk->sk_state = BT_CONNECT2; in iso_conn_ready()
1679 sk->sk_state = BT_CONNECTED; in iso_conn_ready()
1688 static bool iso_match_sid(struct sock *sk, void *data) in iso_match_sid() argument
1692 return ev->sid == iso_pi(sk)->bc_sid; in iso_match_sid()
1695 static bool iso_match_sync_handle(struct sock *sk, void *data) in iso_match_sync_handle() argument
1699 return le16_to_cpu(ev->sync_handle) == iso_pi(sk)->sync_handle; in iso_match_sync_handle()
1702 static bool iso_match_sync_handle_pa_report(struct sock *sk, void *data) in iso_match_sync_handle_pa_report() argument
1706 return le16_to_cpu(ev->sync_handle) == iso_pi(sk)->sync_handle; in iso_match_sync_handle_pa_report()
1716 struct sock *sk; in iso_connect_ind() local
1737 sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr, iso_match_sid, in iso_connect_ind()
1739 if (sk && !ev1->status) in iso_connect_ind()
1740 iso_pi(sk)->sync_handle = le16_to_cpu(ev1->handle); in iso_connect_ind()
1748 sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr, in iso_connect_ind()
1750 if (!sk) in iso_connect_ind()
1751 sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr, in iso_connect_ind()
1753 if (sk) { in iso_connect_ind()
1756 if (ev2->num_bis < iso_pi(sk)->bc_num_bis) in iso_connect_ind()
1757 iso_pi(sk)->bc_num_bis = ev2->num_bis; in iso_connect_ind()
1759 if (!test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags) && in iso_connect_ind()
1760 !test_and_set_bit(BT_SK_BIG_SYNC, &iso_pi(sk)->flags)) { in iso_connect_ind()
1762 &iso_pi(sk)->qos, in iso_connect_ind()
1763 iso_pi(sk)->sync_handle, in iso_connect_ind()
1764 iso_pi(sk)->bc_num_bis, in iso_connect_ind()
1765 iso_pi(sk)->bc_bis); in iso_connect_ind()
1769 sk = NULL; in iso_connect_ind()
1777 sk = iso_get_sock_listen(&hdev->bdaddr, bdaddr, in iso_connect_ind()
1780 if (sk) { in iso_connect_ind()
1781 memcpy(iso_pi(sk)->base, ev3->data, ev3->length); in iso_connect_ind()
1782 iso_pi(sk)->base_len = ev3->length; in iso_connect_ind()
1785 sk = iso_get_sock_listen(&hdev->bdaddr, BDADDR_ANY, NULL, NULL); in iso_connect_ind()
1789 if (!sk) in iso_connect_ind()
1794 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) in iso_connect_ind()
1987 struct sock *sk; in iso_debugfs_show() local
1991 sk_for_each(sk, &iso_sk_list.head) { in iso_debugfs_show()
1992 seq_printf(f, "%pMR %pMR %d\n", &iso_pi(sk)->src, in iso_debugfs_show()
1993 &iso_pi(sk)->dst, sk->sk_state); in iso_debugfs_show()